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,35 @@
// Metro module 6137 (f6138).
import AccessibilityStore from "../../../a11y/AccessibilityStore";
import { createStyles } from "../../../../design/components/Styles/native/createStyles";
import { useBurstReactionAnimationSource } from "./BurstReactionEffectUtils";
import { useStateFromStores } from "../../../../_bundle/Module589";
import FadeOutLottieAnimation from "./FadeOutLottieAnimation";
import LottieAnimationView from "../../../../components_native/common/LottieAnimationView";
const useStyles = createStyles({
content: {
width: "100%"
}
});
export default function BurstReactionAnimation(props) {
const { channelId, messageId, emoji, isFullscreen, onComplete, withFadeOut = true, ...props2 } = props;
const styles = useStyles();
const burstReactionAnimationSource = useBurstReactionAnimationSource({
emoji,
messageId,
channelId,
isFullscreen
});
const stateFromStores = useStateFromStores([AccessibilityStore], () => AccessibilityStore.useReducedMotion);
if (burstReactionAnimationSource == null) {
return null;
}
return withFadeOut ? <FadeOutLottieAnimation style={styles.content} loop={false} speed={stateFromStores ? 0.5 : 1.2} {...props2} {...withFadeOut ? {
onComplete
} : {
onAnimationFinish: onComplete
}} source={burstReactionAnimationSource} /> : <LottieAnimationView style={styles.content} loop={false} speed={stateFromStores ? 0.5 : 1.2} {...props2} {...withFadeOut ? {
onComplete
} : {
onAnimationFinish: onComplete
}} source={burstReactionAnimationSource} />;
};
@@ -0,0 +1,155 @@
// Metro module 15739 (f15740).
import { useState, useRef, useEffect } from "react";
import { TouchableOpacity, View, StyleSheet } from "react-native";
import { ContentDismissActionType } from "../../../dismissible_content/DismissibleContentConstants";
import { createStyles } from "../../../../design/components/Styles/native/createStyles";
import Module712 from "../../../../_bundle/Module712";
import { BACKDROP_OPACITY } from "./BurstReactionEffectUtils";
import { triggerHapticFeedback } from "../../../haptics/HapticUtils.native";
import HapticFeedbackTypes from "../../../haptics/HapticFeedbackTypes";
import Dispatcher from "../../../../Dispatcher";
import * as _ReanimatedRexport from "../../../reanimated/ReanimatedRexport";
import ReanimatedRexport, { useAnimatedStyle } from "../../../reanimated/ReanimatedRexport";
import * as _timing from "../../../../design/animation/reanimated/timing/timing";
import SelectedDismissibleContent from "../../../dismissible_content/native/SelectedDismissibleContent";
import { DismissibleContent } from "../../../../_bundle/Module1358";
import { OverlayView } from "../../../../design/void/native";
import BurstReactionAnimation from "./BurstReactionAnimation";
import { Text } from "../../../../design/components/Text/native/Text";
import { intl, t } from "../../../../intl/index.native";
import { ThemeContextProvider } from "../../../../_bundle/Module3901";
let useStyles, __initData, __initData2;
const BurstReactionAnimationContainerInner = function BurstReactionAnimationContainerInner() {
let styles, ref, animatedStyle;
const handleComponentFinish2 = function handleComponentFinish() {
if (ref.current === false) {
setState(null);
}
};
styles = useStyles();
const [state, setState] = useState(null);
const [state2, setState2] = useState(false);
ref = useRef(false);
useEffect(() => {
const handleEffectReceived2 = function handleEffectReceived(a0) {
setState({
channelId: a0.channelId,
emoji: a0.emoji,
messageId: a0.messageId
});
setState2(true);
ref.current = true;
triggerHapticFeedback(HapticFeedbackTypes.IMPACT_HEAVY);
};
Dispatcher.subscribe("BURST_REACTION_EFFECT_SEND", handleEffectReceived2);
return () => {
Dispatcher.unsubscribe("BURST_REACTION_EFFECT_SEND", handleEffectReceived2);
};
}, []);
const y = function y() {
let r29;
if (state == null) {
r29 = {
opacity: 0
};
} else {
const r3 = {
opacity: null
};
const r21 = {
duration: 300
};
if (state2) {
r3.opacity = _timing.withTiming(1, r21);
r29 = r3;
} else {
const n = function n(a0) {
if (a0) {
_ReanimatedRexport.runOnJS(handleComponentFinish2)();
}
};
n.__closure = {
runOnJS: _ReanimatedRexport.runOnJS,
handleComponentFinish: handleComponentFinish2
};
n.__workletHash = 9326347209552;
n.__initData = __initData2;
r3.opacity = _timing.withTiming(0, r21, "respect-motion-settings", n);
r29 = r3;
}
}
return r29;
};
y.__closure = {
animationData: state,
showAnimation: state2,
withTiming: _timing.withTiming,
runOnJS: _ReanimatedRexport.runOnJS,
handleComponentFinish: handleComponentFinish2
};
y.__workletHash = 12044515783370;
y.__initData = __initData;
animatedStyle = useAnimatedStyle(y);
return state == null ? null : <SelectedDismissibleContent contentTypes={[DismissibleContent.SUPER_REACTIONS_MOBILE_FULLSCREEN_TAP_TO_DISMISS]}>
{({ visibleContent, markAsDismissed }) => <OverlayView style={styles.fill}>
<ReanimatedRexport.View style={[styles.fill, animatedStyle]}>
<TouchableOpacity activeOpacity={BACKDROP_OPACITY} onPress={() => {
setState2(false);
ref.current = false;
markAsDismissed(ContentDismissActionType.UNKNOWN);
}} style={styles.fill}>
<View style={styles.background} />
<View style={styles.fill}>
{state2 ? <BurstReactionAnimation isFullscreen channelId={state.channelId} messageId={state.messageId} emoji={state.emoji} loop={false} withFadeOut={false} onComplete={() => {
setState2(false);
ref.current = false;
}} /> : null}
</View>
{visibleContent === DismissibleContent.SUPER_REACTIONS_MOBILE_FULLSCREEN_TAP_TO_DISMISS && <>
<Text style={styles.dismissTextContainer} variant="text-sm/medium">
{intl.string(t.QpPMih)}
</Text>
<View style={styles.dismissTextBackground} />
</>}
</TouchableOpacity>
</ReanimatedRexport.View>
</OverlayView>}
</SelectedDismissibleContent>;
};
useStyles = createStyles({
background: {
...StyleSheet.absoluteFillObject,
backgroundColor: Module712.colors.BLACK,
opacity: BACKDROP_OPACITY
},
fill: {
...StyleSheet.absoluteFillObject,
flex: 1,
alignItems: "center",
justifyContent: "center"
},
dismissTextContainer: {
position: "absolute",
bottom: 48,
zIndex: 1
},
dismissTextBackground: {
backgroundColor: Module712.colors.BACKGROUND_SURFACE_HIGHEST,
borderRadius: Module712.radii.round,
position: "absolute",
bottom: -600,
height: 700,
width: 700
}
});
__initData = {
code: "function BurstReactionAnimationContainerTsx1(){const{animationData,showAnimation,withTiming,runOnJS,handleComponentFinish}=this.__closure;if(animationData==null){return{opacity:0};}if(!showAnimation){return{opacity:withTiming(0,{duration:300},'respect-motion-settings',function(finished){if(finished)runOnJS(handleComponentFinish)();})};}return{opacity:withTiming(1,{duration:300})};}"
};
__initData2 = {
code: "function BurstReactionAnimationContainerTsx2(finished){const{runOnJS,handleComponentFinish}=this.__closure;if(finished)runOnJS(handleComponentFinish)();}"
};
export default function BurstReactionAnimationContainer() {
return <ThemeContextProvider theme={Module712.themes.DARKER}>
<BurstReactionAnimationContainerInner />
</ThemeContextProvider>;
};
@@ -0,0 +1,7 @@
// Metro module 6136 (f6137).
import { ReactionTypes } from "../../MessageReactionsTypes";
import BurstReactionAnimation from "./BurstReactionAnimation";
export default function BurstReactionAnimationPreview(props) {
const { channelId, emoji, messageId } = props;
return props.reactionType === ReactionTypes.BURST ? <BurstReactionAnimation isFullscreen channelId={channelId} messageId={messageId} emoji={emoji} /> : null;
};
@@ -0,0 +1,226 @@
// Metro module 6095 (f6096).
import _slicedToArray from "../../../../_bundle/_slicedToArray";
import { useState, useEffect } from "react";
import { NativeModules, Image } from "react-native";
import { getEmojiUrl } from "../../../../utils/EmojiUtils";
import { getBurstAnimation } from "../../getBurstAnimation.native";
import { makeSource } from "../../../../utils/AvatarUtils";
import { isAndroid } from "../../../../utils/PlatformUtils";
import { replaceAnimationColors } from "../../BurstReactionEffectUtils";
let env3874 = {};
env3874[7] = function _generateAnimationSource() {
const r8 = async (c25711_0, c25711_1, c25711_2, c25711_3) => {
let r165, r234;
let emojiUrl;
let c25711_8 = 0;
let c29668_0, c29668_1, c29668_2, c29668_3, c29668_4, c29668_5, c29668_6, c29668_7, c29668_8, c29668_9, c29668_10, c29668_11;
try {
c29668_0 = c25711_2;
c29668_1 = void 0;
c29668_2 = void 0;
c29668_3 = void 0;
c29668_4 = void 0;
c29668_5 = void 0;
c29668_6 = void 0;
c29668_7 = void 0;
c29668_8 = void 0;
c29668_9 = void 0;
c29668_10 = void 0;
c29668_11 = void 0;
c25711_8 = 1;
const emojiUrl2 = getEmojiUrl({
...c25711_2,
animated: false
}, 128);
emojiUrl = emojiUrl2;
if (emojiUrl2 == null) {
emojiUrl = "";
}
c29668_2 = emojiUrl;
c29668_3 = await getBurstAnimation(c25711_0, c25711_1, c25711_2.name, c25711_3);
if (c29668_2 !== "") {
c29668_1 = makeSource(c29668_2);
c29668_4 = await NativeModules.ImageManager.getAvatarBase64(c29668_1);
c29668_3.assets[0].p = `data:image/png;base64,${c29668_4}`;
c29668_6 = JSON.stringify(c29668_3);
if (c29668_0.id == null) {
c29668_6 = c29668_6.replace(/"a":{"a":0,"k":\[64,64/, "\"a\":{\"a\":0,\"k\":[36,36");
if (isAndroid()) {
c29668_6 = c29668_6.replace(/"w":128,"h":128/, "\"w\":72,\"h\":72");
}
}
r165 = NativeModules.ImageManager.getDominantColors(c29668_1);
} else {
c29668_5 = `data:image/png;base64,${await NativeModules.ImageManager.getEmojiBase64(c29668_0.name, 128)}`;
c29668_3.assets[0].p = c29668_5;
c29668_1 = makeSource(c29668_5);
c29668_6 = JSON.stringify(c29668_3);
if (c29668_0.id == null) {
c29668_6 = c29668_6.replace(/"a":{"a":0,"k":\[64,64/, "\"a\":{\"a\":0,\"k\":[36,36");
if (isAndroid()) {
c29668_6 = c29668_6.replace(/"w":128,"h":128/, "\"w\":72,\"h\":72");
}
}
r165 = NativeModules.ImageManager.getDominantColors(c29668_1);
}
c29668_7 = await r165;
c29668_8 = (0, _slicedToArray)(c29668_7[0], 3);
c29668_9 = c29668_8[0];
c29668_10 = c29668_8[1];
c29668_11 = c29668_8[2];
c29668_6 = replaceAnimationColors(c29668_6, {
r: c29668_9,
g: c29668_10,
b: c29668_11
});
r234 = JSON.parse(c29668_6);
c25711_8 = 0;
} catch ($e) {
let r7 = $e;
if (c25711_8 !== 0) {
while (true) {
try {
c25711_8 = 0;
} catch ($e) {
r7 = $e;
if (c25711_8 === 0) {
break;
}
continue;
}
return null;
}
}
throw r7;
}
return r234;
};
env3874[7] = r8;
return r8.apply(this, arguments);
};
env3874[8] = function _generateAnimationSourceFromLocalImage() {
const r8 = async (c25712_0) => {
let r150;
let c25712_4 = 0;
let c29669_0, c29669_1, c29669_2, c29669_3, c29669_4, c29669_5, c29669_6, c29669_7, c29669_8, c29669_9, c29669_10;
try {
c29669_0 = void 0;
c29669_1 = void 0;
c29669_0 = c25712_0.animationSource;
c29669_1 = c25712_0.localImageSource;
c29669_2 = void 0;
c29669_3 = void 0;
c29669_4 = void 0;
c29669_5 = void 0;
c29669_6 = void 0;
c29669_7 = void 0;
c29669_8 = void 0;
c29669_9 = void 0;
c29669_10 = void 0;
await void 0;
c25712_4 = 1;
c29669_2 = Image.resolveAssetSource(c29669_1).uri;
c29669_3 = makeSource(c29669_2);
c29669_4 = await NativeModules.ImageManager.getAvatarBase64(c29669_3);
c29669_0.assets[0].p = `data:image/png;base64,${c29669_4}`;
c29669_5 = JSON.stringify(c29669_0);
c29669_6 = await NativeModules.ImageManager.getDominantColors(c29669_3);
c29669_7 = (0, _slicedToArray)(c29669_6[0], 3);
c29669_8 = c29669_7[0];
c29669_9 = c29669_7[1];
c29669_10 = c29669_7[2];
c29669_5 = replaceAnimationColors(c29669_5, {
r: c29669_8,
g: c29669_9,
b: c29669_10
});
r150 = JSON.parse(c29669_5);
c25712_4 = 0;
} catch ($e) {
let r7 = $e;
if (c25712_4 !== 0) {
while (true) {
try {
c25712_4 = 0;
} catch ($e) {
r7 = $e;
if (c25712_4 === 0) {
break;
}
continue;
}
return null;
}
}
throw r7;
}
return r150;
};
env3874[8] = r8;
return r8.apply(this, arguments);
};
export function useBurstReactionAnimationSource({ channelId, messageId, emoji, isFullscreen }) {
const [state, setState] = useState(null);
useEffect(() => {
let _getSource3 = function _getSource() {
const r9 = async () => {
let c31390_0, c31390_1;
L13: {
let env31948;
c31390_1 = void 0;
const r10 = env31948 = {
$parent: env3874
};
c31390_0 = r10;
env31948[0] = void 0;
if (emoji != null) {
env31948[0] = await (function generateAnimationSource(a0, a1, a2, a3) {
return env3874[7].apply(this, arguments);
})(channelId, messageId, emoji, isFullscreen);
(0, setState)(env31948[0]);
break L13;
}
return void 0;
}
};
_getSource3 = r9;
return r9.apply(this, arguments);
};
(function getSource() {
return _getSource3.apply(this, arguments);
})();
}, [channelId, messageId, emoji, isFullscreen]);
return state;
}
export function useSuperReactionAnimationSourceFromLocalImage({ animationSource, localImageSource }) {
const [state, setState2] = useState(null);
useEffect(() => {
let _getSource22 = function _getSource2() {
const r9 = async () => {
let c31391_1;
let env31949;
c31391_1 = void 0;
const r9 = env31949 = {
$parent: env3874
};
let c31391_0 = r9;
env31949[0] = void 0;
env31949[0] = await (function generateAnimationSourceFromLocalImage(a0) {
return env3874[8].apply(this, arguments);
})({
animationSource,
localImageSource
});
(0, setState2)(env31949[0]);
};
_getSource22 = r9;
return r9.apply(this, arguments);
};
(function getSource() {
return _getSource22.apply(this, arguments);
})();
}, [animationSource, localImageSource]);
return state;
}
export const EMOJI_IN_ANIMATION_SIZE = 128;
export const BACKDROP_OPACITY = 0.8;
@@ -0,0 +1,97 @@
// Metro module 6138 (f6139).
import { useState, useEffect } from "react";
import AccessibilityStore from "../../../a11y/AccessibilityStore";
import { createStyles } from "../../../../design/components/Styles/native/createStyles";
import { useStateFromStores } from "../../../../_bundle/Module589";
import * as _ReanimatedRexport from "../../../reanimated/ReanimatedRexport";
import ReanimatedRexport, { useAnimatedStyle } from "../../../reanimated/ReanimatedRexport";
import * as _timing from "../../../../design/animation/reanimated/timing/timing";
import LottieAnimationView from "../../../../components_native/common/LottieAnimationView";
const useStyles = createStyles({
content: {
width: "100%"
}
});
const __initData = {
code: "function FadeOutLottieAnimationTsx1(){const{isAnimationComplete,isFadeOut,withTiming,runOnJS,setIsFadeOut}=this.__closure;if(!isAnimationComplete){return{opacity:1};}if(isFadeOut){return{opacity:withTiming(0,{duration:300},'respect-motion-settings',function(finished){if(finished)runOnJS(setIsFadeOut)(false);})};}return{opacity:0};}"
};
const __initData2 = {
code: "function FadeOutLottieAnimationTsx2(finished){const{runOnJS,setIsFadeOut}=this.__closure;if(finished)runOnJS(setIsFadeOut)(false);}"
};
export default function FadeOutLottieAnimation(props) {
let r55;
let onComplete, state, setState, state2, setState2;
L5: {
onComplete = props.onComplete;
const { onComplete: _onComplete, ...props2 } = props;
state = void 0;
setState = void 0;
state2 = void 0;
setState2 = void 0;
const styles = useStyles();
[state, setState] = useState(false);
[state2, setState2] = useState(true);
const stateFromStores = useStateFromStores([AccessibilityStore], () => AccessibilityStore.useReducedMotion);
useEffect(() => {
setState(false);
}, []);
const T = function T() {
let r18, r19;
if (state) {
if (state2) {
const t = function t(a0) {
if (a0) {
_ReanimatedRexport.runOnJS(setState2)(false);
}
};
t.__closure = {
runOnJS: _ReanimatedRexport.runOnJS,
setIsFadeOut: setState2
};
t.__workletHash = 14133863353798;
t.__initData = __initData2;
r19 = {
opacity: _timing.withTiming(0, {
duration: 300
}, "respect-motion-settings", t)
};
} else {
r19 = {
opacity: 0
};
}
r18 = r19;
} else {
r18 = {
opacity: 1
};
}
return r18;
};
T.__closure = {
isAnimationComplete: state,
isFadeOut: state2,
withTiming: _timing.withTiming,
runOnJS: _ReanimatedRexport.runOnJS,
setIsFadeOut: setState2
};
T.__workletHash = 1137618554665;
T.__initData = __initData;
const animatedStyle = useAnimatedStyle(T);
if (state) {
r55 = null;
if (!state2) {
break L5;
}
}
r55 = <ReanimatedRexport.View style={animatedStyle}>
<LottieAnimationView style={styles.content} speed={stateFromStores ? 0.5 : 1} onAnimationFinish={(event) => {
if (onComplete != null) {
onComplete(event);
}
setState(true);
}} {...props2} />
</ReanimatedRexport.View>;
}
return r55;
};
@@ -0,0 +1,22 @@
// Metro module 9334 (f9335).
import { useSuperReactionAnimationSourceFromLocalImage } from "./BurstReactionEffectUtils";
import FadeOutLottieAnimation from "./FadeOutLottieAnimation";
import { HermesBuiltin } from "../../../../_hermes/prelude";
export default function SuperReactionLocalImageAnimation(props) {
const { localImageSource, animationSource } = props;
const r13 = {};
let r2 = null;
const props2 = HermesBuiltin.copyDataProperties(r13, props, {
__proto__: null,
localImageSource: 0,
animationSource: 0
});
const superReactionAnimationSourceFromLocalImage = useSuperReactionAnimationSourceFromLocalImage({
animationSource,
localImageSource
});
if (superReactionAnimationSourceFromLocalImage != null) {
r2 = <FadeOutLottieAnimation loop source={superReactionAnimationSourceFromLocalImage} {...props2} />;
}
return r2;
};
@@ -0,0 +1,72 @@
// Metro module 9313 (f9314).
import { useMemo } from "react";
import { View, StyleSheet } from "react-native";
import UserStore from "../../../../stores/UserStore";
import { AnalyticsPages } from "../../../../Constants";
import { DismissibleContent } from "../../../../_bundle/Module1358";
import * as _Module9314 from "../../../../_bundle/Module9314";
import * as _Module9315 from "../../../../_bundle/Module9315";
import * as _Module9316 from "../../../../_bundle/Module9316";
import * as _Module9317 from "../../../../_bundle/Module9317";
import * as _Module9318 from "../../../../_bundle/Module9318";
import * as _Module9319 from "../../../../_bundle/Module9319";
import * as _Module9320 from "../../../../_bundle/Module9320";
import { createStyles } from "../../../../design/components/Styles/native/createStyles";
import Module712 from "../../../../_bundle/Module712";
import useAnalyticsLocations from "../../../app_analytics/useAnalyticsLocations";
import { useStateFromStores } from "../../../../_bundle/Module589";
import * as _PremiumUtils from "../../../../utils/PremiumUtils";
import openPremiumModal from "../../../../components_native/premium/openPremiumModal";
import { PremiumFeatureCardOrder } from "../../../user_settings/premium/native/PremiumFeaturesCards";
import Module12 from "../../../../_bundle/Module12";
import SuperReactionLocalImageAnimation from "./SuperReactionLocalImageAnimation";
import * as _Module6106 from "../../../../_bundle/Module6106";
import PremiumUpsellTooltipActionSheet from "../../../upsell_tooltip/native/PremiumUpsellTooltipActionSheet";
import { intl, t } from "../../../../intl/index.native";
import { BACKDROP_OPACITY } from "./BurstReactionEffectUtils";
import { NitroWheel } from "../../../../design/void/native";
import ActionSheetActionCreators from "../../../action_sheet/native/ActionSheetActionCreators";
const SUPER_REACTIONS_COACHMARK_MOBILE = DismissibleContent.SUPER_REACTIONS_COACHMARK_MOBILE;
let c6132_9 = [_Module9314, _Module9315, _Module9316, _Module9317, _Module9315, _Module9318, _Module9319, _Module9320];
const useStyles = createStyles({
fill: {
...StyleSheet.absoluteFillObject,
flex: 1,
alignItems: "center",
justifyContent: "center",
top: -150
},
nitroIcon: {
tintColor: Module712.colors.WHITE,
width: 32,
height: 32,
marginVertical: -8,
marginRight: -4
},
description: {
paddingHorizontal: 16
}
});
export default function SuperReactionCoachmarkActionSheet(props) {
const onDismiss = props.onDismiss;
const styles = useStyles();
const analyticsLocations = useAnalyticsLocations().analyticsLocations;
const analyticsLocation = {
page: AnalyticsPages.PREMIUM_UPSELL_BURST_REACTIONS
};
const isPremium = _PremiumUtils.isPremium(useStateFromStores([UserStore], () => UserStore.getCurrentUser()));
const memo = useMemo(() => <View style={styles.fill}>
<SuperReactionLocalImageAnimation localImageSource={c6132_9[Module12.random(0, c6132_9.length - 1)]} animationSource={_Module6106} />
</View>, [styles]);
return isPremium ? null : <PremiumUpsellTooltipActionSheet title={intl.string(t.Wfl5zp)} backdropProps={{
backdropOpacity: BACKDROP_OPACITY,
backdropChildren: memo
}} description={intl.string(t.eikz43)} descriptionStyle={styles.description} dismissibleContent={SUPER_REACTIONS_COACHMARK_MOBILE} primaryButtonText={intl.string(t.sEAnVH)} primaryButtonIcon={() => <NitroWheel style={styles.nitroIcon} />} onPrimaryButtonPress={() => {
ActionSheetActionCreators.hideActionSheet();
openPremiumModal({
analyticsLocation,
analyticsLocations,
premiumFeatureCardOrder: PremiumFeatureCardOrder.TIER_2_LEADING
});
}} secondaryButtonText={intl.string(t.TulDPl)} onDismiss={onDismiss} />;
};