Files
discord-decomp/sources/design/components/Button/native/BaseTextButton.native.tsx
T
2026-07-28 01:06:53 +03:00

401 lines
23 KiB
TypeScript

/* Metro module 4579; source: design/components/Button/native/BaseTextButton.native.tsx; dependencies: [57, 31, 27, 33, 4501, 697, 4017, 4580, 4577, 4581, 4582, 4583, 1357, 4573, 3875, 4081, 4585, 3862, 4587, 2] */
import Module00057 from '../../../../by-id/module-00057.js'; /* Metro dependency 57 */
import MobileVisualRefreshExperiment from '../../../../modules/themes/experiments/MobileVisualRefreshExperiment.tsx'; /* Metro dependency 1357 */
import ReanimatedRexport from '../../../../modules/reanimated/ReanimatedRexport.tsx'; /* Metro dependency 4017 */
import Icon from '../../../void/Icon/native/Icon.tsx'; /* Metro dependency 4580 */
import * as FileImportTrackerModule from '../../../../by-id/module-00002-FileImportTracker.js'; /* Metro dependency 2 */
import * as ReactNativeModule from '../../../../by-id/module-00027-ReactNative.js'; /* Metro dependency 27 */
import * as ReactModule from '../../../../by-id/module-00031-React.js'; /* Metro dependency 31 */
import * as JsxRuntimeModule from '../../../../by-id/module-00033-JsxRuntime.js'; /* Metro dependency 33 */
import * as AccessibilityPreferencesContextModule from '../../../../external/discord_common/js/packages/design/components/AccessibilityPreferencesContext/AccessibilityPreferencesContext.tsx'; /* Metro dependency 3875 */
import * as ReanimatedRexportModule from '../../../../modules/reanimated/ReanimatedRexport.tsx'; /* Metro dependency 4017 */
import * as CreateStylesModule from '../../Styles/native/createStyles.tsx'; /* Metro dependency 4501 */
import * as TextModule from '../../Text/native/Text.tsx'; /* Metro dependency 4573 */
import * as SpringPresetsModule from '../../../animation/reanimated/spring/springPresets.tsx'; /* Metro dependency 4581 */
import * as ButtonHooksNativeModule from './ButtonHooks.native.tsx'; /* Metro dependency 4583 */
import * as BaseButtonNativeModule from './BaseButton.native.tsx'; /* Metro dependency 4585 */
import * as ButtonPillNativeModule from './ButtonPill.native.tsx'; /* Metro dependency 4587 */
function _fun38838(global, require, importDefault, importAll, module, exports, dependencyMap) { // fn#38838, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4757:6, offset: 0x010ccaf5, size: 643 bytes, params: 8, frame: 26
const env0_0 = require;
const getHitSlop2 = getHitSlop;
let Object = global.Object;
Object.defineProperty(exports, '__esModule', {value: true});
let value = ReactModule;
ReactNativeModule.Platform;
let createStyles = CreateStylesModule.createStyles;
const env0_9 = Reflect.apply(createStyles, CreateStylesModule, [_fun38847]);
const env0_10 = CreateStylesModule.createStyles({container: {'flexDirection': 'row', 'alignItems': 'center',
'position': 'relative'}, textCollapsed: {'position': 'absolute', 'left': 0}});
createStyles = CreateStylesModule.createStyles;
const object2 = {borderWidth: 1};
object2.borderRadius = (importDefault(697) /* metro dependency 697: native */).radii.round;
const BORDER_SUBTLE = (importDefault(697) /* metro dependency 697: native */).colors.BORDER_SUBTLE;
object2.borderColor = BORDER_SUBTLE;
object2.overflow = 'hidden';
const env0_11 = Reflect.apply(createStyles, CreateStylesModule, [{entityWrapper: object2}]);
const env0_12 = (ReanimatedRexport).createAnimatedComponent(Icon);
const env0_13 = value.createContext('md');
object = {code: 'function BaseTextButtonNativeTsx1({nativeEvent:nativeEvent}){const{containerWidth}=this.__closure;if(containerWidth.get()!==0)return;const{width:width}=nativeEvent.layout;containerWidth.set(width);}'};
object = {code: "function BaseTextButtonNativeTsx2(){const{containerWidth,withSpring,collapsed,SUBTLE_SPRING}=this.__closure;if(containerWidth.get()===0)return{};return{width:withSpring(collapsed.get()===1?0:containerWidth.get(),SUBTLE_SPRING,'animate-always'),opacity:withSpring(collapsed.get()===1?0:1,SUBTLE_SPRING,'animate-always')};}"};
object = {code: 'function BaseTextButtonNativeTsx3(){const{collapsed,textCollapsed,containerWidth}=this.__closure;if(collapsed.get()===0)return{};return{...textCollapsed,width:containerWidth.get()};}'};
const env0_17 = CreateStylesModule.createStyles(function(a0, a1) {
if (a1 !== 0) {
if (a0 === 'start') {
return {offset: {marginLeft: a1}};
}
if (a0 === 'end') {
return {offset: {marginRight: a1}};
}
}
return {offset: {}};
});
object = {sm: getHitSlop2('sm'), md: getHitSlop2('md'), lg: getHitSlop2('lg')};
const getTextPlatformLineHeight = function(a0, a1) {
return a0 != null ? ({sm: a0, md: a0 + 0.5, lg: a0 + 1.9})[a1] : undefined;
};
value = value.forwardRef(_fun38850);
Object = global.Object;
value = Object.assign({}, value, {Icon: Icon});
(FileImportTrackerModule).fileFinishedImporting('design/components/Button/native/BaseTextButton.native.tsx');
exports.BaseTextButton = value;
function CollapsingText({children, collapseText}) { // fn#38839, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4757:1057, offset: 0x010ccd78, size: 257 bytes, params: 2, frame: 23
const styles = useStyles();
const value2 = (ReanimatedRexportModule).useSharedValue(0);
const useWorkletCallback = ReanimatedRexportModule.useWorkletCallback;
const CollapsingTextO2 = CollapsingTextO;
CollapsingTextO2.__closure = {containerWidth: value2};
CollapsingTextO2.__workletHash = 5541458715155;
CollapsingTextO2.__initData = env0_14;
const value3 = Reflect.apply(useWorkletCallback, ReanimatedRexportModule, [CollapsingTextO2, [value2]]);
const value4 = useCollapsingTextContainerStyles(value2, collapseText);
const value5 = useCollapsingTextStyles(value2, collapseText);
const View = (ReanimatedRexport).View;
const items2 = [styles.container, value4];
const View2 = (ReanimatedRexport).View;
return (
<View style={items2} onLayout={value3}>
<View2 style={value5}>
{children}
</View2>
</View>
);
function CollapsingTextO({nativeEvent}) { // fn#38840, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4757:1183, owner: CollapsingText.o, offset: 0x010cce79, size: 60 bytes, params: 2, frame: 12
if (env0_0.get() === 0) {
env0_0.set(nativeEvent.layout.width);
}
}
function useCollapsingTextContainerStyles(a0, a1) { // fn#38841, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4757:1342, owner: CollapsingText.useCollapsingTextContainerStyles, offset: 0x010cceb5, size: 147 bytes, params: 3, frame: 18
const env0_0 = a0;
const env0_1 = a1;
const useAnimatedStyle = ReanimatedRexportModule.useAnimatedStyle;
const useCollapsingTextContainerStylesO2 = useCollapsingTextContainerStylesO;
const object = {containerWidth: a0};
object.withSpring = (require(4577) /* metro dependency 4577: spring */).withSpring;
object.collapsed = a1;
const SUBTLE_SPRING = (SpringPresetsModule).SUBTLE_SPRING;
object.SUBTLE_SPRING = SUBTLE_SPRING;
useCollapsingTextContainerStylesO2.__closure = object;
useCollapsingTextContainerStylesO2.__workletHash = 493185281611;
useCollapsingTextContainerStylesO2.__initData = env1_15;
return Reflect.apply(useAnimatedStyle, ReanimatedRexportModule, [useCollapsingTextContainerStylesO2]);
function useCollapsingTextContainerStylesO() { // fn#38842, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4757:1424, owner: CollapsingText.useCollapsingTextContainerStyles.o, offset: 0x010ccf48, size: 208 bytes, params: 1, frame: 25
var r0;
var object;
var value4;
var moduleValue;
var withSpring;
var value5;
var value6;
const SUBTLE_SPRING = (SpringPresetsModule).SUBTLE_SPRING;
const value2 = env0_0.get();
const value3 = 0;
if (value3 === value2) {
r0 = {};
} else {
object = {};
value4 = environment.__proto__.__proto__;
moduleValue = require(4577) /* metro dependency 4577: spring */;
withSpring = moduleValue.withSpring;
value5 = require.get();
value6 = 1;
object.width = Reflect.apply(withSpring, moduleValue, [value6 === value5 ? value3 : env0_0.get(), SUBTLE_SPRING,
'animate-always']);
object.opacity = (require(4577) /* metro dependency 4577: spring */).withSpring(value6 !== require.get() ? value6 : value3,
SUBTLE_SPRING, 'animate-always');
r0 = object;
}
return r0;
}
}
function useCollapsingTextStyles(a0, a1) { // fn#38843, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4757:1801, owner: CollapsingText.useCollapsingTextStyles, offset: 0x010cd018, size: 126 bytes, params: 3, frame: 17
const env0_0 = a0;
const env0_1 = a1;
const styles = useStyles();
const textCollapsed = styles.textCollapsed;
const useAnimatedStyle = ReanimatedRexportModule.useAnimatedStyle;
const useCollapsingTextStylesS2 = useCollapsingTextStylesS;
useCollapsingTextStylesS2.__closure = {collapsed: a1, textCollapsed: textCollapsed, containerWidth: a0};
useCollapsingTextStylesS2.__workletHash = 5824483783888;
useCollapsingTextStylesS2.__initData = env1_16;
return Reflect.apply(useAnimatedStyle, ReanimatedRexportModule, [useCollapsingTextStylesS2]);
function useCollapsingTextStylesS() { // fn#38844, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4757:1898, owner: CollapsingText.useCollapsingTextStyles.s, offset: 0x010cd096, size: 63 bytes, params: 1, frame: 12
var r0;
var object;
const value2 = require.get();
if (value2 === 0) {
r0 = {};
} else {
object = {};
copyDataProperties(object, textCollapsed, value2);
object['width'] = env0_0.get();
r0 = object;
}
return r0;
}
}
}
function getHitSlop(a0) { // fn#38845, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4757:2889, offset: 0x010cd0d5, size: 173 bytes, params: 2, frame: 16
const LARGE_BUTTON_HEIGHT = (require(4582) /* metro dependency 4582: ButtonConstantsNative */).LARGE_BUTTON_HEIGHT;
const r1 = a0 === 'sm' ? (require(4582) /* metro dependency 4582: ButtonConstantsNative */).SMALL_BUTTON_HEIGHT : a0 !== 'md' ? LARGE_BUTTON_HEIGHT : (require(4582) /* metro dependency 4582: ButtonConstantsNative */).MEDIUM_BUTTON_HEIGHT;
const Math = global.Math;
const max = Math.max;
const MINIMUM_HIT_AREA = (require(4582) /* metro dependency 4582: ButtonConstantsNative */).MINIMUM_HIT_AREA;
const value = Reflect.apply(max, Math, [(MINIMUM_HIT_AREA - r1) / 2, 0]);
return {top: value, left: undefined, right: undefined, bottom: value};
}
function BaseTextButtonIcon({icon, size, iconPosition, iconOpticalOffsetMargin, style}) { // fn#38846, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4757:3285, offset: 0x010cd182, size: 124 bytes, params: 2, frame: 18
const value2 = (ButtonHooksNativeModule).useIconSizeStyles(size);
const styles = useStyles(iconPosition, iconOpticalOffsetMargin);
return ((Component) => <Component source={icon} style={[style, value2, styles.offset]} />)(env0_12);
}
function _fun38847(a0, a1) { // fn#38847, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4757:208, offset: 0x010cd1fe, size: 139 bytes, params: 3, frame: 15
const object2 = {'flexShrink': 1, 'flexGrow': 0};
object2.lineHeight = getTextPlatformLineHeight(a1, a0);
return {grow: {'flexGrow': 1, 'alignSelf': 'stretch'}, shrink: {flexShrink: 1}, buttonText: object2,
icon: {'flexShrink': 0, 'flexGrow': 0}, iconLeft: {paddingLeft: 4}, iconRight: {paddingRight: 4},
expressiveButtonContainer: {position: 'relative'}};
}
function _fun38850(a0, a1) { // fn#38850, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4757:3488, offset: 0x010cd31f, size: 1381 bytes, params: 3, frame: 51
const style = a0.style;
const pillStyle = a0.pillStyle;
const text = a0.text;
const textElement = a0.textElement;
const size = a0.size;
const value = undefined;
const r15 = value !== size ? size : (require(4582) /* metro dependency 4582: ButtonConstantsNative */).DEFAULT_BUTTON_SIZE;
const loading = a0.loading;
const icon = a0.icon;
const iconPosition = a0.iconPosition;
const value3 = 'start';
const r14 = value === iconPosition ? value3 : iconPosition;
const iconOpticalOffsetMargin = a0.iconOpticalOffsetMargin;
const value4 = 0;
const r38 = value === iconOpticalOffsetMargin ? value4 : iconOpticalOffsetMargin;
const grow = a0.grow;
let r30 = value !== grow && grow;
const shrink = a0.shrink;
let r29 = value !== shrink && shrink;
const collapseText = a0.collapseText;
const accessibilityRole = a0.accessibilityRole;
const r24 = value === accessibilityRole ? 'button' : accessibilityRole;
const accessibilityLabel = a0.accessibilityLabel;
const maxFontSizeMultiplier = a0.maxFontSizeMultiplier;
const r37 = value !== maxFontSizeMultiplier ? maxFontSizeMultiplier : (require(4582) /* metro dependency 4582: ButtonConstantsNative */).BUTTON_DEFAULT_MAX_FONT_SIZE_MULTIPLIER;
const shiny = a0.shiny;
const r7 = value !== shiny && shiny;
const onPressIn = a0.onPressIn;
const onPressOut = a0.onPressOut;
const onLayout = a0.onLayout;
const value11 = (MobileVisualRefreshExperiment)('BaseTextButton');
const r5 = a0.textVariant ?? (require(4582) /* metro dependency 4582: ButtonConstantsNative */).getButtonDefaultTextVariant(r15);
const TextStyleSheet = (TextModule).TextStyleSheet;
const property = TextStyleSheet[r5];
const styles = useStyles(r15, property.fontSize);
const property2 = env0_18[r15];
let binding = env0_4;
const useContext = binding.useContext;
const AccessibilityPreferencesContext = (AccessibilityPreferencesContextModule).AccessibilityPreferencesContext;
const enabled = Reflect.apply(useContext, binding, [AccessibilityPreferencesContext]).reducedMotion.enabled;
const enabled2 = enabled;
let r0 = a0.variant ?? 'primary';
r0 = value11 && r0 === 'tertiary' ? 'secondary' : r0;
const value16 = (ReanimatedRexportModule).useSharedValue(value4);
const value17 = r0.startsWith('expressive');
var env0_4 = value17;
binding = env0_4;
const value18 = binding.useRef(null);
const env0_6 = binding.useRef({'width': 0, 'height': 0});
const value20 = enabled2(binding.useState({'pressed': false, 'posx': 0, 'posy': 0}), 2);
const property3 = value20[value4];
const env0_7 = value20[1];
const value21 = binding.useCallback(_fun38851, [onLayout, value17]);
const value22 = binding.useCallback(_fun38852, [value17, onPressIn, enabled]);
const value23 = binding.useCallback(_fun38853, [value17, onPressOut]);
const value24 = (ButtonHooksNativeModule).useButtonTextColorStyles(r0);
const r34 = icon == null ? {} : value3 === r14 ? styles.iconLeft : styles.iconRight;
const r12 = (
icon == null
? (
<BaseTextButtonIcon
icon={icon}
size={r15}
style={[styles.icon, {tintColor: value24.color}]}
iconOpticalOffsetMargin={r38}
iconPosition={r14}
/>
)
: (
env0_4.isValidElement(icon)
? icon
: (
<BaseTextButtonIcon
icon={icon}
size={r15}
style={[styles.icon, {tintColor: value24.color}]}
iconOpticalOffsetMargin={r38}
iconPosition={r14}
/>
)
)
);
const r19 = textElement ?? <Text maxFontSizeMultiplier={r37} numberOfLines={1} style={[styles.buttonText, property,
value24, r34]}>{text}</Text>;
const BaseButton = (BaseButtonNativeModule).BaseButton;
const baseButtonProps = {ref: a1, ...a0};
baseButtonProps['onPressIn'] = value22;
baseButtonProps['onPressOut'] = value23;
baseButtonProps['onLayout'] = value21;
r30 = r30 && styles.grow;
r29 = r29 && styles.shrink;
baseButtonProps['style'] = [r30, r29, style, value17 && styles.expressiveButtonContainer];
baseButtonProps['pointerEvents'] = value17 ? 'box-only' : a0.pointerEvents;
baseButtonProps['pressed'] = value16;
baseButtonProps['accessibilityRole'] = r24;
baseButtonProps['accessibilityLabel'] = accessibilityLabel ?? (require(3862) /* metro dependency 3862: native */).getNodeText(text);
baseButtonProps['hitSlop'] = property2;
const ButtonPill = (ButtonPillNativeModule).ButtonPill;
const Provider = env0_13.Provider;
const items4 = [icon != null && value3 === r14 && r12];
items4[1] = (
value === collapseText
? r19
: (
<CollapsingText collapseText={collapseText}>
{r19}
</CollapsingText>
)
);
items4[2] = icon != null && r14 === 'end' && r12;
return (
<BaseButton {...baseButtonProps}>
<ButtonPill
variant={r0}
size={r15}
loading={loading}
pressed={value16}
style={pillStyle}
shiny={r7}
expressiveRiveRef={value17 ? value18 : value}
expressivePressState={value17 ? property3 : value}
>
<Provider value={r15}>
{items4}
</Provider>
</ButtonPill>
</BaseButton>
);
function _fun38851(a0) { // fn#38851, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4757:4519, offset: 0x010cd884, size: 80 bytes, params: 2, frame: 12
var layout;
if (onLayout != null) {
onLayout(a0);
}
if (env0_4) {
layout = a0.nativeEvent.layout;
env0_6.current = {width: layout.width, height: layout.height};
}
}
function _fun38852(a0) { // fn#38852, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4757:4649, offset: 0x010cd8d4, size: 216 bytes, params: 2, frame: 17
var nativeEvent;
var locationX;
var locationY;
var current;
var value;
if (onPressIn != null) {
onPressIn(a0);
}
if (env0_4) {
if (enabled) {
current = ReactNativeModule.Text.current;
if (current != null) {
current.play();
}
} else {
nativeEvent = a0.nativeEvent;
locationX = nativeEvent.locationX;
locationY = nativeEvent.locationY;
current = env0_6.current;
env0_7({pressed: true, posx: locationX - current.width / 2, posy: locationY - current.height / 2});
}
value = environment.__proto__;
value = require(4081) /* metro dependency 4081: HapticUtilsNative */;
value.triggerHapticFeedback((require(4081) /* metro dependency 4081: HapticUtilsNative */).HapticFeedbackTypes.IMPACT_HEAVY);
}
}
function _fun38853(a0) { // fn#38853, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4757:4946, offset: 0x010cd9ac, size: 111 bytes, params: 2, frame: 14
var environment;
var value;
if (onPressOut != null) {
onPressOut(a0);
}
if (env0_4) {
env0_7(function(a0) {
var r2;
var object = {};
copyDataProperties(object, a0, r2);
object['pressed'] = false;
return object;
});
value = environment.__proto__;
value = require(4081) /* metro dependency 4081: HapticUtilsNative */;
value.triggerHapticFeedback((require(4081) /* metro dependency 4081: HapticUtilsNative */).HapticFeedbackTypes.IMPACT_MEDIUM);
}
}
}
function Icon({source, variant, disableColor}) { // fn#38855, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4757:6038, offset: 0x010cda34, size: 168 bytes, params: 2, frame: 19
variant = variant === undefined ? 'icon' : variant;
disableColor = disableColor === undefined || disableColor;
const value2 = env0_4.useContext(env0_13);
const styles = useStyles();
const env0_123 = ((Component) => <Component source={source} disableColor={disableColor} style={(ButtonHooksNativeModule).useIconSizeStyles(value2)} />)(env0_12);
return (
variant !== 'entity'
? env0_123
: (
<View style={styles.entityWrapper}>
{env0_123}
</View>
)
);
}
}
global.__d(_fun38838, 4579, [57, 31, 27, 33, 4501, 697, 4017, 4580, 4577, 4581, 4582, 4583, 1357, 4573, 3875, 4081,
4585, 3862, 4587,
2]) /* metro module 4579, dependencies: [57, 31, 27, 33, 4501, 697, 4017, 4580, 4577, 4581, 4582, 4583, 1357, 4573, 3875, 4081, 4585, 3862, 4587, 2] */;