@cuemath/leap 3.3.13 → 3.3.14-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 +6 -0
- package/dist/assets/illustrations/illustrations.js.map +1 -1
- package/dist/assets/images/images.js +10 -0
- package/dist/assets/images/images.js.map +1 -1
- package/dist/assets/line-icons/icons/cue-coin.js +182 -0
- package/dist/assets/line-icons/icons/cue-coin.js.map +1 -0
- package/dist/assets/line-icons/icons/wins-common-icon.js +26 -0
- package/dist/assets/line-icons/icons/wins-common-icon.js.map +1 -0
- package/dist/assets/line-icons/icons/wins-epic-icon.js +25 -0
- package/dist/assets/line-icons/icons/wins-epic-icon.js.map +1 -0
- package/dist/assets/line-icons/icons/wins-legendary-icon.js +25 -0
- package/dist/assets/line-icons/icons/wins-legendary-icon.js.map +1 -0
- package/dist/assets/line-icons/icons/wins-mystery-icon.js +105 -0
- package/dist/assets/line-icons/icons/wins-mystery-icon.js.map +1 -0
- package/dist/assets/line-icons/icons/wins-mythic-icon.js +28 -0
- package/dist/assets/line-icons/icons/wins-mythic-icon.js.map +1 -0
- package/dist/assets/line-icons/icons/wins-rare-icon.js +28 -0
- package/dist/assets/line-icons/icons/wins-rare-icon.js.map +1 -0
- package/dist/assets/lottie/lottie.js +6 -1
- package/dist/assets/lottie/lottie.js.map +1 -1
- package/dist/features/circle-games/hooks/use-circle-sounds/constants.js +5 -7
- package/dist/features/circle-games/hooks/use-circle-sounds/constants.js.map +1 -1
- package/dist/features/circle-games/hooks/use-circle-sounds/use-circle-sounds.js +81 -103
- package/dist/features/circle-games/hooks/use-circle-sounds/use-circle-sounds.js.map +1 -1
- package/dist/features/ui/constants/z-index.js +5 -3
- package/dist/features/ui/constants/z-index.js.map +1 -1
- package/dist/features/wins-dashboard/belts-elements-stickers/belts-elements-stickers.js +109 -0
- package/dist/features/wins-dashboard/belts-elements-stickers/belts-elements-stickers.js.map +1 -0
- package/dist/features/wins-dashboard/belts-elements-stickers/belts.js +95 -0
- package/dist/features/wins-dashboard/belts-elements-stickers/belts.js.map +1 -0
- package/dist/features/wins-dashboard/belts-elements-stickers/elements.js +184 -0
- package/dist/features/wins-dashboard/belts-elements-stickers/elements.js.map +1 -0
- package/dist/features/wins-dashboard/belts-elements-stickers/progress-bar-horizontal.js +36 -0
- package/dist/features/wins-dashboard/belts-elements-stickers/progress-bar-horizontal.js.map +1 -0
- package/dist/features/wins-dashboard/belts-elements-stickers/reward-elements.js +83 -0
- package/dist/features/wins-dashboard/belts-elements-stickers/reward-elements.js.map +1 -0
- package/dist/features/wins-dashboard/constants.js +161 -0
- package/dist/features/wins-dashboard/constants.js.map +1 -0
- package/dist/features/wins-dashboard/header/wins-header.js +95 -0
- package/dist/features/wins-dashboard/header/wins-header.js.map +1 -0
- package/dist/features/wins-dashboard/student-badges/animated-tabbar.js +66 -0
- package/dist/features/wins-dashboard/student-badges/animated-tabbar.js.map +1 -0
- package/dist/features/wins-dashboard/student-badges/hooks/use-student-badge-list-hook.js +135 -0
- package/dist/features/wins-dashboard/student-badges/hooks/use-student-badge-list-hook.js.map +1 -0
- package/dist/features/wins-dashboard/student-badges/student-badge.js +168 -0
- package/dist/features/wins-dashboard/student-badges/student-badge.js.map +1 -0
- package/dist/features/wins-dashboard/student-badges/student-badges-lists.js +137 -0
- package/dist/features/wins-dashboard/student-badges/student-badges-lists.js.map +1 -0
- package/dist/index.d.ts +171 -3
- package/dist/index.js +665 -652
- package/dist/index.js.map +1 -1
- package/dist/node_modules/query-string/base.js +1 -1
- package/dist/node_modules/query-string/node_modules/decode-uri-component/index.js.map +1 -0
- package/dist/node_modules/uuid/dist/esm-browser/regex.js +5 -0
- package/dist/node_modules/uuid/dist/esm-browser/regex.js.map +1 -0
- package/dist/node_modules/uuid/dist/esm-browser/rng.js +2 -3
- package/dist/node_modules/uuid/dist/esm-browser/rng.js.map +1 -1
- package/dist/node_modules/uuid/dist/esm-browser/stringify.js +10 -6
- package/dist/node_modules/uuid/dist/esm-browser/stringify.js.map +1 -1
- package/dist/node_modules/uuid/dist/esm-browser/v4.js +9 -12
- package/dist/node_modules/uuid/dist/esm-browser/v4.js.map +1 -1
- package/dist/node_modules/uuid/dist/esm-browser/validate.js +8 -0
- package/dist/node_modules/uuid/dist/esm-browser/validate.js.map +1 -0
- package/dist/static/awesome.4239f583.json +1 -0
- 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 +1 -0
- package/dist/static/common.9e8ceef1.svg +1 -0
- package/dist/static/cool.cd6921bb.json +1 -0
- package/dist/static/epic.37a0265a.svg +1 -0
- package/dist/static/green-belt.5501296f.png +0 -0
- package/dist/static/legendary.f15d09ca.svg +1 -0
- package/dist/static/like-button.281a2618.json +1 -0
- package/dist/static/mastered-badge.91d25e92.png +0 -0
- package/dist/static/mystery.81ada5fb.svg +1 -0
- package/dist/static/mythic.58ba0ae0.svg +1 -0
- package/dist/static/orange-belt.1fefcc8c.png +0 -0
- package/dist/static/purple-belt.e15611b4.png +0 -0
- package/dist/static/rare.1ffaa311.svg +1 -0
- package/dist/static/red-belt.11f841d9.png +0 -0
- package/dist/static/star-strike-emoji.c0b31028.json +1 -0
- package/dist/static/trophy.5ef1853a.json +1 -0
- package/dist/static/white-belt.ea93103e.png +0 -0
- package/dist/static/yellow-belt.0c47b8cc.png +0 -0
- package/package.json +1 -1
- package/dist/features/circle-games/hooks/use-circle-sounds/helper.js +0 -19
- package/dist/features/circle-games/hooks/use-circle-sounds/helper.js.map +0 -1
- package/dist/node_modules/decode-uri-component/index.js.map +0 -1
- package/dist/node_modules/uuid/dist/esm-browser/native.js +0 -7
- package/dist/node_modules/uuid/dist/esm-browser/native.js.map +0 -1
- /package/dist/node_modules/{decode-uri-component → query-string/node_modules/decode-uri-component}/index.js +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"belts-elements-stickers.js","sources":["../../../../src/features/wins-dashboard/belts-elements-stickers/belts-elements-stickers.tsx"],"sourcesContent":["import React, { memo } 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 memo(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","memo"],"mappings":"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"}
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
import { jsx as t, jsxs as d } from "react/jsx-runtime";
|
|
2
|
+
import { memo as w } from "react";
|
|
3
|
+
import s, { css as c } from "styled-components";
|
|
4
|
+
import E from "../../ui/arrow-tooltip/arrow-tooltip.js";
|
|
5
|
+
import g from "../../ui/layout/flex-view.js";
|
|
6
|
+
import h from "../../ui/separator/separator.js";
|
|
7
|
+
import m from "../../ui/text/text.js";
|
|
8
|
+
import { SCREEN_SIZES as p, getBeltIcon as x } from "../constants.js";
|
|
9
|
+
import u from "./progress-bar-horizontal.js";
|
|
10
|
+
const y = "Black", P = s.div`
|
|
11
|
+
display: flex;
|
|
12
|
+
width: 100%;
|
|
13
|
+
flex-direction: column;
|
|
14
|
+
align-items: center;
|
|
15
|
+
${({ $currentScreenWidth: e }) => e < p.LAPTOP && c`
|
|
16
|
+
width: 80%;
|
|
17
|
+
flex-direction: row;
|
|
18
|
+
`}
|
|
19
|
+
`, _ = s(g)`
|
|
20
|
+
min-width: 250px;
|
|
21
|
+
${({ $currentScreenWidth: e }) => e < p.LAPTOP && c`
|
|
22
|
+
min-width: 180px;
|
|
23
|
+
`}
|
|
24
|
+
`, A = s(g)`
|
|
25
|
+
width: 120px;
|
|
26
|
+
align-items: center;
|
|
27
|
+
padding-left: 22px;
|
|
28
|
+
`, b = s.img`
|
|
29
|
+
width: 142px;
|
|
30
|
+
height: 110px;
|
|
31
|
+
${({ $isBeltsExist: e }) => !e && c`
|
|
32
|
+
filter: grayscale(100%);
|
|
33
|
+
opacity: 20%;
|
|
34
|
+
`};
|
|
35
|
+
${({ $currentScreenWidth: e }) => e < p.LAPTOP && c`
|
|
36
|
+
width: 104px;
|
|
37
|
+
height: 80px;
|
|
38
|
+
`}
|
|
39
|
+
`, Y = s(g)`
|
|
40
|
+
width: 250px;
|
|
41
|
+
`, C = s(h)`
|
|
42
|
+
${({ $currentScreenWidth: e }) => e < p.LAPTOP && c`
|
|
43
|
+
height: 52px;
|
|
44
|
+
`}
|
|
45
|
+
`, L = s(m)`
|
|
46
|
+
opacity: ${({ $isBeltsExist: e }) => !e && "50%"};
|
|
47
|
+
`, S = (e, l, o, r) => {
|
|
48
|
+
let i = `${e}/${l} goal mastered`;
|
|
49
|
+
const a = l - e;
|
|
50
|
+
return o ? e === l ? i = "Congrats! You're now a Black Belt" : r ? i = `Next Belt: ${r} ${r > 1 ? "goals" : "goal"} away` : i = e < l ? `Next Belt: ${a} ${a > 1 ? "goals" : "goal"} away` : "Congrats! You're now a Black Belt" : o || (i = "You have no belts earned"), i;
|
|
51
|
+
}, R = () => /* @__PURE__ */ t(m, { $renderAs: "body3", $color: "WHITE", children: "You can't earn belts for the selected program" }), I = ({ beltStats: e, goalStats: l, currentScreenWidth: o }) => {
|
|
52
|
+
const { current_belt_type: r, goals_required: i } = e || {}, { completed_goals: a = 0, total_goals: $ = 1 } = l || {}, n = !!r, f = n ? `${r && r.toUpperCase()} BELT` : "BELTS", B = Math.floor(a * 100 / $), T = S(a, $, n, i);
|
|
53
|
+
return /* @__PURE__ */ t(
|
|
54
|
+
E,
|
|
55
|
+
{
|
|
56
|
+
position: "bottom",
|
|
57
|
+
tooltipItem: R(),
|
|
58
|
+
renderAs: "primary",
|
|
59
|
+
hidden: n,
|
|
60
|
+
children: /* @__PURE__ */ d(P, { $currentScreenWidth: o, children: [
|
|
61
|
+
/* @__PURE__ */ d(_, { $currentScreenWidth: o, children: [
|
|
62
|
+
/* @__PURE__ */ t(m, { $renderAs: "h5", children: f }),
|
|
63
|
+
/* @__PURE__ */ t(h, { height: 24 }),
|
|
64
|
+
/* @__PURE__ */ t(A, { children: /* @__PURE__ */ t(
|
|
65
|
+
b,
|
|
66
|
+
{
|
|
67
|
+
$currentScreenWidth: o,
|
|
68
|
+
$isBeltsExist: n,
|
|
69
|
+
src: n ? x(r || "") : x(y),
|
|
70
|
+
alt: "Belt"
|
|
71
|
+
}
|
|
72
|
+
) })
|
|
73
|
+
] }),
|
|
74
|
+
/* @__PURE__ */ d(Y, { children: [
|
|
75
|
+
/* @__PURE__ */ t(C, { $currentScreenWidth: o, height: 38 }),
|
|
76
|
+
/* @__PURE__ */ t(
|
|
77
|
+
u,
|
|
78
|
+
{
|
|
79
|
+
progress: B,
|
|
80
|
+
height: 4,
|
|
81
|
+
backgroundColor: "GREY_1",
|
|
82
|
+
progressColor: n ? "GREY_4" : "GREY_2"
|
|
83
|
+
}
|
|
84
|
+
),
|
|
85
|
+
/* @__PURE__ */ t(h, { height: 8 }),
|
|
86
|
+
/* @__PURE__ */ t(L, { $isBeltsExist: n, $renderAs: "body3", $color: "GREY_4", children: T })
|
|
87
|
+
] })
|
|
88
|
+
] })
|
|
89
|
+
}
|
|
90
|
+
);
|
|
91
|
+
}, F = w(I);
|
|
92
|
+
export {
|
|
93
|
+
F as default
|
|
94
|
+
};
|
|
95
|
+
//# sourceMappingURL=belts.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"belts.js","sources":["../../../../src/features/wins-dashboard/belts-elements-stickers/belts.tsx"],"sourcesContent":["import React, { memo } 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 memo(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","Belts$1","memo"],"mappings":"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"}
|
|
@@ -0,0 +1,184 @@
|
|
|
1
|
+
import { jsxs as u, jsx as o } from "react/jsx-runtime";
|
|
2
|
+
import w, { memo as S, useCallback as f } from "react";
|
|
3
|
+
import r, { css as c } from "styled-components";
|
|
4
|
+
import d from "../../ui/layout/flex-view.js";
|
|
5
|
+
import R from "../../ui/lottie-animation/lottie-animation.js";
|
|
6
|
+
import D from "../../ui/separator/separator.js";
|
|
7
|
+
import C from "../../ui/text/text.js";
|
|
8
|
+
import { SCREEN_SIZES as g, getRewardElement as W, elementColors as y } from "../constants.js";
|
|
9
|
+
const H = {
|
|
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
|
+
}, K = {
|
|
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
|
+
}, V = (t, e) => {
|
|
44
|
+
let i = null, a = "-4px", n = null;
|
|
45
|
+
return t ? n = "-4px" : (i = `${e ? "-2px" : "2px"}`, a = `${e ? "-4px" : "2px"}`), `
|
|
46
|
+
bottom: ${i};
|
|
47
|
+
top: ${n};
|
|
48
|
+
right: ${a};
|
|
49
|
+
`;
|
|
50
|
+
}, P = r(d)`
|
|
51
|
+
align-items: center;
|
|
52
|
+
gap: 4px;
|
|
53
|
+
`, G = r(d)`
|
|
54
|
+
position: absolute;
|
|
55
|
+
top: -3px;
|
|
56
|
+
align-items: center;
|
|
57
|
+
justify-content: center;
|
|
58
|
+
width: 62px;
|
|
59
|
+
height: 62px;
|
|
60
|
+
`, j = r.div`
|
|
61
|
+
position: relative;
|
|
62
|
+
width: 62px;
|
|
63
|
+
height: 62px;
|
|
64
|
+
`, I = r.div`
|
|
65
|
+
position: relative;
|
|
66
|
+
`, M = r.img`
|
|
67
|
+
width: 56px;
|
|
68
|
+
height: 56px;
|
|
69
|
+
${({ $disabled: t, $disabledVal: e }) => t && c`
|
|
70
|
+
filter: saturate(0);
|
|
71
|
+
opacity: ${e};
|
|
72
|
+
`}
|
|
73
|
+
`, _ = r.div`
|
|
74
|
+
border: 1px solid ${({ theme: t }) => t.colors.GREY_2};
|
|
75
|
+
border-radius: 8px;
|
|
76
|
+
`, Z = r(d)`
|
|
77
|
+
width: 62px;
|
|
78
|
+
height: 62px;
|
|
79
|
+
align-items: center;
|
|
80
|
+
justify-content: center;
|
|
81
|
+
${({ $disabled: t, $disabledVal: e }) => t && c`
|
|
82
|
+
filter: saturate(0);
|
|
83
|
+
opacity: ${e};
|
|
84
|
+
`}
|
|
85
|
+
`, v = r(d)`
|
|
86
|
+
position: absolute;
|
|
87
|
+
${({ $isSticker: t, $isCoddingType: e }) => V(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 < g.LAPTOP && c`
|
|
96
|
+
width: ${e + 6}px;
|
|
97
|
+
height: 22px;
|
|
98
|
+
`}
|
|
99
|
+
`, B = r(C)`
|
|
100
|
+
font-size: 9px;
|
|
101
|
+
line-height: 14px;
|
|
102
|
+
${({ $currentScreenWidth: t }) => t < g.LAPTOP && c`
|
|
103
|
+
font-size: 12px;
|
|
104
|
+
line-height: 14px;
|
|
105
|
+
`}
|
|
106
|
+
`, N = r(C)`
|
|
107
|
+
color: ${({ theme: t }) => t.colors.BLACK};
|
|
108
|
+
opacity: ${({ $disabled: t }) => t ? 1 : 0.5};
|
|
109
|
+
`, k = ({
|
|
110
|
+
isAchieved: t = !1,
|
|
111
|
+
count: e = 0,
|
|
112
|
+
elementType: i,
|
|
113
|
+
isCoddingType: a = !1,
|
|
114
|
+
isSticker: n = !1,
|
|
115
|
+
lotties: A = {},
|
|
116
|
+
currentScreenWidth: $
|
|
117
|
+
}) => {
|
|
118
|
+
const h = e >= 100, O = K[i], x = H[i] || 1, { height: E, width: b, lottieSrc: s } = A[i] || {}, p = w.useRef(null), L = f(() => {
|
|
119
|
+
var l, m;
|
|
120
|
+
t && s && ((l = p.current) == null || l.play(), (m = p.current) == null || m.setLoop(!0));
|
|
121
|
+
}, [t, s]), T = f(() => {
|
|
122
|
+
var l;
|
|
123
|
+
s && ((l = p.current) == null || l.setLoop(!1));
|
|
124
|
+
}, [s]);
|
|
125
|
+
return /* @__PURE__ */ u(P, { children: [
|
|
126
|
+
/* @__PURE__ */ o(j, { children: /* @__PURE__ */ o(G, { $flexDirection: "row", children: /* @__PURE__ */ u(I, { children: [
|
|
127
|
+
!n && /* @__PURE__ */ o(
|
|
128
|
+
M,
|
|
129
|
+
{
|
|
130
|
+
$disabled: !t,
|
|
131
|
+
$disabledVal: x,
|
|
132
|
+
src: W(i),
|
|
133
|
+
alt: "reward"
|
|
134
|
+
}
|
|
135
|
+
),
|
|
136
|
+
n && s && /* @__PURE__ */ o(_, { $disabled: !t, children: /* @__PURE__ */ o(
|
|
137
|
+
Z,
|
|
138
|
+
{
|
|
139
|
+
$disabled: !t,
|
|
140
|
+
$disabledVal: x,
|
|
141
|
+
onMouseEnter: L,
|
|
142
|
+
onMouseLeave: T,
|
|
143
|
+
children: /* @__PURE__ */ o(
|
|
144
|
+
R,
|
|
145
|
+
{
|
|
146
|
+
src: s,
|
|
147
|
+
width: b,
|
|
148
|
+
height: E,
|
|
149
|
+
ref: p,
|
|
150
|
+
settings: { autoplay: !1, loop: !1 }
|
|
151
|
+
}
|
|
152
|
+
)
|
|
153
|
+
}
|
|
154
|
+
) }),
|
|
155
|
+
t && /* @__PURE__ */ o(
|
|
156
|
+
v,
|
|
157
|
+
{
|
|
158
|
+
$isSticker: n,
|
|
159
|
+
$borderColor: y[i] || "#000",
|
|
160
|
+
$width: h ? 28 : 16,
|
|
161
|
+
$borderRadius: h ? "26px" : "50%",
|
|
162
|
+
$isCoddingType: a,
|
|
163
|
+
$currentScreenWidth: $,
|
|
164
|
+
$flexDirection: "row",
|
|
165
|
+
children: /* @__PURE__ */ o(
|
|
166
|
+
B,
|
|
167
|
+
{
|
|
168
|
+
$currentScreenWidth: $,
|
|
169
|
+
$renderAs: "body3",
|
|
170
|
+
$color: "BLACK",
|
|
171
|
+
children: e
|
|
172
|
+
}
|
|
173
|
+
)
|
|
174
|
+
}
|
|
175
|
+
)
|
|
176
|
+
] }) }) }),
|
|
177
|
+
/* @__PURE__ */ o(D, { height: 4 }),
|
|
178
|
+
/* @__PURE__ */ o(N, { $renderAs: "body3", $disabled: t, children: O })
|
|
179
|
+
] });
|
|
180
|
+
}, tt = S(k);
|
|
181
|
+
export {
|
|
182
|
+
tt as default
|
|
183
|
+
};
|
|
184
|
+
//# sourceMappingURL=elements.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"elements.js","sources":["../../../../src/features/wins-dashboard/belts-elements-stickers/elements.tsx"],"sourcesContent":["import type { ILottieAnimationRef } from '../../ui/lottie-animation/types';\n\nimport React, { memo, useCallback } 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 isLargeCount = count >= 100;\n const elementTitle = elementTitles[elementType];\n const disabledVal = disablePercentages[elementType] || 1;\n const { height, width, lottieSrc } = lotties[elementType] || {};\n const lottieRef = React.useRef<ILottieAnimationRef | null>(null);\n\n const handleMouseEnter = useCallback(() => {\n if (isAchieved && lottieSrc) {\n lottieRef.current?.play();\n lottieRef.current?.setLoop(true);\n }\n }, [isAchieved, lottieSrc]);\n\n const handleMouseLeave = useCallback(() => {\n if (lottieSrc) {\n lottieRef.current?.setLoop(false);\n }\n }, [lottieSrc]);\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={handleMouseEnter}\n onMouseLeave={handleMouseLeave}\n >\n <LottieAnimation\n src={lottieSrc}\n width={width}\n height={height}\n ref={lottieRef}\n settings={{ autoplay: false, loop: false }}\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 memo(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","isLargeCount","elementTitle","disabledVal","height","width","lottieSrc","lottieRef","React","handleMouseEnter","useCallback","_a","_b","handleMouseLeave","jsx","getRewardElement","LottieAnimation","elementColors","Separator","Element$1","memo"],"mappings":"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"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { jsx as s } from "react/jsx-runtime";
|
|
2
|
+
import { memo as a } from "react";
|
|
3
|
+
import t from "styled-components";
|
|
4
|
+
const $ = t.div`
|
|
5
|
+
position: relative;
|
|
6
|
+
overflow: hidden;
|
|
7
|
+
background: ${({ $backgroundColor: r, theme: o }) => o.colors[r] || r};
|
|
8
|
+
width: 100%;
|
|
9
|
+
height: ${({ $height: r }) => `${r}px`};
|
|
10
|
+
border-radius: ${({ $height: r, $corners: o }) => o ? `${r / 2}px` : 0};
|
|
11
|
+
`, c = t.div`
|
|
12
|
+
position: absolute;
|
|
13
|
+
background: ${({ $backgroundColor: r, theme: o }) => o.colors[r] || r};
|
|
14
|
+
transition: width 300ms ease-in-out;
|
|
15
|
+
width: ${({ $progress: r }) => `${r}%`};
|
|
16
|
+
height: 100%;
|
|
17
|
+
border-radius: ${({ $borderRadius: r }) => r || 0}px;
|
|
18
|
+
`, h = ({
|
|
19
|
+
borderRadius: r = 0,
|
|
20
|
+
height: o = 8,
|
|
21
|
+
progress: i,
|
|
22
|
+
corners: e = !0,
|
|
23
|
+
backgroundColor: d = "GREY_1",
|
|
24
|
+
progressColor: n = "GREY_4"
|
|
25
|
+
}) => /* @__PURE__ */ s($, { $height: o, $corners: e, $backgroundColor: d, children: /* @__PURE__ */ s(
|
|
26
|
+
c,
|
|
27
|
+
{
|
|
28
|
+
$progress: i,
|
|
29
|
+
$backgroundColor: n,
|
|
30
|
+
$borderRadius: r
|
|
31
|
+
}
|
|
32
|
+
) }), p = a(h);
|
|
33
|
+
export {
|
|
34
|
+
p as default
|
|
35
|
+
};
|
|
36
|
+
//# sourceMappingURL=progress-bar-horizontal.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"progress-bar-horizontal.js","sources":["../../../../src/features/wins-dashboard/belts-elements-stickers/progress-bar-horizontal.tsx"],"sourcesContent":["import type { TColorNames } from '../../ui/types';\n\nimport React, { memo } from 'react';\nimport styled from 'styled-components';\n\nconst Background = styled.div<{\n $backgroundColor: TColorNames | string;\n $height: number;\n $corners: boolean;\n}>`\n position: relative;\n overflow: hidden;\n background: ${({ $backgroundColor, theme }) =>\n theme.colors[$backgroundColor as TColorNames] || $backgroundColor};\n width: 100%;\n height: ${({ $height }) => `${$height}px`};\n border-radius: ${({ $height, $corners }) => ($corners ? `${$height / 2}px` : 0)};\n`;\n\nconst Progress = styled.div<{\n $backgroundColor: TColorNames | string;\n $progress: number;\n $borderRadius: number;\n}>`\n position: absolute;\n background: ${({ $backgroundColor, theme }) =>\n theme.colors[$backgroundColor as TColorNames] || $backgroundColor};\n transition: width 300ms ease-in-out;\n width: ${({ $progress }) => `${$progress}%`};\n height: 100%;\n border-radius: ${({ $borderRadius }) => $borderRadius || 0}px;\n`;\n\ninterface ProgressBarHorizontalProps {\n borderRadius?: number;\n progress: number;\n height?: number;\n backgroundColor?: TColorNames | string;\n progressColor?: TColorNames | string;\n corners?: boolean;\n}\n\nconst ProgressBarHorizontal: React.FC<ProgressBarHorizontalProps> = ({\n borderRadius = 0,\n height = 8,\n progress,\n corners = true,\n backgroundColor = 'GREY_1',\n progressColor = 'GREY_4',\n}) => {\n return (\n <Background $height={height} $corners={corners} $backgroundColor={backgroundColor}>\n <Progress\n $progress={progress}\n $backgroundColor={progressColor}\n $borderRadius={borderRadius}\n />\n </Background>\n );\n};\n\nexport default memo(ProgressBarHorizontal);\n"],"names":["Background","styled","$backgroundColor","theme","$height","$corners","Progress","$progress","$borderRadius","ProgressBarHorizontal","borderRadius","height","progress","corners","backgroundColor","progressColor","jsx","ProgressBarHorizontal$1","memo"],"mappings":";;;AAKA,MAAMA,IAAaC,EAAO;AAAA;AAAA;AAAA,gBAOV,CAAC,EAAE,kBAAAC,GAAkB,OAAAC,QACjCA,EAAM,OAAOD,CAA+B,KAAKA,CAAgB;AAAA;AAAA,YAEzD,CAAC,EAAE,SAAAE,EAAc,MAAA,GAAGA,CAAO,IAAI;AAAA,mBACxB,CAAC,EAAE,SAAAA,GAAS,UAAAC,EAAS,MAAOA,IAAW,GAAGD,IAAU,CAAC,OAAO,CAAE;AAAA,GAG3EE,IAAWL,EAAO;AAAA;AAAA,gBAMR,CAAC,EAAE,kBAAAC,GAAkB,OAAAC,QACjCA,EAAM,OAAOD,CAA+B,KAAKA,CAAgB;AAAA;AAAA,WAE1D,CAAC,EAAE,WAAAK,EAAgB,MAAA,GAAGA,CAAS,GAAG;AAAA;AAAA,mBAE1B,CAAC,EAAE,eAAAC,QAAoBA,KAAiB,CAAC;AAAA,GAYtDC,IAA8D,CAAC;AAAA,EACnE,cAAAC,IAAe;AAAA,EACf,QAAAC,IAAS;AAAA,EACT,UAAAC;AAAA,EACA,SAAAC,IAAU;AAAA,EACV,iBAAAC,IAAkB;AAAA,EAClB,eAAAC,IAAgB;AAClB,wBAEKf,GAAW,EAAA,SAASW,GAAQ,UAAUE,GAAS,kBAAkBC,GAChE,UAAA,gBAAAE;AAAA,EAACV;AAAA,EAAA;AAAA,IACC,WAAWM;AAAA,IACX,kBAAkBG;AAAA,IAClB,eAAeL;AAAA,EAAA;AAEnB,EAAA,CAAA,GAIWO,IAAAC,EAAKT,CAAqB;"}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
import { jsxs as I, jsx as r } from "react/jsx-runtime";
|
|
2
|
+
import { memo as $ } from "react";
|
|
3
|
+
import c, { css as p } from "styled-components";
|
|
4
|
+
import f from "../../ui/layout/flex-view.js";
|
|
5
|
+
import R from "../../ui/separator/separator.js";
|
|
6
|
+
import S from "../../ui/text/text.js";
|
|
7
|
+
import { SCREEN_SIZES as a, INSTRUCTION_REWARDS as w, MATH_REWARDS as N, STICKERS as A } from "../constants.js";
|
|
8
|
+
import g from "./elements.js";
|
|
9
|
+
const E = {
|
|
10
|
+
STICKER: "STICKERS",
|
|
11
|
+
CODING: "CODING",
|
|
12
|
+
CHIP: "CHIPS",
|
|
13
|
+
ELEMENT: "ELEMENTS"
|
|
14
|
+
}, L = c(f)`
|
|
15
|
+
background-color: ${({ theme: t }) => t.colors.WHITE};
|
|
16
|
+
`, P = c(f)`
|
|
17
|
+
max-width: 280px;
|
|
18
|
+
width: 100%;
|
|
19
|
+
${({ $currentScreenWidth: t }) => t < a.LAPTOP && p`
|
|
20
|
+
max-width: 764px;
|
|
21
|
+
width: 100%;
|
|
22
|
+
`}
|
|
23
|
+
`, O = c.div`
|
|
24
|
+
width: 33%;
|
|
25
|
+
padding-bottom: 16px;
|
|
26
|
+
${({ $currentScreenWidth: t }) => t < a.LAPTOP && p`
|
|
27
|
+
width: 15%;
|
|
28
|
+
height: 33%;
|
|
29
|
+
`}
|
|
30
|
+
`, u = c.div`
|
|
31
|
+
padding-left: ${({ $isSticker: t }) => t ? "13px" : "19px"};
|
|
32
|
+
color: ${({ theme: t }) => t.colors.BLACK};
|
|
33
|
+
font-size: 20px;
|
|
34
|
+
font-weight: 800;
|
|
35
|
+
${({ $currentScreenWidth: t }) => t < a.LAPTOP && p`
|
|
36
|
+
padding-left: 0;
|
|
37
|
+
`}
|
|
38
|
+
`, D = (t, o) => {
|
|
39
|
+
let e = E.STICKER;
|
|
40
|
+
return t || (e = o ? E.CHIP : E.ELEMENT), e;
|
|
41
|
+
}, T = (t, o, e, n, s = {}, m) => /* @__PURE__ */ r(O, { $currentScreenWidth: m, children: /* @__PURE__ */ r(
|
|
42
|
+
g,
|
|
43
|
+
{
|
|
44
|
+
isAchieved: t in o,
|
|
45
|
+
count: o[t],
|
|
46
|
+
elementType: t,
|
|
47
|
+
isCoddingType: e,
|
|
48
|
+
isSticker: n,
|
|
49
|
+
lotties: s,
|
|
50
|
+
currentScreenWidth: m
|
|
51
|
+
}
|
|
52
|
+
) }, t), K = ({
|
|
53
|
+
elements: t,
|
|
54
|
+
isSticker: o = !1,
|
|
55
|
+
lotties: e = {},
|
|
56
|
+
currentScreenWidth: n,
|
|
57
|
+
programStream: s
|
|
58
|
+
}) => {
|
|
59
|
+
const m = s === E.CODING ? [...w] : [...N], l = s === E.CODING, h = A, d = {};
|
|
60
|
+
return t && t.forEach((i) => {
|
|
61
|
+
const { name: x, count: C } = i;
|
|
62
|
+
d[x] = C;
|
|
63
|
+
}), /* @__PURE__ */ I(L, { children: [
|
|
64
|
+
/* @__PURE__ */ r(u, { $currentScreenWidth: n, $isSticker: o, children: /* @__PURE__ */ r(S, { $renderAs: "h5", $color: "BLACK", children: D(o, l) }) }),
|
|
65
|
+
/* @__PURE__ */ r(R, { height: 18 }),
|
|
66
|
+
/* @__PURE__ */ r(P, { $flexWrap: !0, $flexDirection: "row", $currentScreenWidth: n, children: o ? h.map(
|
|
67
|
+
(i) => T(
|
|
68
|
+
i,
|
|
69
|
+
d,
|
|
70
|
+
l,
|
|
71
|
+
o,
|
|
72
|
+
e,
|
|
73
|
+
n
|
|
74
|
+
)
|
|
75
|
+
) : m.map(
|
|
76
|
+
(i) => T(i, d, l, !1, {}, n)
|
|
77
|
+
) })
|
|
78
|
+
] });
|
|
79
|
+
}, j = $(K);
|
|
80
|
+
export {
|
|
81
|
+
j as default
|
|
82
|
+
};
|
|
83
|
+
//# sourceMappingURL=reward-elements.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reward-elements.js","sources":["../../../../src/features/wins-dashboard/belts-elements-stickers/reward-elements.tsx"],"sourcesContent":["import React, { memo } from 'react';\nimport styled, { css } from 'styled-components';\n\nimport FlexView from '../../ui/layout/flex-view';\nimport Separator from '../../ui/separator/separator';\nimport Text from '../../ui/text/text';\nimport { INSTRUCTION_REWARDS, MATH_REWARDS, SCREEN_SIZES, STICKERS } from '../constants';\nimport Element from './elements';\n\nconst ELEMENT_TEXT = {\n STICKER: 'STICKERS',\n CODING: 'CODING',\n CHIP: 'CHIPS',\n ELEMENT: 'ELEMENTS',\n};\n\nconst InfoWrapper = styled(FlexView)`\n background-color: ${({ theme }) => theme.colors.WHITE};\n`;\n\ninterface ElementContainerProps {\n $currentScreenWidth: number;\n}\n\nconst ElementContainer = styled(FlexView)<ElementContainerProps>`\n max-width: 280px;\n width: 100%;\n ${({ $currentScreenWidth }) =>\n $currentScreenWidth < SCREEN_SIZES.LAPTOP &&\n css`\n max-width: 764px;\n width: 100%;\n `}\n`;\n\ninterface ElementWrapperProps {\n $currentScreenWidth: number;\n}\n\nconst ElementWrapper = styled.div<ElementWrapperProps>`\n width: 33%;\n padding-bottom: 16px;\n ${({ $currentScreenWidth }) =>\n $currentScreenWidth < SCREEN_SIZES.LAPTOP &&\n css`\n width: 15%;\n height: 33%;\n `}\n`;\n\ninterface ElementTextProps {\n $isSticker: boolean;\n $currentScreenWidth: number;\n}\n\nconst ElementText = styled.div<ElementTextProps>`\n padding-left: ${({ $isSticker }) => ($isSticker ? '13px' : '19px')};\n color: ${({ theme }) => theme.colors.BLACK};\n font-size: 20px;\n font-weight: 800;\n ${({ $currentScreenWidth }) =>\n $currentScreenWidth < SCREEN_SIZES.LAPTOP &&\n css`\n padding-left: 0;\n `}\n`;\n\nconst getElementText = (isSticker: boolean, isCoddingType: boolean): string => {\n let name = ELEMENT_TEXT.STICKER;\n\n if (!isSticker) {\n name = isCoddingType ? ELEMENT_TEXT.CHIP : ELEMENT_TEXT.ELEMENT;\n }\n\n return name;\n};\n\ninterface ElementData {\n name: string;\n count: number;\n}\n\ninterface LottieProps {\n height: number;\n width: number;\n lottieSrc: string;\n}\n\nconst getElements = (\n element: string,\n elementsCount: Record<string, number>,\n isCoddingType: boolean,\n isSticker: boolean,\n lotties: Record<string, LottieProps> = {},\n currentScreenWidth: number,\n) => {\n return (\n <ElementWrapper $currentScreenWidth={currentScreenWidth} key={element}>\n <Element\n isAchieved={element in elementsCount}\n count={elementsCount[element]}\n elementType={element}\n isCoddingType={isCoddingType}\n isSticker={isSticker}\n lotties={lotties}\n currentScreenWidth={currentScreenWidth}\n />\n </ElementWrapper>\n );\n};\n\ninterface RewardElementsProps {\n elements?: ElementData[];\n isSticker?: boolean;\n lotties?: Record<string, LottieProps>;\n currentScreenWidth: number;\n programStream?: string;\n}\n\nconst RewardElements: React.FC<RewardElementsProps> = ({\n elements,\n isSticker = false,\n lotties = {},\n currentScreenWidth,\n programStream,\n}) => {\n const totalElements =\n programStream === ELEMENT_TEXT.CODING ? [...INSTRUCTION_REWARDS] : [...MATH_REWARDS];\n const isCoddingType = programStream === ELEMENT_TEXT.CODING;\n const totalStickers = STICKERS;\n const elementsCount: Record<string, number> = {};\n\n if (elements) {\n elements.forEach(element => {\n const { name, count } = element;\n\n elementsCount[name] = count;\n });\n }\n\n return (\n <InfoWrapper>\n <ElementText $currentScreenWidth={currentScreenWidth} $isSticker={isSticker}>\n <Text $renderAs=\"h5\" $color=\"BLACK\">\n {getElementText(isSticker, isCoddingType)}\n </Text>\n </ElementText>\n <Separator height={18} />\n <ElementContainer $flexWrap $flexDirection=\"row\" $currentScreenWidth={currentScreenWidth}>\n {!isSticker\n ? totalElements.map(element =>\n getElements(element, elementsCount, isCoddingType, false, {}, currentScreenWidth),\n )\n : totalStickers.map(sticker =>\n getElements(\n sticker,\n elementsCount,\n isCoddingType,\n isSticker,\n lotties,\n currentScreenWidth,\n ),\n )}\n </ElementContainer>\n </InfoWrapper>\n );\n};\n\nexport default memo(RewardElements);\n"],"names":["ELEMENT_TEXT","InfoWrapper","styled","FlexView","theme","ElementContainer","$currentScreenWidth","SCREEN_SIZES","css","ElementWrapper","ElementText","$isSticker","getElementText","isSticker","isCoddingType","name","getElements","element","elementsCount","lotties","currentScreenWidth","jsx","Element","RewardElements","elements","programStream","totalElements","INSTRUCTION_REWARDS","MATH_REWARDS","totalStickers","STICKERS","count","Text","Separator","sticker","RewardElements$1","memo"],"mappings":";;;;;;;;AASA,MAAMA,IAAe;AAAA,EACnB,SAAS;AAAA,EACT,QAAQ;AAAA,EACR,MAAM;AAAA,EACN,SAAS;AACX,GAEMC,IAAcC,EAAOC,CAAQ;AAAA,sBACb,CAAC,EAAE,OAAAC,EAAA,MAAYA,EAAM,OAAO,KAAK;AAAA,GAOjDC,IAAmBH,EAAOC,CAAQ;AAAA;AAAA;AAAA,IAGpC,CAAC,EAAE,qBAAAG,EACH,MAAAA,IAAsBC,EAAa,UACnCC;AAAA;AAAA;AAAA,KAGC;AAAA,GAOCC,IAAiBP,EAAO;AAAA;AAAA;AAAA,IAG1B,CAAC,EAAE,qBAAAI,EACH,MAAAA,IAAsBC,EAAa,UACnCC;AAAA;AAAA;AAAA,KAGC;AAAA,GAQCE,IAAcR,EAAO;AAAA,kBACT,CAAC,EAAE,YAAAS,EAAA,MAAkBA,IAAa,SAAS,MAAO;AAAA,WACzD,CAAC,EAAE,OAAAP,EAAA,MAAYA,EAAM,OAAO,KAAK;AAAA;AAAA;AAAA,IAGxC,CAAC,EAAE,qBAAAE,EACH,MAAAA,IAAsBC,EAAa,UACnCC;AAAA;AAAA,KAEC;AAAA,GAGCI,IAAiB,CAACC,GAAoBC,MAAmC;AAC7E,MAAIC,IAAOf,EAAa;AAExB,SAAKa,MACIE,IAAAD,IAAgBd,EAAa,OAAOA,EAAa,UAGnDe;AACT,GAaMC,IAAc,CAClBC,GACAC,GACAJ,GACAD,GACAM,IAAuC,CAAC,GACxCC,MAGE,gBAAAC,EAACZ,GAAe,EAAA,qBAAqBW,GACnC,UAAA,gBAAAC;AAAA,EAACC;AAAA,EAAA;AAAA,IACC,YAAYL,KAAWC;AAAA,IACvB,OAAOA,EAAcD,CAAO;AAAA,IAC5B,aAAaA;AAAA,IACb,eAAAH;AAAA,IACA,WAAAD;AAAA,IACA,SAAAM;AAAA,IACA,oBAAAC;AAAA,EAAA;AAAA,KAR0DH,CAU9D,GAYEM,IAAgD,CAAC;AAAA,EACrD,UAAAC;AAAA,EACA,WAAAX,IAAY;AAAA,EACZ,SAAAM,IAAU,CAAC;AAAA,EACX,oBAAAC;AAAA,EACA,eAAAK;AACF,MAAM;AACE,QAAAC,IACJD,MAAkBzB,EAAa,SAAS,CAAC,GAAG2B,CAAmB,IAAI,CAAC,GAAGC,CAAY,GAC/Ed,IAAgBW,MAAkBzB,EAAa,QAC/C6B,IAAgBC,GAChBZ,IAAwC,CAAA;AAE9C,SAAIM,KACFA,EAAS,QAAQ,CAAWP,MAAA;AACpB,UAAA,EAAE,MAAAF,GAAM,OAAAgB,EAAU,IAAAd;AAExB,IAAAC,EAAcH,CAAI,IAAIgB;AAAA,EAAA,CACvB,qBAIA9B,GACC,EAAA,UAAA;AAAA,IAAA,gBAAAoB,EAACX,GAAY,EAAA,qBAAqBU,GAAoB,YAAYP,GAChE,UAAC,gBAAAQ,EAAAW,GAAA,EAAK,WAAU,MAAK,QAAO,SACzB,UAAApB,EAAeC,GAAWC,CAAa,EAC1C,CAAA,GACF;AAAA,IACA,gBAAAO,EAACY,GAAU,EAAA,QAAQ,GAAI,CAAA;AAAA,IACvB,gBAAAZ,EAAChB,GAAiB,EAAA,WAAS,IAAC,gBAAe,OAAM,qBAAqBe,GACnE,UAACP,IAIEgB,EAAc;AAAA,MAAI,CAChBK,MAAAlB;AAAA,QACEkB;AAAA,QACAhB;AAAA,QACAJ;AAAA,QACAD;AAAA,QACAM;AAAA,QACAC;AAAA,MACF;AAAA,IAAA,IAXFM,EAAc;AAAA,MAAI,CAAAT,MAChBD,EAAYC,GAASC,GAAeJ,GAAe,IAAO,IAAIM,CAAkB;AAAA,OAYxF;AAAA,EACF,EAAA,CAAA;AAEJ,GAEee,IAAAC,EAAKb,CAAc;"}
|
|
@@ -0,0 +1,161 @@
|
|
|
1
|
+
import { ILLUSTRATIONS as T } from "../../assets/illustrations/illustrations.js";
|
|
2
|
+
import { IMAGES as E } from "../../assets/images/images.js";
|
|
3
|
+
import R from "../../assets/line-icons/icons/wins-common-icon.js";
|
|
4
|
+
import o from "../../assets/line-icons/icons/wins-epic-icon.js";
|
|
5
|
+
import C from "../../assets/line-icons/icons/wins-legendary-icon.js";
|
|
6
|
+
import D from "../../assets/line-icons/icons/wins-mystery-icon.js";
|
|
7
|
+
import n from "../../assets/line-icons/icons/wins-mythic-icon.js";
|
|
8
|
+
import c from "../../assets/line-icons/icons/wins-rare-icon.js";
|
|
9
|
+
import { LOTTIE as t } from "../../assets/lottie/lottie.js";
|
|
10
|
+
import { getTheme as s } from "../ui/theme/get-theme.js";
|
|
11
|
+
const m = {
|
|
12
|
+
TABLET: 864,
|
|
13
|
+
LAPTOP: 1024,
|
|
14
|
+
LAPTOPL: 1280
|
|
15
|
+
}, { colors: O } = s(), a = {
|
|
16
|
+
ASHTA: "#FF7E3B",
|
|
17
|
+
CHATVA: "#DA5107",
|
|
18
|
+
COSA: "#0A47C2",
|
|
19
|
+
DODA: "#850F85",
|
|
20
|
+
DVI: "#0A47C2",
|
|
21
|
+
EKA: "#3DD771",
|
|
22
|
+
HEXO: "#3DD771",
|
|
23
|
+
OCTO: "#FF7E3B",
|
|
24
|
+
TETRA: "#FFBA07",
|
|
25
|
+
ZODASA: "#1EB5F0",
|
|
26
|
+
CONGRATS: O.GREY_2,
|
|
27
|
+
COOL: O.GREY_2,
|
|
28
|
+
KUDOS: O.GREY_2,
|
|
29
|
+
GREAT: O.GREY_2,
|
|
30
|
+
WOW: O.GREY_2,
|
|
31
|
+
AWESOME: O.GREY_2
|
|
32
|
+
}, A = {
|
|
33
|
+
COMMON: "COMMON",
|
|
34
|
+
RARE: "RARE",
|
|
35
|
+
EPIC: "EPIC",
|
|
36
|
+
LEGENDARY: "LEGENDARY",
|
|
37
|
+
MYTHIC: "MYTHIC",
|
|
38
|
+
MYSTERY: "MYSTERY"
|
|
39
|
+
}, H = {
|
|
40
|
+
ACKNOWLEDGED: "ACKNOWLEDGED",
|
|
41
|
+
ASSIGNED: "ASSIGNED",
|
|
42
|
+
UNASSIGNED: "UNASSIGNED"
|
|
43
|
+
}, h = {
|
|
44
|
+
[A.COMMON]: "#1EB5F0",
|
|
45
|
+
[A.RARE]: "#3DD771",
|
|
46
|
+
[A.EPIC]: "#ED6CEF",
|
|
47
|
+
[A.LEGENDARY]: "#FF7E3B",
|
|
48
|
+
[A.MYTHIC]: "#FFBA07",
|
|
49
|
+
[A.MYSTERY]: O.WHITE
|
|
50
|
+
}, u = {
|
|
51
|
+
[A.COMMON]: R,
|
|
52
|
+
[A.RARE]: c,
|
|
53
|
+
[A.EPIC]: o,
|
|
54
|
+
[A.LEGENDARY]: C,
|
|
55
|
+
[A.MYTHIC]: n,
|
|
56
|
+
[A.MYSTERY]: D
|
|
57
|
+
}, P = {
|
|
58
|
+
[A.COMMON]: T.COMMON,
|
|
59
|
+
[A.RARE]: T.RARE,
|
|
60
|
+
[A.EPIC]: T.EPIC,
|
|
61
|
+
[A.LEGENDARY]: T.LEGENDARY,
|
|
62
|
+
[A.MYTHIC]: T.MYTHIC,
|
|
63
|
+
[A.MYSTERY]: T.MYSTERY
|
|
64
|
+
}, S = {
|
|
65
|
+
black: E.BLACK_BELT,
|
|
66
|
+
blue: E.BLUE_BELT,
|
|
67
|
+
brown: E.BROWN_BELT,
|
|
68
|
+
green: E.GREEN_BELT,
|
|
69
|
+
orange: E.ORANGE_BELT,
|
|
70
|
+
purple: E.PURPLE_BELT,
|
|
71
|
+
red: E.RED_BELT,
|
|
72
|
+
white: E.WHITE_BELT,
|
|
73
|
+
yellow: E.YELLOW_BELT
|
|
74
|
+
}, l = (r) => {
|
|
75
|
+
const e = r == null ? void 0 : r.toLowerCase();
|
|
76
|
+
return e && e in S ? S[e] : E.MASTERED_BADGE;
|
|
77
|
+
}, K = ["TETRA", "COSA", "DODA", "HEXO", "OCTO"], U = ["EKA", "DVI", "CHATVA", "ASHTA", "ZODASA"], F = ["CONGRATS", "COOL", "KUDOS", "GREAT", "WOW", "AWESOME"], f = (r) => {
|
|
78
|
+
switch (r) {
|
|
79
|
+
case "COSA":
|
|
80
|
+
return E.COSA;
|
|
81
|
+
case "OCTO":
|
|
82
|
+
return E.OCTO;
|
|
83
|
+
case "DODA":
|
|
84
|
+
return E.DODA;
|
|
85
|
+
case "HEXO":
|
|
86
|
+
return E.HEXO;
|
|
87
|
+
case "TETRA":
|
|
88
|
+
return E.TETRA;
|
|
89
|
+
case "EKA":
|
|
90
|
+
return E.EKA;
|
|
91
|
+
case "DVI":
|
|
92
|
+
return E.DVI;
|
|
93
|
+
case "CHATVA":
|
|
94
|
+
return E.CHATVA;
|
|
95
|
+
case "ASHTA":
|
|
96
|
+
return E.ASHTA;
|
|
97
|
+
case "ZODASA":
|
|
98
|
+
return E.ZODASA;
|
|
99
|
+
case "CONGRATS":
|
|
100
|
+
return E.CONGRATS;
|
|
101
|
+
case "COOL":
|
|
102
|
+
return E.COOL;
|
|
103
|
+
case "KUDOS":
|
|
104
|
+
return E.KUDOS;
|
|
105
|
+
case "GREAT":
|
|
106
|
+
return E.GREAT;
|
|
107
|
+
case "WOW":
|
|
108
|
+
return E.WOW;
|
|
109
|
+
case "AWESOME":
|
|
110
|
+
return E.AWESOME;
|
|
111
|
+
default:
|
|
112
|
+
return E.TETRA;
|
|
113
|
+
}
|
|
114
|
+
}, g = {
|
|
115
|
+
CONGRATS: {
|
|
116
|
+
height: 50,
|
|
117
|
+
width: 50,
|
|
118
|
+
lottieSrc: t.TROPHY
|
|
119
|
+
},
|
|
120
|
+
COOL: {
|
|
121
|
+
height: 50,
|
|
122
|
+
width: 50,
|
|
123
|
+
lottieSrc: t.COOL
|
|
124
|
+
},
|
|
125
|
+
KUDOS: {
|
|
126
|
+
height: 50,
|
|
127
|
+
width: 50,
|
|
128
|
+
lottieSrc: t.CLAPPING_HANDS
|
|
129
|
+
},
|
|
130
|
+
GREAT: {
|
|
131
|
+
height: 63,
|
|
132
|
+
width: 50,
|
|
133
|
+
lottieSrc: t.LIKE_BUTTON
|
|
134
|
+
},
|
|
135
|
+
WOW: {
|
|
136
|
+
height: 55,
|
|
137
|
+
width: 55,
|
|
138
|
+
lottieSrc: t.STAR_STRIKE_EMOJI
|
|
139
|
+
},
|
|
140
|
+
AWESOME: {
|
|
141
|
+
height: 50,
|
|
142
|
+
width: 50,
|
|
143
|
+
lottieSrc: t.AWESOME
|
|
144
|
+
}
|
|
145
|
+
};
|
|
146
|
+
export {
|
|
147
|
+
h as BADGE_TYPE_BACKGROUND,
|
|
148
|
+
P as BADGE_TYPE_BADGE_ICON,
|
|
149
|
+
u as BADGE_TYPE_TAB_ICON,
|
|
150
|
+
U as INSTRUCTION_REWARDS,
|
|
151
|
+
K as MATH_REWARDS,
|
|
152
|
+
m as SCREEN_SIZES,
|
|
153
|
+
F as STICKERS,
|
|
154
|
+
H as STUDENT_BADGE_STATUS,
|
|
155
|
+
A as STUDENT_BADGE_TYPE,
|
|
156
|
+
g as StickerMap,
|
|
157
|
+
a as elementColors,
|
|
158
|
+
l as getBeltIcon,
|
|
159
|
+
f as getRewardElement
|
|
160
|
+
};
|
|
161
|
+
//# sourceMappingURL=constants.js.map
|