This commit is contained in:
janisslsm committed 2026-11-01 12:12:55 +02:00
1 parent 1781d25a15
commit 732c0ad767
33051 files changed
+2591613 -3019689

No files matched your search

@@ -0,0 +1,67 @@
// Metro module 13733 (f13734).
import * as Module19 from "react";
import { useCallback, useMemo } from "react";
import { View } from "react-native";
import { isNameplateRecord } from "../../records/NameplateRecord";
import { createStyles } from "../../../../design/components/Styles/native/createStyles";
import { GUTTER_SIZE, ROW_SIZE } from "../../native/useCollectibleListLayout";
import { NONE_ITEM, SHOP_ITEM } from "../useNameplateSections";
import { EditCollectiblesListItemNone, EditCollectiblesListItemShop, EditCollectiblesListItemProduct } from "../../native/CollectiblesEditUserProfileListItems";
import AnalyticsLocation from "../../../app_analytics/AnalyticsLocation";
import { getNameplateData } from "../utils";
import Nameplate from "./Nameplate";
let Component;
const useStyles = createStyles({
row: {
flexDirection: "row",
alignItems: "center",
justifyContent: "space-between",
paddingHorizontal: GUTTER_SIZE
},
rowSpacer: {
height: GUTTER_SIZE
},
nameplate: {
overflow: "hidden"
}
});
const r42 = Module19.memo(({ items, selectedSkuId, setSelectedNameplate, guildId, size }) => {
const styles = useStyles();
const callback = useCallback(() => {
setSelectedNameplate(null);
}, [setSelectedNameplate]);
return <>
<View style={styles.row}>
{[...items, null, null].slice(0, ROW_SIZE).map((item, index) => {
if (item === NONE_ITEM) {
return <EditCollectiblesListItemNone key="none" size={size} onPress={callback} isSelected={selectedSkuId == null} asDefault={guildId != null} />;
}
if (item === SHOP_ITEM) {
return <EditCollectiblesListItemShop key="shop" size={size} analyticsSource={AnalyticsLocation.EDIT_NAMEPLATE_SHEET} />;
}
if (isNameplateRecord(item)) {
return <Component key={item.skuId} nameplate={item} isSelected={selectedSkuId === item.skuId} setSelectedNameplate={setSelectedNameplate} size={size} />;
}
return <View key={index} style={{
height: size,
width: size
}} />;
})}
</View>
<View style={styles.rowSpacer} />
</>;
});
r42.displayName = "EditNameplateRow";
Component = Module19.memo(({ nameplate, isSelected, setSelectedNameplate: setSelectedNameplate2, size: size2 }) => {
const styles = useStyles();
const memo = useMemo(() => getNameplateData(nameplate), [nameplate]);
return <EditCollectiblesListItemProduct skuId={nameplate.skuId} isSelected={isSelected} onPress={useCallback(() => {
setSelectedNameplate2(nameplate);
}, [setSelectedNameplate2, nameplate])} size={size2} accessibilityLabel={nameplate.label}>
<Nameplate nameplate={memo} fullOpacity isSquarePreview style={[styles.nameplate, {
borderRadius: 6
}]} />
</EditCollectiblesListItemProduct>;
});
Component.displayName = "EditNameplateItem";
export { r42 as EditNameplateRow };
@@ -0,0 +1,121 @@
// Metro module 8070 (f8071).
import { useEffect } from "react";
import AccessibilityStore from "../../../a11y/AccessibilityStore";
import { createStyles } from "../../../../design/components/Styles/native/createStyles";
import { useStateFromStores } from "../../../../_bundle/Module589";
import useTheme from "../../../../hooks/useTheme";
import ReanimatedRexport, { useSharedValue, Easing, useAnimatedStyle } from "../../../reanimated/ReanimatedRexport";
import { withTiming } from "../../../../design/animation/reanimated/timing/timing";
import { getBackgroundGradientColors } from "../utils";
import { getNameplateAssets } from "./NameplateUtils";
import Module4611 from "../../../../_bundle/Module4611";
import { isAndroid } from "../../../../utils/PlatformUtils";
import { APNGPlayer } from "../../../image/native/APNGPlayer.android";
import FastImage from "../../../../components_native/common/FastImage";
import { HermesBuiltin } from "../../../../_hermes/prelude";
let useStyles, __initData;
const NameplateInner = function NameplateInner(props) {
const { nameplate, isPressed = false, isFocused = false, isMuted = false, fullOpacity = false, isSquarePreview = false, invertPressOpacity = false, fadeIn = false } = props;
let sharedValue;
let c16235_0 = fadeIn;
let animate = props.animate;
if (animate === void 0) {
animate = false;
}
const style = props.style;
sharedValue = void 0;
const stateFromStores = useStateFromStores([AccessibilityStore], () => AccessibilityStore.useReducedMotion);
const styles = useStyles(fullOpacity, isPressed, isFocused, isMuted, invertPressOpacity);
const theme = useTheme();
sharedValue = useSharedValue(fadeIn ? 0 : 1);
useEffect(() => {
if (c16235_0) {
sharedValue.set(withTiming(1, {
duration: 100,
easing: Easing.in(Easing.ease)
}));
}
}, [sharedValue, fadeIn]);
const A = function A() {
return {
opacity: sharedValue.get()
};
};
A.__closure = {
opacity: sharedValue
};
A.__workletHash = 15588901070870;
A.__initData = __initData;
const animatedStyle = useAnimatedStyle(A);
const backgroundGradientColors = getBackgroundGradientColors(nameplate.palette, theme);
const nameplateAssets = getNameplateAssets(nameplate);
let staticImageUrl = nameplateAssets.staticImageUrl;
const animatedImageUrl = nameplateAssets.animatedImageUrl;
if (animate) {
animate = !stateFromStores;
}
if (animate) {
staticImageUrl = animatedImageUrl;
}
if (staticImageUrl == null) {
staticImageUrl = "";
}
return <ReanimatedRexport.View style={[styles.container, style, animatedStyle]}>
{backgroundGradientColors != null ? <Module4611 style={styles.gradient} start={{
x: isSquarePreview ? -2 : 0,
y: 0
}} end={{
x: 1,
y: 0
}} colors={[backgroundGradientColors.left, backgroundGradientColors.right]} /> : null}
{isAndroid() && animate ? <APNGPlayer url={staticImageUrl} style={styles.img} autoplay /> : <FastImage source={{
uri: staticImageUrl
}} style={styles.img} accessibilityRole="image" />}
</ReanimatedRexport.View>;
};
useStyles = createStyles((a0, a1, a2, a3, a4) => {
let opacity2 = 1;
const opacity = a0 ? 1 : a3 ? a2 ? a1 ? a4 ? 0.3 : 0.6 : a2 ? 0.8 : 0.4 : 0 : a1 ? a4 ? 0.3 : 0.6 : a2 ? 0.8 : 0.4;
if (!a0) {
opacity2 = a3 ? a2 ? a1 ? a4 ? 0.4 : 0.5 : a2 ? 0.8 : 0.6 : 0.1 : a1 ? a4 ? 0.4 : 0.5 : a2 ? 0.8 : 0.6;
}
return {
container: {
position: "absolute",
overflow: "hidden",
top: 0,
bottom: 0,
left: 0,
right: 0
},
gradient: {
position: "absolute",
width: "100%",
height: "100%",
opacity
},
img: {
position: "absolute",
height: "100%",
right: 0,
aspectRatio: 5.333333333333333,
opacity: opacity2
}
};
});
__initData = {
code: "function NameplateTsx1(){const{opacity}=this.__closure;return{opacity:opacity.get()};}"
};
export default function Nameplate(props) {
const nameplate = props.nameplate;
const r9 = {};
let r1 = null;
const props2 = HermesBuiltin.copyDataProperties(r9, props, {
__proto__: null,
nameplate: 0
});
if (nameplate != null) {
r1 = <NameplateInner nameplate={nameplate} {...props2} aria-hidden />;
}
return r1;
};
@@ -0,0 +1,49 @@
// Metro module 8696 (f8697).
import { View } from "react-native";
import { createStyles } from "../../../../design/components/Styles/native/createStyles";
import Module712 from "../../../../_bundle/Module712";
import Module38 from "../../../../_bundle/Module38";
import { CollectiblesItemType } from "../../../../_bundle/Module1901";
import { getNameplateData } from "../utils";
import { NameplateDummyUserPreview } from "./NameplateDummyUserPreview";
import { AvatarSizes } from "../../../../design/void/native";
const useStyles = createStyles({
nameplatePreviewContainer: {
position: "absolute",
justifyContent: "center",
alignItems: "center",
width: "100%",
height: "100%",
paddingHorizontal: Module712.space.PX_8
},
nameplateContainer: {
width: "100%",
backgroundColor: Module712.colors.BACKGROUND_BASE_LOWER,
borderRadius: Module712.radii.sm
},
nameplate: {
backgroundColor: Module712.colors.BACKGROUND_MOD_MUTED
}
});
export default function NameplateCardPreview(props) {
const { item, animate = false } = props;
const styles = useStyles();
Module38(item.type === CollectiblesItemType.NAMEPLATE, "Item must be Nameplate");
return <View style={styles.nameplatePreviewContainer}>
<NameplateDummyUserPreview width={34} avatarSize={AvatarSizes.XSMALL} hideAvatar style={[{
opacity: 0.6
}]} />
<NameplateDummyUserPreview width={44} avatarSize={AvatarSizes.XSMALL} hideAvatar style={[{
opacity: 0.6
}]} />
<View style={styles.nameplateContainer}>
<NameplateDummyUserPreview width={54} avatarSize={AvatarSizes.XSMALL} nameplate={getNameplateData(item)} style={styles.nameplate} animate={animate} />
</View>
<NameplateDummyUserPreview width={44} avatarSize={AvatarSizes.XSMALL} hideAvatar style={[{
opacity: 0.6
}]} />
<NameplateDummyUserPreview width={34} avatarSize={AvatarSizes.XSMALL} hideAvatar style={[{
opacity: 0.6
}]} />
</View>;
};
@@ -0,0 +1,72 @@
// Metro module 8069 (f8070).
import { View } from "react-native";
import ThemeStore from "../../../user_settings/ThemeStore";
import { AvatarSizes, Avatar } from "../../../../design/void/native";
import Module712 from "../../../../_bundle/Module712";
import { createStyles } from "../../../../design/components/Styles/native/createStyles";
import { useStateFromStores } from "../../../../_bundle/Module589";
import { isThemeDark } from "../../../../design/utils/shared/themes";
import Nameplate from "./Nameplate";
import Module8072 from "../../../../_bundle/Module8072";
import Module8073 from "../../../../_bundle/Module8073";
const r24 = {};
r24[AvatarSizes.XSMALL_20] = {
padding: Module712.space.PX_4,
avatarMarginRight: Module712.space.PX_4,
placeholderBarHeight: 6
};
r24[AvatarSizes.XSMALL] = {
padding: 6,
avatarMarginRight: 6,
placeholderBarHeight: 8
};
r24[AvatarSizes.NORMAL] = {
padding: Module712.space.PX_8,
avatarMarginRight: Module712.space.PX_8,
placeholderBarHeight: 14
};
let c5116_7 = r24;
const useStyles = createStyles((a0, a1) => {
const r7 = c5116_7[a0];
return {
container: {
padding: r7.padding,
flexDirection: "row",
alignItems: "center",
justifyContent: "flex-start",
width: "100%",
position: "relative",
borderRadius: Module712.radii.sm
},
avatarContainer: {
borderRadius: Module712.radii.round,
marginRight: r7.avatarMarginRight,
backgroundColor: a1 ? Module712.colors.BORDER_STRONG : "transparent"
},
avatar: {
opacity: a1 ? 0 : 0.5
},
placeholderBar: {
borderRadius: Module712.radii.md,
height: r7.placeholderBarHeight,
backgroundColor: Module712.colors.BORDER_STRONG
},
nameplate: {
borderRadius: Module712.radii.sm
}
};
});
export { c5116_7 as NAMEPLATE_DUMMY_USER_PREVIEW_CONFIG };
export function NameplateDummyUserPreview(props) {
const { width, hideAvatar = false, avatarSize = AvatarSizes.NORMAL, nameplate, style, animate = false } = props;
const styles = useStyles(avatarSize, hideAvatar);
return <View style={[styles.container, style]}>
<Nameplate nameplate={nameplate} fullOpacity style={styles.nameplate} animate={animate} />
<View style={styles.avatarContainer}>
<Avatar source={useStateFromStores([ThemeStore], () => isThemeDark(ThemeStore.theme)) ? Module8072 : Module8073} size={avatarSize} aria-hidden style={styles.avatar} />
</View>
<View style={[styles.placeholderBar, {
width
}]} />
</View>;
}
@@ -0,0 +1,78 @@
// Metro module 9823 (f9824).
import { useMemo } from "react";
import { View } from "react-native";
import AccessibilityStore from "../../../a11y/AccessibilityStore";
import GuildMemberStore from "../../../../stores/GuildMemberStore";
import { createStyles } from "../../../../design/components/Styles/native/createStyles";
import Module712 from "../../../../_bundle/Module712";
import { getNameplateData } from "../utils";
import { useAvatarDecoration } from "../../avatar_decorations/useAvatarDecoration";
import usePendingAvatarSettings from "../../../user_profile/hooks/usePendingAvatarSettings";
import { useStateFromStores } from "../../../../_bundle/Module589";
import UserUtils from "../../../../utils/UserUtils";
import useDisplayNameStyles from "../../../display_name_styles/hooks/useDisplayNameStyles";
import { Avatar, AvatarSizes } from "../../../../design/void/native";
import Nameplate from "./Nameplate";
import UsernameWithEffects from "../../../display_name_styles/native/UsernameWithEffects";
import { EffectDisplayType } from "../../../display_name_styles/types";
import { Text } from "../../../../design/components/Text/native/Text";
const useStyles = createStyles((a0) => ({
container: {
borderRadius: a0 ? Module712.radii.sm : 0,
padding: Module712.space.PX_8,
flexDirection: "row",
alignItems: "center",
width: "100%",
backgroundColor: Module712.colors.BACKGROUND_BASE_LOWEST
},
nameplate: {
borderRadius: a0 ? Module712.radii.sm : 0
},
avatar: {
borderRadius: Module712.radii.round,
marginRight: Module712.space.PX_8
},
content: {
flex: 1,
paddingRight: Module712.space.PX_40
}
}));
export function NameplatePreview(props) {
let pendingAvatarDecoration;
const nameplate = props.nameplate;
let nameplateData = props.nameplateData;
const { user, hasRoundedCorners = true, animate = false, guildId, pendingDisplayNameStyles } = props;
let pendingGlobalName = props.pendingGlobalName;
const r7 = props["aria-hidden"];
pendingAvatarDecoration = void 0;
const styles = useStyles(hasRoundedCorners);
if (nameplate != null) {
nameplateData = getNameplateData(nameplate);
}
const avatarDecoration = useAvatarDecoration(user, guildId);
const pendingAvatarDecoration2 = usePendingAvatarSettings({
guildId
}).pendingAvatarDecoration;
const stateFromStores = useStateFromStores([AccessibilityStore], () => AccessibilityStore.useReducedMotion);
const stateFromStores2 = useStateFromStores([GuildMemberStore], () => guildId != null ? user != null ? GuildMemberStore.getMember(guildId, user.id) : null : null);
const name = UserUtils.useName(user);
if (pendingGlobalName == null) {
pendingGlobalName = guildId != null ? stateFromStores2?.nick != null ? stateFromStores2?.nick : name : name;
}
pendingAvatarDecoration = pendingAvatarDecoration2 !== void 0 ? pendingAvatarDecoration2 : avatarDecoration;
const styles2 = useDisplayNameStyles({
userId: user.id,
guildId,
pendingDisplayNameStyles
});
return <View style={styles.container} aria-hidden={r7}>
<Nameplate nameplate={nameplateData} style={styles.nameplate} fullOpacity animate={animate} />
<View style={styles.avatar}>
{useMemo(() => <Avatar style={styles.avatar} user={user} guildId={guildId} size={AvatarSizes.NORMAL} avatarDecoration={pendingAvatarDecoration} animate={!stateFromStores} autoStatusCutout aria-hidden />, [styles.avatar, user, guildId, pendingAvatarDecoration, stateFromStores])}
</View>
<View style={styles.content}>
{styles2 != null && <UsernameWithEffects userId={user.id} guildId={guildId} userName={pendingGlobalName} variant="text-md/semibold" effectDisplayType={EffectDisplayType.STATIC} lineClamp={1} pendingDisplayNameStyles={pendingDisplayNameStyles} />}
{styles2 == null && <Text lineClamp={1} variant="text-md/semibold" color="mobile-text-heading-primary">{pendingGlobalName}</Text>}
</View>
</View>;
}
@@ -0,0 +1,107 @@
// Metro module 8747 (f8748).
import { useMemo } from "react";
import { View } from "react-native";
import AccessibilityStore from "../../../a11y/AccessibilityStore";
import { createStyles } from "../../../../design/components/Styles/native/createStyles";
import Module712 from "../../../../_bundle/Module712";
import { useShopProductItems } from "../../hooks/useShopProductItems";
import { getNameplateData, getNameplateSampleUsers } from "../utils";
import { intl, t } from "../../../../intl/index.native";
import { Text } from "../../../../design/components/Text/native/Text";
import Module4611 from "../../../../_bundle/Module4611";
import { useCurrentUser } from "../../hooks/useCurrentUser";
import useAvatarDecorationIfNotExpired from "../../avatar_decorations/useAvatarDecorationIfNotExpired";
import { getProfilePreviewValue } from "../../../profile_customization/ProfileCustomizationUtils";
import { useStateFromStores } from "../../../../_bundle/Module589";
import UserUtils from "../../../../utils/UserUtils";
import useDisplayNameStyles from "../../../display_name_styles/hooks/useDisplayNameStyles";
import UsernameWithEffects from "../../../display_name_styles/native/UsernameWithEffects";
import { EffectDisplayType } from "../../../display_name_styles/types";
import { Avatar, AvatarSizes } from "../../../../design/void/native";
import { UserNameplateRow } from "../../../main_tabs_v2/native/shared_components/user_list/UserNameplateRow";
import { TableRow } from "../../../../design/components/TableRow/native/TableRow.native";
let useStyles, PlaceholderUser;
const NameplateUser = function NameplateUser(props) {
const { previewNameplate, previewAvatarDecoration } = props;
const currentUser = useCurrentUser();
const avatarDecoration = useAvatarDecorationIfNotExpired(getProfilePreviewValue({
pendingValue: previewAvatarDecoration,
userValue: currentUser?.avatarDecoration
}));
const stateFromStores = useStateFromStores([AccessibilityStore], () => AccessibilityStore.useReducedMotion);
const name = UserUtils.getName(currentUser);
const label = useDisplayNameStyles({
userId: currentUser.id
}) != null ? <UsernameWithEffects userId={currentUser.id} userName={name} effectDisplayType={EffectDisplayType.STATIC} lineClamp={1} variant="text-md/semibold" /> : name;
return <UserNameplateRow nameplate={previewNameplate} icon={useMemo(() => <Avatar user={currentUser} guildId={void 0} size={AvatarSizes.NORMAL} avatarDecoration={avatarDecoration} animate={!stateFromStores} autoStatusCutout aria-hidden />, [currentUser, avatarDecoration, stateFromStores])} label={label} isPreviewRow />;
};
PlaceholderUser = function PlaceholderUser(props) {
const { user, start = false, end = false } = props;
return <TableRow icon={<Avatar source={{
uri: user.avatarSrc
}} size={AvatarSizes.NORMAL} aria-hidden />} label={user.name} start={start} end={end} />;
};
useStyles = createStyles({
container: {
position: "relative",
flex: 1,
justifyContent: "center",
overflow: "hidden"
},
memberListContainer: {
paddingHorizontal: Module712.space.PX_16
},
memberListTitle: {
paddingVertical: Module712.space.PX_8
},
memberListGradient: {
position: "absolute",
right: 0,
left: 0,
top: 0,
bottom: 0,
color: Module712.colors.MOBILE_ACTIONSHEET_BACKGROUND
}
});
export default function NameplateProductPreview(props) {
const product = props.product;
const styles = useStyles();
const shopProductItems = useShopProductItems(product);
const { firstNameplate, firstAvatarDecoration } = shopProductItems;
const nameplateData = getNameplateData(firstNameplate);
const nameplateSampleUsers = getNameplateSampleUsers();
const r33 = nameplateData != null ? <View style={styles.container} pointerEvents="box-none" accessibilityLabel={intl.formatToPlainString(t.YJig7C, {
a11y_text: nameplateData.imgAlt
})} accessibilityRole="image" accessible>
<View style={styles.memberListContainer}>
<PlaceholderUser user={nameplateSampleUsers.mallow} end />
<Text maxFontSizeMultiplier={2} variant="text-sm/semibold" accessibilityRole="header" color="interactive-text-default" style={styles.memberListTitle}>
{intl.string(t["yzW/fZ"])}
{" — 3"}
</Text>
<PlaceholderUser user={nameplateSampleUsers.phibi} start />
<NameplateUser previewNameplate={nameplateData} previewAvatarDecoration={firstAvatarDecoration} />
<PlaceholderUser user={nameplateSampleUsers.locke} end />
<Text maxFontSizeMultiplier={2} variant="text-sm/semibold" accessibilityRole="header" color="interactive-text-default" style={styles.memberListTitle}>
{intl.string(t["NG43/6"])}
{" — 12"}
</Text>
<PlaceholderUser user={nameplateSampleUsers.boom} start />
</View>
<Module4611 style={styles.memberListGradient} start={{
x: 0,
y: 0
}} end={{
x: 0,
y: 0.4
}} colors={[styles.memberListGradient.color, `${styles.memberListGradient.color}00`]} />
<Module4611 style={styles.memberListGradient} start={{
x: 0,
y: 0.6
}} end={{
x: 0,
y: 1
}} colors={[`${styles.memberListGradient.color}00`, styles.memberListGradient.color]} />
</View> : null;
return r33;
};
@@ -0,0 +1,14 @@
// Metro module 8071 (f8072).
import { getCollectiblesItemAssetUrl, CollectiblesItemAssetFormat } from "../../utils/CollectiblesAssetUtils";
export function getNameplateAssets({ skuId }) {
return {
staticImageUrl: getCollectiblesItemAssetUrl({
skuId,
assetFormat: CollectiblesItemAssetFormat.STATIC
}),
animatedImageUrl: getCollectiblesItemAssetUrl({
skuId,
assetFormat: CollectiblesItemAssetFormat.ANIMATED
})
};
}