@cuemath/leap 3.5.30-as10 → 3.5.30-as11
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/features/timeline/monthly-report/comps/achievements/achievements.js +55 -47
- package/dist/features/timeline/monthly-report/comps/achievements/achievements.js.map +1 -1
- package/dist/features/timeline/monthly-report/comps/activities/activities-card-puzzles/activities-card-puzzles.js +20 -19
- package/dist/features/timeline/monthly-report/comps/activities/activities-card-puzzles/activities-card-puzzles.js.map +1 -1
- package/dist/features/ui/swipable-carousel/swipable-carousel.js +1 -1
- package/dist/features/ui/swipable-carousel/swipable-carousel.js.map +1 -1
- package/dist/index.d.ts +0 -1
- package/package.json +1 -1
|
@@ -1,60 +1,68 @@
|
|
|
1
|
-
import { jsx as r, jsxs as
|
|
2
|
-
import { useRef as
|
|
3
|
-
import { CarousalItem as
|
|
4
|
-
import
|
|
5
|
-
import
|
|
6
|
-
import
|
|
1
|
+
import { jsx as r, jsxs as m } from "react/jsx-runtime";
|
|
2
|
+
import { useRef as c, useMemo as a } from "react";
|
|
3
|
+
import { CarousalItem as u, CarouselWrapper as f } from "./achievements.styled.js";
|
|
4
|
+
import l from "../../../../ui/text/text.js";
|
|
5
|
+
import n from "../../../../ui/separator/separator.js";
|
|
6
|
+
import p from "../../../../ui/layout/flex-view.js";
|
|
7
7
|
import x from "../../../../ui/swipable-carousel/swipable-carousel.js";
|
|
8
|
-
import { IS_APP_RUNNING_IN_RN as
|
|
9
|
-
const
|
|
10
|
-
const
|
|
11
|
-
() => o.map((
|
|
12
|
-
|
|
8
|
+
import { IS_APP_RUNNING_IN_RN as t } from "../../../../../constants/app-config.js";
|
|
9
|
+
const S = ({ achievements: o, studentName: e }) => {
|
|
10
|
+
const h = c(null), s = a(
|
|
11
|
+
() => o.map((i) => /* @__PURE__ */ r(
|
|
12
|
+
u,
|
|
13
13
|
{
|
|
14
|
-
src:
|
|
15
|
-
alt: `Achievement ${
|
|
14
|
+
src: i.url,
|
|
15
|
+
alt: `Achievement ${i.asset_id}`,
|
|
16
16
|
withLoader: !0,
|
|
17
|
-
height:
|
|
17
|
+
height: t ? "343px" : "480px",
|
|
18
|
+
width: t ? "343px" : "480px"
|
|
18
19
|
},
|
|
19
|
-
|
|
20
|
+
i.asset_id
|
|
20
21
|
)),
|
|
21
22
|
[o]
|
|
22
|
-
),
|
|
23
|
-
() => o.length >= 2 ? `Outstanding month! ${
|
|
24
|
-
[o.length,
|
|
25
|
-
),
|
|
26
|
-
return o != null && o.length ? /* @__PURE__ */
|
|
27
|
-
/* @__PURE__ */ r(
|
|
28
|
-
/* @__PURE__ */ r(
|
|
29
|
-
/* @__PURE__ */ r(
|
|
30
|
-
/* @__PURE__ */ r(
|
|
31
|
-
|
|
23
|
+
), d = a(
|
|
24
|
+
() => o.length >= 2 ? `Outstanding month! ${e} earned several achievements showing excellent progress across different areas.` : `Great work! ${e} earned new achievements this month, demonstrating growth in their skills.`,
|
|
25
|
+
[o.length, e]
|
|
26
|
+
), g = !t && s.length > 1;
|
|
27
|
+
return o != null && o.length ? /* @__PURE__ */ m(p, { children: [
|
|
28
|
+
/* @__PURE__ */ r(l, { $renderAs: "ab1-bold", color: "BLACK_1", children: "Achievements" }),
|
|
29
|
+
/* @__PURE__ */ r(n, { heightX: 0.125 }),
|
|
30
|
+
/* @__PURE__ */ r(p, { $marginBottom: -24, children: /* @__PURE__ */ r(l, { $renderAs: "ub2", color: "BLUE_6", children: d }) }),
|
|
31
|
+
t && /* @__PURE__ */ r(n, { heightX: 1 }),
|
|
32
|
+
/* @__PURE__ */ r(
|
|
33
|
+
f,
|
|
32
34
|
{
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
35
|
+
$height: t ? "380px" : "580px",
|
|
36
|
+
$marginBottomX: t ? -0.5 : -1,
|
|
37
|
+
children: /* @__PURE__ */ r(
|
|
38
|
+
x,
|
|
39
|
+
{
|
|
40
|
+
ref: h,
|
|
41
|
+
items: s,
|
|
42
|
+
defaultIndex: 0,
|
|
43
|
+
transitionDuration: 300,
|
|
44
|
+
showDots: !0,
|
|
45
|
+
dotsConfig: {
|
|
46
|
+
dotColor: "BLACK_1",
|
|
47
|
+
inactiveDotColor: "WHITE_1",
|
|
48
|
+
activeIndicatorSize: "8px",
|
|
49
|
+
inactiveIndicatorSize: "8px",
|
|
50
|
+
spacing: "8px"
|
|
51
|
+
},
|
|
52
|
+
showNavigationButtons: g,
|
|
53
|
+
navigationConfig: {
|
|
54
|
+
buttonVariant: "secondary",
|
|
55
|
+
buttonSize: "xsmall",
|
|
56
|
+
spacing: 8
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
)
|
|
52
60
|
}
|
|
53
|
-
)
|
|
54
|
-
/* @__PURE__ */ r(
|
|
61
|
+
),
|
|
62
|
+
/* @__PURE__ */ r(n, { heightX: 0.75 })
|
|
55
63
|
] }) : null;
|
|
56
64
|
};
|
|
57
65
|
export {
|
|
58
|
-
|
|
66
|
+
S as default
|
|
59
67
|
};
|
|
60
68
|
//# sourceMappingURL=achievements.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"achievements.js","sources":["../../../../../../src/features/timeline/monthly-report/comps/achievements/achievements.tsx"],"sourcesContent":["import { useMemo, useRef, type FC } from 'react';\n\nimport { type IAchievementsProps } from './achievements-types';\nimport type { ISwipableCarouselRefs } from '../../../../ui/swipable-carousel/swipable-carousel-types';\nimport * as Styled from './achievements.styled';\nimport Text from '../../../../ui/text/text';\nimport Separator from '../../../../ui/separator/separator';\nimport FlexView from '../../../../ui/layout/flex-view';\nimport SwipableCarousel from '../../../../ui/swipable-carousel/swipable-carousel';\nimport { IS_APP_RUNNING_IN_RN } from '../../../../../constants/app-config';\n\nconst Achievements: FC<IAchievementsProps> = ({ achievements, studentName }) => {\n const carouselRef = useRef<ISwipableCarouselRefs>(null);\n\n const carouselItems = useMemo(\n () =>\n achievements.map(achievement => (\n <Styled.CarousalItem\n key={achievement.asset_id}\n src={achievement.url}\n alt={`Achievement ${achievement.asset_id}`}\n withLoader\n height={IS_APP_RUNNING_IN_RN ? '343px' : '480px'}\n />\n )),\n [achievements],\n );\n\n const tipText = useMemo(\n () =>\n achievements.length >= 2\n ? `Outstanding month! ${studentName} earned several achievements showing excellent progress across different areas.`\n : `Great work! ${studentName} earned new achievements this month, demonstrating growth in their skills.`,\n [achievements.length, studentName],\n );\n\n const showNavigationButtons = !IS_APP_RUNNING_IN_RN && carouselItems.length > 1;\n\n if (!achievements?.length) {\n return null;\n }\n\n return (\n <FlexView>\n <Text $renderAs=\"ab1-bold\" color=\"BLACK_1\">\n Achievements\n </Text>\n <Separator heightX={0.125} />\n <FlexView $marginBottom={-24}>\n <Text $renderAs=\"ub2\" color=\"BLUE_6\">\n {tipText}\n </Text>\n </FlexView>\n <Styled.CarouselWrapper
|
|
1
|
+
{"version":3,"file":"achievements.js","sources":["../../../../../../src/features/timeline/monthly-report/comps/achievements/achievements.tsx"],"sourcesContent":["import { useMemo, useRef, type FC } from 'react';\n\nimport { type IAchievementsProps } from './achievements-types';\nimport type { ISwipableCarouselRefs } from '../../../../ui/swipable-carousel/swipable-carousel-types';\nimport * as Styled from './achievements.styled';\nimport Text from '../../../../ui/text/text';\nimport Separator from '../../../../ui/separator/separator';\nimport FlexView from '../../../../ui/layout/flex-view';\nimport SwipableCarousel from '../../../../ui/swipable-carousel/swipable-carousel';\nimport { IS_APP_RUNNING_IN_RN } from '../../../../../constants/app-config';\n\nconst Achievements: FC<IAchievementsProps> = ({ achievements, studentName }) => {\n const carouselRef = useRef<ISwipableCarouselRefs>(null);\n\n const carouselItems = useMemo(\n () =>\n achievements.map(achievement => (\n <Styled.CarousalItem\n key={achievement.asset_id}\n src={achievement.url}\n alt={`Achievement ${achievement.asset_id}`}\n withLoader\n height={IS_APP_RUNNING_IN_RN ? '343px' : '480px'}\n width={IS_APP_RUNNING_IN_RN ? '343px' : '480px'}\n />\n )),\n [achievements],\n );\n\n const tipText = useMemo(\n () =>\n achievements.length >= 2\n ? `Outstanding month! ${studentName} earned several achievements showing excellent progress across different areas.`\n : `Great work! ${studentName} earned new achievements this month, demonstrating growth in their skills.`,\n [achievements.length, studentName],\n );\n\n const showNavigationButtons = !IS_APP_RUNNING_IN_RN && carouselItems.length > 1;\n\n if (!achievements?.length) {\n return null;\n }\n\n return (\n <FlexView>\n <Text $renderAs=\"ab1-bold\" color=\"BLACK_1\">\n Achievements\n </Text>\n <Separator heightX={0.125} />\n <FlexView $marginBottom={-24}>\n <Text $renderAs=\"ub2\" color=\"BLUE_6\">\n {tipText}\n </Text>\n </FlexView>\n {IS_APP_RUNNING_IN_RN && <Separator heightX={1} />}\n <Styled.CarouselWrapper\n $height={IS_APP_RUNNING_IN_RN ? '380px' : '580px'}\n $marginBottomX={IS_APP_RUNNING_IN_RN ? -0.5 : -1}\n >\n <SwipableCarousel\n ref={carouselRef}\n items={carouselItems}\n defaultIndex={0}\n transitionDuration={300}\n showDots={true}\n dotsConfig={{\n dotColor: 'BLACK_1',\n inactiveDotColor: 'WHITE_1',\n activeIndicatorSize: '8px',\n inactiveIndicatorSize: '8px',\n spacing: '8px',\n }}\n showNavigationButtons={showNavigationButtons}\n navigationConfig={{\n buttonVariant: 'secondary',\n buttonSize: 'xsmall',\n spacing: 8,\n }}\n />\n </Styled.CarouselWrapper>\n <Separator heightX={0.75} />\n </FlexView>\n );\n};\n\nexport default Achievements;\n"],"names":["Achievements","achievements","studentName","carouselRef","useRef","carouselItems","useMemo","achievement","jsx","Styled.CarousalItem","IS_APP_RUNNING_IN_RN","tipText","showNavigationButtons","FlexView","Text","Separator","Styled.CarouselWrapper","SwipableCarousel"],"mappings":";;;;;;;;AAWA,MAAMA,IAAuC,CAAC,EAAE,cAAAC,GAAc,aAAAC,QAAkB;AACxE,QAAAC,IAAcC,EAA8B,IAAI,GAEhDC,IAAgBC;AAAA,IACpB,MACEL,EAAa,IAAI,CACfM,MAAA,gBAAAC;AAAA,MAACC;AAAAA,MAAA;AAAA,QAEC,KAAKF,EAAY;AAAA,QACjB,KAAK,eAAeA,EAAY,QAAQ;AAAA,QACxC,YAAU;AAAA,QACV,QAAQG,IAAuB,UAAU;AAAA,QACzC,OAAOA,IAAuB,UAAU;AAAA,MAAA;AAAA,MALnCH,EAAY;AAAA,IAAA,CAOpB;AAAA,IACH,CAACN,CAAY;AAAA,EAAA,GAGTU,IAAUL;AAAA,IACd,MACEL,EAAa,UAAU,IACnB,sBAAsBC,CAAW,oFACjC,eAAeA,CAAW;AAAA,IAChC,CAACD,EAAa,QAAQC,CAAW;AAAA,EAAA,GAG7BU,IAAwB,CAACF,KAAwBL,EAAc,SAAS;AAE1E,SAACJ,KAAA,QAAAA,EAAc,2BAKhBY,GACC,EAAA,UAAA;AAAA,IAAA,gBAAAL,EAACM,GAAK,EAAA,WAAU,YAAW,OAAM,WAAU,UAE3C,gBAAA;AAAA,IACA,gBAAAN,EAACO,GAAU,EAAA,SAAS,MAAO,CAAA;AAAA,IAC3B,gBAAAP,EAACK,GAAS,EAAA,eAAe,KACvB,UAAA,gBAAAL,EAACM,GAAK,EAAA,WAAU,OAAM,OAAM,UACzB,UAAAH,EACH,CAAA,GACF;AAAA,IACCD,KAAwB,gBAAAF,EAACO,GAAU,EAAA,SAAS,EAAG,CAAA;AAAA,IAChD,gBAAAP;AAAA,MAACQ;AAAAA,MAAA;AAAA,QACC,SAASN,IAAuB,UAAU;AAAA,QAC1C,gBAAgBA,IAAuB,OAAO;AAAA,QAE9C,UAAA,gBAAAF;AAAA,UAACS;AAAA,UAAA;AAAA,YACC,KAAKd;AAAA,YACL,OAAOE;AAAA,YACP,cAAc;AAAA,YACd,oBAAoB;AAAA,YACpB,UAAU;AAAA,YACV,YAAY;AAAA,cACV,UAAU;AAAA,cACV,kBAAkB;AAAA,cAClB,qBAAqB;AAAA,cACrB,uBAAuB;AAAA,cACvB,SAAS;AAAA,YACX;AAAA,YACA,uBAAAO;AAAA,YACA,kBAAkB;AAAA,cAChB,eAAe;AAAA,cACf,YAAY;AAAA,cACZ,SAAS;AAAA,YACX;AAAA,UAAA;AAAA,QACF;AAAA,MAAA;AAAA,IACF;AAAA,IACA,gBAAAJ,EAACO,GAAU,EAAA,SAAS,KAAM,CAAA;AAAA,EAC5B,EAAA,CAAA,IAzCO;AA2CX;"}
|
|
@@ -1,26 +1,27 @@
|
|
|
1
1
|
import { jsxs as s, jsx as e } from "react/jsx-runtime";
|
|
2
|
-
import { memo as L, useRef as
|
|
2
|
+
import { memo as L, useRef as I, useState as h, useCallback as l, useEffect as v } from "react";
|
|
3
3
|
import X from "../../../../../../assets/line-icons/icons/chevron-left.js";
|
|
4
4
|
import w from "../../../../../../assets/line-icons/icons/chevron-right.js";
|
|
5
|
-
import { PuzzleContainer as
|
|
5
|
+
import { PuzzleContainer as A, StatusIcon as N, ContentWrapper as T, ScrollButton as m, ScrollContainer as x } from "./activities-card-puzzles.styled.js";
|
|
6
6
|
import i from "../../../../../ui/layout/flex-view.js";
|
|
7
7
|
import B from "../../../../../ui/image/image.js";
|
|
8
8
|
import k from "../../../../../ui/separator/separator.js";
|
|
9
9
|
import D from "../../../../../ui/text/text.js";
|
|
10
10
|
import { NODE_STATE as a } from "../../../../daily-timeline-types.js";
|
|
11
11
|
import { stateIcon as d } from "../constants.js";
|
|
12
|
-
|
|
13
|
-
|
|
12
|
+
import { IS_APP_RUNNING_IN_RN as f } from "../../../../../../constants/app-config.js";
|
|
13
|
+
const j = ({
|
|
14
|
+
puzzles: $,
|
|
14
15
|
onPuzzleClick: o
|
|
15
16
|
}) => {
|
|
16
|
-
const n =
|
|
17
|
+
const n = $ || [], r = I(null), [g, u] = h(!1), [_, C] = h(!1), b = l(() => {
|
|
17
18
|
r.current && r.current.scrollBy({ left: -180, behavior: "smooth" });
|
|
18
|
-
}, []),
|
|
19
|
+
}, []), p = l(() => {
|
|
19
20
|
r.current && r.current.scrollBy({ left: 180, behavior: "smooth" });
|
|
20
21
|
}, []), c = l(() => {
|
|
21
22
|
if (r.current) {
|
|
22
|
-
const { scrollLeft: t, scrollWidth: E, clientWidth:
|
|
23
|
-
|
|
23
|
+
const { scrollLeft: t, scrollWidth: E, clientWidth: R } = r.current;
|
|
24
|
+
u(t > 0), C(t < E - R - 10);
|
|
24
25
|
}
|
|
25
26
|
}, []);
|
|
26
27
|
v(() => {
|
|
@@ -30,9 +31,9 @@ const N = ({
|
|
|
30
31
|
t.removeEventListener("scroll", c);
|
|
31
32
|
};
|
|
32
33
|
}, [c, n.length]);
|
|
33
|
-
const
|
|
34
|
+
const S = l(
|
|
34
35
|
(t) => /* @__PURE__ */ s(
|
|
35
|
-
|
|
36
|
+
A,
|
|
36
37
|
{
|
|
37
38
|
$gapX: 1,
|
|
38
39
|
$imageHue: t.image_hue || "BLUE",
|
|
@@ -48,7 +49,7 @@ const N = ({
|
|
|
48
49
|
}),
|
|
49
50
|
children: [
|
|
50
51
|
/* @__PURE__ */ e(
|
|
51
|
-
|
|
52
|
+
N,
|
|
52
53
|
{
|
|
53
54
|
$borderRadiusX: 1,
|
|
54
55
|
$background: t.state === a.PENDING || t.state === a.NOT_STARTED ? "RED" : "BLACK_1",
|
|
@@ -79,7 +80,7 @@ const N = ({
|
|
|
79
80
|
),
|
|
80
81
|
[o]
|
|
81
82
|
);
|
|
82
|
-
return !n || n.length === 0 ? null : /* @__PURE__ */ e(
|
|
83
|
+
return !n || n.length === 0 ? null : /* @__PURE__ */ e(T, { $flexRowGapX: 1, children: /* @__PURE__ */ s(i, { $position: "relative", $borderColor: "GREY_2", children: [
|
|
83
84
|
/* @__PURE__ */ e(
|
|
84
85
|
m,
|
|
85
86
|
{
|
|
@@ -88,14 +89,14 @@ const N = ({
|
|
|
88
89
|
$alignItems: "center",
|
|
89
90
|
$widthX: 2,
|
|
90
91
|
$height: "100%",
|
|
91
|
-
onClick:
|
|
92
|
-
$visible:
|
|
92
|
+
onClick: b,
|
|
93
|
+
$visible: !f && g,
|
|
93
94
|
$left: "0px",
|
|
94
95
|
$right: "auto",
|
|
95
96
|
children: /* @__PURE__ */ e(X, { width: 24, height: 24 })
|
|
96
97
|
}
|
|
97
98
|
),
|
|
98
|
-
/* @__PURE__ */ e(i, { $gutterX: 1, $gapX: 1, children: /* @__PURE__ */ e(
|
|
99
|
+
/* @__PURE__ */ e(i, { $gutterX: 1, $gapX: 1, children: /* @__PURE__ */ e(x, { ref: r, children: /* @__PURE__ */ e(i, { $flexDirection: "row", $flexGapX: 1, children: n.map(S) }) }) }),
|
|
99
100
|
/* @__PURE__ */ e(
|
|
100
101
|
m,
|
|
101
102
|
{
|
|
@@ -105,16 +106,16 @@ const N = ({
|
|
|
105
106
|
$background: "BLACK_T_60",
|
|
106
107
|
$justifyContent: "center",
|
|
107
108
|
$alignItems: "center",
|
|
108
|
-
onClick:
|
|
109
|
-
$visible:
|
|
109
|
+
onClick: p,
|
|
110
|
+
$visible: !f && _,
|
|
110
111
|
$left: "auto",
|
|
111
112
|
$right: "0px",
|
|
112
113
|
children: /* @__PURE__ */ e(w, { width: 24, height: 24 })
|
|
113
114
|
}
|
|
114
115
|
)
|
|
115
116
|
] }) });
|
|
116
|
-
},
|
|
117
|
+
}, q = L(j);
|
|
117
118
|
export {
|
|
118
|
-
|
|
119
|
+
q as default
|
|
119
120
|
};
|
|
120
121
|
//# sourceMappingURL=activities-card-puzzles.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"activities-card-puzzles.js","sources":["../../../../../../../src/features/timeline/monthly-report/comps/activities/activities-card-puzzles/activities-card-puzzles.tsx"],"sourcesContent":["import { type FC, useRef, memo, useCallback, useState, useEffect } from 'react';\n\nimport ChevronLeftIcon from '../../../../../../assets/line-icons/icons/chevron-left';\nimport ChevronRightIcon from '../../../../../../assets/line-icons/icons/chevron-right';\nimport { type IActivitiesCardPuzzlesProps } from './activities-card-puzzles-types';\nimport { type IMonthlyActivity } from '../../../monthly-report-types';\nimport * as Styled from './activities-card-puzzles.styled';\nimport FlexView from '../../../../../ui/layout/flex-view';\nimport Image from '../../../../../ui/image/image';\nimport Separator from '../../../../../ui/separator/separator';\nimport Text from '../../../../../ui/text/text';\nimport { NODE_STATE } from '../../../../daily-timeline-types';\nimport { stateIcon } from '../constants';\n\nconst ActivitiesCardPuzzles: FC<IActivitiesCardPuzzlesProps> = ({\n puzzles: newPuzzles,\n onPuzzleClick,\n}) => {\n const puzzles = newPuzzles || [];\n const scrollRef = useRef<HTMLDivElement>(null);\n const [canScrollLeft, setCanScrollLeft] = useState(false);\n const [canScrollRight, setCanScrollRight] = useState(false);\n\n const handleScrollLeft = useCallback(() => {\n if (scrollRef.current) {\n scrollRef.current.scrollBy({ left: -180, behavior: 'smooth' });\n }\n }, []);\n\n const handleScrollRight = useCallback(() => {\n if (scrollRef.current) {\n scrollRef.current.scrollBy({ left: 180, behavior: 'smooth' });\n }\n }, []);\n\n const updateScrollButtons = useCallback(() => {\n if (scrollRef.current) {\n const { scrollLeft, scrollWidth, clientWidth } = scrollRef.current;\n\n setCanScrollLeft(scrollLeft > 0);\n setCanScrollRight(scrollLeft < scrollWidth - clientWidth - 10);\n }\n }, []);\n\n useEffect(() => {\n const scrollElement = scrollRef.current;\n\n if (scrollElement) {\n updateScrollButtons();\n\n scrollElement.addEventListener('scroll', updateScrollButtons);\n\n return () => {\n scrollElement.removeEventListener('scroll', updateScrollButtons);\n };\n }\n }, [updateScrollButtons, puzzles.length]);\n\n const renderPuzzleCard = useCallback(\n (puzzle: IMonthlyActivity) => (\n <Styled.PuzzleContainer\n key={puzzle.id}\n $gapX={1}\n $imageHue={puzzle.image_hue || 'BLUE'}\n $width={146}\n $height={162}\n $background={`${puzzle.image_hue || 'BLUE'}_2`}\n onClick={() =>\n onPuzzleClick?.({\n item_ref: puzzle.item_ref,\n feedback_comments: puzzle.feedback_comments,\n image_hue: puzzle.image_hue,\n title: puzzle.title,\n tip: puzzle.tip,\n })\n }\n >\n <Styled.StatusIcon\n $borderRadiusX={1}\n $background={\n puzzle.state === NODE_STATE.PENDING || puzzle.state === NODE_STATE.NOT_STARTED\n ? 'RED'\n : 'BLACK_1'\n }\n $widthX={1}\n $heightX={1}\n $alignItems=\"center\"\n $justifyContent=\"center\"\n >\n {puzzle.state &&\n (stateIcon[puzzle.state as NODE_STATE] || stateIcon[NODE_STATE.COMPLETED])}\n </Styled.StatusIcon>\n <FlexView $background=\"TRANSPARENT\" $alignItems=\"center\">\n {puzzle.image_url && (\n <Image\n src={puzzle.image_url ?? ''}\n alt=\"Puzzle illustration\"\n width={68}\n height={68}\n withLoader={true}\n />\n )}\n <Separator heightX={1} />\n <FlexView $gutterX={0.25}>\n <Text $renderAs=\"ab3\" $align=\"center\">\n {puzzle.title}\n </Text>\n </FlexView>\n </FlexView>\n </Styled.PuzzleContainer>\n ),\n [onPuzzleClick],\n );\n\n if (!puzzles || puzzles.length === 0) return null;\n\n return (\n <Styled.ContentWrapper $flexRowGapX={1}>\n <FlexView $position=\"relative\" $borderColor=\"GREY_2\">\n <Styled.ScrollButton\n $background=\"BLACK_T_60\"\n $justifyContent=\"center\"\n $alignItems=\"center\"\n $widthX={2}\n $height=\"100%\"\n onClick={handleScrollLeft}\n $visible={canScrollLeft}\n $left=\"0px\"\n $right=\"auto\"\n >\n <ChevronLeftIcon width={24} height={24} />\n </Styled.ScrollButton>\n <FlexView $gutterX={1} $gapX={1}>\n <Styled.ScrollContainer ref={scrollRef}>\n <FlexView $flexDirection=\"row\" $flexGapX={1}>\n {puzzles.map(renderPuzzleCard)}\n </FlexView>\n </Styled.ScrollContainer>\n </FlexView>\n\n <Styled.ScrollButton\n $position=\"absolute\"\n $widthX={2}\n $height=\"100%\"\n $background=\"BLACK_T_60\"\n $justifyContent=\"center\"\n $alignItems=\"center\"\n onClick={handleScrollRight}\n $visible={canScrollRight}\n $left=\"auto\"\n $right=\"0px\"\n >\n <ChevronRightIcon width={24} height={24} />\n </Styled.ScrollButton>\n </FlexView>\n </Styled.ContentWrapper>\n );\n};\n\nexport default memo(ActivitiesCardPuzzles);\n"],"names":["ActivitiesCardPuzzles","newPuzzles","onPuzzleClick","puzzles","scrollRef","useRef","canScrollLeft","setCanScrollLeft","useState","canScrollRight","setCanScrollRight","handleScrollLeft","useCallback","handleScrollRight","updateScrollButtons","scrollLeft","scrollWidth","clientWidth","useEffect","scrollElement","renderPuzzleCard","puzzle","jsxs","Styled.PuzzleContainer","jsx","Styled.StatusIcon","NODE_STATE","stateIcon","FlexView","Image","Separator","Text","Styled.ContentWrapper","Styled.ScrollButton","ChevronLeftIcon","Styled.ScrollContainer","ChevronRightIcon","ActivitiesCardPuzzles$1","memo"],"mappings":"
|
|
1
|
+
{"version":3,"file":"activities-card-puzzles.js","sources":["../../../../../../../src/features/timeline/monthly-report/comps/activities/activities-card-puzzles/activities-card-puzzles.tsx"],"sourcesContent":["import { type FC, useRef, memo, useCallback, useState, useEffect } from 'react';\n\nimport ChevronLeftIcon from '../../../../../../assets/line-icons/icons/chevron-left';\nimport ChevronRightIcon from '../../../../../../assets/line-icons/icons/chevron-right';\nimport { type IActivitiesCardPuzzlesProps } from './activities-card-puzzles-types';\nimport { type IMonthlyActivity } from '../../../monthly-report-types';\nimport * as Styled from './activities-card-puzzles.styled';\nimport FlexView from '../../../../../ui/layout/flex-view';\nimport Image from '../../../../../ui/image/image';\nimport Separator from '../../../../../ui/separator/separator';\nimport Text from '../../../../../ui/text/text';\nimport { NODE_STATE } from '../../../../daily-timeline-types';\nimport { stateIcon } from '../constants';\nimport { IS_APP_RUNNING_IN_RN } from '../../../../../../constants/app-config';\n\nconst ActivitiesCardPuzzles: FC<IActivitiesCardPuzzlesProps> = ({\n puzzles: newPuzzles,\n onPuzzleClick,\n}) => {\n const puzzles = newPuzzles || [];\n const scrollRef = useRef<HTMLDivElement>(null);\n const [canScrollLeft, setCanScrollLeft] = useState(false);\n const [canScrollRight, setCanScrollRight] = useState(false);\n\n const handleScrollLeft = useCallback(() => {\n if (scrollRef.current) {\n scrollRef.current.scrollBy({ left: -180, behavior: 'smooth' });\n }\n }, []);\n\n const handleScrollRight = useCallback(() => {\n if (scrollRef.current) {\n scrollRef.current.scrollBy({ left: 180, behavior: 'smooth' });\n }\n }, []);\n\n const updateScrollButtons = useCallback(() => {\n if (scrollRef.current) {\n const { scrollLeft, scrollWidth, clientWidth } = scrollRef.current;\n\n setCanScrollLeft(scrollLeft > 0);\n setCanScrollRight(scrollLeft < scrollWidth - clientWidth - 10);\n }\n }, []);\n\n useEffect(() => {\n const scrollElement = scrollRef.current;\n\n if (scrollElement) {\n updateScrollButtons();\n\n scrollElement.addEventListener('scroll', updateScrollButtons);\n\n return () => {\n scrollElement.removeEventListener('scroll', updateScrollButtons);\n };\n }\n }, [updateScrollButtons, puzzles.length]);\n\n const renderPuzzleCard = useCallback(\n (puzzle: IMonthlyActivity) => (\n <Styled.PuzzleContainer\n key={puzzle.id}\n $gapX={1}\n $imageHue={puzzle.image_hue || 'BLUE'}\n $width={146}\n $height={162}\n $background={`${puzzle.image_hue || 'BLUE'}_2`}\n onClick={() =>\n onPuzzleClick?.({\n item_ref: puzzle.item_ref,\n feedback_comments: puzzle.feedback_comments,\n image_hue: puzzle.image_hue,\n title: puzzle.title,\n tip: puzzle.tip,\n })\n }\n >\n <Styled.StatusIcon\n $borderRadiusX={1}\n $background={\n puzzle.state === NODE_STATE.PENDING || puzzle.state === NODE_STATE.NOT_STARTED\n ? 'RED'\n : 'BLACK_1'\n }\n $widthX={1}\n $heightX={1}\n $alignItems=\"center\"\n $justifyContent=\"center\"\n >\n {puzzle.state &&\n (stateIcon[puzzle.state as NODE_STATE] || stateIcon[NODE_STATE.COMPLETED])}\n </Styled.StatusIcon>\n <FlexView $background=\"TRANSPARENT\" $alignItems=\"center\">\n {puzzle.image_url && (\n <Image\n src={puzzle.image_url ?? ''}\n alt=\"Puzzle illustration\"\n width={68}\n height={68}\n withLoader={true}\n />\n )}\n <Separator heightX={1} />\n <FlexView $gutterX={0.25}>\n <Text $renderAs=\"ab3\" $align=\"center\">\n {puzzle.title}\n </Text>\n </FlexView>\n </FlexView>\n </Styled.PuzzleContainer>\n ),\n [onPuzzleClick],\n );\n\n if (!puzzles || puzzles.length === 0) return null;\n\n return (\n <Styled.ContentWrapper $flexRowGapX={1}>\n <FlexView $position=\"relative\" $borderColor=\"GREY_2\">\n <Styled.ScrollButton\n $background=\"BLACK_T_60\"\n $justifyContent=\"center\"\n $alignItems=\"center\"\n $widthX={2}\n $height=\"100%\"\n onClick={handleScrollLeft}\n $visible={!IS_APP_RUNNING_IN_RN && canScrollLeft}\n $left=\"0px\"\n $right=\"auto\"\n >\n <ChevronLeftIcon width={24} height={24} />\n </Styled.ScrollButton>\n <FlexView $gutterX={1} $gapX={1}>\n <Styled.ScrollContainer ref={scrollRef}>\n <FlexView $flexDirection=\"row\" $flexGapX={1}>\n {puzzles.map(renderPuzzleCard)}\n </FlexView>\n </Styled.ScrollContainer>\n </FlexView>\n\n <Styled.ScrollButton\n $position=\"absolute\"\n $widthX={2}\n $height=\"100%\"\n $background=\"BLACK_T_60\"\n $justifyContent=\"center\"\n $alignItems=\"center\"\n onClick={handleScrollRight}\n $visible={!IS_APP_RUNNING_IN_RN && canScrollRight}\n $left=\"auto\"\n $right=\"0px\"\n >\n <ChevronRightIcon width={24} height={24} />\n </Styled.ScrollButton>\n </FlexView>\n </Styled.ContentWrapper>\n );\n};\n\nexport default memo(ActivitiesCardPuzzles);\n"],"names":["ActivitiesCardPuzzles","newPuzzles","onPuzzleClick","puzzles","scrollRef","useRef","canScrollLeft","setCanScrollLeft","useState","canScrollRight","setCanScrollRight","handleScrollLeft","useCallback","handleScrollRight","updateScrollButtons","scrollLeft","scrollWidth","clientWidth","useEffect","scrollElement","renderPuzzleCard","puzzle","jsxs","Styled.PuzzleContainer","jsx","Styled.StatusIcon","NODE_STATE","stateIcon","FlexView","Image","Separator","Text","Styled.ContentWrapper","Styled.ScrollButton","IS_APP_RUNNING_IN_RN","ChevronLeftIcon","Styled.ScrollContainer","ChevronRightIcon","ActivitiesCardPuzzles$1","memo"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"swipable-carousel.js","sources":["../../../../src/features/ui/swipable-carousel/swipable-carousel.tsx"],"sourcesContent":["import {\n type ForwardRefRenderFunction,\n memo,\n useCallback,\n useEffect,\n useState,\n forwardRef,\n useImperativeHandle,\n} from 'react';\n\nimport SwipeableComponent from '../swipeable-component/swipeable-component';\nimport IconButton from '../buttons/icon-button/icon-button';\nimport * as Styled from './swipable-carousel-styled';\nimport type { ISwipableCarouselRefs, ISwipableCarousel } from './swipable-carousel-types';\nimport ChevronLeft from '../../../assets/line-icons/icons/chevron-left';\nimport ChevronRight from '../../../assets/line-icons/icons/chevron-right';\nimport FlexView from '../layout/flex-view';\nimport Separator from '../separator/separator';\n\n// Default dot configuration\nconst defaultDotConfig = {\n dotColor: 'BLACK_1' as const,\n inactiveDotColor: 'WHITE_1' as const,\n activeIndicatorSize: '8px',\n inactiveIndicatorSize: '8px',\n spacing: '8px',\n};\n\n// Default navigation configuration\nconst defaultNavigationConfig = {\n buttonVariant: 'secondary' as const,\n buttonSize: 'xsmall' as const,\n spacing: 8,\n hideOnMobile: true,\n};\n\nconst SwipableCarousel: ForwardRefRenderFunction<ISwipableCarouselRefs, ISwipableCarousel> = (\n {\n items,\n children,\n defaultIndex = 0,\n transitionDuration = 300,\n onSwipeLeft,\n onSwipeRight,\n onIndexChange,\n showDots = false,\n dotsConfig,\n showNavigationButtons = false,\n navigationConfig,\n onDotClick,\n },\n ref,\n) => {\n const validDefaultIndex = Math.max(0, Math.min(defaultIndex, items.length - 1));\n const [currIndex, setCurrIndex] = useState(validDefaultIndex);\n const canGoPrevious = currIndex > 0;\n const canGoNext = currIndex < items.length - 1;\n const finalDotConfig = { ...defaultDotConfig, ...dotsConfig };\n const finalNavigationConfig = { ...defaultNavigationConfig, ...navigationConfig };\n\n const goToIndex = useCallback(\n (index: number) => {\n if (index < 0 || index >= items.length || index === currIndex) return;\n setCurrIndex(index);\n onIndexChange?.(index);\n },\n [currIndex, items.length, onIndexChange],\n );\n\n const handleSwipeLeft = useCallback(() => {\n if (!canGoNext) return;\n\n const newIndex = currIndex + 1;\n\n setCurrIndex(newIndex);\n onIndexChange?.(newIndex);\n onSwipeLeft?.();\n }, [canGoNext, currIndex, onSwipeLeft, onIndexChange]);\n\n const handleSwipeRight = useCallback(() => {\n if (!canGoPrevious) return;\n\n const newIndex = currIndex - 1;\n\n setCurrIndex(newIndex);\n onIndexChange?.(newIndex);\n onSwipeRight?.();\n }, [canGoPrevious, currIndex, onSwipeRight, onIndexChange]);\n\n const handleDotClick = useCallback(\n (index: number) => {\n goToIndex(index);\n onDotClick?.(index);\n },\n [goToIndex, onDotClick],\n );\n\n const handlePrevious = useCallback(() => {\n goToIndex(currIndex - 1);\n }, [goToIndex, currIndex]);\n\n const handleNext = useCallback(() => {\n goToIndex(currIndex + 1);\n }, [goToIndex, currIndex]);\n\n useImperativeHandle(ref, () => ({\n currentIndex: currIndex,\n goToIndex,\n }));\n\n useEffect(() => {\n setCurrIndex(defaultIndex);\n }, [defaultIndex]);\n\n const renderDots = () => {\n if (!showDots || items.length <= 1) return null;\n\n return (\n <FlexView $flexDirection=\"row\" $alignItems=\"center\" $justifyContent=\"center\" $flexGap={8}>\n {items.map((_, index) => (\n <Styled.Dot\n key={index}\n onClick={() => handleDotClick(index)}\n $isCurrent={index === currIndex}\n $dotColor={finalDotConfig.dotColor}\n $inactiveDotColor={finalDotConfig.inactiveDotColor}\n $activeIndicatorSize={finalDotConfig.activeIndicatorSize}\n $inactiveIndicatorSize={finalDotConfig.inactiveIndicatorSize}\n />\n ))}\n </FlexView>\n );\n };\n\n const renderNavigation = () => {\n if (!showNavigationButtons || items.length <= 1) return null;\n\n return (\n <Styled.NavigationConatainer $bottom=\"-48px\">\n <Separator heightX={1} />\n <FlexView\n $flexDirection=\"row\"\n $alignItems=\"center\"\n $justifyContent=\"center\"\n $flex={1}\n $flexGap={finalNavigationConfig.spacing || 8}\n >\n <IconButton\n Icon={ChevronLeft}\n renderAs={finalNavigationConfig.buttonVariant}\n analyticsLabel=\"Previous\"\n size={finalNavigationConfig.buttonSize}\n onClick={handlePrevious}\n disabled={!canGoPrevious}\n aria-label=\"Previous item\"\n />\n {renderDots()}\n <IconButton\n Icon={ChevronRight}\n renderAs={finalNavigationConfig.buttonVariant}\n analyticsLabel=\"Next\"\n size={finalNavigationConfig.buttonSize}\n onClick={handleNext}\n disabled={!canGoNext}\n aria-label=\"Next item\"\n />\n </FlexView>\n </Styled.NavigationConatainer>\n );\n };\n\n return (\n <SwipeableComponent onSwipeLeft={handleSwipeLeft} onSwipeRight={handleSwipeRight}>\n <Styled.Carousel>\n <Styled.CarouselWrapper\n $translate={currIndex * 100}\n $translateDuration={transitionDuration}\n >\n {items.map((item, index) => (\n <Styled.CarouselItemContainer key={index}>{item}</Styled.CarouselItemContainer>\n ))}\n </Styled.CarouselWrapper>\n {children}\n {showDots && !showNavigationButtons && (\n <Styled.NavigationConatainer $bottom=\"-8px\">{renderDots()}</Styled.NavigationConatainer>\n )}\n {showNavigationButtons && renderNavigation()}\n </Styled.Carousel>\n </SwipeableComponent>\n );\n};\n\nexport default memo(forwardRef(SwipableCarousel));\n"],"names":["defaultDotConfig","defaultNavigationConfig","SwipableCarousel","items","children","defaultIndex","transitionDuration","onSwipeLeft","onSwipeRight","onIndexChange","showDots","dotsConfig","showNavigationButtons","navigationConfig","onDotClick","ref","validDefaultIndex","currIndex","setCurrIndex","useState","canGoPrevious","canGoNext","finalDotConfig","finalNavigationConfig","goToIndex","useCallback","index","handleSwipeLeft","newIndex","handleSwipeRight","handleDotClick","handlePrevious","handleNext","useImperativeHandle","useEffect","renderDots","jsx","FlexView","_","Styled.Dot","renderNavigation","jsxs","Styled.NavigationConatainer","Separator","IconButton","ChevronLeft","ChevronRight","SwipeableComponent","Styled.Carousel","Styled.CarouselWrapper","item","Styled.CarouselItemContainer","SwipableCarousel$1","memo","forwardRef"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"swipable-carousel.js","sources":["../../../../src/features/ui/swipable-carousel/swipable-carousel.tsx"],"sourcesContent":["import {\n type ForwardRefRenderFunction,\n memo,\n useCallback,\n useEffect,\n useState,\n forwardRef,\n useImperativeHandle,\n} from 'react';\n\nimport SwipeableComponent from '../swipeable-component/swipeable-component';\nimport IconButton from '../buttons/icon-button/icon-button';\nimport * as Styled from './swipable-carousel-styled';\nimport type { ISwipableCarouselRefs, ISwipableCarousel } from './swipable-carousel-types';\nimport ChevronLeft from '../../../assets/line-icons/icons/chevron-left';\nimport ChevronRight from '../../../assets/line-icons/icons/chevron-right';\nimport FlexView from '../layout/flex-view';\nimport Separator from '../separator/separator';\n\n// Default dot configuration\nconst defaultDotConfig = {\n dotColor: 'BLACK_1' as const,\n inactiveDotColor: 'WHITE_1' as const,\n activeIndicatorSize: '8px',\n inactiveIndicatorSize: '8px',\n spacing: '8px',\n};\n\n// Default navigation configuration\nconst defaultNavigationConfig = {\n buttonVariant: 'secondary' as const,\n buttonSize: 'xsmall' as const,\n spacing: 8,\n hideOnMobile: true,\n};\n\nconst SwipableCarousel: ForwardRefRenderFunction<ISwipableCarouselRefs, ISwipableCarousel> = (\n {\n items,\n children,\n defaultIndex = 0,\n transitionDuration = 300,\n onSwipeLeft,\n onSwipeRight,\n onIndexChange,\n showDots = false,\n dotsConfig,\n showNavigationButtons = false,\n navigationConfig,\n onDotClick,\n },\n ref,\n) => {\n const validDefaultIndex = Math.max(0, Math.min(defaultIndex, items.length - 1));\n const [currIndex, setCurrIndex] = useState(validDefaultIndex);\n const canGoPrevious = currIndex > 0;\n const canGoNext = currIndex < items.length - 1;\n const finalDotConfig = { ...defaultDotConfig, ...dotsConfig };\n const finalNavigationConfig = { ...defaultNavigationConfig, ...navigationConfig };\n\n const goToIndex = useCallback(\n (index: number) => {\n if (index < 0 || index >= items.length || index === currIndex) return;\n setCurrIndex(index);\n onIndexChange?.(index);\n },\n [currIndex, items.length, onIndexChange],\n );\n\n const handleSwipeLeft = useCallback(() => {\n if (!canGoNext) return;\n\n const newIndex = currIndex + 1;\n\n setCurrIndex(newIndex);\n onIndexChange?.(newIndex);\n onSwipeLeft?.();\n }, [canGoNext, currIndex, onSwipeLeft, onIndexChange]);\n\n const handleSwipeRight = useCallback(() => {\n if (!canGoPrevious) return;\n\n const newIndex = currIndex - 1;\n\n setCurrIndex(newIndex);\n onIndexChange?.(newIndex);\n onSwipeRight?.();\n }, [canGoPrevious, currIndex, onSwipeRight, onIndexChange]);\n\n const handleDotClick = useCallback(\n (index: number) => {\n goToIndex(index);\n onDotClick?.(index);\n },\n [goToIndex, onDotClick],\n );\n\n const handlePrevious = useCallback(() => {\n goToIndex(currIndex - 1);\n }, [goToIndex, currIndex]);\n\n const handleNext = useCallback(() => {\n goToIndex(currIndex + 1);\n }, [goToIndex, currIndex]);\n\n useImperativeHandle(ref, () => ({\n currentIndex: currIndex,\n goToIndex,\n }));\n\n useEffect(() => {\n setCurrIndex(defaultIndex);\n }, [defaultIndex]);\n\n const renderDots = () => {\n if (!showDots || items.length <= 1) return null;\n\n return (\n <FlexView $flexDirection=\"row\" $alignItems=\"center\" $justifyContent=\"center\" $flexGap={8}>\n {items.map((_, index) => (\n <Styled.Dot\n key={index}\n onClick={() => handleDotClick(index)}\n $isCurrent={index === currIndex}\n $dotColor={finalDotConfig.dotColor}\n $inactiveDotColor={finalDotConfig.inactiveDotColor}\n $activeIndicatorSize={finalDotConfig.activeIndicatorSize}\n $inactiveIndicatorSize={finalDotConfig.inactiveIndicatorSize}\n />\n ))}\n </FlexView>\n );\n };\n\n const renderNavigation = () => {\n if (!showNavigationButtons || items.length <= 1) return null;\n\n return (\n <Styled.NavigationConatainer $bottom=\"-48px\">\n <Separator heightX={1} />\n <FlexView\n $flexDirection=\"row\"\n $alignItems=\"center\"\n $justifyContent=\"center\"\n $flex={1}\n $flexGap={finalNavigationConfig.spacing || 8}\n >\n <IconButton\n Icon={ChevronLeft}\n renderAs={finalNavigationConfig.buttonVariant}\n analyticsLabel=\"Previous\"\n size={finalNavigationConfig.buttonSize}\n onClick={handlePrevious}\n disabled={!canGoPrevious}\n aria-label=\"Previous item\"\n />\n {renderDots()}\n <IconButton\n Icon={ChevronRight}\n renderAs={finalNavigationConfig.buttonVariant}\n analyticsLabel=\"Next\"\n size={finalNavigationConfig.buttonSize}\n onClick={handleNext}\n disabled={!canGoNext}\n aria-label=\"Next item\"\n />\n </FlexView>\n </Styled.NavigationConatainer>\n );\n };\n\n return (\n <SwipeableComponent onSwipeLeft={handleSwipeLeft} onSwipeRight={handleSwipeRight}>\n <Styled.Carousel>\n <Styled.CarouselWrapper\n $translate={currIndex * 100}\n $translateDuration={transitionDuration}\n >\n {items.map((item, index) => (\n <Styled.CarouselItemContainer key={index}>{item}</Styled.CarouselItemContainer>\n ))}\n </Styled.CarouselWrapper>\n {children}\n {showDots && !showNavigationButtons && (\n <Styled.NavigationConatainer $bottom=\"-18px\">{renderDots()}</Styled.NavigationConatainer>\n )}\n {showNavigationButtons && renderNavigation()}\n </Styled.Carousel>\n </SwipeableComponent>\n );\n};\n\nexport default memo(forwardRef(SwipableCarousel));\n"],"names":["defaultDotConfig","defaultNavigationConfig","SwipableCarousel","items","children","defaultIndex","transitionDuration","onSwipeLeft","onSwipeRight","onIndexChange","showDots","dotsConfig","showNavigationButtons","navigationConfig","onDotClick","ref","validDefaultIndex","currIndex","setCurrIndex","useState","canGoPrevious","canGoNext","finalDotConfig","finalNavigationConfig","goToIndex","useCallback","index","handleSwipeLeft","newIndex","handleSwipeRight","handleDotClick","handlePrevious","handleNext","useImperativeHandle","useEffect","renderDots","jsx","FlexView","_","Styled.Dot","renderNavigation","jsxs","Styled.NavigationConatainer","Separator","IconButton","ChevronLeft","ChevronRight","SwipeableComponent","Styled.Carousel","Styled.CarouselWrapper","item","Styled.CarouselItemContainer","SwipableCarousel$1","memo","forwardRef"],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -3077,7 +3077,6 @@ declare interface INavigationConfig {
|
|
|
3077
3077
|
buttonVariant?: 'primary' | 'secondary';
|
|
3078
3078
|
buttonSize?: 'xsmall' | 'small' | 'medium' | 'large';
|
|
3079
3079
|
spacing?: number;
|
|
3080
|
-
hideOnMobile?: boolean;
|
|
3081
3080
|
}
|
|
3082
3081
|
|
|
3083
3082
|
export declare enum IndicatorType {
|