@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
@@ -1 +0,0 @@
|
|
1
|
-
{"version":3,"file":"sticker.js","sources":["../../../../src/features/ui/sticker-grid/sticker.tsx"],"sourcesContent":["import type { ILottieAnimationRef } from '../lottie-animation/types';\nimport type { IStickerProps } from './sticker-grid-types';\n\nimport React, { useCallback, useMemo, useRef, useState, memo, useLayoutEffect } from 'react';\n\nimport LottieAnimation from '../lottie-animation/lottie-animation';\nimport { StickerContainer, StaticEmoji, LottieContainer } from './sticker-grid-styles';\n\nconst Sticker: React.FC<IStickerProps> = ({\n emoji,\n lottieUrl,\n size = 48,\n onClick,\n disabled = false,\n}) => {\n const [isHovered, setIsHovered] = useState(false);\n const lottieRef = useRef<ILottieAnimationRef>(null);\n\n useLayoutEffect(() => {\n if (lottieRef.current) {\n lottieRef.current.playSegments([0, 1], true);\n }\n }, []);\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 const lottieSettings = useMemo(\n () => ({\n loop: true,\n renderer: 'canvas',\n autoplay: isHovered,\n }),\n [isHovered],\n );\n\n return (\n <StickerContainer\n $size={size}\n $disabled={disabled}\n onMouseEnter={handleMouseEnter}\n onMouseLeave={handleMouseLeave}\n onClick={handleClick}\n >\n {!isHovered && <StaticEmoji $size={size}>{emoji}</StaticEmoji>}\n\n {lottieUrl && (\n <LottieContainer $size={size}>\n <LottieAnimation\n ref={lottieRef}\n src={lottieUrl}\n width=\"100%\"\n height=\"100%\"\n settings={lottieSettings}\n />\n </LottieContainer>\n )}\n </StickerContainer>\n );\n};\n\nexport default memo(Sticker);\n"],"names":["Sticker","emoji","lottieUrl","size","onClick","disabled","isHovered","setIsHovered","useState","lottieRef","useRef","useLayoutEffect","handleMouseEnter","useCallback","handleMouseLeave","handleClick","lottieSettings","useMemo","jsxs","StickerContainer","jsx","StaticEmoji","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,GAAWC,CAAY,IAAIC,EAAS,EAAK,GAC1CC,IAAYC,EAA4B,IAAI;AAElD,EAAAC,EAAgB,MAAM;AACpB,IAAIF,EAAU,WACZA,EAAU,QAAQ,aAAa,CAAC,GAAG,CAAC,GAAG,EAAI;AAAA,EAE/C,GAAG,CAAE,CAAA;AAEC,QAAAG,IAAmBC,EAAY,MAAM;AACrC,IAACR,KAAUE,EAAa,EAAI;AAAA,EAAA,GAC/B,CAACF,CAAQ,CAAC,GAEPS,IAAmBD,EAAY,MAAM;AACrC,IAACR,KAAUE,EAAa,EAAK;AAAA,EAAA,GAChC,CAACF,CAAQ,CAAC,GAEPU,IAAcF,EAAY,MAAM;AAChC,IAAA,CAACR,KAAYD,KAAiBA;EAAA,GACjC,CAACC,GAAUD,CAAO,CAAC,GAEhBY,IAAiBC;AAAA,IACrB,OAAO;AAAA,MACL,MAAM;AAAA,MACN,UAAU;AAAA,MACV,UAAUX;AAAA,IAAA;AAAA,IAEZ,CAACA,CAAS;AAAA,EAAA;AAIV,SAAA,gBAAAY;AAAA,IAACC;AAAA,IAAA;AAAA,MACC,OAAOhB;AAAA,MACP,WAAWE;AAAA,MACX,cAAcO;AAAA,MACd,cAAcE;AAAA,MACd,SAASC;AAAA,MAER,UAAA;AAAA,QAAA,CAACT,KAAa,gBAAAc,EAACC,GAAY,EAAA,OAAOlB,GAAO,UAAMF,GAAA;AAAA,QAE/CC,KACC,gBAAAkB,EAACE,GAAgB,EAAA,OAAOnB,GACtB,UAAA,gBAAAiB;AAAA,UAACG;AAAA,UAAA;AAAA,YACC,KAAKd;AAAA,YACL,KAAKP;AAAA,YACL,OAAM;AAAA,YACN,QAAO;AAAA,YACP,UAAUc;AAAA,UAAA;AAAA,QAAA,GAEd;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAIR,GAEeQ,IAAAC,EAAKzB,CAAO;"}
|
@@ -1 +0,0 @@
|
|
1
|
-
{"version":3,"file":"constants.js","sources":["../../../../src/features/ui/stickers/constants.ts"],"sourcesContent":["export const STICKER_MIN_SIZE = 32;\nexport const STICKER_MAX_SIZE = 48;\n"],"names":["STICKER_MIN_SIZE","STICKER_MAX_SIZE"],"mappings":"AAAO,MAAMA,IAAmB,IACnBC,IAAmB;"}
|
@@ -1 +0,0 @@
|
|
1
|
-
{"version":3,"file":"stickers-effects.js","sources":["../../../../src/features/ui/stickers/stickers-effects.ts"],"sourcesContent":["import type { StickersProps } from './stickers-types';\n\nimport { keyframes, css } from 'styled-components';\n\nimport { randomizeDuration } from './stickers-utils';\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 StickersProps['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,UAAU,CAACC,MAAqBC;AAAA,iBACjBP,CAAO,IAAIQ,EAAkBF,CAAQ,CAAC;AAAA;AAAA,EAErD,WAAW,CAACA,MAAqBC;AAAA,iBAClBL,CAAQ,IAAIM,EAAkBF,CAAQ,CAAC;AAAA;AAAA,EAEtD,kBAAkB,CAACA,MAAqBC;AAAA,iBACzBJ,CAAc,IAAIK,EAAkBF,CAAQ,CAAC;AAAA;AAAA,EAE5D,YAAY,CAACA,MAAqBC;AAAA,iBACnBH,CAAS,IAAIE,CAAQ;AAAA;AAEtC;"}
|
@@ -1 +0,0 @@
|
|
1
|
-
{"version":3,"file":"stickers-styled.js","sources":["../../../../src/features/ui/stickers/stickers-styled.ts"],"sourcesContent":["import type { StickersProps } from './stickers-types';\n\nimport styled, { css } from 'styled-components';\n\nimport { effectAnimations } from './stickers-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: StickersProps['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;"}
|
@@ -1,91 +0,0 @@
|
|
1
|
-
const f = (n, s) => {
|
2
|
-
const t = Math.ceil(s / 4), r = Math.floor(n / t), d = n % t, M = ["top", "right", "bottom", "left"][r] ?? "left", h = (d + 0.5) / t * 100, i = (Math.random() - 0.5) * 25, o = Math.min(Math.max(h + i, 0), 100), a = 45 + Math.random() * 10, e = 45 + Math.random() * 10;
|
3
|
-
let l = 0, m = 0;
|
4
|
-
switch (M) {
|
5
|
-
case "top":
|
6
|
-
l = o - a, m = -e + i;
|
7
|
-
break;
|
8
|
-
case "right":
|
9
|
-
l = 100 - a + i, m = o - e;
|
10
|
-
break;
|
11
|
-
case "bottom":
|
12
|
-
l = o - a, m = 100 - e + i;
|
13
|
-
break;
|
14
|
-
case "left":
|
15
|
-
l = -a + i, m = o - e;
|
16
|
-
break;
|
17
|
-
}
|
18
|
-
return {
|
19
|
-
fromX: `${l}vw`,
|
20
|
-
fromY: `${m}vh`,
|
21
|
-
x: a,
|
22
|
-
y: e
|
23
|
-
};
|
24
|
-
}, g = (n, s = 10) => {
|
25
|
-
const t = [];
|
26
|
-
let r = 0;
|
27
|
-
const d = n;
|
28
|
-
for (; t.length < n && r < d; ) {
|
29
|
-
const c = Math.floor(Math.random() * (100 - 2 * s) + s);
|
30
|
-
t.every((M) => Math.abs(M - c) >= s) && t.push(c), r++;
|
31
|
-
}
|
32
|
-
for (; t.length < n; )
|
33
|
-
t.push(Math.floor(Math.random() * (100 - 2 * s) + s));
|
34
|
-
return t;
|
35
|
-
};
|
36
|
-
function x({
|
37
|
-
count: n,
|
38
|
-
effect: s,
|
39
|
-
stickers: t,
|
40
|
-
minSize: r,
|
41
|
-
maxSize: d
|
42
|
-
}) {
|
43
|
-
const c = 100 / n * 2, M = () => Math.random() * (d - r) + r, h = [], i = ["float_up", "fall_down"].includes(s) ? g(n, c) : [];
|
44
|
-
for (let o = 0; o < n; o++) {
|
45
|
-
const a = t[o % t.length] ?? "", e = M();
|
46
|
-
if (s === "float_up")
|
47
|
-
h.push({
|
48
|
-
id: o,
|
49
|
-
sticker: a,
|
50
|
-
x: i[o],
|
51
|
-
y: 110 + (Math.random() - 0.5) * e,
|
52
|
-
size: e
|
53
|
-
});
|
54
|
-
else if (s === "fall_down")
|
55
|
-
h.push({
|
56
|
-
id: o,
|
57
|
-
sticker: a,
|
58
|
-
x: i[o],
|
59
|
-
y: -10 + (Math.random() - 0.5) * e,
|
60
|
-
size: e
|
61
|
-
});
|
62
|
-
else if (s === "burst_from_edges") {
|
63
|
-
const { x: l, y: m, fromX: p, fromY: u } = f(o, n);
|
64
|
-
h.push({ id: o, sticker: a, x: l, y: m, fromX: p, fromY: u, size: e });
|
65
|
-
} else s === "pop_expand" ? h.push({
|
66
|
-
id: o,
|
67
|
-
sticker: a,
|
68
|
-
x: 50,
|
69
|
-
y: 100,
|
70
|
-
fromX: `${(Math.random() - 0.5) * 27.5}vw`,
|
71
|
-
fromY: `${-50 - Math.random() * 27.5}vh`,
|
72
|
-
size: e
|
73
|
-
}) : h.push({
|
74
|
-
id: o,
|
75
|
-
sticker: a,
|
76
|
-
x: Math.random() * 100,
|
77
|
-
y: Math.random() * 100,
|
78
|
-
size: e
|
79
|
-
});
|
80
|
-
}
|
81
|
-
return h;
|
82
|
-
}
|
83
|
-
const v = (n, s = 0.2) => {
|
84
|
-
const t = n * s, r = n - t, d = n + t;
|
85
|
-
return Math.floor(Math.random() * (d - r + 1)) + r;
|
86
|
-
};
|
87
|
-
export {
|
88
|
-
x as generateStickerData,
|
89
|
-
v as randomizeDuration
|
90
|
-
};
|
91
|
-
//# sourceMappingURL=stickers-utils.js.map
|
@@ -1 +0,0 @@
|
|
1
|
-
{"version":3,"file":"stickers-utils.js","sources":["../../../../src/features/ui/stickers/stickers-utils.ts"],"sourcesContent":["import type { StickerDatum, StickersProps } from './stickers-types';\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: StickersProps['effect'];\n stickers: string[];\n minSize: number;\n maxSize: number;\n}): StickerDatum[] {\n const buffer = (100 / count) * 2;\n const getSize = () => Math.random() * (maxSize - minSize) + minSize;\n const result: StickerDatum[] = [];\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 sticker = stickers[i % stickers.length] ?? '';\n const size = getSize();\n\n if (effect === 'float_up') {\n result.push({\n id: i,\n sticker,\n x: xPositions[i]!,\n y: 110 + (Math.random() - 0.5) * size,\n size,\n });\n } else if (effect === 'fall_down') {\n result.push({\n id: i,\n sticker,\n x: xPositions[i]!,\n y: -10 + (Math.random() - 0.5) * size,\n size,\n });\n } else if (effect === 'burst_from_edges') {\n const { x, y, fromX, fromY } = getBurstPosition(i, count);\n\n result.push({ id: i, sticker, x, y, fromX, fromY, size });\n } else if (effect === 'pop_expand') {\n result.push({\n id: i,\n sticker,\n x: 50,\n y: 100,\n fromX: `${(Math.random() - 0.5) * 27.5}vw`,\n fromY: `${-50 - Math.random() * 27.5}vh`,\n size,\n });\n } else {\n result.push({\n id: i,\n sticker,\n x: Math.random() * 100,\n y: Math.random() * 100,\n size,\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","sticker","size","x","y","randomizeDuration","base","variancePercent","delta","min","max"],"mappings":"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"}
|
@@ -1,40 +0,0 @@
|
|
1
|
-
import { jsx as a } from "react/jsx-runtime";
|
2
|
-
import { memo as E, useState as I, useLayoutEffect as l } from "react";
|
3
|
-
import { STICKER_MIN_SIZE as x, STICKER_MAX_SIZE as D } from "./constants.js";
|
4
|
-
import { Container as T, Sticker as _ } from "./stickers-styled.js";
|
5
|
-
import { generateStickerData as z } from "./stickers-utils.js";
|
6
|
-
const C = ({ stickers: i, effect: t, count: m, duration: r }) => {
|
7
|
-
const [c, s] = I([]);
|
8
|
-
return l(() => {
|
9
|
-
const e = z({
|
10
|
-
count: m,
|
11
|
-
effect: t,
|
12
|
-
stickers: i,
|
13
|
-
minSize: x,
|
14
|
-
maxSize: D
|
15
|
-
});
|
16
|
-
s(e);
|
17
|
-
const o = setTimeout(() => s([]), r);
|
18
|
-
return () => clearTimeout(o);
|
19
|
-
}, [i, t, m, r]), /* @__PURE__ */ a(T, { children: c.map((e) => {
|
20
|
-
const { id: o, sticker: n, x: S, y: k, size: p, fromX: u, fromY: f } = e;
|
21
|
-
return /* @__PURE__ */ a(
|
22
|
-
_,
|
23
|
-
{
|
24
|
-
effect: t,
|
25
|
-
duration: r,
|
26
|
-
fromX: u,
|
27
|
-
fromY: f,
|
28
|
-
x: S,
|
29
|
-
y: k,
|
30
|
-
size: p,
|
31
|
-
children: n
|
32
|
-
},
|
33
|
-
o
|
34
|
-
);
|
35
|
-
}) });
|
36
|
-
}, R = E(C);
|
37
|
-
export {
|
38
|
-
R as default
|
39
|
-
};
|
40
|
-
//# sourceMappingURL=stickers.js.map
|
@@ -1 +0,0 @@
|
|
1
|
-
{"version":3,"file":"stickers.js","sources":["../../../../src/features/ui/stickers/stickers.tsx"],"sourcesContent":["import type { StickerDatum, StickersProps } from './stickers-types';\n\nimport React, { memo, useLayoutEffect, useState } from 'react';\n\nimport { STICKER_MAX_SIZE, STICKER_MIN_SIZE } from './constants';\nimport { Container, Sticker } from './stickers-styled';\nimport { generateStickerData } from './stickers-utils';\n\nconst Stickers: React.FC<StickersProps> = ({ stickers, effect, count, duration }) => {\n const [stickersData, setStickersData] = useState<ReturnType<typeof generateStickerData>>([]);\n\n useLayoutEffect(() => {\n const stickerData = generateStickerData({\n count,\n effect,\n stickers,\n minSize: STICKER_MIN_SIZE,\n maxSize: STICKER_MAX_SIZE,\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 <Container>\n {stickersData.map((data: StickerDatum) => {\n const { id, sticker, x, y, size, fromX, fromY } = data;\n\n return (\n <Sticker\n key={id}\n effect={effect}\n duration={duration}\n fromX={fromX}\n fromY={fromY}\n x={x}\n y={y}\n size={size}\n >\n {sticker}\n </Sticker>\n );\n })}\n </Container>\n );\n};\n\nexport default memo(Stickers);\n"],"names":["Stickers","stickers","effect","count","duration","stickersData","setStickersData","useState","useLayoutEffect","stickerData","generateStickerData","STICKER_MIN_SIZE","STICKER_MAX_SIZE","timeout","jsx","Container","data","id","sticker","x","y","size","fromX","fromY","Sticker","memo"],"mappings":";;;;;AAQA,MAAMA,IAAoC,CAAC,EAAE,UAAAC,GAAU,QAAAC,GAAQ,OAAAC,GAAO,UAAAC,QAAe;AACnF,QAAM,CAACC,GAAcC,CAAe,IAAIC,EAAiD,CAAE,CAAA;AAE3F,SAAAC,EAAgB,MAAM;AACpB,UAAMC,IAAcC,EAAoB;AAAA,MACtC,OAAAP;AAAA,MACA,QAAAD;AAAA,MACA,UAAAD;AAAA,MACA,SAASU;AAAA,MACT,SAASC;AAAA,IAAA,CACV;AAED,IAAAN,EAAgBG,CAAW;AAE3B,UAAMI,IAAU,WAAW,MAAMP,EAAgB,CAAE,CAAA,GAAGF,CAAQ;AAEvD,WAAA,MAAM,aAAaS,CAAO;AAAA,KAChC,CAACZ,GAAUC,GAAQC,GAAOC,CAAQ,CAAC,GAGnC,gBAAAU,EAAAC,GAAA,EACE,UAAaV,EAAA,IAAI,CAACW,MAAuB;AAClC,UAAA,EAAE,IAAAC,GAAI,SAAAC,GAAS,GAAAC,GAAG,GAAAC,GAAG,MAAAC,GAAM,OAAAC,GAAO,OAAAC,EAAU,IAAAP;AAGhD,WAAA,gBAAAF;AAAA,MAACU;AAAA,MAAA;AAAA,QAEC,QAAAtB;AAAA,QACA,UAAAE;AAAA,QACA,OAAAkB;AAAA,QACA,OAAAC;AAAA,QACA,GAAAJ;AAAA,QACA,GAAAC;AAAA,QACA,MAAAC;AAAA,QAEC,UAAAH;AAAA,MAAA;AAAA,MATID;AAAA,IAAA;AAAA,EAYV,CAAA,EACH,CAAA;AAEJ,GAEehB,IAAAwB,EAAKzB,CAAQ;"}
|
@@ -1,108 +0,0 @@
|
|
1
|
-
import { jsxs as y, jsx as a } from "react/jsx-runtime";
|
2
|
-
import h, { css as i } from "styled-components";
|
3
|
-
import b from "../../ui/layout/flex-view.js";
|
4
|
-
import l from "../../ui/separator/separator.js";
|
5
|
-
import { StickerMap as A, MATH_REWARDS as k, INSTRUCTION_REWARDS as R, SCREEN_SIZES as m } from "../constants.js";
|
6
|
-
import T from "./belts.js";
|
7
|
-
import p from "./reward-elements.js";
|
8
|
-
const D = h(b)`
|
9
|
-
justify-content: space-between;
|
10
|
-
margin: 110px 120px;
|
11
|
-
margin-bottom: 48px;
|
12
|
-
${({ $containerStyle: t }) => t}
|
13
|
-
|
14
|
-
${({ $renderOnTeacher: t }) => t && i`
|
15
|
-
margin: 50px auto;
|
16
|
-
padding: 0 16px;
|
17
|
-
`}
|
18
|
-
`, _ = (t) => {
|
19
|
-
if (!(t && Array.isArray(t) && t.length > 0))
|
20
|
-
return { elements: [] };
|
21
|
-
const e = {
|
22
|
-
elements: []
|
23
|
-
};
|
24
|
-
return t.forEach((n) => {
|
25
|
-
const { aggregate_for: r, aggregates: s } = n || {}, { name: o } = r || {};
|
26
|
-
o && [...k, ...R].includes(o) && e.elements.push({ name: o, count: s || 0 });
|
27
|
-
}), e;
|
28
|
-
}, C = (t) => {
|
29
|
-
if (!(t && Array.isArray(t) && t.length > 0))
|
30
|
-
return { stickers: [] };
|
31
|
-
const e = {};
|
32
|
-
return t.forEach((n) => {
|
33
|
-
const { badge_id: r, name: s } = n;
|
34
|
-
r && s && (e[r] === void 0 ? e[r] = { name: s, count: 1 } : e[r] = { name: s, count: e[r].count + 1 });
|
35
|
-
}), { stickers: Object.values(e) };
|
36
|
-
}, $ = (t) => t >= m.LAPTOPL ? {
|
37
|
-
containerStyle: i`
|
38
|
-
margin: 110px auto;
|
39
|
-
margin-bottom: 48px;
|
40
|
-
max-width: 1040px;
|
41
|
-
width: 100%;
|
42
|
-
`
|
43
|
-
} : t < m.TABLET ? {
|
44
|
-
containerStyle: i`
|
45
|
-
margin: 110px 40px;
|
46
|
-
margin-bottom: 48px;
|
47
|
-
flex-direction: column;
|
48
|
-
width: 100%;
|
49
|
-
`
|
50
|
-
} : t < m.LAPTOP ? {
|
51
|
-
containerStyle: i`
|
52
|
-
max-width: 784px;
|
53
|
-
width: 100%;
|
54
|
-
margin: 100px auto;
|
55
|
-
flex-direction: column;
|
56
|
-
`
|
57
|
-
} : {
|
58
|
-
containerStyle: i`
|
59
|
-
display: flex;
|
60
|
-
flex-direction: row;
|
61
|
-
justify-content: space-between;
|
62
|
-
margin: 110px 120px;
|
63
|
-
margin-bottom: 48px;
|
64
|
-
`
|
65
|
-
}, j = ({
|
66
|
-
curriculumHomeData: t,
|
67
|
-
rewardHomeData: c,
|
68
|
-
programStream: e = "MATH",
|
69
|
-
currentScreenWidth: n,
|
70
|
-
renderOnTeacher: r = !1
|
71
|
-
}) => {
|
72
|
-
const { data: s } = t || {}, { curriculum_map: o } = s || {}, { belts: u, goals: x } = o || {}, { data: g } = c || {}, { user_rewards: d, user_stickers: f } = g || {}, { elements: w } = _(d || []), { stickers: E } = C(f || []), { containerStyle: S } = $(n) || {};
|
73
|
-
return /* @__PURE__ */ y(
|
74
|
-
D,
|
75
|
-
{
|
76
|
-
$flexDirection: "row",
|
77
|
-
$justifyContent: "space-between",
|
78
|
-
$containerStyle: S,
|
79
|
-
$renderOnTeacher: r,
|
80
|
-
children: [
|
81
|
-
/* @__PURE__ */ a(T, { beltStats: u, goalStats: x, currentScreenWidth: n }),
|
82
|
-
/* @__PURE__ */ a(l, { width: 60, height: 30 }),
|
83
|
-
/* @__PURE__ */ a(
|
84
|
-
p,
|
85
|
-
{
|
86
|
-
elements: w,
|
87
|
-
programStream: e,
|
88
|
-
currentScreenWidth: n
|
89
|
-
}
|
90
|
-
),
|
91
|
-
/* @__PURE__ */ a(l, { width: 60, height: 30 }),
|
92
|
-
/* @__PURE__ */ a(
|
93
|
-
p,
|
94
|
-
{
|
95
|
-
elements: E,
|
96
|
-
isSticker: !0,
|
97
|
-
currentScreenWidth: n,
|
98
|
-
lotties: A
|
99
|
-
}
|
100
|
-
)
|
101
|
-
]
|
102
|
-
}
|
103
|
-
);
|
104
|
-
}, N = j;
|
105
|
-
export {
|
106
|
-
N as default
|
107
|
-
};
|
108
|
-
//# sourceMappingURL=belts-elements-stickers.js.map
|
@@ -1 +0,0 @@
|
|
1
|
-
{"version":3,"file":"belts-elements-stickers.js","sources":["../../../../src/features/wins-dashboard/belts-elements-stickers/belts-elements-stickers.tsx"],"sourcesContent":["import React from 'react';\nimport styled, { css } from 'styled-components';\n\nimport FlexView from '../../ui/layout/flex-view';\nimport Separator from '../../ui/separator/separator';\nimport { INSTRUCTION_REWARDS, MATH_REWARDS, SCREEN_SIZES, StickerMap } from '../constants';\nimport Belts from './belts';\nimport RewardElements from './reward-elements';\n\ninterface WrapperProps {\n $containerStyle?: ReturnType<typeof css>;\n $renderOnTeacher?: boolean;\n}\n\nconst Wrapper = styled(FlexView)<WrapperProps>`\n justify-content: space-between;\n margin: 110px 120px;\n margin-bottom: 48px;\n ${({ $containerStyle }) => $containerStyle}\n\n ${({ $renderOnTeacher }) =>\n $renderOnTeacher &&\n css`\n margin: 50px auto;\n padding: 0 16px;\n `}\n`;\n\ninterface RewardElement {\n aggregate_for?: { name?: string };\n aggregates?: number;\n}\n\ninterface StickerElement {\n badge_id?: string;\n name?: string;\n}\n\nconst getRewardElements = (\n elements: RewardElement[],\n): { elements: Array<{ name: string; count: number }> } => {\n const isElementsExist = elements && Array.isArray(elements) && elements.length > 0;\n\n if (!isElementsExist) {\n return { elements: [] };\n }\n\n const elementsData = {\n elements: [] as Array<{ name: string; count: number }>,\n };\n\n elements.forEach(item => {\n const { aggregate_for: rewardData, aggregates: totalCount } = item || {};\n const { name } = rewardData || {};\n\n if (name && [...MATH_REWARDS, ...INSTRUCTION_REWARDS].includes(name)) {\n elementsData.elements.push({ name, count: totalCount || 0 });\n }\n });\n\n return elementsData;\n};\n\nconst getRewardStickers = (\n stickers: StickerElement[],\n): { stickers: Array<{ name: string; count: number }> } => {\n const isStickersExist = stickers && Array.isArray(stickers) && stickers.length > 0;\n\n if (!isStickersExist) {\n return { stickers: [] };\n }\n\n const stickersCount: Record<string, { name: string; count: number }> = {};\n\n stickers.forEach(item => {\n const { badge_id: badgeId, name } = item;\n\n if (badgeId && name) {\n if (stickersCount[badgeId] === undefined) {\n stickersCount[badgeId] = { name, count: 1 };\n } else {\n stickersCount[badgeId] = { name, count: stickersCount[badgeId].count + 1 };\n }\n }\n });\n\n return { stickers: Object.values(stickersCount) };\n};\n\nconst getBadgeContainerConfig = (currentScreenWidth: number) => {\n if (currentScreenWidth >= SCREEN_SIZES.LAPTOPL) {\n return {\n containerStyle: css`\n margin: 110px auto;\n margin-bottom: 48px;\n max-width: 1040px;\n width: 100%;\n `,\n };\n }\n\n if (currentScreenWidth < SCREEN_SIZES.TABLET) {\n return {\n containerStyle: css`\n margin: 110px 40px;\n margin-bottom: 48px;\n flex-direction: column;\n width: 100%;\n `,\n };\n }\n\n if (currentScreenWidth < SCREEN_SIZES.LAPTOP) {\n return {\n containerStyle: css`\n max-width: 784px;\n width: 100%;\n margin: 100px auto;\n flex-direction: column;\n `,\n };\n }\n\n return {\n containerStyle: css`\n display: flex;\n flex-direction: row;\n justify-content: space-between;\n margin: 110px 120px;\n margin-bottom: 48px;\n `,\n };\n};\n\n// Types for component props\ninterface CurriculumMap {\n belts?: {\n current_belt_type?: string;\n goals_required?: number;\n };\n goals?: {\n completed_goals: number;\n total_goals: number;\n };\n}\n\ninterface CurriculumHomeData {\n data?: {\n curriculum_map?: CurriculumMap;\n };\n}\n\ninterface RewardHomeData {\n data?: {\n user_rewards?: RewardElement[];\n user_stickers?: StickerElement[];\n };\n}\n\ninterface BeltsElementsStickersProps {\n curriculumHomeData?: CurriculumHomeData;\n rewardHomeData?: RewardHomeData;\n programStream?: string;\n currentScreenWidth: number;\n renderOnTeacher?: boolean;\n}\n\nconst BeltsElementsStickers: React.FC<BeltsElementsStickersProps> = ({\n curriculumHomeData,\n rewardHomeData,\n programStream = 'MATH',\n currentScreenWidth,\n renderOnTeacher = false,\n}) => {\n const { data: curriculumData } = curriculumHomeData || {};\n const { curriculum_map: curriculumMap } = curriculumData || {};\n const { belts: beltStats, goals: goalStats } = curriculumMap || {};\n const { data: rewardHome } = rewardHomeData || {};\n const { user_rewards: rewardElementsData, user_stickers: rewardStickersData } = rewardHome || {};\n const { elements } = getRewardElements(rewardElementsData || []);\n const { stickers } = getRewardStickers(rewardStickersData || []);\n const { containerStyle } = getBadgeContainerConfig(currentScreenWidth) || {};\n\n return (\n <Wrapper\n $flexDirection=\"row\"\n $justifyContent=\"space-between\"\n $containerStyle={containerStyle}\n $renderOnTeacher={renderOnTeacher}\n >\n <Belts beltStats={beltStats} goalStats={goalStats} currentScreenWidth={currentScreenWidth} />\n <Separator width={60} height={30} />\n <RewardElements\n elements={elements}\n programStream={programStream}\n currentScreenWidth={currentScreenWidth}\n />\n <Separator width={60} height={30} />\n <RewardElements\n elements={stickers}\n isSticker\n currentScreenWidth={currentScreenWidth}\n lotties={StickerMap}\n />\n </Wrapper>\n );\n};\n\nexport default BeltsElementsStickers;\n"],"names":["Wrapper","styled","FlexView","$containerStyle","$renderOnTeacher","css","getRewardElements","elements","elementsData","item","rewardData","totalCount","name","MATH_REWARDS","INSTRUCTION_REWARDS","getRewardStickers","stickers","stickersCount","badgeId","getBadgeContainerConfig","currentScreenWidth","SCREEN_SIZES","BeltsElementsStickers","curriculumHomeData","rewardHomeData","programStream","renderOnTeacher","curriculumData","curriculumMap","beltStats","goalStats","rewardHome","rewardElementsData","rewardStickersData","containerStyle","jsxs","jsx","Belts","Separator","RewardElements","StickerMap","BeltsElementsStickers$1"],"mappings":";;;;;;;AAcA,MAAMA,IAAUC,EAAOC,CAAQ;AAAA;AAAA;AAAA;AAAA,IAI3B,CAAC,EAAE,iBAAAC,EAAgB,MAAMA,CAAe;AAAA;AAAA,IAExC,CAAC,EAAE,kBAAAC,QACHA,KACAC;AAAA;AAAA;AAAA,KAGC;AAAA,GAaCC,IAAoB,CACxBC,MACyD;AAGzD,MAAI,EAFoBA,KAAY,MAAM,QAAQA,CAAQ,KAAKA,EAAS,SAAS;AAGxE,WAAA,EAAE,UAAU,CAAA;AAGrB,QAAMC,IAAe;AAAA,IACnB,UAAU,CAAC;AAAA,EAAA;AAGb,SAAAD,EAAS,QAAQ,CAAQE,MAAA;AACvB,UAAM,EAAE,eAAeC,GAAY,YAAYC,EAAW,IAAIF,KAAQ,IAChE,EAAE,MAAAG,EAAA,IAASF,KAAc;AAE3B,IAAAE,KAAQ,CAAC,GAAGC,GAAc,GAAGC,CAAmB,EAAE,SAASF,CAAI,KACjEJ,EAAa,SAAS,KAAK,EAAE,MAAAI,GAAM,OAAOD,KAAc,GAAG;AAAA,EAC7D,CACD,GAEMH;AACT,GAEMO,IAAoB,CACxBC,MACyD;AAGzD,MAAI,EAFoBA,KAAY,MAAM,QAAQA,CAAQ,KAAKA,EAAS,SAAS;AAGxE,WAAA,EAAE,UAAU,CAAA;AAGrB,QAAMC,IAAiE,CAAA;AAEvE,SAAAD,EAAS,QAAQ,CAAQP,MAAA;AACvB,UAAM,EAAE,UAAUS,GAAS,MAAAN,EAAA,IAASH;AAEpC,IAAIS,KAAWN,MACTK,EAAcC,CAAO,MAAM,SAC7BD,EAAcC,CAAO,IAAI,EAAE,MAAAN,GAAM,OAAO,EAAE,IAE5BK,EAAAC,CAAO,IAAI,EAAE,MAAAN,GAAM,OAAOK,EAAcC,CAAO,EAAE,QAAQ;EAE3E,CACD,GAEM,EAAE,UAAU,OAAO,OAAOD,CAAa,EAAE;AAClD,GAEME,IAA0B,CAACC,MAC3BA,KAAsBC,EAAa,UAC9B;AAAA,EACL,gBAAgBhB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAShBe,IAAqBC,EAAa,SAC7B;AAAA,EACL,gBAAgBhB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAShBe,IAAqBC,EAAa,SAC7B;AAAA,EACL,gBAAgBhB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IASb;AAAA,EACL,gBAAgBA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GA2CdiB,IAA8D,CAAC;AAAA,EACnE,oBAAAC;AAAA,EACA,gBAAAC;AAAA,EACA,eAAAC,IAAgB;AAAA,EAChB,oBAAAL;AAAA,EACA,iBAAAM,IAAkB;AACpB,MAAM;AACJ,QAAM,EAAE,MAAMC,MAAmBJ,KAAsB,CAAA,GACjD,EAAE,gBAAgBK,MAAkBD,KAAkB,CAAA,GACtD,EAAE,OAAOE,GAAW,OAAOC,EAAU,IAAIF,KAAiB,IAC1D,EAAE,MAAMG,MAAeP,KAAkB,CAAA,GACzC,EAAE,cAAcQ,GAAoB,eAAeC,EAAmB,IAAIF,KAAc,IACxF,EAAE,UAAAxB,EAAS,IAAID,EAAkB0B,KAAsB,CAAE,CAAA,GACzD,EAAE,UAAAhB,EAAS,IAAID,EAAkBkB,KAAsB,CAAE,CAAA,GACzD,EAAE,gBAAAC,EAAe,IAAIf,EAAwBC,CAAkB,KAAK,CAAA;AAGxE,SAAA,gBAAAe;AAAA,IAACnC;AAAA,IAAA;AAAA,MACC,gBAAe;AAAA,MACf,iBAAgB;AAAA,MAChB,iBAAiBkC;AAAA,MACjB,kBAAkBR;AAAA,MAElB,UAAA;AAAA,QAAC,gBAAAU,EAAAC,GAAA,EAAM,WAAAR,GAAsB,WAAAC,GAAsB,oBAAAV,EAAwC,CAAA;AAAA,QAC1F,gBAAAgB,EAAAE,GAAA,EAAU,OAAO,IAAI,QAAQ,IAAI;AAAA,QAClC,gBAAAF;AAAA,UAACG;AAAA,UAAA;AAAA,YACC,UAAAhC;AAAA,YACA,eAAAkB;AAAA,YACA,oBAAAL;AAAA,UAAA;AAAA,QACF;AAAA,QACC,gBAAAgB,EAAAE,GAAA,EAAU,OAAO,IAAI,QAAQ,IAAI;AAAA,QAClC,gBAAAF;AAAA,UAACG;AAAA,UAAA;AAAA,YACC,UAAUvB;AAAA,YACV,WAAS;AAAA,YACT,oBAAAI;AAAA,YACA,SAASoB;AAAA,UAAA;AAAA,QACX;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAGN,GAEAC,IAAenB;"}
|
@@ -1,94 +0,0 @@
|
|
1
|
-
import { jsx as t, jsxs as d } from "react/jsx-runtime";
|
2
|
-
import l, { css as c } from "styled-components";
|
3
|
-
import w from "../../ui/arrow-tooltip/arrow-tooltip.js";
|
4
|
-
import g from "../../ui/layout/flex-view.js";
|
5
|
-
import h from "../../ui/separator/separator.js";
|
6
|
-
import m from "../../ui/text/text.js";
|
7
|
-
import { SCREEN_SIZES as p, getBeltIcon as x } from "../constants.js";
|
8
|
-
import E from "./progress-bar-horizontal.js";
|
9
|
-
const u = "Black", y = l.div`
|
10
|
-
display: flex;
|
11
|
-
width: 100%;
|
12
|
-
flex-direction: column;
|
13
|
-
align-items: center;
|
14
|
-
${({ $currentScreenWidth: e }) => e < p.LAPTOP && c`
|
15
|
-
width: 80%;
|
16
|
-
flex-direction: row;
|
17
|
-
`}
|
18
|
-
`, P = l(g)`
|
19
|
-
min-width: 250px;
|
20
|
-
${({ $currentScreenWidth: e }) => e < p.LAPTOP && c`
|
21
|
-
min-width: 180px;
|
22
|
-
`}
|
23
|
-
`, _ = l(g)`
|
24
|
-
width: 120px;
|
25
|
-
align-items: center;
|
26
|
-
padding-left: 22px;
|
27
|
-
`, A = l.img`
|
28
|
-
width: 142px;
|
29
|
-
height: 110px;
|
30
|
-
${({ $isBeltsExist: e }) => !e && c`
|
31
|
-
filter: grayscale(100%);
|
32
|
-
opacity: 20%;
|
33
|
-
`};
|
34
|
-
${({ $currentScreenWidth: e }) => e < p.LAPTOP && c`
|
35
|
-
width: 104px;
|
36
|
-
height: 80px;
|
37
|
-
`}
|
38
|
-
`, b = l(g)`
|
39
|
-
width: 250px;
|
40
|
-
`, Y = l(h)`
|
41
|
-
${({ $currentScreenWidth: e }) => e < p.LAPTOP && c`
|
42
|
-
height: 52px;
|
43
|
-
`}
|
44
|
-
`, C = l(m)`
|
45
|
-
opacity: ${({ $isBeltsExist: e }) => !e && "50%"};
|
46
|
-
`, L = (e, s, o, r) => {
|
47
|
-
let i = `${e}/${s} goal mastered`;
|
48
|
-
const a = s - e;
|
49
|
-
return o ? e === s ? i = "Congrats! You're now a Black Belt" : r ? i = `Next Belt: ${r} ${r > 1 ? "goals" : "goal"} away` : i = e < s ? `Next Belt: ${a} ${a > 1 ? "goals" : "goal"} away` : "Congrats! You're now a Black Belt" : o || (i = "You have no belts earned"), i;
|
50
|
-
}, S = () => /* @__PURE__ */ t(m, { $renderAs: "body3", $color: "WHITE", children: "You can't earn belts for the selected program" }), j = ({ beltStats: e, goalStats: s, currentScreenWidth: o }) => {
|
51
|
-
const { current_belt_type: r, goals_required: i } = e || {}, { completed_goals: a = 0, total_goals: $ = 1 } = s || {}, n = !!r, f = n ? `${r && r.toUpperCase()} BELT` : "BELTS", B = Math.floor(a * 100 / $), T = L(a, $, n, i);
|
52
|
-
return /* @__PURE__ */ t(
|
53
|
-
w,
|
54
|
-
{
|
55
|
-
position: "bottom",
|
56
|
-
tooltipItem: S(),
|
57
|
-
renderAs: "primary",
|
58
|
-
hidden: n,
|
59
|
-
children: /* @__PURE__ */ d(y, { $currentScreenWidth: o, children: [
|
60
|
-
/* @__PURE__ */ d(P, { $currentScreenWidth: o, children: [
|
61
|
-
/* @__PURE__ */ t(m, { $renderAs: "h5", children: f }),
|
62
|
-
/* @__PURE__ */ t(h, { height: 24 }),
|
63
|
-
/* @__PURE__ */ t(_, { children: /* @__PURE__ */ t(
|
64
|
-
A,
|
65
|
-
{
|
66
|
-
$currentScreenWidth: o,
|
67
|
-
$isBeltsExist: n,
|
68
|
-
src: n ? x(r || "") : x(u),
|
69
|
-
alt: "Belt"
|
70
|
-
}
|
71
|
-
) })
|
72
|
-
] }),
|
73
|
-
/* @__PURE__ */ d(b, { children: [
|
74
|
-
/* @__PURE__ */ t(Y, { $currentScreenWidth: o, height: 38 }),
|
75
|
-
/* @__PURE__ */ t(
|
76
|
-
E,
|
77
|
-
{
|
78
|
-
progress: B,
|
79
|
-
height: 4,
|
80
|
-
backgroundColor: "GREY_1",
|
81
|
-
progressColor: n ? "GREY_4" : "GREY_2"
|
82
|
-
}
|
83
|
-
),
|
84
|
-
/* @__PURE__ */ t(h, { height: 8 }),
|
85
|
-
/* @__PURE__ */ t(C, { $isBeltsExist: n, $renderAs: "body3", $color: "GREY_4", children: T })
|
86
|
-
] })
|
87
|
-
] })
|
88
|
-
}
|
89
|
-
);
|
90
|
-
};
|
91
|
-
export {
|
92
|
-
j as default
|
93
|
-
};
|
94
|
-
//# sourceMappingURL=belts.js.map
|
@@ -1 +0,0 @@
|
|
1
|
-
{"version":3,"file":"belts.js","sources":["../../../../src/features/wins-dashboard/belts-elements-stickers/belts.tsx"],"sourcesContent":["import React from 'react';\nimport styled, { css } from 'styled-components';\n\nimport ArrowTooltip from '../../ui/arrow-tooltip/arrow-tooltip';\nimport FlexView from '../../ui/layout/flex-view';\nimport Separator from '../../ui/separator/separator';\nimport Text from '../../ui/text/text';\nimport { getBeltIcon, SCREEN_SIZES } from '../constants';\nimport ProgressBarHorizontal from './progress-bar-horizontal';\n\nconst DEFAULT_BELT_TYPE = 'Black';\n\ninterface ContainerProps {\n $currentScreenWidth: number;\n}\n\nconst Container = styled.div<ContainerProps>`\n display: flex;\n width: 100%;\n flex-direction: column;\n align-items: center;\n ${({ $currentScreenWidth }) =>\n $currentScreenWidth < SCREEN_SIZES.LAPTOP &&\n css`\n width: 80%;\n flex-direction: row;\n `}\n`;\n\ninterface HeaderContainerProps {\n $currentScreenWidth: number;\n}\n\nconst HeaderContainer = styled(FlexView)<HeaderContainerProps>`\n min-width: 250px;\n ${({ $currentScreenWidth }) =>\n $currentScreenWidth < SCREEN_SIZES.LAPTOP &&\n css`\n min-width: 180px;\n `}\n`;\n\nconst ProfileWrapper = styled(FlexView)`\n width: 120px;\n align-items: center;\n padding-left: 22px;\n`;\n\ninterface BeltImgProps {\n $isBeltsExist: boolean;\n $currentScreenWidth: number;\n}\n\nconst BeltImg = styled.img<BeltImgProps>`\n width: 142px;\n height: 110px;\n ${({ $isBeltsExist }) =>\n !$isBeltsExist &&\n css`\n filter: grayscale(100%);\n opacity: 20%;\n `};\n ${({ $currentScreenWidth }) =>\n $currentScreenWidth < SCREEN_SIZES.LAPTOP &&\n css`\n width: 104px;\n height: 80px;\n `}\n`;\n\nconst ProgressBarWrapper = styled(FlexView)`\n width: 250px;\n`;\n\ninterface SeparatorDivProps {\n $currentScreenWidth: number;\n}\n\nconst SeparatorDiv = styled(Separator)<SeparatorDivProps>`\n ${({ $currentScreenWidth }) =>\n $currentScreenWidth < SCREEN_SIZES.LAPTOP &&\n css`\n height: 52px;\n `}\n`;\n\ninterface BeltTextProps {\n $isBeltsExist: boolean;\n}\n\nconst BeltText = styled(Text)<BeltTextProps>`\n opacity: ${({ $isBeltsExist }) => !$isBeltsExist && '50%'};\n`;\n\nconst getBarTitle = (\n completedGoals: number,\n totalGoals: number,\n isBeltsExist: boolean,\n nextBeltGoals?: number,\n): string => {\n let title = `${completedGoals}/${totalGoals} goal mastered`;\n const goalsReq = totalGoals - completedGoals;\n\n if (isBeltsExist) {\n if (completedGoals === totalGoals) {\n title = \"Congrats! You're now a Black Belt\";\n } else if (nextBeltGoals) {\n title = `Next Belt: ${nextBeltGoals} ${nextBeltGoals > 1 ? 'goals' : 'goal'} away`;\n } else {\n title =\n completedGoals < totalGoals\n ? `Next Belt: ${goalsReq} ${goalsReq > 1 ? 'goals' : 'goal'} away`\n : \"Congrats! You're now a Black Belt\";\n }\n } else if (!isBeltsExist) {\n title = 'You have no belts earned';\n }\n\n return title;\n};\n\nconst getToolTipText = () => {\n return (\n <Text $renderAs=\"body3\" $color=\"WHITE\">\n You can't earn belts for the selected program\n </Text>\n );\n};\n\ninterface BeltStats {\n current_belt_type?: string;\n goals_required?: number;\n}\n\ninterface GoalStats {\n completed_goals: number;\n total_goals: number;\n}\n\ninterface BeltsProps {\n beltStats?: BeltStats | null;\n goalStats?: GoalStats | null;\n currentScreenWidth: number;\n}\n\nconst Belts: React.FC<BeltsProps> = ({ beltStats, goalStats, currentScreenWidth }) => {\n const { current_belt_type: currentBeltType, goals_required: nextBeltGoals } = beltStats || {};\n const { completed_goals: completedGoals = 0, total_goals: totalGoals = 1 } = goalStats || {};\n\n const isBeltsExist = !!currentBeltType;\n const beltTitle = isBeltsExist\n ? `${currentBeltType && currentBeltType.toUpperCase()} BELT`\n : 'BELTS';\n const progress = Math.floor((completedGoals * 100) / totalGoals);\n const barTitle = getBarTitle(completedGoals, totalGoals, isBeltsExist, nextBeltGoals);\n\n return (\n <ArrowTooltip\n position=\"bottom\"\n tooltipItem={getToolTipText()}\n renderAs=\"primary\"\n hidden={isBeltsExist}\n >\n <Container $currentScreenWidth={currentScreenWidth}>\n <HeaderContainer $currentScreenWidth={currentScreenWidth}>\n <Text $renderAs=\"h5\">{beltTitle}</Text>\n <Separator height={24} />\n <ProfileWrapper>\n <BeltImg\n $currentScreenWidth={currentScreenWidth}\n $isBeltsExist={isBeltsExist}\n src={\n !isBeltsExist ? getBeltIcon(DEFAULT_BELT_TYPE) : getBeltIcon(currentBeltType || '')\n }\n alt=\"Belt\"\n />\n </ProfileWrapper>\n </HeaderContainer>\n <ProgressBarWrapper>\n <SeparatorDiv $currentScreenWidth={currentScreenWidth} height={38} />\n <ProgressBarHorizontal\n progress={progress}\n height={4}\n backgroundColor=\"GREY_1\"\n progressColor={isBeltsExist ? 'GREY_4' : 'GREY_2'}\n />\n <Separator height={8} />\n <BeltText $isBeltsExist={isBeltsExist} $renderAs=\"body3\" $color=\"GREY_4\">\n {barTitle}\n </BeltText>\n </ProgressBarWrapper>\n </Container>\n </ArrowTooltip>\n );\n};\n\nexport default Belts;\n"],"names":["DEFAULT_BELT_TYPE","Container","styled","$currentScreenWidth","SCREEN_SIZES","css","HeaderContainer","FlexView","ProfileWrapper","BeltImg","$isBeltsExist","ProgressBarWrapper","SeparatorDiv","Separator","BeltText","Text","getBarTitle","completedGoals","totalGoals","isBeltsExist","nextBeltGoals","title","goalsReq","getToolTipText","Belts","beltStats","goalStats","currentScreenWidth","currentBeltType","beltTitle","progress","barTitle","jsx","ArrowTooltip","jsxs","getBeltIcon","ProgressBarHorizontal"],"mappings":"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"}
|
@@ -1,182 +0,0 @@
|
|
1
|
-
import { jsxs as h, jsx as o } from "react/jsx-runtime";
|
2
|
-
import { useState as S } from "react";
|
3
|
-
import r, { css as a } from "styled-components";
|
4
|
-
import l from "../../ui/layout/flex-view.js";
|
5
|
-
import T from "../../ui/lottie-animation/lottie-animation.js";
|
6
|
-
import w from "../../ui/separator/separator.js";
|
7
|
-
import m from "../../ui/text/text.js";
|
8
|
-
import { SCREEN_SIZES as u, getRewardElement as L, elementColors as D } from "../constants.js";
|
9
|
-
const W = {
|
10
|
-
TETRA: 0.5,
|
11
|
-
COSA: 0.3,
|
12
|
-
DODA: 0.3,
|
13
|
-
HEXO: 0.5,
|
14
|
-
OCTO: 0.5,
|
15
|
-
EKA: 0.5,
|
16
|
-
DVI: 0.3,
|
17
|
-
CHATVA: 0.3,
|
18
|
-
ASHTA: 0.5,
|
19
|
-
ZODASA: 0.4,
|
20
|
-
CLAP: 0.6,
|
21
|
-
COOL: 0.6,
|
22
|
-
LIKE: 0.6,
|
23
|
-
WOW: 0.6,
|
24
|
-
CHEER: 0.6,
|
25
|
-
"ROCK-ON": 0.6
|
26
|
-
}, R = {
|
27
|
-
ASHTA: "Ashta",
|
28
|
-
CHATVA: "Chatva",
|
29
|
-
COSA: "Cosa",
|
30
|
-
DODA: "Doca",
|
31
|
-
DVI: "Dvi",
|
32
|
-
EKA: "Eka",
|
33
|
-
HEXO: "Hexo",
|
34
|
-
OCTO: "Octo",
|
35
|
-
TETRA: "T'tro",
|
36
|
-
ZODASA: "Zodasa",
|
37
|
-
CONGRATS: "Congrats",
|
38
|
-
COOL: "Cool",
|
39
|
-
KUDOS: "Kudos",
|
40
|
-
GREAT: "Great",
|
41
|
-
WOW: "Wow",
|
42
|
-
AWESOME: "Awesome"
|
43
|
-
}, P = (t, e) => {
|
44
|
-
let i = null, s = "-4px", n = null;
|
45
|
-
return t ? n = "-4px" : (i = `${e ? "-2px" : "2px"}`, s = `${e ? "-4px" : "2px"}`), `
|
46
|
-
bottom: ${i};
|
47
|
-
top: ${n};
|
48
|
-
right: ${s};
|
49
|
-
`;
|
50
|
-
}, H = r(l)`
|
51
|
-
align-items: center;
|
52
|
-
gap: 4px;
|
53
|
-
`, K = r(l)`
|
54
|
-
position: absolute;
|
55
|
-
top: -3px;
|
56
|
-
align-items: center;
|
57
|
-
justify-content: center;
|
58
|
-
width: 62px;
|
59
|
-
height: 62px;
|
60
|
-
`, V = r.div`
|
61
|
-
position: relative;
|
62
|
-
width: 62px;
|
63
|
-
height: 62px;
|
64
|
-
`, y = r.div`
|
65
|
-
position: relative;
|
66
|
-
`, G = r.img`
|
67
|
-
width: 56px;
|
68
|
-
height: 56px;
|
69
|
-
${({ $disabled: t, $disabledVal: e }) => t && a`
|
70
|
-
filter: saturate(0);
|
71
|
-
opacity: ${e};
|
72
|
-
`}
|
73
|
-
`, I = r.div`
|
74
|
-
border: 1px solid ${({ theme: t }) => t.colors.GREY_2};
|
75
|
-
border-radius: 8px;
|
76
|
-
`, j = r(l)`
|
77
|
-
width: 62px;
|
78
|
-
height: 62px;
|
79
|
-
align-items: center;
|
80
|
-
justify-content: center;
|
81
|
-
${({ $disabled: t, $disabledVal: e }) => t && a`
|
82
|
-
filter: saturate(0);
|
83
|
-
opacity: ${e};
|
84
|
-
`}
|
85
|
-
`, Z = r(l)`
|
86
|
-
position: absolute;
|
87
|
-
${({ $isSticker: t, $isCoddingType: e }) => P(t, e)};
|
88
|
-
background-color: ${({ theme: t }) => t.colors.GREY_2};
|
89
|
-
border-radius: ${({ $borderRadius: t }) => t};
|
90
|
-
border: ${({ $borderColor: t }) => `1px solid ${t}`};
|
91
|
-
width: ${({ $width: t }) => t}px;
|
92
|
-
height: 16px;
|
93
|
-
align-items: center;
|
94
|
-
justify-content: center;
|
95
|
-
${({ $currentScreenWidth: t, $width: e }) => t < u.LAPTOP && a`
|
96
|
-
width: ${e + 6}px;
|
97
|
-
height: 22px;
|
98
|
-
`}
|
99
|
-
`, v = r(m)`
|
100
|
-
font-size: 9px;
|
101
|
-
line-height: 14px;
|
102
|
-
${({ $currentScreenWidth: t }) => t < u.LAPTOP && a`
|
103
|
-
font-size: 12px;
|
104
|
-
line-height: 14px;
|
105
|
-
`}
|
106
|
-
`, B = r(m)`
|
107
|
-
color: ${({ theme: t }) => t.colors.BLACK};
|
108
|
-
opacity: ${({ $disabled: t }) => t ? 1 : 0.5};
|
109
|
-
`, U = ({
|
110
|
-
isAchieved: t = !1,
|
111
|
-
count: e = 0,
|
112
|
-
elementType: i,
|
113
|
-
isCoddingType: s = !1,
|
114
|
-
isSticker: n = !1,
|
115
|
-
lotties: A = {},
|
116
|
-
currentScreenWidth: p
|
117
|
-
}) => {
|
118
|
-
const [g, C] = S(!0), d = e >= 100, O = R[i], c = W[i] || 1, { height: f, width: E, lottieSrc: $ } = A[i] || {}, x = (b) => {
|
119
|
-
C(b);
|
120
|
-
};
|
121
|
-
return /* @__PURE__ */ h(H, { children: [
|
122
|
-
/* @__PURE__ */ o(V, { children: /* @__PURE__ */ o(K, { $flexDirection: "row", children: /* @__PURE__ */ h(y, { children: [
|
123
|
-
!n && /* @__PURE__ */ o(
|
124
|
-
G,
|
125
|
-
{
|
126
|
-
$disabled: !t,
|
127
|
-
$disabledVal: c,
|
128
|
-
src: L(i),
|
129
|
-
alt: "reward"
|
130
|
-
}
|
131
|
-
),
|
132
|
-
n && $ && /* @__PURE__ */ o(I, { $disabled: !t, children: /* @__PURE__ */ o(
|
133
|
-
j,
|
134
|
-
{
|
135
|
-
$disabled: !t,
|
136
|
-
$disabledVal: c,
|
137
|
-
onMouseEnter: () => x(!1),
|
138
|
-
onMouseLeave: () => x(!0),
|
139
|
-
children: /* @__PURE__ */ o(
|
140
|
-
T,
|
141
|
-
{
|
142
|
-
src: $,
|
143
|
-
width: E,
|
144
|
-
height: f,
|
145
|
-
settings: {
|
146
|
-
loop: !0,
|
147
|
-
autoplay: !g && t
|
148
|
-
}
|
149
|
-
}
|
150
|
-
)
|
151
|
-
}
|
152
|
-
) }),
|
153
|
-
t && /* @__PURE__ */ o(
|
154
|
-
Z,
|
155
|
-
{
|
156
|
-
$isSticker: n,
|
157
|
-
$borderColor: D[i] || "#000",
|
158
|
-
$width: d ? 28 : 16,
|
159
|
-
$borderRadius: d ? "26px" : "50%",
|
160
|
-
$isCoddingType: s,
|
161
|
-
$currentScreenWidth: p,
|
162
|
-
$flexDirection: "row",
|
163
|
-
children: /* @__PURE__ */ o(
|
164
|
-
v,
|
165
|
-
{
|
166
|
-
$currentScreenWidth: p,
|
167
|
-
$renderAs: "body3",
|
168
|
-
$color: "BLACK",
|
169
|
-
children: e
|
170
|
-
}
|
171
|
-
)
|
172
|
-
}
|
173
|
-
)
|
174
|
-
] }) }) }),
|
175
|
-
/* @__PURE__ */ o(w, { height: 4 }),
|
176
|
-
/* @__PURE__ */ o(B, { $renderAs: "body3", $disabled: t, children: O })
|
177
|
-
] });
|
178
|
-
};
|
179
|
-
export {
|
180
|
-
U as default
|
181
|
-
};
|
182
|
-
//# sourceMappingURL=elements.js.map
|
@@ -1 +0,0 @@
|
|
1
|
-
{"version":3,"file":"elements.js","sources":["../../../../src/features/wins-dashboard/belts-elements-stickers/elements.tsx"],"sourcesContent":["import React, { useState } from 'react';\nimport styled, { css } from 'styled-components';\n\nimport FlexView from '../../ui/layout/flex-view';\nimport LottieAnimation from '../../ui/lottie-animation/lottie-animation';\nimport Separator from '../../ui/separator/separator';\nimport Text from '../../ui/text/text';\nimport { elementColors, getRewardElement, SCREEN_SIZES } from '../constants';\n\nconst disablePercentages: Record<string, number> = {\n 'TETRA': 0.5,\n 'COSA': 0.3,\n 'DODA': 0.3,\n 'HEXO': 0.5,\n 'OCTO': 0.5,\n 'EKA': 0.5,\n 'DVI': 0.3,\n 'CHATVA': 0.3,\n 'ASHTA': 0.5,\n 'ZODASA': 0.4,\n 'CLAP': 0.6,\n 'COOL': 0.6,\n 'LIKE': 0.6,\n 'WOW': 0.6,\n 'CHEER': 0.6,\n 'ROCK-ON': 0.6,\n};\n\nconst elementTitles: Record<string, string> = {\n ASHTA: 'Ashta',\n CHATVA: 'Chatva',\n COSA: 'Cosa',\n DODA: 'Doca',\n DVI: 'Dvi',\n EKA: 'Eka',\n HEXO: 'Hexo',\n OCTO: 'Octo',\n TETRA: `T'tro`,\n ZODASA: 'Zodasa',\n CONGRATS: 'Congrats',\n COOL: 'Cool',\n KUDOS: 'Kudos',\n GREAT: 'Great',\n WOW: 'Wow',\n AWESOME: 'Awesome',\n};\n\nconst getPositionStyles = (isSticker: boolean, isCoddingType: boolean): string => {\n let bottom: string | null = null;\n let right = '-4px';\n let top: string | null = null;\n\n if (!isSticker) {\n bottom = `${isCoddingType ? '-2px' : '2px'}`;\n right = `${isCoddingType ? '-4px' : '2px'}`;\n } else {\n top = '-4px';\n }\n\n return `\n bottom: ${bottom};\n top: ${top};\n right: ${right};\n `;\n};\n\nconst ElementContainer = styled(FlexView)`\n align-items: center;\n gap: 4px;\n`;\n\nconst Wrapper = styled(FlexView)`\n position: absolute;\n top: -3px;\n align-items: center;\n justify-content: center;\n width: 62px;\n height: 62px;\n`;\n\nconst BgWrapper = styled.div`\n position: relative;\n width: 62px;\n height: 62px;\n`;\n\nconst GemContainer = styled.div`\n position: relative;\n`;\n\ninterface ImageWrapperProps {\n $disabled: boolean;\n $disabledVal: number;\n}\n\nconst ImageWrapper = styled.img<ImageWrapperProps>`\n width: 56px;\n height: 56px;\n ${({ $disabled, $disabledVal }) =>\n $disabled &&\n css`\n filter: saturate(0);\n opacity: ${$disabledVal};\n `}\n`;\n\ninterface LottieContainerProps {\n $disabled: boolean;\n}\n\nconst LottieContainer = styled.div<LottieContainerProps>`\n border: 1px solid ${({ theme }) => theme.colors.GREY_2};\n border-radius: 8px;\n`;\n\ninterface LottieWrapperProps {\n $disabled: boolean;\n $disabledVal: number;\n}\n\nconst LottieWrapper = styled(FlexView)<LottieWrapperProps>`\n width: 62px;\n height: 62px;\n align-items: center;\n justify-content: center;\n ${({ $disabled, $disabledVal }) =>\n $disabled &&\n css`\n filter: saturate(0);\n opacity: ${$disabledVal};\n `}\n`;\n\ninterface CountWrapperProps {\n $isSticker: boolean;\n $isCoddingType: boolean;\n $borderColor: string;\n $width: number;\n $borderRadius: string;\n $currentScreenWidth: number;\n}\n\nconst CountWrapper = styled(FlexView)<CountWrapperProps>`\n position: absolute;\n ${({ $isSticker, $isCoddingType }) => getPositionStyles($isSticker, $isCoddingType)};\n background-color: ${({ theme }) => theme.colors.GREY_2};\n border-radius: ${({ $borderRadius }) => $borderRadius};\n border: ${({ $borderColor }) => `1px solid ${$borderColor}`};\n width: ${({ $width }) => $width}px;\n height: 16px;\n align-items: center;\n justify-content: center;\n ${({ $currentScreenWidth, $width }) =>\n $currentScreenWidth < SCREEN_SIZES.LAPTOP &&\n css`\n width: ${$width + 6}px;\n height: 22px;\n `}\n`;\n\ninterface CountTextProps {\n $currentScreenWidth: number;\n}\n\nconst CountText = styled(Text)<CountTextProps>`\n font-size: 9px;\n line-height: 14px;\n ${({ $currentScreenWidth }) =>\n $currentScreenWidth < SCREEN_SIZES.LAPTOP &&\n css`\n font-size: 12px;\n line-height: 14px;\n `}\n`;\n\ninterface ElementTextProps {\n $disabled: boolean;\n}\n\nconst ElementText = styled(Text)<ElementTextProps>`\n color: ${({ theme }) => theme.colors.BLACK};\n opacity: ${({ $disabled }) => ($disabled ? 1 : 0.5)};\n`;\n\ninterface LottieData {\n height: number;\n width: number;\n lottieSrc: string;\n}\n\ninterface ElementProps {\n isAchieved?: boolean;\n count?: number;\n elementType: string;\n isCoddingType?: boolean;\n isSticker?: boolean;\n lotties?: Record<string, LottieData>;\n currentScreenWidth: number;\n}\n\nconst Element: React.FC<ElementProps> = ({\n isAchieved = false,\n count = 0,\n elementType,\n isCoddingType = false,\n isSticker = false,\n lotties = {},\n currentScreenWidth,\n}) => {\n const [isPaused, setIsPaused] = useState(true);\n const isLargeCount = count >= 100;\n const elementTitle = elementTitles[elementType];\n const disabledVal = disablePercentages[elementType] || 1;\n const { height, width, lottieSrc } = lotties[elementType] || {};\n\n const animateLottie = (val: boolean) => {\n setIsPaused(val);\n };\n\n return (\n <ElementContainer>\n <BgWrapper>\n <Wrapper $flexDirection=\"row\">\n <GemContainer>\n {!isSticker && (\n <ImageWrapper\n $disabled={!isAchieved}\n $disabledVal={disabledVal}\n src={getRewardElement(elementType)}\n alt=\"reward\"\n />\n )}\n {isSticker && lottieSrc && (\n <LottieContainer $disabled={!isAchieved}>\n <LottieWrapper\n $disabled={!isAchieved}\n $disabledVal={disabledVal}\n onMouseEnter={() => animateLottie(false)}\n onMouseLeave={() => animateLottie(true)}\n >\n <LottieAnimation\n src={lottieSrc}\n width={width}\n height={height}\n settings={{\n loop: true,\n autoplay: !isPaused && isAchieved,\n }}\n />\n </LottieWrapper>\n </LottieContainer>\n )}\n\n {isAchieved && (\n <CountWrapper\n $isSticker={isSticker}\n $borderColor={elementColors[elementType as keyof typeof elementColors] || '#000'}\n $width={isLargeCount ? 28 : 16}\n $borderRadius={isLargeCount ? '26px' : '50%'}\n $isCoddingType={isCoddingType}\n $currentScreenWidth={currentScreenWidth}\n $flexDirection=\"row\"\n >\n <CountText\n $currentScreenWidth={currentScreenWidth}\n $renderAs=\"body3\"\n $color=\"BLACK\"\n >\n {count}\n </CountText>\n </CountWrapper>\n )}\n </GemContainer>\n </Wrapper>\n </BgWrapper>\n <Separator height={4} />\n <ElementText $renderAs=\"body3\" $disabled={isAchieved}>\n {elementTitle}\n </ElementText>\n </ElementContainer>\n );\n};\n\nexport default Element;\n"],"names":["disablePercentages","elementTitles","getPositionStyles","isSticker","isCoddingType","bottom","right","top","ElementContainer","styled","FlexView","Wrapper","BgWrapper","GemContainer","ImageWrapper","$disabled","$disabledVal","css","LottieContainer","theme","LottieWrapper","CountWrapper","$isSticker","$isCoddingType","$borderRadius","$borderColor","$width","$currentScreenWidth","SCREEN_SIZES","CountText","Text","ElementText","Element","isAchieved","count","elementType","lotties","currentScreenWidth","isPaused","setIsPaused","useState","isLargeCount","elementTitle","disabledVal","height","width","lottieSrc","animateLottie","val","jsx","getRewardElement","LottieAnimation","elementColors","Separator"],"mappings":";;;;;;;;AASA,MAAMA,IAA6C;AAAA,EACjD,OAAS;AAAA,EACT,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,KAAO;AAAA,EACP,KAAO;AAAA,EACP,QAAU;AAAA,EACV,OAAS;AAAA,EACT,QAAU;AAAA,EACV,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,KAAO;AAAA,EACP,OAAS;AAAA,EACT,WAAW;AACb,GAEMC,IAAwC;AAAA,EAC5C,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,MAAM;AAAA,EACN,MAAM;AAAA,EACN,KAAK;AAAA,EACL,KAAK;AAAA,EACL,MAAM;AAAA,EACN,MAAM;AAAA,EACN,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,UAAU;AAAA,EACV,MAAM;AAAA,EACN,OAAO;AAAA,EACP,OAAO;AAAA,EACP,KAAK;AAAA,EACL,SAAS;AACX,GAEMC,IAAoB,CAACC,GAAoBC,MAAmC;AAChF,MAAIC,IAAwB,MACxBC,IAAQ,QACRC,IAAqB;AAEzB,SAAKJ,IAIGI,IAAA,UAHGF,IAAA,GAAGD,IAAgB,SAAS,KAAK,IAClCE,IAAA,GAAGF,IAAgB,SAAS,KAAK,KAKpC;AAAA,cACKC,CAAM;AAAA,WACTE,CAAG;AAAA,aACDD,CAAK;AAAA;AAElB,GAEME,IAAmBC,EAAOC,CAAQ;AAAA;AAAA;AAAA,GAKlCC,IAAUF,EAAOC,CAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GASzBE,IAAYH,EAAO;AAAA;AAAA;AAAA;AAAA,GAMnBI,IAAeJ,EAAO;AAAA;AAAA,GAStBK,IAAeL,EAAO;AAAA;AAAA;AAAA,IAGxB,CAAC,EAAE,WAAAM,GAAW,cAAAC,EAAA,MACdD,KACAE;AAAA;AAAA,iBAEaD,CAAY;AAAA,KACxB;AAAA,GAOCE,IAAkBT,EAAO;AAAA,sBACT,CAAC,EAAE,OAAAU,EAAA,MAAYA,EAAM,OAAO,MAAM;AAAA;AAAA,GASlDC,IAAgBX,EAAOC,CAAQ;AAAA;AAAA;AAAA;AAAA;AAAA,IAKjC,CAAC,EAAE,WAAAK,GAAW,cAAAC,EAAA,MACdD,KACAE;AAAA;AAAA,iBAEaD,CAAY;AAAA,KACxB;AAAA,GAYCK,IAAeZ,EAAOC,CAAQ;AAAA;AAAA,IAEhC,CAAC,EAAE,YAAAY,GAAY,gBAAAC,EAAA,MAAqBrB,EAAkBoB,GAAYC,CAAc,CAAC;AAAA,sBAC/D,CAAC,EAAE,OAAAJ,EAAA,MAAYA,EAAM,OAAO,MAAM;AAAA,mBACrC,CAAC,EAAE,eAAAK,EAAc,MAAMA,CAAa;AAAA,YAC3C,CAAC,EAAE,cAAAC,EAAmB,MAAA,aAAaA,CAAY,EAAE;AAAA,WAClD,CAAC,EAAE,QAAAC,EAAO,MAAMA,CAAM;AAAA;AAAA;AAAA;AAAA,IAI7B,CAAC,EAAE,qBAAAC,GAAqB,QAAAD,QACxBC,IAAsBC,EAAa,UACnCX;AAAA,eACWS,IAAS,CAAC;AAAA;AAAA,KAEpB;AAAA,GAOCG,IAAYpB,EAAOqB,CAAI;AAAA;AAAA;AAAA,IAGzB,CAAC,EAAE,qBAAAH,EACH,MAAAA,IAAsBC,EAAa,UACnCX;AAAA;AAAA;AAAA,KAGC;AAAA,GAOCc,IAActB,EAAOqB,CAAI;AAAA,WACpB,CAAC,EAAE,OAAAX,EAAA,MAAYA,EAAM,OAAO,KAAK;AAAA,aAC/B,CAAC,EAAE,WAAAJ,EAAA,MAAiBA,IAAY,IAAI,GAAI;AAAA,GAmB/CiB,IAAkC,CAAC;AAAA,EACvC,YAAAC,IAAa;AAAA,EACb,OAAAC,IAAQ;AAAA,EACR,aAAAC;AAAA,EACA,eAAA/B,IAAgB;AAAA,EAChB,WAAAD,IAAY;AAAA,EACZ,SAAAiC,IAAU,CAAC;AAAA,EACX,oBAAAC;AACF,MAAM;AACJ,QAAM,CAACC,GAAUC,CAAW,IAAIC,EAAS,EAAI,GACvCC,IAAeP,KAAS,KACxBQ,IAAezC,EAAckC,CAAW,GACxCQ,IAAc3C,EAAmBmC,CAAW,KAAK,GACjD,EAAE,QAAAS,GAAQ,OAAAC,GAAO,WAAAC,MAAcV,EAAQD,CAAW,KAAK,IAEvDY,IAAgB,CAACC,MAAiB;AACtC,IAAAT,EAAYS,CAAG;AAAA,EAAA;AAGjB,2BACGxC,GACC,EAAA,UAAA;AAAA,IAAA,gBAAAyC,EAACrC,KACC,UAAC,gBAAAqC,EAAAtC,GAAA,EAAQ,gBAAe,OACtB,4BAACE,GACE,EAAA,UAAA;AAAA,MAAA,CAACV,KACA,gBAAA8C;AAAA,QAACnC;AAAA,QAAA;AAAA,UACC,WAAW,CAACmB;AAAA,UACZ,cAAcU;AAAA,UACd,KAAKO,EAAiBf,CAAW;AAAA,UACjC,KAAI;AAAA,QAAA;AAAA,MACN;AAAA,MAEDhC,KAAa2C,KACZ,gBAAAG,EAAC/B,GAAgB,EAAA,WAAW,CAACe,GAC3B,UAAA,gBAAAgB;AAAA,QAAC7B;AAAA,QAAA;AAAA,UACC,WAAW,CAACa;AAAA,UACZ,cAAcU;AAAA,UACd,cAAc,MAAMI,EAAc,EAAK;AAAA,UACvC,cAAc,MAAMA,EAAc,EAAI;AAAA,UAEtC,UAAA,gBAAAE;AAAA,YAACE;AAAA,YAAA;AAAA,cACC,KAAKL;AAAA,cACL,OAAAD;AAAA,cACA,QAAAD;AAAA,cACA,UAAU;AAAA,gBACR,MAAM;AAAA,gBACN,UAAU,CAACN,KAAYL;AAAA,cACzB;AAAA,YAAA;AAAA,UACF;AAAA,QAAA;AAAA,MAAA,GAEJ;AAAA,MAGDA,KACC,gBAAAgB;AAAA,QAAC5B;AAAA,QAAA;AAAA,UACC,YAAYlB;AAAA,UACZ,cAAciD,EAAcjB,CAAyC,KAAK;AAAA,UAC1E,QAAQM,IAAe,KAAK;AAAA,UAC5B,eAAeA,IAAe,SAAS;AAAA,UACvC,gBAAgBrC;AAAA,UAChB,qBAAqBiC;AAAA,UACrB,gBAAe;AAAA,UAEf,UAAA,gBAAAY;AAAA,YAACpB;AAAA,YAAA;AAAA,cACC,qBAAqBQ;AAAA,cACrB,WAAU;AAAA,cACV,QAAO;AAAA,cAEN,UAAAH;AAAA,YAAA;AAAA,UACH;AAAA,QAAA;AAAA,MACF;AAAA,IAAA,EAEJ,CAAA,EACF,CAAA,GACF;AAAA,IACA,gBAAAe,EAACI,GAAU,EAAA,QAAQ,EAAG,CAAA;AAAA,sBACrBtB,GAAY,EAAA,WAAU,SAAQ,WAAWE,GACvC,UACHS,GAAA;AAAA,EACF,EAAA,CAAA;AAEJ;"}
|