@cuemath/leap 3.2.23-as1 → 3.2.23-m
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.
- package/dist/assets/illustrations/illustrations.js +0 -6
- package/dist/assets/illustrations/illustrations.js.map +1 -1
- package/dist/assets/images/images.js +0 -10
- package/dist/assets/images/images.js.map +1 -1
- package/dist/assets/lottie/lottie.js +1 -6
- package/dist/assets/lottie/lottie.js.map +1 -1
- package/dist/features/stickers/sticker-data.js +234 -0
- package/dist/features/stickers/sticker-data.js.map +1 -0
- package/dist/features/{ui/sticker-grid/sticker-grid-styles.js → stickers/sticker-selector/sticker-selector-styles.js} +21 -31
- package/dist/features/stickers/sticker-selector/sticker-selector-styles.js.map +1 -0
- package/dist/features/stickers/sticker-selector/sticker-selector.js +27 -0
- package/dist/features/stickers/sticker-selector/sticker-selector.js.map +1 -0
- package/dist/features/stickers/sticker-selector/sticker.js +57 -0
- package/dist/features/stickers/sticker-selector/sticker.js.map +1 -0
- package/dist/features/{ui/stickers/stickers-effects.js → stickers/stickers-effects/effects.js} +6 -6
- package/dist/features/stickers/stickers-effects/effects.js.map +1 -0
- package/dist/features/stickers/stickers-effects/stickers-cache.js +19 -0
- package/dist/features/stickers/stickers-effects/stickers-cache.js.map +1 -0
- package/dist/features/stickers/stickers-effects/stickers-effects-helper.js +86 -0
- package/dist/features/stickers/stickers-effects/stickers-effects-helper.js.map +1 -0
- package/dist/features/{ui/stickers/stickers-styled.js → stickers/stickers-effects/stickers-effects-styled.js} +2 -2
- package/dist/features/stickers/stickers-effects/stickers-effects-styled.js.map +1 -0
- package/dist/features/stickers/stickers-effects/stickers-effects.js +54 -0
- package/dist/features/stickers/stickers-effects/stickers-effects.js.map +1 -0
- package/dist/features/ui/constants/z-index.js +3 -5
- package/dist/features/ui/constants/z-index.js.map +1 -1
- package/dist/features/ui/dot-lottie-animations/dot-lottie-animation.js +88 -75
- package/dist/features/ui/dot-lottie-animations/dot-lottie-animation.js.map +1 -1
- package/dist/features/ui/lottie-animation/lottie-animation.js +36 -31
- package/dist/features/ui/lottie-animation/lottie-animation.js.map +1 -1
- package/dist/features/ui/modals/modal-styled.js +39 -8
- package/dist/features/ui/modals/modal-styled.js.map +1 -1
- package/dist/features/ui/modals/modal.js +31 -31
- package/dist/features/ui/modals/modal.js.map +1 -1
- package/dist/index.d.ts +72 -193
- package/dist/index.js +609 -617
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
- package/dist/assets/line-icons/icons/cue-coin.js +0 -182
- package/dist/assets/line-icons/icons/cue-coin.js.map +0 -1
- package/dist/assets/line-icons/icons/wins-common-icon.js +0 -26
- package/dist/assets/line-icons/icons/wins-common-icon.js.map +0 -1
- package/dist/assets/line-icons/icons/wins-epic-icon.js +0 -25
- package/dist/assets/line-icons/icons/wins-epic-icon.js.map +0 -1
- package/dist/assets/line-icons/icons/wins-legendary-icon.js +0 -25
- package/dist/assets/line-icons/icons/wins-legendary-icon.js.map +0 -1
- package/dist/assets/line-icons/icons/wins-mystery-icon.js +0 -105
- package/dist/assets/line-icons/icons/wins-mystery-icon.js.map +0 -1
- package/dist/assets/line-icons/icons/wins-mythic-icon.js +0 -28
- package/dist/assets/line-icons/icons/wins-mythic-icon.js.map +0 -1
- package/dist/assets/line-icons/icons/wins-rare-icon.js +0 -28
- package/dist/assets/line-icons/icons/wins-rare-icon.js.map +0 -1
- package/dist/features/ui/sticker-grid/sticker-grid-styles.js.map +0 -1
- package/dist/features/ui/sticker-grid/sticker-grid.js +0 -24
- package/dist/features/ui/sticker-grid/sticker-grid.js.map +0 -1
- package/dist/features/ui/sticker-grid/sticker.js +0 -57
- package/dist/features/ui/sticker-grid/sticker.js.map +0 -1
- package/dist/features/ui/stickers/constants.js +0 -6
- package/dist/features/ui/stickers/constants.js.map +0 -1
- package/dist/features/ui/stickers/stickers-effects.js.map +0 -1
- package/dist/features/ui/stickers/stickers-styled.js.map +0 -1
- package/dist/features/ui/stickers/stickers-utils.js +0 -91
- package/dist/features/ui/stickers/stickers-utils.js.map +0 -1
- package/dist/features/ui/stickers/stickers.js +0 -40
- package/dist/features/ui/stickers/stickers.js.map +0 -1
- package/dist/features/wins-dashboard/belts-elements-stickers/belts-elements-stickers.js +0 -108
- package/dist/features/wins-dashboard/belts-elements-stickers/belts-elements-stickers.js.map +0 -1
- package/dist/features/wins-dashboard/belts-elements-stickers/belts.js +0 -94
- package/dist/features/wins-dashboard/belts-elements-stickers/belts.js.map +0 -1
- package/dist/features/wins-dashboard/belts-elements-stickers/elements.js +0 -182
- package/dist/features/wins-dashboard/belts-elements-stickers/elements.js.map +0 -1
- package/dist/features/wins-dashboard/belts-elements-stickers/progress-bar-horizontal.js +0 -35
- package/dist/features/wins-dashboard/belts-elements-stickers/progress-bar-horizontal.js.map +0 -1
- package/dist/features/wins-dashboard/belts-elements-stickers/reward-elements.js +0 -82
- package/dist/features/wins-dashboard/belts-elements-stickers/reward-elements.js.map +0 -1
- package/dist/features/wins-dashboard/constants.js +0 -161
- package/dist/features/wins-dashboard/constants.js.map +0 -1
- package/dist/features/wins-dashboard/header/wins-header.js +0 -95
- package/dist/features/wins-dashboard/header/wins-header.js.map +0 -1
- package/dist/features/wins-dashboard/student-badges/animated-tabbar.js +0 -65
- package/dist/features/wins-dashboard/student-badges/animated-tabbar.js.map +0 -1
- package/dist/features/wins-dashboard/student-badges/hooks/use-student-badge-hook.js +0 -107
- package/dist/features/wins-dashboard/student-badges/hooks/use-student-badge-hook.js.map +0 -1
- package/dist/features/wins-dashboard/student-badges/hooks/use-student-badge-list-hook.js +0 -135
- package/dist/features/wins-dashboard/student-badges/hooks/use-student-badge-list-hook.js.map +0 -1
- package/dist/features/wins-dashboard/student-badges/student-badge.js +0 -161
- package/dist/features/wins-dashboard/student-badges/student-badge.js.map +0 -1
- package/dist/features/wins-dashboard/student-badges/student-badges-lists.js +0 -136
- package/dist/features/wins-dashboard/student-badges/student-badges-lists.js.map +0 -1
- package/dist/static/awesome.4239f583.json +0 -1
- package/dist/static/black-belt.81b3ebf9.png +0 -0
- package/dist/static/blue-belt.508a1b4b.png +0 -0
- package/dist/static/brown-belt.09bb7e93.png +0 -0
- package/dist/static/clapping-hands.17e7ecf0.json +0 -1
- package/dist/static/common.9e8ceef1.svg +0 -1
- package/dist/static/cool.cd6921bb.json +0 -1
- package/dist/static/epic.37a0265a.svg +0 -1
- package/dist/static/green-belt.5501296f.png +0 -0
- package/dist/static/legendary.f15d09ca.svg +0 -1
- package/dist/static/like-button.281a2618.json +0 -1
- package/dist/static/mastered-badge.91d25e92.png +0 -0
- package/dist/static/mystery.81ada5fb.svg +0 -1
- package/dist/static/mythic.58ba0ae0.svg +0 -1
- package/dist/static/orange-belt.1fefcc8c.png +0 -0
- package/dist/static/purple-belt.e15611b4.png +0 -0
- package/dist/static/rare.1ffaa311.svg +0 -1
- package/dist/static/red-belt.11f841d9.png +0 -0
- package/dist/static/star-strike-emoji.c0b31028.json +0 -1
- package/dist/static/trophy.5ef1853a.json +0 -1
- package/dist/static/white-belt.ea93103e.png +0 -0
- package/dist/static/yellow-belt.0c47b8cc.png +0 -0
@@ -0,0 +1,27 @@
|
|
1
|
+
import { jsx as t } from "react/jsx-runtime";
|
2
|
+
import { memo as d } from "react";
|
3
|
+
import { stickerData as l } from "../sticker-data.js";
|
4
|
+
import f from "./sticker.js";
|
5
|
+
import { StickerGridContainer as h, StickerGrid as n } from "./sticker-selector-styles.js";
|
6
|
+
const s = ({
|
7
|
+
stickers: e = l,
|
8
|
+
columns: m = 4,
|
9
|
+
gap: i = 8,
|
10
|
+
stickerSize: p = 72,
|
11
|
+
onStickerClick: o,
|
12
|
+
disabled: a
|
13
|
+
}) => /* @__PURE__ */ t(h, { $width: "350px", $height: "400px", children: /* @__PURE__ */ t(n, { $columns: m, $gap: i, children: e.map((r) => /* @__PURE__ */ t(
|
14
|
+
f,
|
15
|
+
{
|
16
|
+
emoji: r.emoji,
|
17
|
+
lottieUrl: r.lottieUrl,
|
18
|
+
size: p,
|
19
|
+
onClick: () => o == null ? void 0 : o(r),
|
20
|
+
disabled: a
|
21
|
+
},
|
22
|
+
r.id
|
23
|
+
)) }) }), g = d(s);
|
24
|
+
export {
|
25
|
+
g as default
|
26
|
+
};
|
27
|
+
//# sourceMappingURL=sticker-selector.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"sticker-selector.js","sources":["../../../../src/features/stickers/sticker-selector/sticker-selector.tsx"],"sourcesContent":["import type { IStickerSelectorProps } from './sticker-selector-types';\n\nimport React, { memo } from 'react';\n\nimport { stickerData } from '../sticker-data';\nimport Sticker from './sticker';\nimport * as S from './sticker-selector-styles';\n\nconst StickerSelector: React.FC<IStickerSelectorProps> = ({\n stickers = stickerData,\n columns = 4,\n gap = 8,\n stickerSize = 72,\n onStickerClick,\n disabled,\n}) => {\n return (\n <S.StickerGridContainer $width=\"350px\" $height=\"400px\">\n <S.StickerGrid $columns={columns} $gap={gap}>\n {stickers.map(sticker => (\n <Sticker\n key={sticker.id}\n emoji={sticker.emoji}\n lottieUrl={sticker.lottieUrl}\n size={stickerSize}\n onClick={() => onStickerClick?.(sticker)}\n disabled={disabled}\n />\n ))}\n </S.StickerGrid>\n </S.StickerGridContainer>\n );\n};\n\nexport default memo(StickerSelector);\n"],"names":["StickerSelector","stickers","stickerData","columns","gap","stickerSize","onStickerClick","disabled","S.StickerGridContainer","jsx","S.StickerGrid","sticker","Sticker","stickerSelector","memo"],"mappings":";;;;;AAQA,MAAMA,IAAmD,CAAC;AAAA,EACxD,UAAAC,IAAWC;AAAA,EACX,SAAAC,IAAU;AAAA,EACV,KAAAC,IAAM;AAAA,EACN,aAAAC,IAAc;AAAA,EACd,gBAAAC;AAAA,EACA,UAAAC;AACF,wBAEKC,GAAA,EAAuB,QAAO,SAAQ,SAAQ,SAC7C,UAAA,gBAAAC,EAACC,GAAA,EAAc,UAAUP,GAAS,MAAMC,GACrC,UAAAH,EAAS,IAAI,CACZU,MAAA,gBAAAF;AAAA,EAACG;AAAA,EAAA;AAAA,IAEC,OAAOD,EAAQ;AAAA,IACf,WAAWA,EAAQ;AAAA,IACnB,MAAMN;AAAA,IACN,SAAS,MAAMC,KAAA,gBAAAA,EAAiBK;AAAA,IAChC,UAAAJ;AAAA,EAAA;AAAA,EALKI,EAAQ;AAAA,CAOhB,GACH,EACF,CAAA,GAIWE,IAAAC,EAAKd,CAAe;"}
|
@@ -0,0 +1,57 @@
|
|
1
|
+
import { jsxs as S, jsx as i } from "react/jsx-runtime";
|
2
|
+
import { memo as $, useState as f, useRef as L, useCallback as n, useEffect as g } from "react";
|
3
|
+
import k from "../../ui/lottie-animation/lottie-animation.js";
|
4
|
+
import { StickerContainer as E, StaticEmoji as R, LottieContainer as j } from "./sticker-selector-styles.js";
|
5
|
+
const x = ({
|
6
|
+
emoji: l,
|
7
|
+
lottieUrl: c,
|
8
|
+
size: o = 48,
|
9
|
+
onClick: s,
|
10
|
+
disabled: e = !1
|
11
|
+
}) => {
|
12
|
+
const [a, m] = f(!1), [t, u] = f(!1), r = L(null), p = n(() => {
|
13
|
+
r.current && (r.current.goToAndStop(0, !0), m(!0), t && r.current.play());
|
14
|
+
}, [t]);
|
15
|
+
g(() => {
|
16
|
+
!r.current || !a || (t ? r.current.play() : r.current.goToAndStop(0, !0));
|
17
|
+
}, [t, a]);
|
18
|
+
const d = n(() => {
|
19
|
+
e || u(!0);
|
20
|
+
}, [e]), h = n(() => {
|
21
|
+
e || u(!1);
|
22
|
+
}, [e]), v = n(() => {
|
23
|
+
!e && s && s();
|
24
|
+
}, [e, s]);
|
25
|
+
return /* @__PURE__ */ S(
|
26
|
+
E,
|
27
|
+
{
|
28
|
+
$size: o,
|
29
|
+
$disabled: e,
|
30
|
+
onPointerEnter: d,
|
31
|
+
onPointerLeave: h,
|
32
|
+
onClick: v,
|
33
|
+
children: [
|
34
|
+
!t && /* @__PURE__ */ i(R, { $size: o, $visible: !t, children: l }),
|
35
|
+
/* @__PURE__ */ i(j, { $size: o, $visible: t, children: c && /* @__PURE__ */ i(
|
36
|
+
k,
|
37
|
+
{
|
38
|
+
ref: r,
|
39
|
+
src: c,
|
40
|
+
width: "100%",
|
41
|
+
height: "100%",
|
42
|
+
settings: {
|
43
|
+
loop: !0,
|
44
|
+
autoplay: !1,
|
45
|
+
renderer: "canvas"
|
46
|
+
},
|
47
|
+
onRender: p
|
48
|
+
}
|
49
|
+
) })
|
50
|
+
]
|
51
|
+
}
|
52
|
+
);
|
53
|
+
}, I = $(x);
|
54
|
+
export {
|
55
|
+
I as default
|
56
|
+
};
|
57
|
+
//# sourceMappingURL=sticker.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"sticker.js","sources":["../../../../src/features/stickers/sticker-selector/sticker.tsx"],"sourcesContent":["import type { ILottieAnimationRef } from '../../ui/lottie-animation/types';\nimport type { IStickerProps } from './sticker-selector-types';\n\nimport React, { memo, useCallback, useEffect, useRef, useState } from 'react';\n\nimport LottieAnimation from '../../ui/lottie-animation/lottie-animation';\nimport * as S from './sticker-selector-styles';\n\nconst Sticker: React.FC<IStickerProps> = ({\n emoji,\n lottieUrl,\n size = 48,\n onClick,\n disabled = false,\n}) => {\n const [isLoaded, setIsLoaded] = useState(false);\n const [isHovered, setIsHovered] = useState(false);\n const lottieRef = useRef<ILottieAnimationRef>(null);\n\n const handleRender = useCallback(() => {\n if (!lottieRef.current) return;\n\n lottieRef.current.goToAndStop(0, true);\n setIsLoaded(true);\n\n if (isHovered) lottieRef.current.play();\n }, [isHovered]);\n\n useEffect(() => {\n if (!lottieRef.current || !isLoaded) return;\n\n if (isHovered) {\n lottieRef.current.play();\n } else {\n lottieRef.current.goToAndStop(0, true);\n }\n }, [isHovered, isLoaded]);\n\n const handleMouseEnter = useCallback(() => {\n if (!disabled) setIsHovered(true);\n }, [disabled]);\n\n const handleMouseLeave = useCallback(() => {\n if (!disabled) setIsHovered(false);\n }, [disabled]);\n\n const handleClick = useCallback(() => {\n if (!disabled && onClick) onClick();\n }, [disabled, onClick]);\n\n return (\n <S.StickerContainer\n $size={size}\n $disabled={disabled}\n onPointerEnter={handleMouseEnter}\n onPointerLeave={handleMouseLeave}\n onClick={handleClick}\n >\n {!isHovered && (\n <S.StaticEmoji $size={size} $visible={!isHovered}>\n {emoji}\n </S.StaticEmoji>\n )}\n\n <S.LottieContainer $size={size} $visible={isHovered}>\n {lottieUrl && (\n <LottieAnimation\n ref={lottieRef}\n src={lottieUrl}\n width=\"100%\"\n height=\"100%\"\n settings={{\n loop: true,\n autoplay: false,\n renderer: 'canvas',\n }}\n onRender={handleRender}\n />\n )}\n </S.LottieContainer>\n </S.StickerContainer>\n );\n};\n\nexport default memo(Sticker);\n"],"names":["Sticker","emoji","lottieUrl","size","onClick","disabled","isLoaded","setIsLoaded","useState","isHovered","setIsHovered","lottieRef","useRef","handleRender","useCallback","useEffect","handleMouseEnter","handleMouseLeave","handleClick","jsxs","S.StickerContainer","jsx","S.StaticEmoji","S.LottieContainer","LottieAnimation","Sticker$1","memo"],"mappings":";;;;AAQA,MAAMA,IAAmC,CAAC;AAAA,EACxC,OAAAC;AAAA,EACA,WAAAC;AAAA,EACA,MAAAC,IAAO;AAAA,EACP,SAAAC;AAAA,EACA,UAAAC,IAAW;AACb,MAAM;AACJ,QAAM,CAACC,GAAUC,CAAW,IAAIC,EAAS,EAAK,GACxC,CAACC,GAAWC,CAAY,IAAIF,EAAS,EAAK,GAC1CG,IAAYC,EAA4B,IAAI,GAE5CC,IAAeC,EAAY,MAAM;AACjC,IAACH,EAAU,YAELA,EAAA,QAAQ,YAAY,GAAG,EAAI,GACrCJ,EAAY,EAAI,GAEZE,KAAqBE,EAAA,QAAQ,KAAK;AAAA,EAAA,GACrC,CAACF,CAAS,CAAC;AAEd,EAAAM,EAAU,MAAM;AACd,IAAI,CAACJ,EAAU,WAAW,CAACL,MAEvBG,IACFE,EAAU,QAAQ,SAERA,EAAA,QAAQ,YAAY,GAAG,EAAI;AAAA,EACvC,GACC,CAACF,GAAWH,CAAQ,CAAC;AAElB,QAAAU,IAAmBF,EAAY,MAAM;AACrC,IAACT,KAAUK,EAAa,EAAI;AAAA,EAAA,GAC/B,CAACL,CAAQ,CAAC,GAEPY,IAAmBH,EAAY,MAAM;AACrC,IAACT,KAAUK,EAAa,EAAK;AAAA,EAAA,GAChC,CAACL,CAAQ,CAAC,GAEPa,IAAcJ,EAAY,MAAM;AAChC,IAAA,CAACT,KAAYD,KAAiBA;EAAA,GACjC,CAACC,GAAUD,CAAO,CAAC;AAGpB,SAAA,gBAAAe;AAAA,IAACC;AAAAA,IAAA;AAAA,MACC,OAAOjB;AAAA,MACP,WAAWE;AAAA,MACX,gBAAgBW;AAAA,MAChB,gBAAgBC;AAAA,MAChB,SAASC;AAAA,MAER,UAAA;AAAA,QAAC,CAAAT,KACC,gBAAAY,EAAAC,GAAA,EAAc,OAAOnB,GAAM,UAAU,CAACM,GACpC,UACHR,EAAA,CAAA;AAAA,QAGF,gBAAAoB,EAACE,GAAA,EAAkB,OAAOpB,GAAM,UAAUM,GACvC,UACCP,KAAA,gBAAAmB;AAAA,UAACG;AAAA,UAAA;AAAA,YACC,KAAKb;AAAA,YACL,KAAKT;AAAA,YACL,OAAM;AAAA,YACN,QAAO;AAAA,YACP,UAAU;AAAA,cACR,MAAM;AAAA,cACN,UAAU;AAAA,cACV,UAAU;AAAA,YACZ;AAAA,YACA,UAAUW;AAAA,UAAA;AAAA,QAAA,GAGhB;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAGN,GAEeY,IAAAC,EAAK1B,CAAO;"}
|
package/dist/features/{ui/stickers/stickers-effects.js → stickers/stickers-effects/effects.js}
RENAMED
@@ -1,5 +1,5 @@
|
|
1
1
|
import { keyframes as r, css as t } from "styled-components";
|
2
|
-
import { randomizeDuration as o } from "./stickers-
|
2
|
+
import { randomizeDuration as o } from "./stickers-effects-helper.js";
|
3
3
|
const s = r`
|
4
4
|
0% {
|
5
5
|
transform: translateY(0vh);
|
@@ -45,20 +45,20 @@ const s = r`
|
|
45
45
|
opacity: 0;
|
46
46
|
}
|
47
47
|
`, i = {
|
48
|
-
|
48
|
+
"float-up": (a) => t`
|
49
49
|
animation: ${s} ${o(a)}ms ease-out forwards;
|
50
50
|
`,
|
51
|
-
|
51
|
+
"fall-down": (a) => t`
|
52
52
|
animation: ${n} ${o(a)}ms ease-out forwards;
|
53
53
|
`,
|
54
|
-
|
54
|
+
"burst-from-edges": (a) => t`
|
55
55
|
animation: ${e} ${o(a)}ms linear forwards;
|
56
56
|
`,
|
57
|
-
|
57
|
+
"pop-expand": (a) => t`
|
58
58
|
animation: ${m} ${a}ms cubic-bezier(0.5, 0.1, 0.7, 1) forwards;
|
59
59
|
`
|
60
60
|
};
|
61
61
|
export {
|
62
62
|
i as effectAnimations
|
63
63
|
};
|
64
|
-
//# sourceMappingURL=
|
64
|
+
//# sourceMappingURL=effects.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"effects.js","sources":["../../../../src/features/stickers/stickers-effects/effects.ts"],"sourcesContent":["import type { IStickersProps } from './stickers-effects-types';\n\nimport { keyframes, css } from 'styled-components';\n\nimport { randomizeDuration } from './stickers-effects-helper';\n\nconst floatUp = keyframes`\n 0% {\n transform: translateY(0vh);\n opacity: 1;\n }\n 100% {\n transform: translateY(-100vh);\n opacity: 0;\n }\n`;\n\nconst fallDown = keyframes`\n 0% {\n transform: translateY(0vh);\n opacity: 1;\n }\n 100% {\n transform: translateY(100vh);\n opacity: 0;\n }\n`;\n\nconst burstFromEdges = keyframes`\n 0% {\n transform: translateX(var(--from-x)) translateY(var(--from-y)) scale(1);\n opacity: 1;\n }\n 100% {\n transform: translateX(0vw) translateY(0vh) scale(1.25);\n opacity: 0;\n }\n`;\n\nconst popExpand = keyframes`\n 0% {\n transform: translateX(0) translateY(0vh);\n opacity: 1;\n }\n 35% {\n transform: translateX(0) translateY(-50vh) scale(1.25);\n opacity: 1;\n }\n 60% {\n transform: translateX(var(--from-x)) translateY(var(--from-y)) scale(1.25);\n opacity: 0.75;\n }\n 100% {\n transform: translateX(var(--from-x)) translateY(-110vh) scale(1.25);\n opacity: 0;\n }\n`;\n\nexport const effectAnimations: Record<\n IStickersProps['effect'],\n (duration: number) => ReturnType<typeof css>\n> = {\n 'float-up': (duration: number) => css`\n animation: ${floatUp} ${randomizeDuration(duration)}ms ease-out forwards;\n `,\n 'fall-down': (duration: number) => css`\n animation: ${fallDown} ${randomizeDuration(duration)}ms ease-out forwards;\n `,\n 'burst-from-edges': (duration: number) => css`\n animation: ${burstFromEdges} ${randomizeDuration(duration)}ms linear forwards;\n `,\n 'pop-expand': (duration: number) => css`\n animation: ${popExpand} ${duration}ms cubic-bezier(0.5, 0.1, 0.7, 1) forwards;\n `,\n};\n"],"names":["floatUp","keyframes","fallDown","burstFromEdges","popExpand","effectAnimations","duration","css","randomizeDuration"],"mappings":";;AAMA,MAAMA,IAAUC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAWVC,IAAWD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAWXE,IAAiBF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAWjBG,IAAYH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAmBLI,IAGT;AAAA,EACF,YAAY,CAACC,MAAqBC;AAAA,iBACnBP,CAAO,IAAIQ,EAAkBF,CAAQ,CAAC;AAAA;AAAA,EAErD,aAAa,CAACA,MAAqBC;AAAA,iBACpBL,CAAQ,IAAIM,EAAkBF,CAAQ,CAAC;AAAA;AAAA,EAEtD,oBAAoB,CAACA,MAAqBC;AAAA,iBAC3BJ,CAAc,IAAIK,EAAkBF,CAAQ,CAAC;AAAA;AAAA,EAE5D,cAAc,CAACA,MAAqBC;AAAA,iBACrBH,CAAS,IAAIE,CAAQ;AAAA;AAEtC;"}
|
@@ -0,0 +1,19 @@
|
|
1
|
+
const o = /* @__PURE__ */ new Map(), n = /* @__PURE__ */ new Map();
|
2
|
+
async function r(t) {
|
3
|
+
if (o.has(t))
|
4
|
+
return o.get(t);
|
5
|
+
if (n.has(t))
|
6
|
+
return n.get(t);
|
7
|
+
const i = fetch(t).then(async (e) => {
|
8
|
+
if (!e.ok) return null;
|
9
|
+
const a = t.endsWith(".lottie") ? await e.arrayBuffer() : await e.json();
|
10
|
+
return o.set(t, a), a;
|
11
|
+
}).catch((e) => (console.error("Lottie preload error:", e), null)).finally(() => {
|
12
|
+
n.delete(t);
|
13
|
+
});
|
14
|
+
return n.set(t, i), i;
|
15
|
+
}
|
16
|
+
export {
|
17
|
+
r as preloadLottieFile
|
18
|
+
};
|
19
|
+
//# sourceMappingURL=stickers-cache.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"stickers-cache.js","sources":["../../../../src/features/stickers/stickers-effects/stickers-cache.ts"],"sourcesContent":["import type { Data } from '@lottiefiles/dotlottie-web';\n\nconst lottieCache = new Map<string, Data>();\nconst lottiePromises = new Map<string, Promise<Data | null>>();\n\nexport async function preloadLottieFile(url: string): Promise<Data | null> {\n if (lottieCache.has(url)) {\n return lottieCache.get(url)!;\n }\n\n if (lottiePromises.has(url)) {\n return lottiePromises.get(url)!;\n }\n\n const fetchPromise = fetch(url)\n .then(async res => {\n if (!res.ok) return null;\n\n const isLottieFile = url.endsWith('.lottie');\n const data = isLottieFile ? await res.arrayBuffer() : await res.json();\n\n lottieCache.set(url, data);\n\n return data;\n })\n .catch(err => {\n // eslint-disable-next-line no-console\n console.error('Lottie preload error:', err);\n\n return null;\n })\n .finally(() => {\n lottiePromises.delete(url);\n });\n\n lottiePromises.set(url, fetchPromise);\n\n return fetchPromise;\n}\n"],"names":["lottieCache","lottiePromises","preloadLottieFile","url","fetchPromise","res","data","err"],"mappings":"AAEA,MAAMA,wBAAkB,OAClBC,wBAAqB;AAE3B,eAAsBC,EAAkBC,GAAmC;AACrE,MAAAH,EAAY,IAAIG,CAAG;AACd,WAAAH,EAAY,IAAIG,CAAG;AAGxB,MAAAF,EAAe,IAAIE,CAAG;AACjB,WAAAF,EAAe,IAAIE,CAAG;AAG/B,QAAMC,IAAe,MAAMD,CAAG,EAC3B,KAAK,OAAME,MAAO;AACb,QAAA,CAACA,EAAI,GAAW,QAAA;AAGd,UAAAC,IADeH,EAAI,SAAS,SAAS,IACf,MAAME,EAAI,gBAAgB,MAAMA,EAAI;AAEpD,WAAAL,EAAA,IAAIG,GAAKG,CAAI,GAElBA;AAAA,EAAA,CACR,EACA,MAAM,CAAOC,OAEJ,QAAA,MAAM,yBAAyBA,CAAG,GAEnC,KACR,EACA,QAAQ,MAAM;AACb,IAAAN,EAAe,OAAOE,CAAG;AAAA,EAAA,CAC1B;AAEY,SAAAF,EAAA,IAAIE,GAAKC,CAAY,GAE7BA;AACT;"}
|
@@ -0,0 +1,86 @@
|
|
1
|
+
import { stickerData as b } from "../sticker-data.js";
|
2
|
+
const w = (o, e) => {
|
3
|
+
const t = Math.ceil(e / 4), a = Math.floor(o / t), h = o % t, p = ["top", "right", "bottom", "left"][a] ?? "left", r = (h + 0.5) / t * 100, m = (Math.random() - 0.5) * 25, s = Math.min(Math.max(r + m, 0), 100), c = 45 + Math.random() * 10, i = 45 + Math.random() * 10;
|
4
|
+
let d = 0, n = 0;
|
5
|
+
switch (p) {
|
6
|
+
case "top":
|
7
|
+
d = s - c, n = -i + m;
|
8
|
+
break;
|
9
|
+
case "right":
|
10
|
+
d = 100 - c + m, n = s - i;
|
11
|
+
break;
|
12
|
+
case "bottom":
|
13
|
+
d = s - c, n = 100 - i + m;
|
14
|
+
break;
|
15
|
+
case "left":
|
16
|
+
d = -c + m, n = s - i;
|
17
|
+
break;
|
18
|
+
}
|
19
|
+
return {
|
20
|
+
fromX: `${d}vw`,
|
21
|
+
fromY: `${n}vh`,
|
22
|
+
x: c,
|
23
|
+
y: i
|
24
|
+
};
|
25
|
+
}, v = (o, e = 10) => {
|
26
|
+
const t = [];
|
27
|
+
let a = 0;
|
28
|
+
const h = o;
|
29
|
+
for (; t.length < o && a < h; ) {
|
30
|
+
const l = Math.floor(Math.random() * (100 - 2 * e) + e);
|
31
|
+
t.every((p) => Math.abs(p - l) >= e) && t.push(l), a++;
|
32
|
+
}
|
33
|
+
for (; t.length < o; )
|
34
|
+
t.push(Math.floor(Math.random() * (100 - 2 * e) + e));
|
35
|
+
return t;
|
36
|
+
};
|
37
|
+
function P({
|
38
|
+
count: o,
|
39
|
+
effect: e,
|
40
|
+
stickers: t,
|
41
|
+
minSize: a,
|
42
|
+
maxSize: h
|
43
|
+
}) {
|
44
|
+
const l = 100 / o * 2, p = () => Math.random() * (h - a) + a, r = [], m = ["float-up", "fall-down"].includes(e) ? v(o, l) : [];
|
45
|
+
for (let s = 0; s < o; s++) {
|
46
|
+
const c = t[s % t.length] ?? "", { emoji: i = "", lottieUrl: d } = b.find(({ id: f }) => f === c) || {}, n = p(), u = m[s], M = { id: c, sticker: i, lottie: d, size: n };
|
47
|
+
switch (e) {
|
48
|
+
case "float-up":
|
49
|
+
r.push({ ...M, x: u, y: 110 + (Math.random() - 0.5) * n });
|
50
|
+
break;
|
51
|
+
case "fall-down":
|
52
|
+
r.push({ ...M, x: u, y: -10 + (Math.random() - 0.5) * n });
|
53
|
+
break;
|
54
|
+
case "burst-from-edges": {
|
55
|
+
const { x: f, y: x, fromX: g, fromY: k } = w(s, o);
|
56
|
+
r.push({ ...M, x: f, y: x, fromX: g, fromY: k, size: n });
|
57
|
+
break;
|
58
|
+
}
|
59
|
+
case "pop-expand":
|
60
|
+
r.push({
|
61
|
+
...M,
|
62
|
+
x: 50,
|
63
|
+
y: 100,
|
64
|
+
fromX: `${(Math.random() - 0.5) * 27.5}vw`,
|
65
|
+
fromY: `${-50 - Math.random() * 27.5}vh`
|
66
|
+
});
|
67
|
+
break;
|
68
|
+
default:
|
69
|
+
r.push({
|
70
|
+
...M,
|
71
|
+
x: Math.random() * 100,
|
72
|
+
y: Math.random() * 100
|
73
|
+
});
|
74
|
+
}
|
75
|
+
}
|
76
|
+
return r;
|
77
|
+
}
|
78
|
+
const X = (o, e = 0.2) => {
|
79
|
+
const t = o * e, a = o - t, h = o + t;
|
80
|
+
return Math.floor(Math.random() * (h - a + 1)) + a;
|
81
|
+
};
|
82
|
+
export {
|
83
|
+
P as generateStickerData,
|
84
|
+
X as randomizeDuration
|
85
|
+
};
|
86
|
+
//# sourceMappingURL=stickers-effects-helper.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"stickers-effects-helper.js","sources":["../../../../src/features/stickers/stickers-effects/stickers-effects-helper.ts"],"sourcesContent":["import type { TStickerData, IStickersProps } from './stickers-effects-types';\n\nimport { stickerData } from '../sticker-data';\n\nconst getBurstPosition = (\n index: number,\n total: number,\n): {\n fromX: string;\n fromY: string;\n x: number;\n y: number;\n} => {\n const countPerSide = Math.ceil(total / 4);\n const sideIndex = Math.floor(index / countPerSide);\n const pos = index % countPerSide;\n\n const sides = ['top', 'right', 'bottom', 'left'] as const;\n const side = sides[sideIndex] ?? 'left';\n\n const basePercent = ((pos + 0.5) / countPerSide) * 100;\n const jitter = (Math.random() - 0.5) * 25;\n const edgePercent = Math.min(Math.max(basePercent + jitter, 0), 100);\n\n const centerX = 45 + Math.random() * 10;\n const centerY = 45 + Math.random() * 10;\n\n let fromX = 0;\n let fromY = 0;\n\n switch (side) {\n case 'top':\n fromX = edgePercent - centerX;\n fromY = -centerY + jitter;\n break;\n case 'right':\n fromX = 100 - centerX + jitter;\n fromY = edgePercent - centerY;\n break;\n case 'bottom':\n fromX = edgePercent - centerX;\n fromY = 100 - centerY + jitter;\n break;\n case 'left':\n fromX = -centerX + jitter;\n fromY = edgePercent - centerY;\n break;\n }\n\n return {\n fromX: `${fromX}vw`,\n fromY: `${fromY}vh`,\n x: centerX,\n y: centerY,\n };\n};\n\nconst getRandomNonOverlappingPositions = (count: number, buffer = 10): number[] => {\n const used: number[] = [];\n let attempts = 0;\n const maxAttempts = count;\n\n while (used.length < count && attempts < maxAttempts) {\n const value = Math.floor(Math.random() * (100 - 2 * buffer) + buffer);\n\n if (used.every(v => Math.abs(v - value) >= buffer)) {\n used.push(value);\n }\n attempts++;\n }\n\n while (used.length < count) {\n used.push(Math.floor(Math.random() * (100 - 2 * buffer) + buffer));\n }\n\n return used;\n};\n\nexport function generateStickerData({\n count,\n effect,\n stickers,\n minSize,\n maxSize,\n}: {\n count: number;\n effect: IStickersProps['effect'];\n stickers: string[];\n minSize: number;\n maxSize: number;\n}): TStickerData[] {\n const buffer = (100 / count) * 2;\n const getSize = () => Math.random() * (maxSize - minSize) + minSize;\n const result: TStickerData[] = [];\n const xPositions = ['float-up', 'fall-down'].includes(effect)\n ? getRandomNonOverlappingPositions(count, buffer)\n : [];\n\n for (let i = 0; i < count; i++) {\n const stickerId = stickers[i % stickers.length] ?? '';\n const { emoji: sticker = '', lottieUrl: lottie } =\n stickerData.find(({ id }) => id === stickerId) || {};\n\n const size = getSize();\n const x = xPositions[i]!;\n const common = { id: stickerId, sticker, lottie, size };\n\n switch (effect) {\n case 'float-up':\n result.push({ ...common, x, y: 110 + (Math.random() - 0.5) * size });\n break;\n\n case 'fall-down':\n result.push({ ...common, x, y: -10 + (Math.random() - 0.5) * size });\n break;\n\n case 'burst-from-edges': {\n // eslint-disable-next-line @typescript-eslint/no-shadow\n const { x, y, fromX, fromY } = getBurstPosition(i, count);\n\n result.push({ ...common, x, y, fromX, fromY, size });\n break;\n }\n\n case 'pop-expand':\n result.push({\n ...common,\n x: 50,\n y: 100,\n fromX: `${(Math.random() - 0.5) * 27.5}vw`,\n fromY: `${-50 - Math.random() * 27.5}vh`,\n });\n break;\n\n default:\n result.push({\n ...common,\n x: Math.random() * 100,\n y: Math.random() * 100,\n });\n }\n }\n\n return result;\n}\n\nexport const randomizeDuration = (base: number, variancePercent = 0.2): number => {\n const delta = base * variancePercent;\n const min = base - delta;\n const max = base + delta;\n\n return Math.floor(Math.random() * (max - min + 1)) + min;\n};\n"],"names":["getBurstPosition","index","total","countPerSide","sideIndex","pos","side","basePercent","jitter","edgePercent","centerX","centerY","fromX","fromY","getRandomNonOverlappingPositions","count","buffer","used","attempts","maxAttempts","value","v","generateStickerData","effect","stickers","minSize","maxSize","getSize","result","xPositions","i","stickerId","sticker","lottie","stickerData","id","size","x","common","y","randomizeDuration","base","variancePercent","delta","min","max"],"mappings":"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"}
|
@@ -1,5 +1,5 @@
|
|
1
1
|
import $, { css as s } from "styled-components";
|
2
|
-
import { effectAnimations as n } from "./
|
2
|
+
import { effectAnimations as n } from "./effects.js";
|
3
3
|
const h = $.div`
|
4
4
|
position: relative;
|
5
5
|
width: 100vw;
|
@@ -26,4 +26,4 @@ export {
|
|
26
26
|
h as Container,
|
27
27
|
a as Sticker
|
28
28
|
};
|
29
|
-
//# sourceMappingURL=stickers-styled.js.map
|
29
|
+
//# sourceMappingURL=stickers-effects-styled.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"stickers-effects-styled.js","sources":["../../../../src/features/stickers/stickers-effects/stickers-effects-styled.ts"],"sourcesContent":["import type { IStickersProps } from './stickers-effects-types';\n\nimport styled, { css } from 'styled-components';\n\nimport { effectAnimations } from './effects';\n\nexport const Container = styled.div`\n position: relative;\n width: 100vw;\n height: 100vh;\n background: transparent;\n pointer-events: none;\n`;\n\nexport const Sticker = styled.div<{\n effect: IStickersProps['effect'];\n duration: number;\n fromX?: string;\n fromY?: string;\n x: number;\n y: number;\n size: number;\n}>`\n position: absolute;\n z-index: 10;\n\n left: ${({ x }) => `${x}%`};\n top: ${({ y }) => `${y}%`};\n width: ${({ size }) => `${size}px`};\n height: ${({ size }) => `${size}px`};\n font-size: ${({ size }) => `${size}px`};\n\n ${({ effect, duration, fromX, fromY }) =>\n fromX && fromY\n ? css`\n ${effectAnimations[effect](duration)}\n --from-x: ${fromX};\n --from-y: ${fromY};\n `\n : effectAnimations[effect](duration)}\n`;\n"],"names":["Container","styled","Sticker","x","y","size","effect","duration","fromX","fromY","css","effectAnimations"],"mappings":";;AAMO,MAAMA,IAAYC,EAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAQnBC,IAAUD,EAAO;AAAA;AAAA;AAAA;AAAA,UAYpB,CAAC,EAAE,GAAAE,EAAQ,MAAA,GAAGA,CAAC,GAAG;AAAA,SACnB,CAAC,EAAE,GAAAC,EAAQ,MAAA,GAAGA,CAAC,GAAG;AAAA,WAChB,CAAC,EAAE,MAAAC,EAAW,MAAA,GAAGA,CAAI,IAAI;AAAA,YACxB,CAAC,EAAE,MAAAA,EAAW,MAAA,GAAGA,CAAI,IAAI;AAAA,eACtB,CAAC,EAAE,MAAAA,EAAW,MAAA,GAAGA,CAAI,IAAI;AAAA;AAAA,IAEpC,CAAC,EAAE,QAAAC,GAAQ,UAAAC,GAAU,OAAAC,GAAO,OAAAC,QAC5BD,KAASC,IACLC;AAAA,YACIC,EAAiBL,CAAM,EAAEC,CAAQ,CAAC;AAAA,sBACxBC,CAAK;AAAA,sBACLC,CAAK;AAAA,YAEnBE,EAAiBL,CAAM,EAAEC,CAAQ,CAAC;AAAA;"}
|
@@ -0,0 +1,54 @@
|
|
1
|
+
import { jsx as s, Fragment as E } from "react/jsx-runtime";
|
2
|
+
import { memo as u, useState as f, useEffect as d } from "react";
|
3
|
+
import F from "../../ui/dot-lottie-animations/dot-lottie-animation.js";
|
4
|
+
import { preloadLottieFile as g } from "./stickers-cache.js";
|
5
|
+
import { generateStickerData as z } from "./stickers-effects-helper.js";
|
6
|
+
import { Container as L, Sticker as T } from "./stickers-effects-styled.js";
|
7
|
+
const $ = u(({ url: t, sticker: o, size: a }) => {
|
8
|
+
const [i, m] = f(), [n, e] = f(!1);
|
9
|
+
return d(() => {
|
10
|
+
let r = !0;
|
11
|
+
if (t)
|
12
|
+
return g(t).then((c) => {
|
13
|
+
r && (c ? m(c) : e(!0));
|
14
|
+
}).catch(() => {
|
15
|
+
r && e(!0);
|
16
|
+
}), () => {
|
17
|
+
r = !1;
|
18
|
+
};
|
19
|
+
}, [t]), !t || n || !i ? /* @__PURE__ */ s(E, { children: o }) : /* @__PURE__ */ s(F, { data: i, width: a, height: a, onError: () => e(!0) });
|
20
|
+
}), b = ({ stickers: t, effect: o, count: a, duration: i }) => {
|
21
|
+
const [m, n] = f([]);
|
22
|
+
return d(() => {
|
23
|
+
const e = z({
|
24
|
+
count: a,
|
25
|
+
effect: o,
|
26
|
+
stickers: t,
|
27
|
+
minSize: 32,
|
28
|
+
maxSize: 48
|
29
|
+
});
|
30
|
+
n(e);
|
31
|
+
const r = setTimeout(() => n([]), i);
|
32
|
+
return () => clearTimeout(r);
|
33
|
+
}, [t, o, a, i]), /* @__PURE__ */ s(L, { children: m.map((e, r) => {
|
34
|
+
const { id: c, sticker: h, lottie: k, x: p, y: S, size: l, fromX: D, fromY: x } = e;
|
35
|
+
return /* @__PURE__ */ s(
|
36
|
+
T,
|
37
|
+
{
|
38
|
+
effect: o,
|
39
|
+
duration: i,
|
40
|
+
fromX: D,
|
41
|
+
fromY: x,
|
42
|
+
x: p,
|
43
|
+
y: S,
|
44
|
+
size: l,
|
45
|
+
children: /* @__PURE__ */ s($, { url: k, sticker: h, size: l })
|
46
|
+
},
|
47
|
+
`${c}-${r}`
|
48
|
+
);
|
49
|
+
}) });
|
50
|
+
}, W = u(b);
|
51
|
+
export {
|
52
|
+
W as default
|
53
|
+
};
|
54
|
+
//# sourceMappingURL=stickers-effects.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"stickers-effects.js","sources":["../../../../src/features/stickers/stickers-effects/stickers-effects.tsx"],"sourcesContent":["import type { TStickerData, IStickersProps } from './stickers-effects-types';\nimport type { Data } from '@lottiefiles/dotlottie-web';\n\nimport React, { memo, useEffect, useState } from 'react';\n\nimport DotLottieAnimation from '../../ui/dot-lottie-animations/dot-lottie-animation';\nimport { preloadLottieFile } from './stickers-cache';\nimport { generateStickerData } from './stickers-effects-helper';\nimport * as S from './stickers-effects-styled';\n\nconst StickerWithFallback: React.FC<{\n url?: string;\n sticker: string;\n size: number;\n}> = memo(({ url, sticker, size }) => {\n const [data, setData] = useState<Data>();\n const [failed, setFailed] = useState(false);\n\n useEffect(() => {\n let isMounted = true;\n\n if (!url) return;\n\n preloadLottieFile(url)\n .then(result => {\n if (isMounted) {\n if (result) {\n setData(result);\n } else {\n setFailed(true);\n }\n }\n })\n .catch(() => {\n if (isMounted) setFailed(true);\n });\n\n return () => {\n isMounted = false;\n };\n }, [url]);\n\n if (!url || failed || !data) {\n return <>{sticker}</>;\n }\n\n return (\n <DotLottieAnimation data={data} width={size} height={size} onError={() => setFailed(true)} />\n );\n});\n\nconst StickersEffects: React.FC<IStickersProps> = ({ stickers, effect, count, duration }) => {\n const [stickersData, setStickersData] = useState<ReturnType<typeof generateStickerData>>([]);\n\n useEffect(() => {\n const stickerData = generateStickerData({\n count,\n effect,\n stickers,\n minSize: 32,\n maxSize: 48,\n });\n\n setStickersData(stickerData);\n\n const timeout = setTimeout(() => setStickersData([]), duration);\n\n return () => clearTimeout(timeout);\n }, [stickers, effect, count, duration]);\n\n return (\n <S.Container>\n {stickersData.map((data: TStickerData, i) => {\n const { id, sticker, lottie, x, y, size, fromX, fromY } = data;\n\n return (\n <S.Sticker\n key={`${id}-${i}`}\n effect={effect}\n duration={duration}\n fromX={fromX}\n fromY={fromY}\n x={x}\n y={y}\n size={size}\n >\n <StickerWithFallback url={lottie} sticker={sticker} size={size} />\n </S.Sticker>\n );\n })}\n </S.Container>\n );\n};\n\nexport default memo(StickersEffects);\n"],"names":["StickerWithFallback","memo","url","sticker","size","data","setData","useState","failed","setFailed","useEffect","isMounted","preloadLottieFile","result","jsx","DotLottieAnimation","StickersEffects","stickers","effect","count","duration","stickersData","setStickersData","stickerData","generateStickerData","timeout","S.Container","i","id","lottie","x","y","fromX","fromY","S.Sticker","stickersEffects"],"mappings":";;;;;;AAUA,MAAMA,IAIDC,EAAK,CAAC,EAAE,KAAAC,GAAK,SAAAC,GAAS,MAAAC,QAAW;AACpC,QAAM,CAACC,GAAMC,CAAO,IAAIC,EAAe,GACjC,CAACC,GAAQC,CAAS,IAAIF,EAAS,EAAK;AA0B1C,SAxBAG,EAAU,MAAM;AACd,QAAIC,IAAY;AAEhB,QAAKT;AAEa,aAAAU,EAAAV,CAAG,EAClB,KAAK,CAAUW,MAAA;AACd,QAAIF,MACEE,IACFP,EAAQO,CAAM,IAEdJ,EAAU,EAAI;AAAA,MAElB,CACD,EACA,MAAM,MAAM;AACP,QAAAE,OAAqB,EAAI;AAAA,MAAA,CAC9B,GAEI,MAAM;AACC,QAAAA,IAAA;AAAA,MAAA;AAAA,EACd,GACC,CAACT,CAAG,CAAC,GAEJ,CAACA,KAAOM,KAAU,CAACH,2BACX,UAAQF,EAAA,CAAA,IAIlB,gBAAAW,EAACC,GAAmB,EAAA,MAAAV,GAAY,OAAOD,GAAM,QAAQA,GAAM,SAAS,MAAMK,EAAU,EAAI,EAAG,CAAA;AAE/F,CAAC,GAEKO,IAA4C,CAAC,EAAE,UAAAC,GAAU,QAAAC,GAAQ,OAAAC,GAAO,UAAAC,QAAe;AAC3F,QAAM,CAACC,GAAcC,CAAe,IAAIf,EAAiD,CAAE,CAAA;AAE3F,SAAAG,EAAU,MAAM;AACd,UAAMa,IAAcC,EAAoB;AAAA,MACtC,OAAAL;AAAA,MACA,QAAAD;AAAA,MACA,UAAAD;AAAA,MACA,SAAS;AAAA,MACT,SAAS;AAAA,IAAA,CACV;AAED,IAAAK,EAAgBC,CAAW;AAE3B,UAAME,IAAU,WAAW,MAAMH,EAAgB,CAAE,CAAA,GAAGF,CAAQ;AAEvD,WAAA,MAAM,aAAaK,CAAO;AAAA,KAChC,CAACR,GAAUC,GAAQC,GAAOC,CAAQ,CAAC,GAGpC,gBAAAN,EAACY,GAAA,EACE,YAAa,IAAI,CAACrB,GAAoBsB,MAAM;AACrC,UAAA,EAAE,IAAAC,GAAI,SAAAzB,GAAS,QAAA0B,GAAQ,GAAAC,GAAG,GAAAC,GAAG,MAAA3B,GAAM,OAAA4B,GAAO,OAAAC,EAAU,IAAA5B;AAGxD,WAAA,gBAAAS;AAAA,MAACoB;AAAAA,MAAA;AAAA,QAEC,QAAAhB;AAAA,QACA,UAAAE;AAAA,QACA,OAAAY;AAAA,QACA,OAAAC;AAAA,QACA,GAAAH;AAAA,QACA,GAAAC;AAAA,QACA,MAAA3B;AAAA,QAEA,UAAC,gBAAAU,EAAAd,GAAA,EAAoB,KAAK6B,GAAQ,SAAA1B,GAAkB,MAAAC,GAAY;AAAA,MAAA;AAAA,MAT3D,GAAGwB,CAAE,IAAID,CAAC;AAAA,IAAA;AAAA,EAYpB,CAAA,EACH,CAAA;AAEJ,GAEeQ,IAAAlC,EAAKe,CAAe;"}
|
@@ -1,4 +1,4 @@
|
|
1
|
-
const
|
1
|
+
const _ = {
|
2
2
|
CHAPTER_CROWN_ICON: 4,
|
3
3
|
CHAPTER_PLUS_ICON: 2,
|
4
4
|
CHAPTER_PROGRESS_SVG: 2,
|
@@ -15,11 +15,9 @@ const E = {
|
|
15
15
|
DESMOS_CALCULATOR: 2,
|
16
16
|
GOAL_CHAPTER_SHEETS_MENU: 4,
|
17
17
|
JOURNEY_OVERLAY: 1e3,
|
18
|
-
CHAPTER_COMPLETED_LOTTIE: 5
|
19
|
-
HEADER: 11
|
20
|
-
// Header z-index for wins dashboard
|
18
|
+
CHAPTER_COMPLETED_LOTTIE: 5
|
21
19
|
};
|
22
20
|
export {
|
23
|
-
|
21
|
+
_ as ZINDEX
|
24
22
|
};
|
25
23
|
//# sourceMappingURL=z-index.js.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"z-index.js","sources":["../../../../src/features/ui/constants/z-index.ts"],"sourcesContent":["const ZINDEX = {\n CHAPTER_CROWN_ICON: 4,\n CHAPTER_PLUS_ICON: 2,\n CHAPTER_PROGRESS_SVG: 2,\n LPAR_SHEET_ITEM_BOTTOM_DASH_BOX: 1,\n LPAR_SHEET_ITEM_TOP_VERTICAL_ICON: 2,\n MODAL: 20,\n SAT_SUMMARY_SCORE: 25, //* SAT_SUMMARY_SCORE > MODAL\n CANVAS_SCRIBBLING: 26, //* CANVAS_SCRIBBLING > Learnosity\n TILE_CONTAINER: 30, //whiteboard\n QUESTION_TIPS: -1,\n DESMOS_CALCULATOR: 2,\n GOAL_CHAPTER_SHEETS_MENU: 4,\n JOURNEY_OVERLAY: 1000,\n CHAPTER_COMPLETED_LOTTIE: 5,\n
|
1
|
+
{"version":3,"file":"z-index.js","sources":["../../../../src/features/ui/constants/z-index.ts"],"sourcesContent":["const ZINDEX = {\n CHAPTER_CROWN_ICON: 4,\n CHAPTER_PLUS_ICON: 2,\n CHAPTER_PROGRESS_SVG: 2,\n LPAR_SHEET_ITEM_BOTTOM_DASH_BOX: 1,\n LPAR_SHEET_ITEM_TOP_VERTICAL_ICON: 2,\n MODAL: 20,\n SAT_SUMMARY_SCORE: 25, //* SAT_SUMMARY_SCORE > MODAL\n CANVAS_SCRIBBLING: 26, //* CANVAS_SCRIBBLING > Learnosity\n TILE_CONTAINER: 30, //whiteboard\n QUESTION_TIPS: -1,\n DESMOS_CALCULATOR: 2,\n GOAL_CHAPTER_SHEETS_MENU: 4,\n JOURNEY_OVERLAY: 1000,\n CHAPTER_COMPLETED_LOTTIE: 5,\n} as const;\n\nexport { ZINDEX };\n"],"names":["ZINDEX"],"mappings":"AAAA,MAAMA,IAAS;AAAA,EACb,oBAAoB;AAAA,EACpB,mBAAmB;AAAA,EACnB,sBAAsB;AAAA,EACtB,iCAAiC;AAAA,EACjC,mCAAmC;AAAA,EACnC,OAAO;AAAA,EACP,mBAAmB;AAAA;AAAA,EACnB,mBAAmB;AAAA;AAAA,EACnB,gBAAgB;AAAA;AAAA,EAChB,eAAe;AAAA,EACf,mBAAmB;AAAA,EACnB,0BAA0B;AAAA,EAC1B,iBAAiB;AAAA,EACjB,0BAA0B;AAC5B;"}
|
@@ -1,80 +1,93 @@
|
|
1
|
-
import { jsx as
|
1
|
+
import { jsx as d } from "react/jsx-runtime";
|
2
2
|
import { DotLottieWorker as v } from "../../../node_modules/@lottiefiles/dotlottie-web/dist/index.js";
|
3
|
-
import { memo as w, forwardRef as x, useRef as p, useImperativeHandle as
|
4
|
-
import
|
5
|
-
import { Canvas as
|
6
|
-
const
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
(
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
(e
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
3
|
+
import { memo as w, forwardRef as x, useRef as p, useImperativeHandle as A, useEffect as h } from "react";
|
4
|
+
import R from "../layout/flex-view.js";
|
5
|
+
import { Canvas as $ } from "./dot-lottie-animation-styled.js";
|
6
|
+
const E = x(
|
7
|
+
(y, g) => {
|
8
|
+
const {
|
9
|
+
src: s,
|
10
|
+
data: f,
|
11
|
+
width: i = "100%",
|
12
|
+
height: a = "100%",
|
13
|
+
settings: l,
|
14
|
+
eventListeners: o,
|
15
|
+
onRender: u,
|
16
|
+
onError: c
|
17
|
+
} = y, m = p(null), t = p(null);
|
18
|
+
return A(
|
19
|
+
g,
|
20
|
+
() => ({
|
21
|
+
play: () => {
|
22
|
+
var e;
|
23
|
+
(e = t.current) == null || e.play();
|
24
|
+
},
|
25
|
+
pause: () => {
|
26
|
+
var e;
|
27
|
+
(e = t.current) == null || e.pause();
|
28
|
+
},
|
29
|
+
playSegments: (e) => {
|
30
|
+
var r, n;
|
31
|
+
(r = t.current) == null || r.setSegment(e[0], e[1]), (n = t.current) == null || n.play();
|
32
|
+
},
|
33
|
+
setFrame: (e) => {
|
34
|
+
var r;
|
35
|
+
(r = t.current) == null || r.setFrame(e);
|
36
|
+
}
|
37
|
+
}),
|
38
|
+
[]
|
39
|
+
), h(() => {
|
40
|
+
if (!m.current) return;
|
41
|
+
let e = !1;
|
42
|
+
return (() => {
|
43
|
+
try {
|
44
|
+
t.current = new v({
|
45
|
+
src: s,
|
46
|
+
data: f,
|
47
|
+
canvas: m.current,
|
48
|
+
autoplay: !0,
|
49
|
+
loop: !1,
|
50
|
+
renderConfig: {
|
51
|
+
autoResize: !0,
|
52
|
+
devicePixelRatio: window.devicePixelRatio,
|
53
|
+
freezeOnOffscreen: !0
|
54
|
+
},
|
55
|
+
...l
|
56
|
+
}), requestAnimationFrame(() => {
|
57
|
+
e || u == null || u();
|
58
|
+
});
|
59
|
+
} catch (n) {
|
60
|
+
console.log(n), c == null || c();
|
61
|
+
}
|
62
|
+
})(), () => {
|
63
|
+
e = !0, t.current && (t.current.destroy(), t.current = null);
|
64
|
+
};
|
65
|
+
}, [s, l, u, c, f]), h(() => (o == null || o.forEach(
|
66
|
+
({ name: e, callback: r }) => {
|
67
|
+
var n;
|
68
|
+
return (n = t.current) == null ? void 0 : n.addEventListener(e, r);
|
52
69
|
}
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
height: typeof a == "number" ? a : void 0
|
74
|
-
}
|
75
|
-
) });
|
76
|
-
}), F = w(N);
|
70
|
+
), () => {
|
71
|
+
o == null || o.forEach(
|
72
|
+
({ name: e, callback: r }) => {
|
73
|
+
var n;
|
74
|
+
return (n = t.current) == null ? void 0 : n.removeEventListener(e, r);
|
75
|
+
}
|
76
|
+
);
|
77
|
+
}), [o]), /* @__PURE__ */ d(R, { $width: i, $height: a, children: /* @__PURE__ */ d(
|
78
|
+
$,
|
79
|
+
{
|
80
|
+
ref: m,
|
81
|
+
$renderWidth: i,
|
82
|
+
$renderHeight: a,
|
83
|
+
width: typeof i == "number" ? i : void 0,
|
84
|
+
height: typeof a == "number" ? a : void 0
|
85
|
+
},
|
86
|
+
s
|
87
|
+
) });
|
88
|
+
}
|
89
|
+
), C = w(E);
|
77
90
|
export {
|
78
|
-
|
91
|
+
C as default
|
79
92
|
};
|
80
93
|
//# sourceMappingURL=dot-lottie-animation.js.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"dot-lottie-animation.js","sources":["../../../../src/features/ui/dot-lottie-animations/dot-lottie-animation.tsx"],"sourcesContent":["import type {\n AnimationSegment,\n
|
1
|
+
{"version":3,"file":"dot-lottie-animation.js","sources":["../../../../src/features/ui/dot-lottie-animations/dot-lottie-animation.tsx"],"sourcesContent":["import type {\n AnimationSegment,\n IDotLottieAnimationProps,\n IDotLottieAnimationRef,\n} from './dot-lottie-types';\n\nimport { DotLottieWorker } from '@lottiefiles/dotlottie-web';\nimport { forwardRef, memo, useEffect, useImperativeHandle, useRef } from 'react';\n\nimport FlexView from '../layout/flex-view';\nimport * as Styled from './dot-lottie-animation-styled';\n\nconst DotLottieAnimation = forwardRef<IDotLottieAnimationRef, IDotLottieAnimationProps>(\n (props, ref) => {\n const {\n src,\n data,\n width = '100%',\n height = '100%',\n settings,\n eventListeners,\n onRender,\n onError,\n } = props;\n\n const canvasRef = useRef<HTMLCanvasElement>(null);\n const animationInstance = useRef<DotLottieWorker | null>(null);\n\n useImperativeHandle(\n ref,\n () => ({\n play: () => {\n animationInstance.current?.play();\n },\n pause: () => {\n animationInstance.current?.pause();\n },\n playSegments: (segments: AnimationSegment) => {\n animationInstance.current?.setSegment(segments[0], segments[1]);\n animationInstance.current?.play();\n },\n setFrame: (frame: number) => {\n animationInstance.current?.setFrame(frame);\n },\n }),\n [],\n );\n\n useEffect(() => {\n if (!canvasRef.current) return;\n\n let destroyed = false;\n\n const loadAnimation = () => {\n try {\n animationInstance.current = new DotLottieWorker({\n src,\n data,\n canvas: canvasRef.current!,\n autoplay: true,\n loop: false,\n renderConfig: {\n autoResize: true,\n devicePixelRatio: window.devicePixelRatio,\n freezeOnOffscreen: true,\n },\n ...settings,\n });\n\n requestAnimationFrame(() => {\n if (destroyed) return;\n onRender?.();\n });\n } catch (err) {\n // eslint-disable-next-line no-console\n console.log(err);\n onError?.();\n }\n };\n\n loadAnimation();\n\n return () => {\n destroyed = true;\n if (animationInstance.current) {\n animationInstance.current.destroy();\n animationInstance.current = null;\n }\n };\n }, [src, settings, onRender, onError, data]);\n\n useEffect(() => {\n eventListeners?.forEach(\n ({ name, callback }) => animationInstance.current?.addEventListener(name, callback),\n );\n\n return () => {\n eventListeners?.forEach(\n ({ name, callback }) => animationInstance.current?.removeEventListener(name, callback),\n );\n };\n }, [eventListeners]);\n\n const isNumW = typeof width === 'number';\n const isNumH = typeof height === 'number';\n\n return (\n <FlexView $width={width} $height={height}>\n <Styled.Canvas\n key={src}\n ref={canvasRef}\n $renderWidth={width}\n $renderHeight={height}\n width={isNumW ? width : undefined}\n height={isNumH ? height : undefined}\n />\n </FlexView>\n );\n },\n);\n\nexport default memo(DotLottieAnimation);\n"],"names":["DotLottieAnimation","forwardRef","props","ref","src","data","width","height","settings","eventListeners","onRender","onError","canvasRef","useRef","animationInstance","useImperativeHandle","_a","segments","_b","frame","useEffect","destroyed","DotLottieWorker","err","name","callback","jsx","FlexView","Styled.Canvas","DotLottieAnimation$1","memo"],"mappings":";;;;;AAYA,MAAMA,IAAqBC;AAAA,EACzB,CAACC,GAAOC,MAAQ;AACR,UAAA;AAAA,MACJ,KAAAC;AAAA,MACA,MAAAC;AAAA,MACA,OAAAC,IAAQ;AAAA,MACR,QAAAC,IAAS;AAAA,MACT,UAAAC;AAAA,MACA,gBAAAC;AAAA,MACA,UAAAC;AAAA,MACA,SAAAC;AAAA,IACE,IAAAT,GAEEU,IAAYC,EAA0B,IAAI,GAC1CC,IAAoBD,EAA+B,IAAI;AAE7D,WAAAE;AAAA,MACEZ;AAAA,MACA,OAAO;AAAA,QACL,MAAM,MAAM;;AACV,WAAAa,IAAAF,EAAkB,YAAlB,QAAAE,EAA2B;AAAA,QAC7B;AAAA,QACA,OAAO,MAAM;;AACX,WAAAA,IAAAF,EAAkB,YAAlB,QAAAE,EAA2B;AAAA,QAC7B;AAAA,QACA,cAAc,CAACC,MAA+B;;AAC5C,WAAAD,IAAAF,EAAkB,YAAlB,QAAAE,EAA2B,WAAWC,EAAS,CAAC,GAAGA,EAAS,CAAC,KAC7DC,IAAAJ,EAAkB,YAAlB,QAAAI,EAA2B;AAAA,QAC7B;AAAA,QACA,UAAU,CAACC,MAAkB;;AACT,WAAAH,IAAAF,EAAA,YAAA,QAAAE,EAAS,SAASG;AAAA,QACtC;AAAA,MAAA;AAAA,MAEF,CAAC;AAAA,IAAA,GAGHC,EAAU,MAAM;AACV,UAAA,CAACR,EAAU,QAAS;AAExB,UAAIS,IAAY;AA6BF,cA3BQ,MAAM;AACtB,YAAA;AACgB,UAAAP,EAAA,UAAU,IAAIQ,EAAgB;AAAA,YAC9C,KAAAlB;AAAA,YACA,MAAAC;AAAA,YACA,QAAQO,EAAU;AAAA,YAClB,UAAU;AAAA,YACV,MAAM;AAAA,YACN,cAAc;AAAA,cACZ,YAAY;AAAA,cACZ,kBAAkB,OAAO;AAAA,cACzB,mBAAmB;AAAA,YACrB;AAAA,YACA,GAAGJ;AAAA,UAAA,CACJ,GAED,sBAAsB,MAAM;AAC1B,YAAIa,KACOX,KAAA,QAAAA;AAAA,UAAA,CACZ;AAAA,iBACMa,GAAK;AAEZ,kBAAQ,IAAIA,CAAG,GACLZ,KAAA,QAAAA;AAAA,QACZ;AAAA,MAAA,MAKK,MAAM;AACC,QAAAU,IAAA,IACRP,EAAkB,YACpBA,EAAkB,QAAQ,WAC1BA,EAAkB,UAAU;AAAA,MAC9B;AAAA,IACF,GACC,CAACV,GAAKI,GAAUE,GAAUC,GAASN,CAAI,CAAC,GAE3Ce,EAAU,OACQX,KAAA,QAAAA,EAAA;AAAA,MACd,CAAC,EAAE,MAAAe,GAAM,UAAAC,QAAe;;AAAA,gBAAAT,IAAAF,EAAkB,YAAlB,gBAAAE,EAA2B,iBAAiBQ,GAAMC;AAAA;AAAA,OAGrE,MAAM;AACK,MAAAhB,KAAA,QAAAA,EAAA;AAAA,QACd,CAAC,EAAE,MAAAe,GAAM,UAAAC,QAAe;;AAAA,kBAAAT,IAAAF,EAAkB,YAAlB,gBAAAE,EAA2B,oBAAoBQ,GAAMC;AAAA;AAAA;AAAA,IAC/E,IAED,CAAChB,CAAc,CAAC,GAMhB,gBAAAiB,EAAAC,GAAA,EAAS,QAAQrB,GAAO,SAASC,GAChC,UAAA,gBAAAmB;AAAA,MAACE;AAAAA,MAAA;AAAA,QAEC,KAAKhB;AAAA,QACL,cAAcN;AAAA,QACd,eAAeC;AAAA,QACf,OAVS,OAAOD,KAAU,WAUVA,IAAQ;AAAA,QACxB,QAVS,OAAOC,KAAW,WAUVA,IAAS;AAAA,MAAA;AAAA,MALrBH;AAAA,IAOT,EAAA,CAAA;AAAA,EAEJ;AACF,GAEeyB,IAAAC,EAAK9B,CAAkB;"}
|