@adminide-stack/yantra-mobile 12.0.79 → 12.0.80-alpha.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,41 +1,4 @@
1
- import {jsxs,jsx}from'react/jsx-runtime';import {useRef,useEffect}from'react';import {Animated,Easing,View,StyleSheet}from'react-native';import {Text}from'@admin-layout/gluestack-ui-mobile';import {useLiveThinkingLabel}from'../hooks/useLiveThinkingLabel.js';function PulseDot({
2
- accent,
3
- delay
4
- }) {
5
- const scale = useRef(new Animated.Value(0.55)).current;
6
- const opacity = useRef(new Animated.Value(0.35)).current;
7
- useEffect(() => {
8
- const loop = Animated.loop(Animated.sequence([Animated.delay(delay), Animated.parallel([Animated.timing(scale, {
9
- toValue: 1,
10
- duration: 280,
11
- easing: Easing.out(Easing.quad),
12
- useNativeDriver: true
13
- }), Animated.timing(opacity, {
14
- toValue: 1,
15
- duration: 280,
16
- useNativeDriver: true
17
- })]), Animated.parallel([Animated.timing(scale, {
18
- toValue: 0.55,
19
- duration: 280,
20
- easing: Easing.in(Easing.quad),
21
- useNativeDriver: true
22
- }), Animated.timing(opacity, {
23
- toValue: 0.35,
24
- duration: 280,
25
- useNativeDriver: true
26
- })]), Animated.delay(640)]));
27
- loop.start();
28
- return () => loop.stop();
29
- }, [delay, opacity, scale]);
30
- return /* @__PURE__ */ jsx(Animated.View, { style: [styles.dot, {
31
- backgroundColor: accent,
32
- opacity,
33
- transform: [{
34
- scale
35
- }]
36
- }] });
37
- }
38
- function SkeletonLine({
1
+ import {jsxs,jsx}from'react/jsx-runtime';import {useRef,useEffect}from'react';import {Animated,Easing,View,StyleSheet}from'react-native';import {Text}from'@admin-layout/gluestack-ui-mobile';import {useLiveThinkingLabel}from'../hooks/useLiveThinkingLabel.js';import {YantraMascot}from'./mascot/YantraMascot.js';function SkeletonLine({
39
2
  width,
40
3
  delay,
41
4
  isDark
@@ -65,7 +28,6 @@ function SkeletonLine({
65
28
  }
66
29
  function ThinkingIndicator({
67
30
  color,
68
- accent = "#2563eb",
69
31
  variant = "inline",
70
32
  label,
71
33
  isDark = false
@@ -89,9 +51,7 @@ function ThinkingIndicator({
89
51
  return () => loop.stop();
90
52
  }, [labelOpacity]);
91
53
  const statusRow = /* @__PURE__ */ jsxs(View, { style: styles.row, accessibilityRole: "text", accessibilityLabel: "Assistant is working", children: [
92
- /* @__PURE__ */ jsx(PulseDot, { accent, delay: 0 }),
93
- /* @__PURE__ */ jsx(PulseDot, { accent, delay: 160 }),
94
- /* @__PURE__ */ jsx(PulseDot, { accent, delay: 320 }),
54
+ /* @__PURE__ */ jsx(YantraMascot, { mode: "working", size: variant === "awaiting" ? 34 : 26, shadowColor: color }),
95
55
  /* @__PURE__ */ jsx(Animated.View, { style: {
96
56
  opacity: labelOpacity
97
57
  }, children: /* @__PURE__ */ jsx(Text, { style: [styles.label, {
@@ -120,14 +80,8 @@ const styles = StyleSheet.create({
120
80
  alignSelf: "stretch",
121
81
  paddingVertical: 4
122
82
  },
123
- dot: {
124
- width: 7,
125
- height: 7,
126
- borderRadius: 4,
127
- marginRight: 5
128
- },
129
83
  label: {
130
- marginLeft: 8,
84
+ marginLeft: 10,
131
85
  fontSize: 14,
132
86
  fontWeight: "600",
133
87
  letterSpacing: -0.2
@@ -1 +1 @@
1
- {"version":3,"file":"ThinkingIndicator.js","sources":["../../src/components/ThinkingIndicator.tsx"],"sourcesContent":["import React, { useEffect, useRef } from 'react';\nimport { Animated, Easing, StyleSheet, View } from 'react-native';\nimport { Text } from '@admin-layout/gluestack-ui-mobile';\nimport { useLiveThinkingLabel } from '../hooks/useLiveThinkingLabel';\n\ninterface ThinkingIndicatorProps {\n /** Muted caption color. */\n color: string;\n /** Dot / skeleton accent. Defaults to the product primary. */\n accent?: string;\n /**\n * `inline` — compact status row (hydration, dock).\n * `awaiting` — assistant-turn placeholder: dots, live label, skeleton lines\n * (browser `yantra-awaiting` treatment).\n */\n variant?: 'inline' | 'awaiting';\n /** Override the rotating caption (e.g. \"Opening conversation…\"). */\n label?: string;\n isDark?: boolean;\n}\n\nfunction PulseDot({ accent, delay }: { accent: string; delay: number }) {\n const scale = useRef(new Animated.Value(0.55)).current;\n const opacity = useRef(new Animated.Value(0.35)).current;\n useEffect(() => {\n const loop = Animated.loop(\n Animated.sequence([\n Animated.delay(delay),\n Animated.parallel([\n Animated.timing(scale, {\n toValue: 1,\n duration: 280,\n easing: Easing.out(Easing.quad),\n useNativeDriver: true,\n }),\n Animated.timing(opacity, {\n toValue: 1,\n duration: 280,\n useNativeDriver: true,\n }),\n ]),\n Animated.parallel([\n Animated.timing(scale, {\n toValue: 0.55,\n duration: 280,\n easing: Easing.in(Easing.quad),\n useNativeDriver: true,\n }),\n Animated.timing(opacity, {\n toValue: 0.35,\n duration: 280,\n useNativeDriver: true,\n }),\n ]),\n Animated.delay(640),\n ]),\n );\n loop.start();\n return () => loop.stop();\n }, [delay, opacity, scale]);\n return <Animated.View style={[styles.dot, { backgroundColor: accent, opacity, transform: [{ scale }] }]} />;\n}\n\nfunction SkeletonLine({ width, delay, isDark }: { width: `${number}%`; delay: number; isDark: boolean }) {\n const opacity = useRef(new Animated.Value(0.45)).current;\n useEffect(() => {\n const loop = Animated.loop(\n Animated.sequence([\n Animated.delay(delay),\n Animated.timing(opacity, {\n toValue: 1,\n duration: 700,\n easing: Easing.inOut(Easing.quad),\n useNativeDriver: true,\n }),\n Animated.timing(opacity, {\n toValue: 0.4,\n duration: 700,\n easing: Easing.inOut(Easing.quad),\n useNativeDriver: true,\n }),\n ]),\n );\n loop.start();\n return () => loop.stop();\n }, [delay, opacity]);\n const fill = isDark ? 'rgba(148, 163, 184, 0.18)' : 'rgba(15, 23, 42, 0.08)';\n return <Animated.View style={[styles.skel, { width, backgroundColor: fill, opacity }]} />;\n}\n\n/**\n * In-flight assistant wait — browser ChatConversation awaiting strip:\n * staggered dots, rotating status copy, optional skeleton bars.\n */\nexport default function ThinkingIndicator({\n color,\n accent = '#2563eb',\n variant = 'inline',\n label,\n isDark = false,\n}: ThinkingIndicatorProps) {\n const live = useLiveThinkingLabel(!label);\n const caption = label ?? live;\n const labelOpacity = useRef(new Animated.Value(0.72)).current;\n useEffect(() => {\n const loop = Animated.loop(\n Animated.sequence([\n Animated.timing(labelOpacity, {\n toValue: 1,\n duration: 900,\n easing: Easing.inOut(Easing.quad),\n useNativeDriver: true,\n }),\n Animated.timing(labelOpacity, {\n toValue: 0.55,\n duration: 900,\n easing: Easing.inOut(Easing.quad),\n useNativeDriver: true,\n }),\n ]),\n );\n loop.start();\n return () => loop.stop();\n }, [labelOpacity]);\n\n const statusRow = (\n <View style={styles.row} accessibilityRole=\"text\" accessibilityLabel=\"Assistant is working\">\n <PulseDot accent={accent} delay={0} />\n <PulseDot accent={accent} delay={160} />\n <PulseDot accent={accent} delay={320} />\n <Animated.View style={{ opacity: labelOpacity }}>\n <Text style={[styles.label, { color }]}>{caption}</Text>\n </Animated.View>\n </View>\n );\n\n if (variant === 'inline') {\n return statusRow;\n }\n\n return (\n <View style={styles.awaiting}>\n {statusRow}\n <View style={styles.skelCol}>\n <SkeletonLine width=\"92%\" delay={0} isDark={isDark} />\n <SkeletonLine width=\"78%\" delay={180} isDark={isDark} />\n <SkeletonLine width=\"60%\" delay={360} isDark={isDark} />\n </View>\n </View>\n );\n}\n\nconst styles = StyleSheet.create({\n row: {\n flexDirection: 'row',\n alignItems: 'center',\n alignSelf: 'flex-start',\n },\n awaiting: {\n alignSelf: 'stretch',\n paddingVertical: 4,\n },\n dot: {\n width: 7,\n height: 7,\n borderRadius: 4,\n marginRight: 5,\n },\n label: {\n marginLeft: 8,\n fontSize: 14,\n fontWeight: '600',\n letterSpacing: -0.2,\n },\n skelCol: {\n marginTop: 14,\n },\n skel: {\n height: 11,\n borderRadius: 6,\n marginBottom: 8,\n },\n});\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ThinkingIndicator.js","sources":["../../src/components/ThinkingIndicator.tsx"],"sourcesContent":["import React, { useEffect, useRef } from 'react';\nimport { Animated, Easing, StyleSheet, View } from 'react-native';\nimport { Text } from '@admin-layout/gluestack-ui-mobile';\nimport { useLiveThinkingLabel } from '../hooks/useLiveThinkingLabel';\nimport { YantraMascot } from './mascot/YantraMascot';\n\ninterface ThinkingIndicatorProps {\n /** Muted caption color (also tints the mascot's ground shadow). */\n color: string;\n /**\n * `inline` — compact status row (hydration, dock).\n * `awaiting` — assistant-turn placeholder: working mascot, live label, skeleton lines\n * (browser `yantra-awaiting` treatment).\n */\n variant?: 'inline' | 'awaiting';\n /** Override the rotating caption (e.g. \"Opening conversation…\"). */\n label?: string;\n isDark?: boolean;\n}\n\nfunction SkeletonLine({ width, delay, isDark }: { width: `${number}%`; delay: number; isDark: boolean }) {\n const opacity = useRef(new Animated.Value(0.45)).current;\n useEffect(() => {\n const loop = Animated.loop(\n Animated.sequence([\n Animated.delay(delay),\n Animated.timing(opacity, {\n toValue: 1,\n duration: 700,\n easing: Easing.inOut(Easing.quad),\n useNativeDriver: true,\n }),\n Animated.timing(opacity, {\n toValue: 0.4,\n duration: 700,\n easing: Easing.inOut(Easing.quad),\n useNativeDriver: true,\n }),\n ]),\n );\n loop.start();\n return () => loop.stop();\n }, [delay, opacity]);\n const fill = isDark ? 'rgba(148, 163, 184, 0.18)' : 'rgba(15, 23, 42, 0.08)';\n return <Animated.View style={[styles.skel, { width, backgroundColor: fill, opacity }]} />;\n}\n\n/**\n * In-flight assistant wait — browser ChatConversation awaiting strip:\n * the Yantra mascot at work, rotating status copy, optional skeleton bars.\n */\nexport default function ThinkingIndicator({\n color,\n variant = 'inline',\n label,\n isDark = false,\n}: ThinkingIndicatorProps) {\n const live = useLiveThinkingLabel(!label);\n const caption = label ?? live;\n const labelOpacity = useRef(new Animated.Value(0.72)).current;\n useEffect(() => {\n const loop = Animated.loop(\n Animated.sequence([\n Animated.timing(labelOpacity, {\n toValue: 1,\n duration: 900,\n easing: Easing.inOut(Easing.quad),\n useNativeDriver: true,\n }),\n Animated.timing(labelOpacity, {\n toValue: 0.55,\n duration: 900,\n easing: Easing.inOut(Easing.quad),\n useNativeDriver: true,\n }),\n ]),\n );\n loop.start();\n return () => loop.stop();\n }, [labelOpacity]);\n\n const statusRow = (\n <View style={styles.row} accessibilityRole=\"text\" accessibilityLabel=\"Assistant is working\">\n <YantraMascot mode=\"working\" size={variant === 'awaiting' ? 34 : 26} shadowColor={color} />\n <Animated.View style={{ opacity: labelOpacity }}>\n <Text style={[styles.label, { color }]}>{caption}</Text>\n </Animated.View>\n </View>\n );\n\n if (variant === 'inline') {\n return statusRow;\n }\n\n return (\n <View style={styles.awaiting}>\n {statusRow}\n <View style={styles.skelCol}>\n <SkeletonLine width=\"92%\" delay={0} isDark={isDark} />\n <SkeletonLine width=\"78%\" delay={180} isDark={isDark} />\n <SkeletonLine width=\"60%\" delay={360} isDark={isDark} />\n </View>\n </View>\n );\n}\n\nconst styles = StyleSheet.create({\n row: {\n flexDirection: 'row',\n alignItems: 'center',\n alignSelf: 'flex-start',\n },\n awaiting: {\n alignSelf: 'stretch',\n paddingVertical: 4,\n },\n label: {\n marginLeft: 10,\n fontSize: 14,\n fontWeight: '600',\n letterSpacing: -0.2,\n },\n skelCol: {\n marginTop: 14,\n },\n skel: {\n height: 11,\n borderRadius: 6,\n marginBottom: 8,\n },\n});\n"],"names":[],"mappings":"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"}
@@ -1,94 +1,16 @@
1
- import {jsxs,jsx}from'react/jsx-runtime';import {useRef,useMemo,useEffect}from'react';import {Animated,Easing,View,StyleSheet,Image}from'react-native';var __defProp = Object.defineProperty;
2
- var __defProps = Object.defineProperties;
3
- var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
4
- var __getOwnPropSymbols = Object.getOwnPropertySymbols;
5
- var __hasOwnProp = Object.prototype.hasOwnProperty;
6
- var __propIsEnum = Object.prototype.propertyIsEnumerable;
7
- var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
8
- var __spreadValues = (a, b) => {
9
- for (var prop in b || (b = {}))
10
- if (__hasOwnProp.call(b, prop))
11
- __defNormalProp(a, prop, b[prop]);
12
- if (__getOwnPropSymbols)
13
- for (var prop of __getOwnPropSymbols(b)) {
14
- if (__propIsEnum.call(b, prop))
15
- __defNormalProp(a, prop, b[prop]);
16
- }
17
- return a;
18
- };
19
- var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
20
- const ICON = require("../assets/icon.png");
21
- const YANTRA_LOADER_SIZE_DEFAULT = 72;
1
+ import {jsx}from'react/jsx-runtime';import {View,StyleSheet}from'react-native';import {YantraMascot}from'./mascot/YantraMascot.js';const YANTRA_LOADER_SIZE_DEFAULT = 72;
22
2
  const YANTRA_LOADER_SIZE_COMPACT = 40;
23
- const BASE = YANTRA_LOADER_SIZE_DEFAULT;
24
- const RING = 62;
25
- const ICON_SZ = 34;
26
3
  function YantraBrandLoader({
27
- size = BASE
4
+ size = YANTRA_LOADER_SIZE_DEFAULT
28
5
  }) {
29
- const spin = useRef(new Animated.Value(0)).current;
30
- const scale = size / BASE;
31
- const ringLayout = useMemo(() => {
32
- const ringSize2 = RING * scale;
33
- const inset2 = (size - ringSize2) / 2;
34
- return {
35
- ringSize: ringSize2,
36
- inset: inset2
37
- };
38
- }, [size, scale]);
39
- useEffect(() => {
40
- const loop = Animated.loop(Animated.timing(spin, {
41
- toValue: 1,
42
- duration: 1100,
43
- easing: Easing.linear,
44
- useNativeDriver: true
45
- }));
46
- loop.start();
47
- return () => loop.stop();
48
- }, [spin]);
49
- const rotate = spin.interpolate({
50
- inputRange: [0, 1],
51
- outputRange: ["0deg", "360deg"]
52
- });
53
- const {
54
- ringSize,
55
- inset
56
- } = ringLayout;
57
- const ringBorder = Math.max(2, Math.round(3 * scale));
58
- return /* @__PURE__ */ jsxs(View, { style: [styles.wrap, {
6
+ return /* @__PURE__ */ jsx(View, { style: [styles.wrap, {
59
7
  width: size,
60
8
  height: size
61
- }], children: [
62
- /* @__PURE__ */ jsx(Animated.View, { style: [styles.ring, {
63
- width: ringSize,
64
- height: ringSize,
65
- borderRadius: ringSize / 2,
66
- borderWidth: ringBorder,
67
- top: inset,
68
- left: inset,
69
- transform: [{
70
- rotate
71
- }]
72
- }] }),
73
- /* @__PURE__ */ jsx(View, { style: styles.iconWrap, children: /* @__PURE__ */ jsx(Image, { source: ICON, style: {
74
- width: ICON_SZ * scale,
75
- height: ICON_SZ * scale
76
- }, resizeMode: "contain", accessibilityIgnoresInvertColors: true }) })
77
- ] });
9
+ }], accessibilityRole: "progressbar", accessibilityLabel: "Loading", children: /* @__PURE__ */ jsx(YantraMascot, { mode: "working", size: Math.round(size * 0.86) }) });
78
10
  }
79
11
  const styles = StyleSheet.create({
80
12
  wrap: {
81
13
  alignItems: "center",
82
14
  justifyContent: "center"
83
- },
84
- ring: {
85
- position: "absolute",
86
- borderColor: "#e5e7eb",
87
- borderTopColor: "#111827",
88
- borderRightColor: "#6b7280"
89
- },
90
- iconWrap: __spreadProps(__spreadValues({}, StyleSheet.absoluteFillObject), {
91
- alignItems: "center",
92
- justifyContent: "center"
93
- })
15
+ }
94
16
  });export{YANTRA_LOADER_SIZE_COMPACT,YANTRA_LOADER_SIZE_DEFAULT,YantraBrandLoader};//# sourceMappingURL=YantraBrandLoader.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"YantraBrandLoader.js","sources":["../../src/components/YantraBrandLoader.tsx"],"sourcesContent":["import React, { useEffect, useMemo, useRef } from 'react';\nimport { Animated, Easing, Image, StyleSheet, View } from 'react-native';\n\nconst ICON = require('../assets/icon.png');\n\n/** Default outer size for full-screen / landing loaders */\nexport const YANTRA_LOADER_SIZE_DEFAULT = 72;\n/** Compact size for composer “sending…” overlay */\nexport const YANTRA_LOADER_SIZE_COMPACT = 40;\n\nconst BASE = YANTRA_LOADER_SIZE_DEFAULT;\nconst RING = 62;\nconst ICON_SZ = 34;\n\nexport interface YantraBrandLoaderProps {\n /** Outer container width/height in px */\n size?: number;\n}\n\n/**\n * Indeterminate circular ring with Yantra icon centered (brand splash / gate screens).\n */\nexport function YantraBrandLoader({ size = BASE }: YantraBrandLoaderProps) {\n const spin = useRef(new Animated.Value(0)).current;\n const scale = size / BASE;\n\n const ringLayout = useMemo(() => {\n const ringSize = RING * scale;\n const inset = (size - ringSize) / 2;\n return { ringSize, inset };\n }, [size, scale]);\n\n useEffect(() => {\n const loop = Animated.loop(\n Animated.timing(spin, {\n toValue: 1,\n duration: 1100,\n easing: Easing.linear,\n useNativeDriver: true,\n }),\n );\n loop.start();\n return () => loop.stop();\n }, [spin]);\n\n const rotate = spin.interpolate({\n inputRange: [0, 1],\n outputRange: ['0deg', '360deg'],\n });\n\n const { ringSize, inset } = ringLayout;\n const ringBorder = Math.max(2, Math.round(3 * scale));\n\n return (\n <View style={[styles.wrap, { width: size, height: size }]}>\n <Animated.View\n style={[\n styles.ring,\n {\n width: ringSize,\n height: ringSize,\n borderRadius: ringSize / 2,\n borderWidth: ringBorder,\n top: inset,\n left: inset,\n transform: [{ rotate }],\n },\n ]}\n />\n <View style={styles.iconWrap}>\n <Image\n source={ICON}\n style={{ width: ICON_SZ * scale, height: ICON_SZ * scale }}\n resizeMode=\"contain\"\n accessibilityIgnoresInvertColors\n />\n </View>\n </View>\n );\n}\n\nconst styles = StyleSheet.create({\n wrap: {\n alignItems: 'center',\n justifyContent: 'center',\n },\n ring: {\n position: 'absolute',\n borderColor: '#e5e7eb',\n borderTopColor: '#111827',\n borderRightColor: '#6b7280',\n },\n iconWrap: {\n ...StyleSheet.absoluteFillObject,\n alignItems: 'center',\n justifyContent: 'center',\n },\n});\n"],"names":["ringSize","inset"],"mappings":"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"}
1
+ {"version":3,"file":"YantraBrandLoader.js","sources":["../../src/components/YantraBrandLoader.tsx"],"sourcesContent":["import React from 'react';\nimport { StyleSheet, View } from 'react-native';\n\nimport { YantraMascot } from './mascot/YantraMascot';\n\n/** Default outer size for full-screen / landing loaders */\nexport const YANTRA_LOADER_SIZE_DEFAULT = 72;\n/** Compact size for composer “sending…” overlay */\nexport const YANTRA_LOADER_SIZE_COMPACT = 40;\n\nexport interface YantraBrandLoaderProps {\n /** Outer container width/height in px */\n size?: number;\n}\n\n/**\n * Brand loader for splash / gate screens: the Yantra mascot busy at work, in a\n * square box so it drops in wherever the old spinner ring sat.\n */\nexport function YantraBrandLoader({ size = YANTRA_LOADER_SIZE_DEFAULT }: YantraBrandLoaderProps) {\n return (\n <View\n style={[styles.wrap, { width: size, height: size }]}\n accessibilityRole=\"progressbar\"\n accessibilityLabel=\"Loading\"\n >\n {/* A little under the box width leaves room for its hops and hat tips. */}\n <YantraMascot mode=\"working\" size={Math.round(size * 0.86)} />\n </View>\n );\n}\n\nconst styles = StyleSheet.create({\n wrap: {\n alignItems: 'center',\n justifyContent: 'center',\n },\n});\n"],"names":[],"mappings":"mIAKO,MAAM,0BAA6B,GAAA;AAEnC,MAAM,0BAA6B,GAAA;AAUnC,SAAS,iBAAkB,CAAA;AAAA,EAChC,IAAO,GAAA;AACT,CAA2B,EAAA;AACzB,EAAA,uBAAQ,GAAA,CAAA,IAAA,EAAA,EAAK,KAAO,EAAA,CAAC,OAAO,IAAM,EAAA;AAAA,IAChC,KAAO,EAAA,IAAA;AAAA,IACP,MAAQ,EAAA;AAAA,GACT,CAAG,EAAA,iBAAA,EAAkB,aAAc,EAAA,kBAAA,EAAmB,WAE7C,QAAC,kBAAA,GAAA,CAAA,YAAA,EAAA,EAAa,IAAK,EAAA,SAAA,EAAU,MAAM,IAAK,CAAA,KAAA,CAAM,IAAO,GAAA,IAAI,GAAG,CAChE,EAAA,CAAA;AACR;AACA,MAAM,MAAA,GAAS,WAAW,MAAO,CAAA;AAAA,EAC/B,IAAM,EAAA;AAAA,IACJ,UAAY,EAAA,QAAA;AAAA,IACZ,cAAgB,EAAA;AAAA;AAEpB,CAAC,CAAA"}
@@ -0,0 +1,361 @@
1
+ import {jsxs,jsx,Fragment}from'react/jsx-runtime';import {useRef,useMemo,useEffect}from'react';import {Animated,View,AccessibilityInfo,StyleSheet,Easing,AppState}from'react-native';import Svg,{Ellipse,Polygon,Path,Circle,Rect}from'react-native-svg';import {firstPeekMs,blinkGapMs,WAKE_MS,workingGapMs,pickWorkingGesture,pickPeekGesture,peekGapMs,BLINK_MS,GESTURE_MS}from'./mascotChoreography.js';import {REST,GESTURE_TRACKS}from'./mascotTracks.js';var __defProp = Object.defineProperty;
2
+ var __getOwnPropSymbols = Object.getOwnPropertySymbols;
3
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
4
+ var __propIsEnum = Object.prototype.propertyIsEnumerable;
5
+ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
6
+ var __spreadValues = (a, b) => {
7
+ for (var prop in b || (b = {}))
8
+ if (__hasOwnProp.call(b, prop))
9
+ __defNormalProp(a, prop, b[prop]);
10
+ if (__getOwnPropSymbols)
11
+ for (var prop of __getOwnPropSymbols(b)) {
12
+ if (__propIsEnum.call(b, prop))
13
+ __defNormalProp(a, prop, b[prop]);
14
+ }
15
+ return a;
16
+ };
17
+ const VB = {
18
+ x: 78,
19
+ y: 62,
20
+ w: 228,
21
+ h: 212
22
+ };
23
+ const VIEWBOX = `${VB.x} ${VB.y} ${VB.w} ${VB.h}`;
24
+ const INK = "#1d1a24";
25
+ const EASE = {
26
+ inOut: Easing.inOut(Easing.ease),
27
+ in: Easing.bezier(0.6, 0, 0.9, 0.45),
28
+ out: Easing.bezier(0.2, 0.7, 0.3, 1)
29
+ };
30
+ function track(value, keyframes, totalMs) {
31
+ const steps = [];
32
+ for (let i = 1; i < keyframes.length; i++) {
33
+ const [from] = keyframes[i - 1];
34
+ const [at, toValue, ease = "inOut"] = keyframes[i];
35
+ steps.push(Animated.timing(value, {
36
+ toValue,
37
+ duration: Math.max(0, (at - from) * totalMs),
38
+ easing: EASE[ease],
39
+ useNativeDriver: true
40
+ }));
41
+ }
42
+ return Animated.sequence(steps);
43
+ }
44
+ function breathingLoop(value) {
45
+ const half = {
46
+ duration: 1300,
47
+ easing: Easing.inOut(Easing.ease),
48
+ useNativeDriver: true
49
+ };
50
+ return Animated.loop(Animated.sequence([Animated.timing(value, __spreadValues({
51
+ toValue: 1
52
+ }, half)), Animated.timing(value, __spreadValues({
53
+ toValue: 0
54
+ }, half))]));
55
+ }
56
+ function YantraMascot({
57
+ mode = "working",
58
+ size = 32,
59
+ shadowColor = "#0f172a",
60
+ title
61
+ }) {
62
+ const k = size / VB.w;
63
+ const height = Math.round(size * (VB.h / VB.w));
64
+ const values = useRef(null);
65
+ if (!values.current) {
66
+ values.current = Object.fromEntries(Object.keys(REST).map((channel) => [channel, new Animated.Value(REST[channel])]));
67
+ }
68
+ const v = values.current;
69
+ const awake = useRef(new Animated.Value(mode === "working" ? 1 : 0)).current;
70
+ const breathe = useRef(new Animated.Value(0)).current;
71
+ const hatNod = useRef(new Animated.Value(0)).current;
72
+ const blink = useRef(new Animated.Value(1)).current;
73
+ useMascotDirector({
74
+ mode,
75
+ v,
76
+ awake,
77
+ breathe,
78
+ hatNod,
79
+ blink
80
+ });
81
+ const layout = useMemo(() => {
82
+ const at2 = (x, y) => [(x - VB.x) * k, (y - VB.y) * k, 0];
83
+ const px2 = (value) => Animated.multiply(value, k);
84
+ const deg2 = (value) => value.interpolate({
85
+ inputRange: [-360, 360],
86
+ outputRange: ["-360deg", "360deg"]
87
+ });
88
+ const notHappy2 = Animated.subtract(1, v.happy);
89
+ return {
90
+ at: at2,
91
+ px: px2,
92
+ deg: deg2,
93
+ notHappy: notHappy2
94
+ };
95
+ }, [k, v]);
96
+ const {
97
+ at,
98
+ px,
99
+ deg,
100
+ notHappy
101
+ } = layout;
102
+ const layer = (style, children, key) => /* @__PURE__ */ jsx(Animated.View, { pointerEvents: "none", style: [StyleSheet.absoluteFill, style], children }, key);
103
+ const art = (children) => /* @__PURE__ */ jsx(Svg, { width: size, height, viewBox: VIEWBOX, children });
104
+ const awakeClamped = awake.interpolate({
105
+ inputRange: [0, 1],
106
+ outputRange: [0, 1],
107
+ extrapolate: "clamp"
108
+ });
109
+ return /* @__PURE__ */ jsxs(View, { style: {
110
+ width: size,
111
+ height
112
+ }, accessible: Boolean(title), accessibilityRole: title ? "image" : void 0, accessibilityLabel: title, accessibilityElementsHidden: !title, importantForAccessibility: title ? "yes" : "no-hide-descendants", children: [
113
+ layer({
114
+ opacity: Animated.multiply(awake.interpolate({
115
+ inputRange: [0, 1],
116
+ outputRange: [0, 0.13],
117
+ extrapolate: "clamp"
118
+ }), v.shadowFade),
119
+ transformOrigin: at(192, 261),
120
+ transform: [{
121
+ scale: v.shadowScale
122
+ }]
123
+ }, art(/* @__PURE__ */ jsx(Ellipse, { cx: "192", cy: "261", rx: "98", ry: "4.5", fill: shadowColor }))),
124
+ layer({
125
+ transform: [{
126
+ translateY: px(v.jumpY)
127
+ }]
128
+ }, layer({
129
+ transformOrigin: at(192, 257),
130
+ transform: [{
131
+ rotate: deg(v.sway)
132
+ }]
133
+ }, [layer({
134
+ transformOrigin: at(129.35, 256.89),
135
+ transform: [{
136
+ translateY: px(v.footLY)
137
+ }, {
138
+ rotate: deg(v.footLRot)
139
+ }]
140
+ }, art(/* @__PURE__ */ jsx(Polygon, { fill: "#DF1E5B", points: "85.22,256.89 105.11,223.09 129.35,256.89" })), "foot-l"), layer({
141
+ transformOrigin: at(254.57, 256.89),
142
+ transform: [{
143
+ translateY: px(v.footRY)
144
+ }, {
145
+ rotate: deg(v.footRRot)
146
+ }]
147
+ }, art(/* @__PURE__ */ jsx(Polygon, { fill: "#31B57E", points: "298.71,256.89 254.57,256.89 278.82,223.09" })), "foot-r"), layer({
148
+ transformOrigin: at(192, 257),
149
+ transform: [{
150
+ scaleX: breathe.interpolate({
151
+ inputRange: [0, 1],
152
+ outputRange: [1, 0.992]
153
+ })
154
+ }, {
155
+ scaleY: breathe.interpolate({
156
+ inputRange: [0, 1],
157
+ outputRange: [1, 1.022]
158
+ })
159
+ }]
160
+ }, layer({
161
+ transformOrigin: at(192, 257),
162
+ transform: [{
163
+ scaleX: v.squashX
164
+ }, {
165
+ scaleY: v.squashY
166
+ }]
167
+ }, [layer({}, art(/* @__PURE__ */ jsxs(Fragment, { children: [
168
+ /* @__PURE__ */ jsx(Polygon, { fill: "#DF1E5B", points: "182.27,256.89 142.89,256.89 111.22,212.73 128.56,183.26" }),
169
+ /* @__PURE__ */ jsx(Polygon, { fill: "#31B57E", points: "272.71,212.73 241.04,256.89 201.66,256.89 255.37,183.26" })
170
+ ] })), "legs"), layer({
171
+ transform: [{
172
+ translateY: breathe.interpolate({
173
+ inputRange: [0, 1],
174
+ outputRange: [0, -1.6 * k]
175
+ })
176
+ }]
177
+ }, [
178
+ layer({}, art(/* @__PURE__ */ jsx(Path, { fill: "#EAB12B", fillRule: "evenodd", d: "M246.64,168.43H137.28l-2.64,4.51l57.32,78.6l57.32-78.6L246.64,168.43z M191.96,208.5c-5.76,0-10.43-4.67-10.43-10.43c0-5.76,4.67-10.43,10.43-10.43c5.77,0,10.45,4.67,10.45,10.43C202.41,203.83,197.73,208.5,191.96,208.5z" })), "face"),
179
+ // Closes the logo's round "eye" while the face is showing.
180
+ layer({
181
+ transformOrigin: at(191.96, 198.07),
182
+ transform: [{
183
+ scale: awakeClamped
184
+ }]
185
+ }, art(/* @__PURE__ */ jsx(Circle, { fill: "#EAB12B", cx: "191.96", cy: "198.07", r: "11.2" })), "plug"),
186
+ layer({
187
+ opacity: awakeClamped,
188
+ transformOrigin: at(192, 193),
189
+ transform: [{
190
+ scale: awake.interpolate({
191
+ inputRange: [0, 1],
192
+ outputRange: [0.35, 1]
193
+ })
194
+ }]
195
+ }, [layer({
196
+ opacity: v.happy
197
+ }, art(/* @__PURE__ */ jsxs(Fragment, { children: [
198
+ /* @__PURE__ */ jsx(Ellipse, { fill: "#DF1E5B", fillOpacity: 0.42, cx: "163.5", cy: "202.5", rx: "6.8", ry: "3.6" }),
199
+ /* @__PURE__ */ jsx(Ellipse, { fill: "#DF1E5B", fillOpacity: 0.42, cx: "220.5", cy: "202.5", rx: "6.8", ry: "3.6" })
200
+ ] })), "blush"), layer({
201
+ transform: [{
202
+ translateX: px(v.lookX)
203
+ }, {
204
+ translateY: px(v.lookY)
205
+ }]
206
+ }, [layer({
207
+ opacity: notHappy,
208
+ transformOrigin: at(192, 187.5),
209
+ transform: [{
210
+ scaleY: blink
211
+ }]
212
+ }, art(/* @__PURE__ */ jsxs(Fragment, { children: [
213
+ /* @__PURE__ */ jsx(Rect, { fill: INK, x: "170.5", y: "176", width: "13", height: "23", rx: "6.5" }),
214
+ /* @__PURE__ */ jsx(Rect, { fill: INK, x: "200.5", y: "176", width: "13", height: "23", rx: "6.5" })
215
+ ] })), "eyes"), layer({
216
+ opacity: v.happy
217
+ }, art(/* @__PURE__ */ jsxs(Fragment, { children: [
218
+ /* @__PURE__ */ jsx(Path, { fill: "none", stroke: INK, strokeWidth: 4.2, strokeLinecap: "round", d: "M170.5,190.5 Q177,180 183.5,190.5" }),
219
+ /* @__PURE__ */ jsx(Path, { fill: "none", stroke: INK, strokeWidth: 4.2, strokeLinecap: "round", d: "M200.5,190.5 Q207,180 213.5,190.5" })
220
+ ] })), "eyes-happy")], "look"), layer({
221
+ opacity: notHappy
222
+ }, art(/* @__PURE__ */ jsx(Path, { fill: "none", stroke: INK, strokeWidth: 3.8, strokeLinecap: "round", d: "M184.5,207.5 Q192,215 199.5,207.5" })), "smile"), layer({
223
+ opacity: v.happy
224
+ }, art(/* @__PURE__ */ jsx(Path, { fill: INK, d: "M183,206 Q192,221 201,206 Z" })), "grin")], "features")
225
+ ], "head"), layer({
226
+ transform: [{
227
+ translateX: px(v.hatFollowX)
228
+ }, {
229
+ translateY: Animated.add(px(v.hatFollowY), hatNod.interpolate({
230
+ inputRange: [0, 1],
231
+ outputRange: [0, -1.6 * k]
232
+ }))
233
+ }]
234
+ }, layer({
235
+ transformOrigin: at(192, 157),
236
+ transform: [{
237
+ translateX: px(v.hatX)
238
+ }, {
239
+ translateY: px(v.hatY)
240
+ }, {
241
+ rotate: deg(v.hatRot)
242
+ }]
243
+ }, art(/* @__PURE__ */ jsxs(Fragment, { children: [
244
+ /* @__PURE__ */ jsx(Polygon, { fill: "#39C5EF", points: "217.45,118.82 166.48,118.82 191.97,75.53" }),
245
+ /* @__PURE__ */ jsx(Polygon, { fill: "#39C5EF", points: "240.18,157.43 143.75,157.43 160.01,129.82 223.92,129.82" })
246
+ ] }))), "hat")]), "body")]))
247
+ ] });
248
+ }
249
+ function useMascotDirector({
250
+ mode,
251
+ v,
252
+ awake,
253
+ breathe,
254
+ hatNod,
255
+ blink
256
+ }) {
257
+ useEffect(() => {
258
+ if (mode === "static") return void 0;
259
+ let disposed = false;
260
+ const timers = /* @__PURE__ */ new Set();
261
+ const running = /* @__PURE__ */ new Set();
262
+ const later = (fn, ms) => {
263
+ const id = setTimeout(() => {
264
+ timers.delete(id);
265
+ if (!disposed) fn();
266
+ }, ms);
267
+ timers.add(id);
268
+ };
269
+ const run = (animation, done) => {
270
+ running.add(animation);
271
+ animation.start(({
272
+ finished
273
+ }) => {
274
+ running.delete(animation);
275
+ if (finished && !disposed) done == null ? void 0 : done();
276
+ });
277
+ };
278
+ const rand = Math.random;
279
+ const startedAt = Date.now();
280
+ const active = () => AppState.currentState === "active";
281
+ let previous = null;
282
+ let isAwake = mode === "working";
283
+ let breathing = null;
284
+ const setAwake = (next) => {
285
+ isAwake = next;
286
+ run(Animated.timing(awake, {
287
+ toValue: next ? 1 : 0,
288
+ duration: WAKE_MS,
289
+ easing: next ? Easing.bezier(0.34, 1.56, 0.64, 1) : Easing.out(Easing.ease),
290
+ useNativeDriver: true
291
+ }));
292
+ breathing == null ? void 0 : breathing.stop();
293
+ breathing = null;
294
+ if (next) {
295
+ const body = breathingLoop(breathe);
296
+ const hat = breathingLoop(hatNod);
297
+ breathing = Animated.parallel([body, Animated.sequence([Animated.delay(140), hat])]);
298
+ breathing.start();
299
+ } else {
300
+ breathe.setValue(0);
301
+ hatNod.setValue(0);
302
+ }
303
+ };
304
+ const play = (gesture, done) => {
305
+ previous = gesture;
306
+ const total = GESTURE_MS[gesture];
307
+ const tracks = GESTURE_TRACKS[gesture];
308
+ run(Animated.parallel(Object.keys(tracks).map((channel) => track(v[channel], tracks[channel], total))), done);
309
+ };
310
+ const blinkLoop = () => later(() => {
311
+ if (isAwake && active()) {
312
+ const half = {
313
+ duration: BLINK_MS / 2,
314
+ useNativeDriver: true
315
+ };
316
+ run(Animated.sequence([Animated.timing(blink, __spreadValues({
317
+ toValue: 0.08
318
+ }, half)), Animated.timing(blink, __spreadValues({
319
+ toValue: 1
320
+ }, half))]));
321
+ }
322
+ blinkLoop();
323
+ }, blinkGapMs(rand));
324
+ const start = () => {
325
+ blinkLoop();
326
+ if (mode === "working") {
327
+ setAwake(true);
328
+ const next = () => later(() => {
329
+ if (!active()) return next();
330
+ play(pickWorkingGesture(previous, Date.now() - startedAt, rand), next);
331
+ }, workingGapMs(rand));
332
+ next();
333
+ return;
334
+ }
335
+ const peek = () => {
336
+ if (active()) {
337
+ setAwake(true);
338
+ later(() => play(pickPeekGesture(previous, rand), () => later(() => setAwake(false), 450)), WAKE_MS);
339
+ }
340
+ later(peek, peekGapMs(rand));
341
+ };
342
+ later(peek, firstPeekMs(rand));
343
+ };
344
+ AccessibilityInfo.isReduceMotionEnabled().catch(() => false).then((reduce) => {
345
+ if (disposed) return;
346
+ if (reduce) {
347
+ awake.setValue(mode === "working" ? 1 : 0);
348
+ return;
349
+ }
350
+ start();
351
+ });
352
+ return () => {
353
+ disposed = true;
354
+ timers.forEach(clearTimeout);
355
+ running.forEach((animation) => animation.stop());
356
+ breathing == null ? void 0 : breathing.stop();
357
+ Object.keys(REST).forEach((channel) => v[channel].setValue(REST[channel]));
358
+ blink.setValue(1);
359
+ };
360
+ }, [mode, v, awake, breathe, hatNod, blink]);
361
+ }export{YantraMascot,YantraMascot as default};//# sourceMappingURL=YantraMascot.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"YantraMascot.js","sources":["../../../src/components/mascot/YantraMascot.tsx"],"sourcesContent":["/**\n * The Yantra logo as a living character - native twin of the browser\n * components/mascot/YantraMascot. At rest it is the exact logo; awake, the round\n * hole in the yellow triangle closes into a face, the blue top becomes a hat and\n * the red/green corners become feet.\n *\n * - `working`: always awake, breathing, with a gesture every couple of seconds.\n * - `idle`: the plain logo that wakes for a moment every so often.\n * - `static`: the plain logo, no motion.\n *\n * Every moving part is its own full-size layer holding a slice of the mark, so\n * all motion is transform/opacity on the native driver - nothing re-renders\n * while it plays. Pivots are given in the logo's own coordinates.\n */\n\nimport React, { useEffect, useMemo, useRef } from 'react';\nimport { AccessibilityInfo, Animated, AppState, Easing, StyleSheet, View } from 'react-native';\nimport Svg, { Circle, Ellipse, Path, Polygon, Rect } from 'react-native-svg';\n\nimport {\n BLINK_MS,\n blinkGapMs,\n firstPeekMs,\n GESTURE_MS,\n type MascotGesture,\n peekGapMs,\n pickPeekGesture,\n pickWorkingGesture,\n WAKE_MS,\n workingGapMs,\n} from './mascotChoreography';\nimport { type Channel, type Ease, GESTURE_TRACKS, type Keyframe, REST, TRANSLATE_CHANNELS } from './mascotTracks';\n\nexport type MascotMode = 'working' | 'idle' | 'static';\n\nconst VB = { x: 78, y: 62, w: 228, h: 212 };\nconst VIEWBOX = `${VB.x} ${VB.y} ${VB.w} ${VB.h}`;\nconst INK = '#1d1a24';\n\nconst EASE: Record<Ease, (t: number) => number> = {\n inOut: Easing.inOut(Easing.ease),\n in: Easing.bezier(0.6, 0, 0.9, 0.45),\n out: Easing.bezier(0.2, 0.7, 0.3, 1),\n};\n\nexport interface YantraMascotProps {\n mode?: MascotMode;\n /** Width in px; the height follows the artwork. */\n size?: number;\n /** Ground shadow tint - pass the surrounding text colour so it reads in both themes. */\n shadowColor?: string;\n /** Accessible name. Without one the mascot is decorative. */\n title?: string;\n}\n\n/** One keyframe track as a chain of timings on a single value. */\nfunction track(value: Animated.Value, keyframes: readonly Keyframe[], totalMs: number) {\n const steps: Animated.CompositeAnimation[] = [];\n for (let i = 1; i < keyframes.length; i++) {\n const [from] = keyframes[i - 1];\n const [at, toValue, ease = 'inOut'] = keyframes[i];\n steps.push(\n Animated.timing(value, {\n toValue,\n duration: Math.max(0, (at - from) * totalMs),\n easing: EASE[ease],\n useNativeDriver: true,\n }),\n );\n }\n return Animated.sequence(steps);\n}\n\nfunction breathingLoop(value: Animated.Value) {\n const half = { duration: 1300, easing: Easing.inOut(Easing.ease), useNativeDriver: true };\n return Animated.loop(\n Animated.sequence([\n Animated.timing(value, { toValue: 1, ...half }),\n Animated.timing(value, { toValue: 0, ...half }),\n ]),\n );\n}\n\nexport function YantraMascot({ mode = 'working', size = 32, shadowColor = '#0f172a', title }: YantraMascotProps) {\n const k = size / VB.w;\n const height = Math.round(size * (VB.h / VB.w));\n\n const values = useRef<Record<Channel, Animated.Value> | null>(null);\n if (!values.current) {\n values.current = Object.fromEntries(\n (Object.keys(REST) as Channel[]).map((channel) => [channel, new Animated.Value(REST[channel])]),\n ) as Record<Channel, Animated.Value>;\n }\n const v = values.current;\n const awake = useRef(new Animated.Value(mode === 'working' ? 1 : 0)).current;\n const breathe = useRef(new Animated.Value(0)).current;\n const hatNod = useRef(new Animated.Value(0)).current;\n const blink = useRef(new Animated.Value(1)).current;\n\n useMascotDirector({ mode, v, awake, breathe, hatNod, blink });\n\n const layout = useMemo(() => {\n /** A point of the logo, in this layer's pixels - for transformOrigin. */\n const at = (x: number, y: number) => [(x - VB.x) * k, (y - VB.y) * k, 0];\n const px = (value: Animated.Value) => Animated.multiply(value, k);\n const deg = (value: Animated.Value) =>\n value.interpolate({ inputRange: [-360, 360], outputRange: ['-360deg', '360deg'] });\n const notHappy = Animated.subtract(1, v.happy);\n return { at, px, deg, notHappy };\n }, [k, v]);\n const { at, px, deg, notHappy } = layout;\n\n const layer = (style: object, children: React.ReactNode, key?: string) => (\n <Animated.View key={key} pointerEvents=\"none\" style={[StyleSheet.absoluteFill, style]}>\n {children}\n </Animated.View>\n );\n const art = (children: React.ReactNode) => (\n <Svg width={size} height={height} viewBox={VIEWBOX}>\n {children}\n </Svg>\n );\n const awakeClamped = awake.interpolate({ inputRange: [0, 1], outputRange: [0, 1], extrapolate: 'clamp' });\n\n return (\n <View\n style={{ width: size, height }}\n accessible={Boolean(title)}\n accessibilityRole={title ? 'image' : undefined}\n accessibilityLabel={title}\n accessibilityElementsHidden={!title}\n importantForAccessibility={title ? 'yes' : 'no-hide-descendants'}\n >\n {layer(\n {\n opacity: Animated.multiply(\n awake.interpolate({ inputRange: [0, 1], outputRange: [0, 0.13], extrapolate: 'clamp' }),\n v.shadowFade,\n ),\n transformOrigin: at(192, 261),\n transform: [{ scale: v.shadowScale }],\n },\n art(<Ellipse cx=\"192\" cy=\"261\" rx=\"98\" ry=\"4.5\" fill={shadowColor} />),\n )}\n {layer(\n { transform: [{ translateY: px(v.jumpY) }] },\n layer({ transformOrigin: at(192, 257), transform: [{ rotate: deg(v.sway) }] }, [\n layer(\n {\n transformOrigin: at(129.35, 256.89),\n transform: [{ translateY: px(v.footLY) }, { rotate: deg(v.footLRot) }],\n },\n art(<Polygon fill=\"#DF1E5B\" points=\"85.22,256.89 105.11,223.09 129.35,256.89\" />),\n 'foot-l',\n ),\n layer(\n {\n transformOrigin: at(254.57, 256.89),\n transform: [{ translateY: px(v.footRY) }, { rotate: deg(v.footRRot) }],\n },\n art(<Polygon fill=\"#31B57E\" points=\"298.71,256.89 254.57,256.89 278.82,223.09\" />),\n 'foot-r',\n ),\n layer(\n {\n transformOrigin: at(192, 257),\n transform: [\n { scaleX: breathe.interpolate({ inputRange: [0, 1], outputRange: [1, 0.992] }) },\n { scaleY: breathe.interpolate({ inputRange: [0, 1], outputRange: [1, 1.022] }) },\n ],\n },\n layer(\n {\n transformOrigin: at(192, 257),\n transform: [{ scaleX: v.squashX }, { scaleY: v.squashY }],\n },\n [\n layer(\n {},\n art(\n <>\n <Polygon\n fill=\"#DF1E5B\"\n points=\"182.27,256.89 142.89,256.89 111.22,212.73 128.56,183.26\"\n />\n <Polygon\n fill=\"#31B57E\"\n points=\"272.71,212.73 241.04,256.89 201.66,256.89 255.37,183.26\"\n />\n </>,\n ),\n 'legs',\n ),\n layer(\n {\n transform: [\n {\n translateY: breathe.interpolate({\n inputRange: [0, 1],\n outputRange: [0, -1.6 * k],\n }),\n },\n ],\n },\n [\n layer(\n {},\n art(\n <Path\n fill=\"#EAB12B\"\n fillRule=\"evenodd\"\n d=\"M246.64,168.43H137.28l-2.64,4.51l57.32,78.6l57.32-78.6L246.64,168.43z M191.96,208.5c-5.76,0-10.43-4.67-10.43-10.43c0-5.76,4.67-10.43,10.43-10.43c5.77,0,10.45,4.67,10.45,10.43C202.41,203.83,197.73,208.5,191.96,208.5z\"\n />,\n ),\n 'face',\n ),\n // Closes the logo's round \"eye\" while the face is showing.\n layer(\n {\n transformOrigin: at(191.96, 198.07),\n transform: [{ scale: awakeClamped }],\n },\n art(<Circle fill=\"#EAB12B\" cx=\"191.96\" cy=\"198.07\" r=\"11.2\" />),\n 'plug',\n ),\n layer(\n {\n opacity: awakeClamped,\n transformOrigin: at(192, 193),\n transform: [\n {\n scale: awake.interpolate({\n inputRange: [0, 1],\n outputRange: [0.35, 1],\n }),\n },\n ],\n },\n [\n layer(\n { opacity: v.happy },\n art(\n <>\n <Ellipse\n fill=\"#DF1E5B\"\n fillOpacity={0.42}\n cx=\"163.5\"\n cy=\"202.5\"\n rx=\"6.8\"\n ry=\"3.6\"\n />\n <Ellipse\n fill=\"#DF1E5B\"\n fillOpacity={0.42}\n cx=\"220.5\"\n cy=\"202.5\"\n rx=\"6.8\"\n ry=\"3.6\"\n />\n </>,\n ),\n 'blush',\n ),\n layer(\n {\n transform: [\n { translateX: px(v.lookX) },\n { translateY: px(v.lookY) },\n ],\n },\n [\n layer(\n {\n opacity: notHappy,\n transformOrigin: at(192, 187.5),\n transform: [{ scaleY: blink }],\n },\n art(\n <>\n <Rect\n fill={INK}\n x=\"170.5\"\n y=\"176\"\n width=\"13\"\n height=\"23\"\n rx=\"6.5\"\n />\n <Rect\n fill={INK}\n x=\"200.5\"\n y=\"176\"\n width=\"13\"\n height=\"23\"\n rx=\"6.5\"\n />\n </>,\n ),\n 'eyes',\n ),\n layer(\n { opacity: v.happy },\n art(\n <>\n <Path\n fill=\"none\"\n stroke={INK}\n strokeWidth={4.2}\n strokeLinecap=\"round\"\n d=\"M170.5,190.5 Q177,180 183.5,190.5\"\n />\n <Path\n fill=\"none\"\n stroke={INK}\n strokeWidth={4.2}\n strokeLinecap=\"round\"\n d=\"M200.5,190.5 Q207,180 213.5,190.5\"\n />\n </>,\n ),\n 'eyes-happy',\n ),\n ],\n 'look',\n ),\n layer(\n { opacity: notHappy },\n art(\n <Path\n fill=\"none\"\n stroke={INK}\n strokeWidth={3.8}\n strokeLinecap=\"round\"\n d=\"M184.5,207.5 Q192,215 199.5,207.5\"\n />,\n ),\n 'smile',\n ),\n layer(\n { opacity: v.happy },\n art(<Path fill={INK} d=\"M183,206 Q192,221 201,206 Z\" />),\n 'grin',\n ),\n ],\n 'features',\n ),\n ],\n 'head',\n ),\n layer(\n {\n transform: [\n { translateX: px(v.hatFollowX) },\n {\n translateY: Animated.add(\n px(v.hatFollowY),\n hatNod.interpolate({\n inputRange: [0, 1],\n outputRange: [0, -1.6 * k],\n }),\n ),\n },\n ],\n },\n layer(\n {\n transformOrigin: at(192, 157),\n transform: [\n { translateX: px(v.hatX) },\n { translateY: px(v.hatY) },\n { rotate: deg(v.hatRot) },\n ],\n },\n art(\n <>\n <Polygon\n fill=\"#39C5EF\"\n points=\"217.45,118.82 166.48,118.82 191.97,75.53\"\n />\n <Polygon\n fill=\"#39C5EF\"\n points=\"240.18,157.43 143.75,157.43 160.01,129.82 223.92,129.82\"\n />\n </>,\n ),\n ),\n 'hat',\n ),\n ],\n ),\n 'body',\n ),\n ]),\n )}\n </View>\n );\n}\n\ninterface DirectorArgs {\n mode: MascotMode;\n v: Record<Channel, Animated.Value>;\n awake: Animated.Value;\n breathe: Animated.Value;\n hatNod: Animated.Value;\n blink: Animated.Value;\n}\n\n/** Schedules wake-ups, blinks and gestures - the same rhythm as the web director. */\nfunction useMascotDirector({ mode, v, awake, breathe, hatNod, blink }: DirectorArgs) {\n useEffect(() => {\n if (mode === 'static') return undefined;\n let disposed = false;\n const timers = new Set<ReturnType<typeof setTimeout>>();\n const running = new Set<Animated.CompositeAnimation>();\n const later = (fn: () => void, ms: number) => {\n const id = setTimeout(() => {\n timers.delete(id);\n if (!disposed) fn();\n }, ms);\n timers.add(id);\n };\n const run = (animation: Animated.CompositeAnimation, done?: () => void) => {\n running.add(animation);\n animation.start(({ finished }) => {\n running.delete(animation);\n if (finished && !disposed) done?.();\n });\n };\n const rand = Math.random;\n const startedAt = Date.now();\n const active = () => AppState.currentState === 'active';\n let previous: MascotGesture | null = null;\n let isAwake = mode === 'working';\n let breathing: Animated.CompositeAnimation | null = null;\n\n const setAwake = (next: boolean) => {\n isAwake = next;\n run(\n Animated.timing(awake, {\n toValue: next ? 1 : 0,\n duration: WAKE_MS,\n easing: next ? Easing.bezier(0.34, 1.56, 0.64, 1) : Easing.out(Easing.ease),\n useNativeDriver: true,\n }),\n );\n breathing?.stop();\n breathing = null;\n if (next) {\n const body = breathingLoop(breathe);\n const hat = breathingLoop(hatNod);\n breathing = Animated.parallel([body, Animated.sequence([Animated.delay(140), hat])]);\n breathing.start();\n } else {\n breathe.setValue(0);\n hatNod.setValue(0);\n }\n };\n\n const play = (gesture: MascotGesture, done: () => void) => {\n previous = gesture;\n const total = GESTURE_MS[gesture];\n const tracks = GESTURE_TRACKS[gesture];\n run(\n Animated.parallel(\n (Object.keys(tracks) as Channel[]).map((channel) => track(v[channel], tracks[channel]!, total)),\n ),\n done,\n );\n };\n\n const blinkLoop = () =>\n later(() => {\n if (isAwake && active()) {\n const half = { duration: BLINK_MS / 2, useNativeDriver: true };\n run(\n Animated.sequence([\n Animated.timing(blink, { toValue: 0.08, ...half }),\n Animated.timing(blink, { toValue: 1, ...half }),\n ]),\n );\n }\n blinkLoop();\n }, blinkGapMs(rand));\n\n const start = () => {\n blinkLoop();\n if (mode === 'working') {\n setAwake(true);\n const next = () =>\n later(() => {\n if (!active()) return next();\n play(pickWorkingGesture(previous, Date.now() - startedAt, rand), next);\n }, workingGapMs(rand));\n next();\n return;\n }\n const peek = () => {\n if (active()) {\n setAwake(true);\n later(\n () => play(pickPeekGesture(previous, rand), () => later(() => setAwake(false), 450)),\n WAKE_MS,\n );\n }\n later(peek, peekGapMs(rand));\n };\n later(peek, firstPeekMs(rand));\n };\n\n // Reduced motion keeps the face (while working) but drops every movement.\n AccessibilityInfo.isReduceMotionEnabled()\n .catch(() => false)\n .then((reduce) => {\n if (disposed) return;\n if (reduce) {\n awake.setValue(mode === 'working' ? 1 : 0);\n return;\n }\n start();\n });\n\n return () => {\n disposed = true;\n timers.forEach(clearTimeout);\n running.forEach((animation) => animation.stop());\n breathing?.stop();\n (Object.keys(REST) as Channel[]).forEach((channel) => v[channel].setValue(REST[channel]));\n blink.setValue(1);\n };\n }, [mode, v, awake, breathe, hatNod, blink]);\n}\n\nexport default YantraMascot;\n"],"names":["at","px","deg","notHappy"],"mappings":"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"}
@@ -0,0 +1,76 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __defProps = Object.defineProperties;
3
+ var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
4
+ var __getOwnPropSymbols = Object.getOwnPropertySymbols;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __propIsEnum = Object.prototype.propertyIsEnumerable;
7
+ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
8
+ var __spreadValues = (a, b) => {
9
+ for (var prop in b || (b = {}))
10
+ if (__hasOwnProp.call(b, prop))
11
+ __defNormalProp(a, prop, b[prop]);
12
+ if (__getOwnPropSymbols)
13
+ for (var prop of __getOwnPropSymbols(b)) {
14
+ if (__propIsEnum.call(b, prop))
15
+ __defNormalProp(a, prop, b[prop]);
16
+ }
17
+ return a;
18
+ };
19
+ var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
20
+ const GESTURE_MS = {
21
+ glance: 1700,
22
+ think: 1900,
23
+ tap: 1400,
24
+ hop: 900,
25
+ tip: 1500,
26
+ dance: 2200
27
+ };
28
+ const BLINK_MS = 180;
29
+ const WAKE_MS = 320;
30
+ const WORKING_WEIGHTS = {
31
+ glance: 3,
32
+ think: 2.5,
33
+ tap: 2.5,
34
+ hop: 1.5,
35
+ tip: 1
36
+ };
37
+ const LONG_WAIT_MS = 12e3;
38
+ const LONG_WAIT_WEIGHTS = __spreadProps(__spreadValues({}, WORKING_WEIGHTS), {
39
+ dance: 1.5
40
+ });
41
+ const PEEK_WEIGHTS = {
42
+ glance: 3,
43
+ tip: 2,
44
+ hop: 1
45
+ };
46
+ function between(rand, min, max) {
47
+ return Math.round(min + rand() * (max - min));
48
+ }
49
+ function pickWeighted(weights, exclude, rand) {
50
+ const entries = Object.entries(weights).filter(([gesture, weight]) => weight > 0 && gesture !== exclude);
51
+ const total = entries.reduce((sum, [, weight]) => sum + weight, 0);
52
+ let roll = rand() * total;
53
+ for (const [gesture, weight] of entries) {
54
+ roll -= weight;
55
+ if (roll < 0) return gesture;
56
+ }
57
+ return entries[entries.length - 1][0];
58
+ }
59
+ function pickWorkingGesture(previous, elapsedMs, rand) {
60
+ return pickWeighted(elapsedMs >= LONG_WAIT_MS ? LONG_WAIT_WEIGHTS : WORKING_WEIGHTS, previous, rand);
61
+ }
62
+ function pickPeekGesture(previous, rand) {
63
+ return pickWeighted(PEEK_WEIGHTS, previous, rand);
64
+ }
65
+ function workingGapMs(rand) {
66
+ return between(rand, 1400, 2800);
67
+ }
68
+ function blinkGapMs(rand) {
69
+ return between(rand, 2200, 5200);
70
+ }
71
+ function firstPeekMs(rand) {
72
+ return between(rand, 2500, 5e3);
73
+ }
74
+ function peekGapMs(rand) {
75
+ return between(rand, 2e4, 4e4);
76
+ }export{BLINK_MS,GESTURE_MS,WAKE_MS,blinkGapMs,firstPeekMs,peekGapMs,pickPeekGesture,pickWorkingGesture,workingGapMs};//# sourceMappingURL=mascotChoreography.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mascotChoreography.js","sources":["../../../src/components/mascot/mascotChoreography.ts"],"sourcesContent":["/**\n * Timing and gesture choice for the Yantra mascot - the logo come to life.\n * Mirror of browser/src/components/mascot/mascotChoreography.ts; change both together.\n *\n * The mark reads as a little character: the blue top is a hat, the yellow\n * triangle a face (its round hole closes and two eyes open), the red and green\n * corners are feet. Pure logic, no DOM: the web component and the native port\n * both drive their own renderers from these tables, so the two move alike.\n */\n\nexport type MascotGesture = 'glance' | 'think' | 'tap' | 'hop' | 'tip' | 'dance';\n\n/** Run length of each gesture; the renderer clears it once this elapses. */\nexport const GESTURE_MS: Record<MascotGesture, number> = {\n glance: 1700,\n think: 1900,\n tap: 1400,\n hop: 900,\n tip: 1500,\n dance: 2200,\n};\n\nexport const BLINK_MS = 180;\n\n/** Face fade in/out when an idle logo wakes up or goes back to being the mark. */\nexport const WAKE_MS = 320;\n\ntype Weights = Partial<Record<MascotGesture, number>>;\n\n/** While the assistant works: mostly calm busy-ness, now and then a flourish. */\nconst WORKING_WEIGHTS: Weights = { glance: 3, think: 2.5, tap: 2.5, hop: 1.5, tip: 1 };\n\n/** A long wait earns a dance, so a slow turn still feels like it is moving. */\nconst LONG_WAIT_MS = 12000;\nconst LONG_WAIT_WEIGHTS: Weights = { ...WORKING_WEIGHTS, dance: 1.5 };\n\n/** A resting logo that wakes up only says hello: a look around or a hat tip. */\nconst PEEK_WEIGHTS: Weights = { glance: 3, tip: 2, hop: 1 };\n\nexport type Random = () => number;\n\nfunction between(rand: Random, min: number, max: number): number {\n return Math.round(min + rand() * (max - min));\n}\n\nfunction pickWeighted(weights: Weights, exclude: MascotGesture | null, rand: Random): MascotGesture {\n const entries = (Object.entries(weights) as [MascotGesture, number][]).filter(\n ([gesture, weight]) => weight > 0 && gesture !== exclude,\n );\n const total = entries.reduce((sum, [, weight]) => sum + weight, 0);\n let roll = rand() * total;\n for (const [gesture, weight] of entries) {\n roll -= weight;\n if (roll < 0) return gesture;\n }\n return entries[entries.length - 1][0];\n}\n\n/** Next working gesture; never the same one twice in a row. */\nexport function pickWorkingGesture(previous: MascotGesture | null, elapsedMs: number, rand: Random): MascotGesture {\n return pickWeighted(elapsedMs >= LONG_WAIT_MS ? LONG_WAIT_WEIGHTS : WORKING_WEIGHTS, previous, rand);\n}\n\nexport function pickPeekGesture(previous: MascotGesture | null, rand: Random): MascotGesture {\n return pickWeighted(PEEK_WEIGHTS, previous, rand);\n}\n\n/** Pause between working gestures: long enough to read as a rhythm, not a fidget. */\nexport function workingGapMs(rand: Random): number {\n return between(rand, 1400, 2800);\n}\n\n/** Time until the next blink - people blink every few seconds, never on a beat. */\nexport function blinkGapMs(rand: Random): number {\n return between(rand, 2200, 5200);\n}\n\n/** Delay before an idle logo peeks, and between peeks after that. */\nexport function firstPeekMs(rand: Random): number {\n return between(rand, 2500, 5000);\n}\n\n/** Rare on purpose: a logo that fidgets while someone reads is a distraction, not a delight. */\nexport function peekGapMs(rand: Random): number {\n return between(rand, 20000, 40000);\n}\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;AAaO,MAAM,UAA4C,GAAA;AAAA,EACvD,MAAQ,EAAA,IAAA;AAAA,EACR,KAAO,EAAA,IAAA;AAAA,EACP,GAAK,EAAA,IAAA;AAAA,EACL,GAAK,EAAA,GAAA;AAAA,EACL,GAAK,EAAA,IAAA;AAAA,EACL,KAAO,EAAA;AACT;AACO,MAAM,QAAW,GAAA;AAGjB,MAAM,OAAU,GAAA;AAIvB,MAAM,eAA2B,GAAA;AAAA,EAC/B,MAAQ,EAAA,CAAA;AAAA,EACR,KAAO,EAAA,GAAA;AAAA,EACP,GAAK,EAAA,GAAA;AAAA,EACL,GAAK,EAAA,GAAA;AAAA,EACL,GAAK,EAAA;AACP,CAAA;AAGA,MAAM,YAAe,GAAA,IAAA;AACrB,MAAM,iBAAA,GAA6B,iCAC9B,eAD8B,CAAA,EAAA;AAAA,EAEjC,KAAO,EAAA;AACT,CAAA,CAAA;AAGA,MAAM,YAAwB,GAAA;AAAA,EAC5B,MAAQ,EAAA,CAAA;AAAA,EACR,GAAK,EAAA,CAAA;AAAA,EACL,GAAK,EAAA;AACP,CAAA;AAEA,SAAS,OAAA,CAAQ,IAAc,EAAA,GAAA,EAAa,GAAqB,EAAA;AAC/D,EAAA,OAAO,KAAK,KAAM,CAAA,GAAA,GAAM,IAAK,EAAA,IAAK,MAAM,GAAI,CAAA,CAAA;AAC9C;AACA,SAAS,YAAA,CAAa,OAAkB,EAAA,OAAA,EAA+B,IAA6B,EAAA;AAClG,EAAA,MAAM,OAAW,GAAA,MAAA,CAAO,OAAQ,CAAA,OAAO,EAAgC,MAAO,CAAA,CAAC,CAAC,OAAA,EAAS,MAAM,CAAA,KAAM,MAAS,GAAA,CAAA,IAAK,YAAY,OAAO,CAAA;AACtI,EAAM,MAAA,KAAA,GAAQ,OAAQ,CAAA,MAAA,CAAO,CAAC,GAAA,EAAK,GAAG,MAAM,CAAA,KAAM,GAAM,GAAA,MAAA,EAAQ,CAAC,CAAA;AACjE,EAAI,IAAA,IAAA,GAAO,MAAS,GAAA,KAAA;AACpB,EAAA,KAAA,MAAW,CAAC,OAAA,EAAS,MAAM,CAAA,IAAK,OAAS,EAAA;AACvC,IAAQ,IAAA,IAAA,MAAA;AACR,IAAI,IAAA,IAAA,GAAO,GAAU,OAAA,OAAA;AAAA;AAEvB,EAAA,OAAO,OAAQ,CAAA,OAAA,CAAQ,MAAS,GAAA,CAAC,EAAE,CAAC,CAAA;AACtC;AAGgB,SAAA,kBAAA,CAAmB,QAAgC,EAAA,SAAA,EAAmB,IAA6B,EAAA;AACjH,EAAA,OAAO,aAAa,SAAa,IAAA,YAAA,GAAe,iBAAoB,GAAA,eAAA,EAAiB,UAAU,IAAI,CAAA;AACrG;AACgB,SAAA,eAAA,CAAgB,UAAgC,IAA6B,EAAA;AAC3F,EAAO,OAAA,YAAA,CAAa,YAAc,EAAA,QAAA,EAAU,IAAI,CAAA;AAClD;AAGO,SAAS,aAAa,IAAsB,EAAA;AACjD,EAAO,OAAA,OAAA,CAAQ,IAAM,EAAA,IAAA,EAAM,IAAI,CAAA;AACjC;AAGO,SAAS,WAAW,IAAsB,EAAA;AAC/C,EAAO,OAAA,OAAA,CAAQ,IAAM,EAAA,IAAA,EAAM,IAAI,CAAA;AACjC;AAGO,SAAS,YAAY,IAAsB,EAAA;AAChD,EAAO,OAAA,OAAA,CAAQ,IAAM,EAAA,IAAA,EAAM,GAAI,CAAA;AACjC;AAGO,SAAS,UAAU,IAAsB,EAAA;AAC9C,EAAO,OAAA,OAAA,CAAQ,IAAM,EAAA,GAAA,EAAO,GAAK,CAAA;AACnC"}
@@ -0,0 +1,72 @@
1
+ const REST = {
2
+ jumpY: 0,
3
+ sway: 0,
4
+ squashX: 1,
5
+ squashY: 1,
6
+ hatX: 0,
7
+ hatY: 0,
8
+ hatRot: 0,
9
+ hatFollowX: 0,
10
+ hatFollowY: 0,
11
+ footLY: 0,
12
+ footLRot: 0,
13
+ footRY: 0,
14
+ footRRot: 0,
15
+ lookX: 0,
16
+ lookY: 0,
17
+ happy: 0,
18
+ shadowScale: 1,
19
+ shadowFade: 1
20
+ };
21
+ const HAPPY = [[0, 0], [0.12, 0], [0.2, 1], [0.8, 1], [0.88, 0], [1, 0]];
22
+ const DANCE_BOUNCE = Array.from({
23
+ length: 17
24
+ }, (_, i) => [i / 16, i % 2 ? -8 : 0]);
25
+ const GESTURE_TRACKS = {
26
+ glance: {
27
+ lookX: [[0, 0], [0.16, -8], [0.42, -8], [0.58, 8], [0.84, 8], [1, 0]],
28
+ lookY: [[0, 0], [0.16, -1.5], [0.84, -1.5], [1, 0]],
29
+ sway: [[0, 0], [0.16, -2], [0.42, -2], [0.58, 2], [0.84, 2], [1, 0]]
30
+ },
31
+ think: {
32
+ lookX: [[0, 0], [0.18, 6], [0.82, 6], [1, 0]],
33
+ lookY: [[0, 0], [0.18, -3.5], [0.82, -3.5], [1, 0]],
34
+ hatY: [[0, 0], [0.22, -2], [0.78, -2], [1, 0]],
35
+ hatRot: [[0, 0], [0.22, 6], [0.78, 6], [1, 0]],
36
+ sway: [[0, 0], [0.22, 1.6], [0.78, 1.6], [1, 0]]
37
+ },
38
+ tap: {
39
+ footLY: [[0, 0], [0.12, -6], [0.24, 0], [0.5, 0], [0.62, -6], [0.74, 0], [1, 0]],
40
+ footLRot: [[0, 0], [0.12, 6], [0.24, 0], [0.5, 0], [0.62, 6], [0.74, 0], [1, 0]],
41
+ footRY: [[0, 0], [0.25, 0], [0.37, -6], [0.49, 0], [0.75, 0], [0.87, -6], [0.99, 0], [1, 0]],
42
+ footRRot: [[0, 0], [0.25, 0], [0.37, -6], [0.49, 0], [0.75, 0], [0.87, -6], [0.99, 0], [1, 0]],
43
+ sway: [[0, 0], [0.12, -1.6], [0.37, 1.6], [0.62, -1.6], [0.87, 1.6], [1, 0]],
44
+ lookY: [[0, 0], [0.12, 3], [0.88, 3], [1, 0]]
45
+ },
46
+ hop: {
47
+ jumpY: [[0, 0], [0.16, 0], [0.46, -26, "out"], [0.74, 0, "in"], [1, 0]],
48
+ squashX: [[0, 1], [0.14, 1.07], [0.28, 0.95], [0.46, 1], [0.76, 1.08], [0.88, 0.98], [1, 1]],
49
+ squashY: [[0, 1], [0.14, 0.88], [0.28, 1.08], [0.46, 1], [0.76, 0.88], [0.88, 1.03], [1, 1]],
50
+ hatFollowY: [[0, 0], [0.14, 3], [0.3, 6], [0.52, -7], [0.74, -4], [0.86, 3], [1, 0]],
51
+ shadowScale: [[0, 1], [0.16, 1], [0.46, 0.6, "out"], [0.74, 1, "in"], [1, 1]],
52
+ shadowFade: [[0, 1], [0.16, 1], [0.46, 0.55, "out"], [0.74, 1, "in"], [1, 1]],
53
+ happy: HAPPY
54
+ },
55
+ tip: {
56
+ hatX: [[0, 0], [0.22, -2], [0.62, -2], [0.82, 0], [1, 0]],
57
+ hatY: [[0, 0], [0.22, -19], [0.3, -16], [0.46, -17], [0.62, -16], [0.82, 2], [0.91, -1], [1, 0]],
58
+ hatRot: [[0, 0], [0.22, -15], [0.3, -11], [0.46, -13], [0.62, -11], [0.82, 1], [0.91, 0], [1, 0]],
59
+ sway: [[0, 0], [0.22, -2.5], [0.66, -2.5], [1, 0]],
60
+ happy: HAPPY
61
+ },
62
+ dance: {
63
+ sway: [[0, 0], [0.125, -6], [0.25, 0], [0.375, 6], [0.5, 0], [0.625, -6], [0.75, 0], [0.875, 6], [1, 0]],
64
+ jumpY: DANCE_BOUNCE,
65
+ footLY: [[0, 0], [0.25, 0], [0.375, -5], [0.5, 0], [0.75, 0], [0.875, -5], [1, 0]],
66
+ footLRot: [[0, 0], [0.25, 0], [0.375, 8], [0.5, 0], [0.75, 0], [0.875, 8], [1, 0]],
67
+ footRY: [[0, 0], [0.125, -5], [0.25, 0], [0.5, 0], [0.625, -5], [0.75, 0], [1, 0]],
68
+ footRRot: [[0, 0], [0.125, -8], [0.25, 0], [0.5, 0], [0.625, -8], [0.75, 0], [1, 0]],
69
+ hatFollowX: [[0, 0], [0.125, 3], [0.25, 0], [0.375, -3], [0.5, 0], [0.625, 3], [0.75, 0], [0.875, -3], [1, 0]],
70
+ happy: HAPPY
71
+ }
72
+ };export{GESTURE_TRACKS,REST};//# sourceMappingURL=mascotTracks.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mascotTracks.js","sources":["../../../src/components/mascot/mascotTracks.ts"],"sourcesContent":["/**\n * The mascot's gestures as keyframe tracks - the native twin of the @keyframes in\n * browser/src/components/mascot/yantraMascotCss.ts, so a hop on the phone is the\n * hop on the web. Each channel drives one transform of one layer.\n *\n * A keyframe is [at (0..1 of the gesture), value, easing of the segment that ends\n * here]. Translations are in the logo's own units (the renderer scales them to\n * pixels), rotations in degrees, scales as factors. Every track starts and ends\n * at its channel's rest value, so gestures chain without a jump.\n */\n\nimport type { MascotGesture } from './mascotChoreography';\n\nexport type Channel =\n | 'jumpY'\n | 'sway'\n | 'squashX'\n | 'squashY'\n | 'hatX'\n | 'hatY'\n | 'hatRot'\n | 'hatFollowX'\n | 'hatFollowY'\n | 'footLY'\n | 'footLRot'\n | 'footRY'\n | 'footRRot'\n | 'lookX'\n | 'lookY'\n | 'happy'\n | 'shadowScale'\n | 'shadowFade';\n\nexport type Ease = 'inOut' | 'in' | 'out';\nexport type Keyframe = readonly [at: number, value: number, ease?: Ease];\nexport type Tracks = Partial<Record<Channel, readonly Keyframe[]>>;\n\nexport const REST: Record<Channel, number> = {\n jumpY: 0,\n sway: 0,\n squashX: 1,\n squashY: 1,\n hatX: 0,\n hatY: 0,\n hatRot: 0,\n hatFollowX: 0,\n hatFollowY: 0,\n footLY: 0,\n footLRot: 0,\n footRY: 0,\n footRRot: 0,\n lookX: 0,\n lookY: 0,\n happy: 0,\n shadowScale: 1,\n shadowFade: 1,\n};\n\n/** Channels whose values are logo units and must be scaled to pixels. */\nexport const TRANSLATE_CHANNELS: ReadonlySet<Channel> = new Set([\n 'jumpY',\n 'hatX',\n 'hatY',\n 'hatFollowX',\n 'hatFollowY',\n 'footLY',\n 'footRY',\n 'lookX',\n 'lookY',\n]);\n\n/** Happy face (^^ eyes, blush, grin) through the middle of a gesture. */\nconst HAPPY: readonly Keyframe[] = [\n [0, 0],\n [0.12, 0],\n [0.2, 1],\n [0.8, 1],\n [0.88, 0],\n [1, 0],\n];\n\n/** A beat every eighth of the dance: down on the quarter marks, up between them. */\nconst DANCE_BOUNCE: readonly Keyframe[] = Array.from({ length: 17 }, (_, i) => [i / 16, i % 2 ? -8 : 0] as const);\n\nexport const GESTURE_TRACKS: Record<MascotGesture, Tracks> = {\n glance: {\n lookX: [\n [0, 0],\n [0.16, -8],\n [0.42, -8],\n [0.58, 8],\n [0.84, 8],\n [1, 0],\n ],\n lookY: [\n [0, 0],\n [0.16, -1.5],\n [0.84, -1.5],\n [1, 0],\n ],\n sway: [\n [0, 0],\n [0.16, -2],\n [0.42, -2],\n [0.58, 2],\n [0.84, 2],\n [1, 0],\n ],\n },\n think: {\n lookX: [\n [0, 0],\n [0.18, 6],\n [0.82, 6],\n [1, 0],\n ],\n lookY: [\n [0, 0],\n [0.18, -3.5],\n [0.82, -3.5],\n [1, 0],\n ],\n hatY: [\n [0, 0],\n [0.22, -2],\n [0.78, -2],\n [1, 0],\n ],\n hatRot: [\n [0, 0],\n [0.22, 6],\n [0.78, 6],\n [1, 0],\n ],\n sway: [\n [0, 0],\n [0.22, 1.6],\n [0.78, 1.6],\n [1, 0],\n ],\n },\n tap: {\n footLY: [\n [0, 0],\n [0.12, -6],\n [0.24, 0],\n [0.5, 0],\n [0.62, -6],\n [0.74, 0],\n [1, 0],\n ],\n footLRot: [\n [0, 0],\n [0.12, 6],\n [0.24, 0],\n [0.5, 0],\n [0.62, 6],\n [0.74, 0],\n [1, 0],\n ],\n footRY: [\n [0, 0],\n [0.25, 0],\n [0.37, -6],\n [0.49, 0],\n [0.75, 0],\n [0.87, -6],\n [0.99, 0],\n [1, 0],\n ],\n footRRot: [\n [0, 0],\n [0.25, 0],\n [0.37, -6],\n [0.49, 0],\n [0.75, 0],\n [0.87, -6],\n [0.99, 0],\n [1, 0],\n ],\n sway: [\n [0, 0],\n [0.12, -1.6],\n [0.37, 1.6],\n [0.62, -1.6],\n [0.87, 1.6],\n [1, 0],\n ],\n lookY: [\n [0, 0],\n [0.12, 3],\n [0.88, 3],\n [1, 0],\n ],\n },\n hop: {\n jumpY: [\n [0, 0],\n [0.16, 0],\n [0.46, -26, 'out'],\n [0.74, 0, 'in'],\n [1, 0],\n ],\n squashX: [\n [0, 1],\n [0.14, 1.07],\n [0.28, 0.95],\n [0.46, 1],\n [0.76, 1.08],\n [0.88, 0.98],\n [1, 1],\n ],\n squashY: [\n [0, 1],\n [0.14, 0.88],\n [0.28, 1.08],\n [0.46, 1],\n [0.76, 0.88],\n [0.88, 1.03],\n [1, 1],\n ],\n hatFollowY: [\n [0, 0],\n [0.14, 3],\n [0.3, 6],\n [0.52, -7],\n [0.74, -4],\n [0.86, 3],\n [1, 0],\n ],\n shadowScale: [\n [0, 1],\n [0.16, 1],\n [0.46, 0.6, 'out'],\n [0.74, 1, 'in'],\n [1, 1],\n ],\n shadowFade: [\n [0, 1],\n [0.16, 1],\n [0.46, 0.55, 'out'],\n [0.74, 1, 'in'],\n [1, 1],\n ],\n happy: HAPPY,\n },\n tip: {\n hatX: [\n [0, 0],\n [0.22, -2],\n [0.62, -2],\n [0.82, 0],\n [1, 0],\n ],\n hatY: [\n [0, 0],\n [0.22, -19],\n [0.3, -16],\n [0.46, -17],\n [0.62, -16],\n [0.82, 2],\n [0.91, -1],\n [1, 0],\n ],\n hatRot: [\n [0, 0],\n [0.22, -15],\n [0.3, -11],\n [0.46, -13],\n [0.62, -11],\n [0.82, 1],\n [0.91, 0],\n [1, 0],\n ],\n sway: [\n [0, 0],\n [0.22, -2.5],\n [0.66, -2.5],\n [1, 0],\n ],\n happy: HAPPY,\n },\n dance: {\n sway: [\n [0, 0],\n [0.125, -6],\n [0.25, 0],\n [0.375, 6],\n [0.5, 0],\n [0.625, -6],\n [0.75, 0],\n [0.875, 6],\n [1, 0],\n ],\n jumpY: DANCE_BOUNCE,\n footLY: [\n [0, 0],\n [0.25, 0],\n [0.375, -5],\n [0.5, 0],\n [0.75, 0],\n [0.875, -5],\n [1, 0],\n ],\n footLRot: [\n [0, 0],\n [0.25, 0],\n [0.375, 8],\n [0.5, 0],\n [0.75, 0],\n [0.875, 8],\n [1, 0],\n ],\n footRY: [\n [0, 0],\n [0.125, -5],\n [0.25, 0],\n [0.5, 0],\n [0.625, -5],\n [0.75, 0],\n [1, 0],\n ],\n footRRot: [\n [0, 0],\n [0.125, -8],\n [0.25, 0],\n [0.5, 0],\n [0.625, -8],\n [0.75, 0],\n [1, 0],\n ],\n hatFollowX: [\n [0, 0],\n [0.125, 3],\n [0.25, 0],\n [0.375, -3],\n [0.5, 0],\n [0.625, 3],\n [0.75, 0],\n [0.875, -3],\n [1, 0],\n ],\n happy: HAPPY,\n },\n};\n"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@adminide-stack/yantra-mobile",
3
- "version": "12.0.79",
3
+ "version": "12.0.80-alpha.0",
4
4
  "description": "Sample core for higher packages to depend on",
5
5
  "license": "ISC",
6
6
  "author": "CDMBase LLC",
@@ -26,7 +26,7 @@
26
26
  "uuid": "^9.0.0"
27
27
  },
28
28
  "devDependencies": {
29
- "common": "^12.0.79",
29
+ "common": "12.0.80-alpha.0",
30
30
  "libphonenumber-js": "^1.13.3"
31
31
  },
32
32
  "peerDependencies": {
@@ -43,7 +43,7 @@
43
43
  "@messenger-box/platform-mobile": "*",
44
44
  "@react-native-async-storage/async-storage": "*",
45
45
  "@react-navigation/native": "*",
46
- "common": "12.0.78",
46
+ "common": "12.0.79-alpha.1",
47
47
  "expo-constants": "*",
48
48
  "expo-secure-store": "*",
49
49
  "expo-web-browser": "*",
@@ -52,6 +52,7 @@
52
52
  "react-native-keyboard-controller": "*",
53
53
  "react-native-reanimated": "*",
54
54
  "react-native-safe-area-context": "*",
55
+ "react-native-svg": "*",
55
56
  "react-native-webview": "*"
56
57
  },
57
58
  "publishConfig": {
@@ -60,5 +61,5 @@
60
61
  "typescript": {
61
62
  "definition": "lib/index.d.ts"
62
63
  },
63
- "gitHead": "d5bf4635a8653cebed2991f1861d6175d8935169"
64
+ "gitHead": "f5fb2d3c71393576df74bd788a60ffe15b4043ba"
64
65
  }