@cuemath/leap 2.8.51-beta-0.1 → 2.8.51-beta-0.2

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.
Files changed (54) hide show
  1. package/dist/assets/line-icons/icons/exclamation.js +26 -0
  2. package/dist/assets/line-icons/icons/exclamation.js.map +1 -0
  3. package/dist/assets/line-icons/icons/home2.js +25 -0
  4. package/dist/assets/line-icons/icons/home2.js.map +1 -0
  5. package/dist/assets/line-icons/icons/important.js +23 -0
  6. package/dist/assets/line-icons/icons/important.js.map +1 -0
  7. package/dist/assets/line-icons/icons/recap.js +32 -0
  8. package/dist/assets/line-icons/icons/recap.js.map +1 -0
  9. package/dist/features/chapters-v2/api/chapter.js +10 -0
  10. package/dist/features/chapters-v2/api/chapter.js.map +1 -0
  11. package/dist/features/chapters-v2/chapter-details/block-sections/block-section-view.js +116 -0
  12. package/dist/features/chapters-v2/chapter-details/block-sections/block-section-view.js.map +1 -0
  13. package/dist/features/chapters-v2/chapter-details/block-sections/block-sections-styled.js +26 -0
  14. package/dist/features/chapters-v2/chapter-details/block-sections/block-sections-styled.js.map +1 -0
  15. package/dist/features/chapters-v2/chapter-details/block-sections/block-sections.js +68 -0
  16. package/dist/features/chapters-v2/chapter-details/block-sections/block-sections.js.map +1 -0
  17. package/dist/features/chapters-v2/chapter-details/chapter-banner/chapter-banner-styled.js +90 -0
  18. package/dist/features/chapters-v2/chapter-details/chapter-banner/chapter-banner-styled.js.map +1 -0
  19. package/dist/features/chapters-v2/chapter-details/chapter-banner/chapter-banner.js +95 -0
  20. package/dist/features/chapters-v2/chapter-details/chapter-banner/chapter-banner.js.map +1 -0
  21. package/dist/features/chapters-v2/chapter-details/chapter-details-styled.js +38 -0
  22. package/dist/features/chapters-v2/chapter-details/chapter-details-styled.js.map +1 -0
  23. package/dist/features/chapters-v2/chapter-details/chapter-details.js +89 -0
  24. package/dist/features/chapters-v2/chapter-details/chapter-details.js.map +1 -0
  25. package/dist/features/chapters-v2/comps/node-card/border-path-animation.js +13 -0
  26. package/dist/features/chapters-v2/comps/node-card/border-path-animation.js.map +1 -0
  27. package/dist/features/chapters-v2/comps/node-card/node-card-styled.js +134 -0
  28. package/dist/features/chapters-v2/comps/node-card/node-card-styled.js.map +1 -0
  29. package/dist/features/chapters-v2/comps/node-card/node-card-tags.js +12 -0
  30. package/dist/features/chapters-v2/comps/node-card/node-card-tags.js.map +1 -0
  31. package/dist/features/chapters-v2/comps/node-card/node-card.js +12 -0
  32. package/dist/features/chapters-v2/comps/node-card/node-card.js.map +1 -0
  33. package/dist/features/chapters-v2/comps/node-card/node-menu-options/node-menu-options-styled.js +32 -0
  34. package/dist/features/chapters-v2/comps/node-card/node-menu-options/node-menu-options-styled.js.map +1 -0
  35. package/dist/features/chapters-v2/comps/node-card/node-menu-options/node-menu-options.js +31 -0
  36. package/dist/features/chapters-v2/comps/node-card/node-menu-options/node-menu-options.js.map +1 -0
  37. package/dist/features/chapters-v2/comps/node-card/student-actions/student-actions.js +154 -0
  38. package/dist/features/chapters-v2/comps/node-card/student-actions/student-actions.js.map +1 -0
  39. package/dist/features/chapters-v2/comps/node-card/teacher-actions/teacher-actions.js +178 -0
  40. package/dist/features/chapters-v2/comps/node-card/teacher-actions/teacher-actions.js.map +1 -0
  41. package/dist/features/chapters-v2/comps/tag/tag-styled.js +13 -0
  42. package/dist/features/chapters-v2/comps/tag/tag-styled.js.map +1 -0
  43. package/dist/features/chapters-v2/comps/tag/tag.js +28 -0
  44. package/dist/features/chapters-v2/comps/tag/tag.js.map +1 -0
  45. package/dist/features/chapters-v2/constants/block-constants.js +18 -0
  46. package/dist/features/chapters-v2/constants/block-constants.js.map +1 -0
  47. package/dist/features/chapters-v2/utils/index.js +11 -0
  48. package/dist/features/chapters-v2/utils/index.js.map +1 -0
  49. package/dist/features/chapters-v2/utils/node-card-utils.js +72 -0
  50. package/dist/features/chapters-v2/utils/node-card-utils.js.map +1 -0
  51. package/dist/index.d.ts +137 -0
  52. package/dist/index.js +215 -211
  53. package/dist/index.js.map +1 -1
  54. package/package.json +1 -1
@@ -0,0 +1,26 @@
1
+ import { jsxs as l, jsx as o } from "react/jsx-runtime";
2
+ const i = (t) => /* @__PURE__ */ l(
3
+ "svg",
4
+ {
5
+ xmlns: "http://www.w3.org/2000/svg",
6
+ width: "24",
7
+ height: "24",
8
+ viewBox: "0 0 24 24",
9
+ fill: "none",
10
+ ...t,
11
+ children: [
12
+ /* @__PURE__ */ o(
13
+ "path",
14
+ {
15
+ d: "M13.1998 16.8C13.1998 17.4627 12.6625 18 11.9998 18C11.3371 18 10.7998 17.4627 10.7998 16.8C10.7998 16.1373 11.3371 15.6 11.9998 15.6C12.6625 15.6 13.1998 16.1373 13.1998 16.8Z",
16
+ fill: "currentColor"
17
+ }
18
+ ),
19
+ /* @__PURE__ */ o("path", { d: "M11 6H13V14H11V6Z", fill: "currentColor" })
20
+ ]
21
+ }
22
+ );
23
+ export {
24
+ i as default
25
+ };
26
+ //# sourceMappingURL=exclamation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"exclamation.js","sources":["../../../../src/assets/line-icons/icons/exclamation.tsx"],"sourcesContent":["const ExclamationIcon: React.FC<React.SVGProps<SVGSVGElement>> = props => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n {...props}\n >\n <path\n d=\"M13.1998 16.8C13.1998 17.4627 12.6625 18 11.9998 18C11.3371 18 10.7998 17.4627 10.7998 16.8C10.7998 16.1373 11.3371 15.6 11.9998 15.6C12.6625 15.6 13.1998 16.1373 13.1998 16.8Z\"\n fill=\"currentColor\"\n />\n <path d=\"M11 6H13V14H11V6Z\" fill=\"currentColor\" />\n </svg>\n);\n\nexport default ExclamationIcon;\n"],"names":["ExclamationIcon","props","jsxs","jsx"],"mappings":";AAAA,MAAMA,IAA2D,CAC/DC,MAAA,gBAAAC;AAAA,EAAC;AAAA,EAAA;AAAA,IACC,OAAM;AAAA,IACN,OAAM;AAAA,IACN,QAAO;AAAA,IACP,SAAQ;AAAA,IACR,MAAK;AAAA,IACJ,GAAGD;AAAA,IAEJ,UAAA;AAAA,MAAA,gBAAAE;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,GAAE;AAAA,UACF,MAAK;AAAA,QAAA;AAAA,MACP;AAAA,MACC,gBAAAA,EAAA,QAAA,EAAK,GAAE,qBAAoB,MAAK,gBAAe;AAAA,IAAA;AAAA,EAAA;AAClD;"}
@@ -0,0 +1,25 @@
1
+ import { jsx as e } from "react/jsx-runtime";
2
+ const C = (l) => /* @__PURE__ */ e(
3
+ "svg",
4
+ {
5
+ width: "24",
6
+ height: "24",
7
+ viewBox: "0 0 24 24",
8
+ fill: "none",
9
+ xmlns: "http://www.w3.org/2000/svg",
10
+ ...l,
11
+ children: /* @__PURE__ */ e(
12
+ "path",
13
+ {
14
+ fillRule: "evenodd",
15
+ clipRule: "evenodd",
16
+ d: "M12.5423 4.54381C13.607 6.79855 15.7523 8.44174 18.307 8.80716C18.5438 8.84104 18.7843 8.86396 19.0279 8.87538L18.9717 10.0741C18.9217 10.0717 18.8718 10.069 18.822 10.0658V19.4H12.9553V14.9111C12.9553 14.3834 12.5275 13.9556 11.9998 13.9556C11.472 13.9556 11.0442 14.3834 11.0442 14.9111V19.4H5.17756V10.0658C5.12777 10.069 5.07787 10.0717 5.02787 10.0741L4.97168 8.87538C5.2153 8.86396 5.45577 8.84104 5.6926 8.80716C8.24729 8.44174 10.3926 6.79855 11.4572 4.54381L12.5423 4.54381ZM6.37756 9.90563V18.2H9.84422V14.9111C9.84422 13.7206 10.8093 12.7556 11.9998 12.7556C13.1903 12.7556 14.1553 13.7206 14.1553 14.9111V18.2H17.622V9.90563C15.2646 9.42317 13.2533 7.99549 11.9998 6.03692C10.7462 7.99549 8.73491 9.42317 6.37756 9.90563Z",
17
+ fill: "currentColor"
18
+ }
19
+ )
20
+ }
21
+ );
22
+ export {
23
+ C as default
24
+ };
25
+ //# sourceMappingURL=home2.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"home2.js","sources":["../../../../src/assets/line-icons/icons/home2.tsx"],"sourcesContent":["const Home2Icon: React.FC<React.SVGProps<SVGSVGElement>> = props => (\n <svg\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n >\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M12.5423 4.54381C13.607 6.79855 15.7523 8.44174 18.307 8.80716C18.5438 8.84104 18.7843 8.86396 19.0279 8.87538L18.9717 10.0741C18.9217 10.0717 18.8718 10.069 18.822 10.0658V19.4H12.9553V14.9111C12.9553 14.3834 12.5275 13.9556 11.9998 13.9556C11.472 13.9556 11.0442 14.3834 11.0442 14.9111V19.4H5.17756V10.0658C5.12777 10.069 5.07787 10.0717 5.02787 10.0741L4.97168 8.87538C5.2153 8.86396 5.45577 8.84104 5.6926 8.80716C8.24729 8.44174 10.3926 6.79855 11.4572 4.54381L12.5423 4.54381ZM6.37756 9.90563V18.2H9.84422V14.9111C9.84422 13.7206 10.8093 12.7556 11.9998 12.7556C13.1903 12.7556 14.1553 13.7206 14.1553 14.9111V18.2H17.622V9.90563C15.2646 9.42317 13.2533 7.99549 11.9998 6.03692C10.7462 7.99549 8.73491 9.42317 6.37756 9.90563Z\"\n fill=\"currentColor\"\n />\n </svg>\n);\n\nexport default Home2Icon;\n"],"names":["Home2Icon","props","jsx"],"mappings":";AAAA,MAAMA,IAAqD,CACzDC,MAAA,gBAAAC;AAAA,EAAC;AAAA,EAAA;AAAA,IACC,OAAM;AAAA,IACN,QAAO;AAAA,IACP,SAAQ;AAAA,IACR,MAAK;AAAA,IACL,OAAM;AAAA,IACL,GAAGD;AAAA,IAEJ,UAAA,gBAAAC;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,UAAS;AAAA,QACT,UAAS;AAAA,QACT,GAAE;AAAA,QACF,MAAK;AAAA,MAAA;AAAA,IACP;AAAA,EAAA;AACF;"}
@@ -0,0 +1,23 @@
1
+ import { jsx as t } from "react/jsx-runtime";
2
+ const n = (o) => /* @__PURE__ */ t(
3
+ "svg",
4
+ {
5
+ xmlns: "http://www.w3.org/2000/svg",
6
+ width: "24",
7
+ height: "24",
8
+ viewBox: "0 0 24 24",
9
+ fill: "none",
10
+ ...o,
11
+ children: /* @__PURE__ */ t(
12
+ "path",
13
+ {
14
+ d: "M12 0L12.6879 1.85905C14.3085 6.23855 17.7614 9.69153 22.141 11.3121L24 12L22.141 12.6879C17.7614 14.3085 14.3085 17.7614 12.6879 22.141L12 24L11.3121 22.141C9.69153 17.7614 6.23856 14.3085 1.85905 12.6879L0 12L1.85905 11.3121C6.23856 9.69153 9.69153 6.23856 11.3121 1.85905L12 0Z",
15
+ fill: "currentColor"
16
+ }
17
+ )
18
+ }
19
+ );
20
+ export {
21
+ n as default
22
+ };
23
+ //# sourceMappingURL=important.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"important.js","sources":["../../../../src/assets/line-icons/icons/important.tsx"],"sourcesContent":["const ImportantIcon: React.FC<React.SVGProps<SVGSVGElement>> = props => {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n {...props}\n >\n <path\n d=\"M12 0L12.6879 1.85905C14.3085 6.23855 17.7614 9.69153 22.141 11.3121L24 12L22.141 12.6879C17.7614 14.3085 14.3085 17.7614 12.6879 22.141L12 24L11.3121 22.141C9.69153 17.7614 6.23856 14.3085 1.85905 12.6879L0 12L1.85905 11.3121C6.23856 9.69153 9.69153 6.23856 11.3121 1.85905L12 0Z\"\n fill=\"currentColor\"\n />\n </svg>\n );\n};\n\nexport default ImportantIcon;\n"],"names":["ImportantIcon","props","jsx"],"mappings":";AAAA,MAAMA,IAAyD,CAASC,MAEpE,gBAAAC;AAAA,EAAC;AAAA,EAAA;AAAA,IACC,OAAM;AAAA,IACN,OAAM;AAAA,IACN,QAAO;AAAA,IACP,SAAQ;AAAA,IACR,MAAK;AAAA,IACJ,GAAGD;AAAA,IAEJ,UAAA,gBAAAC;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,GAAE;AAAA,QACF,MAAK;AAAA,MAAA;AAAA,IACP;AAAA,EAAA;AAAA;"}
@@ -0,0 +1,32 @@
1
+ import { jsxs as t, jsx as L } from "react/jsx-runtime";
2
+ const r = (o) => /* @__PURE__ */ t(
3
+ "svg",
4
+ {
5
+ xmlns: "http://www.w3.org/2000/svg",
6
+ width: "24",
7
+ height: "24",
8
+ viewBox: "0 0 24 24",
9
+ fill: "none",
10
+ ...o,
11
+ children: [
12
+ /* @__PURE__ */ L(
13
+ "path",
14
+ {
15
+ d: "M6.12793 12.7359L5.7373 13.1909L9.26855 16.2271L4.85645 14.7349L4.47168 15.8716L11.8076 18.3531L12 18.4185L12.1924 18.3531L19.5283 15.8716L19.1436 14.7349L14.7314 16.2271L18.2627 13.1909L17.8711 12.7359L17.4805 12.2808L12 16.9937L6.51953 12.2808L6.12793 12.7359Z",
16
+ fill: "currentColor"
17
+ }
18
+ ),
19
+ /* @__PURE__ */ L(
20
+ "path",
21
+ {
22
+ d: "M11.9805 6C9.4456 6 7.29082 7.62034 6.49219 9.87988L7.05762 10.0791L7.62305 10.2793C8.25752 8.48421 9.96996 7.19922 11.9805 7.19922C13.4911 7.19925 14.8337 7.92469 15.6768 9.04688C15.0332 9.01819 14.3756 9.19046 13.8066 9.58789L14.4941 10.5713C15.3243 9.9915 16.4669 10.1944 17.0469 11.0244L18.0312 10.3369C17.4514 9.5067 17.6543 8.36416 18.4844 7.78418L17.7969 6.7998C17.2342 7.19286 16.849 7.74348 16.6523 8.34961C15.5919 6.924 13.8947 6.00003 11.9805 6Z",
23
+ fill: "currentColor"
24
+ }
25
+ )
26
+ ]
27
+ }
28
+ );
29
+ export {
30
+ r as default
31
+ };
32
+ //# sourceMappingURL=recap.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"recap.js","sources":["../../../../src/assets/line-icons/icons/recap.tsx"],"sourcesContent":["const RecapIcon: React.FC<React.SVGProps<SVGSVGElement>> = props => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n {...props}\n >\n <path\n d=\"M6.12793 12.7359L5.7373 13.1909L9.26855 16.2271L4.85645 14.7349L4.47168 15.8716L11.8076 18.3531L12 18.4185L12.1924 18.3531L19.5283 15.8716L19.1436 14.7349L14.7314 16.2271L18.2627 13.1909L17.8711 12.7359L17.4805 12.2808L12 16.9937L6.51953 12.2808L6.12793 12.7359Z\"\n fill=\"currentColor\"\n />\n <path\n d=\"M11.9805 6C9.4456 6 7.29082 7.62034 6.49219 9.87988L7.05762 10.0791L7.62305 10.2793C8.25752 8.48421 9.96996 7.19922 11.9805 7.19922C13.4911 7.19925 14.8337 7.92469 15.6768 9.04688C15.0332 9.01819 14.3756 9.19046 13.8066 9.58789L14.4941 10.5713C15.3243 9.9915 16.4669 10.1944 17.0469 11.0244L18.0312 10.3369C17.4514 9.5067 17.6543 8.36416 18.4844 7.78418L17.7969 6.7998C17.2342 7.19286 16.849 7.74348 16.6523 8.34961C15.5919 6.924 13.8947 6.00003 11.9805 6Z\"\n fill=\"currentColor\"\n />\n </svg>\n);\n\nexport default RecapIcon;\n"],"names":["RecapIcon","props","jsxs","jsx"],"mappings":";AAAA,MAAMA,IAAqD,CACzDC,MAAA,gBAAAC;AAAA,EAAC;AAAA,EAAA;AAAA,IACC,OAAM;AAAA,IACN,OAAM;AAAA,IACN,QAAO;AAAA,IACP,SAAQ;AAAA,IACR,MAAK;AAAA,IACJ,GAAGD;AAAA,IAEJ,UAAA;AAAA,MAAA,gBAAAE;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,GAAE;AAAA,UACF,MAAK;AAAA,QAAA;AAAA,MACP;AAAA,MACA,gBAAAA;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,GAAE;AAAA,UACF,MAAK;AAAA,QAAA;AAAA,MACP;AAAA,IAAA;AAAA,EAAA;AACF;"}
@@ -0,0 +1,10 @@
1
+ import { createGetAPI as r } from "@cuemath/rest-api";
2
+ import { BASE_URL_V3_1 as a } from "../../../constants/api.js";
3
+ const { useGet: p, invalidate: l } = r({
4
+ getURL: (e, s, { studentId: t }) => `${a}/users/${t}/user-chapters/${e} `
5
+ });
6
+ export {
7
+ l as invalidateGetChapterDetails,
8
+ p as useGetChapterDetails
9
+ };
10
+ //# sourceMappingURL=chapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chapter.js","sources":["../../../../src/features/chapters-v2/api/chapter.ts"],"sourcesContent":["import type { IUserChapterData } from '../chapter-details/chapter-details-types';\n\nimport { createGetAPI } from '@cuemath/rest-api';\n\nimport { BASE_URL_V3_1 } from '../../../constants/api';\n\nconst { useGet: useGetChapterDetails, invalidate: invalidateGetChapterDetails } = createGetAPI<\n IUserChapterData,\n void,\n { studentId: string }\n>({\n getURL: (userChapterId: string, _, { studentId }) =>\n `${BASE_URL_V3_1}/users/${studentId}/user-chapters/${userChapterId} `,\n});\n\nexport { useGetChapterDetails, invalidateGetChapterDetails };\n"],"names":["useGetChapterDetails","invalidateGetChapterDetails","createGetAPI","userChapterId","_","studentId","BASE_URL_V3_1"],"mappings":";;AAMA,MAAM,EAAE,QAAQA,GAAsB,YAAYC,EAAA,IAAgCC,EAIhF;AAAA,EACA,QAAQ,CAACC,GAAuBC,GAAG,EAAE,WAAAC,EAAA,MACnC,GAAGC,CAAa,UAAUD,CAAS,kBAAkBF,CAAa;AACtE,CAAC;"}
@@ -0,0 +1,116 @@
1
+ import { jsx as t, jsxs as o } from "react/jsx-runtime";
2
+ import w from "../../../../assets/line-icons/icons/more-vertical.js";
3
+ import A from "../../../../assets/line-icons/icons/skip.js";
4
+ import B from "../../../ui/context-menu/context-menu.js";
5
+ import l from "../../../ui/layout/flex-view.js";
6
+ import a from "../../../ui/text/text.js";
7
+ import I from "../../comps/node-card/node-card.js";
8
+ import N from "../../comps/node-card/node-menu-options/node-menu-options.js";
9
+ import { BLOCK_NAME as O } from "../../constants/block-constants.js";
10
+ import { BlockSectionWrapper as T, BlockOptionsWrapper as j, BlockSheetContainer as y } from "./block-sections-styled.js";
11
+ const F = ({
12
+ userType: r,
13
+ imageHue: n,
14
+ blockData: p,
15
+ lessonIdx: i,
16
+ isLastBlock: $,
17
+ onNodeAttempt: f,
18
+ onNodeAttemptLocationChange: h,
19
+ onNodeMarkAsDone: s,
20
+ onNodeReattempt: u,
21
+ onNodeReview: b,
22
+ onNodeView: x,
23
+ onBlockSkipUnskip: c
24
+ }) => {
25
+ const {
26
+ block_type: m,
27
+ name: C,
28
+ block_id: _,
29
+ sheets: g,
30
+ is_skipped: e
31
+ } = p, E = O[m], k = [
32
+ {
33
+ id: "node-card-skip",
34
+ label: e ? "Revert 'Skip'" : "Skip",
35
+ icon: A,
36
+ disabled: !1,
37
+ onClick: () => c == null ? void 0 : c(_, !e)
38
+ }
39
+ ];
40
+ return r === "STUDENT" && e ? null : /* @__PURE__ */ t(
41
+ T,
42
+ {
43
+ $background: n ? `${n}_1` : "WHITE_1",
44
+ $gutterX: 1,
45
+ $lastBlock: $,
46
+ $flexGap: 12,
47
+ children: /* @__PURE__ */ o(l, { $flexGap: 12, children: [
48
+ /* @__PURE__ */ o(l, { $flexDirection: "row", $alignItems: "center", $justifyContent: "space-between", children: [
49
+ /* @__PURE__ */ o(l, { $opacity: e ? 0.5 : 1, children: [
50
+ /* @__PURE__ */ o(
51
+ a,
52
+ {
53
+ $renderAs: "ac4",
54
+ $color: "BLACK_T_60",
55
+ $textDecoration: e ? "line-through" : "none",
56
+ children: [
57
+ E,
58
+ " ",
59
+ i > 0 && !e && i
60
+ ]
61
+ }
62
+ ),
63
+ i > 0 && /* @__PURE__ */ t(
64
+ a,
65
+ {
66
+ $renderAs: "ab2-bold",
67
+ $color: "BLACK_1",
68
+ $textDecoration: e ? "line-through" : "none",
69
+ children: C
70
+ }
71
+ )
72
+ ] }),
73
+ r === "TEACHER" && /* @__PURE__ */ t(
74
+ B,
75
+ {
76
+ targetElement: /* @__PURE__ */ t(
77
+ j,
78
+ {
79
+ $width: 20,
80
+ $height: 20,
81
+ $justifyContent: "center",
82
+ $alignItems: "center",
83
+ children: /* @__PURE__ */ t(w, { width: 16, height: 16 })
84
+ }
85
+ ),
86
+ menuElement: /* @__PURE__ */ t(N, { options: k }),
87
+ menuOffset: 5,
88
+ menuZIndex: 4
89
+ }
90
+ )
91
+ ] }),
92
+ /* @__PURE__ */ t(y, { $opacity: e ? 0.5 : 1, children: g.map((d) => /* @__PURE__ */ t(
93
+ I,
94
+ {
95
+ imageHue: n || "BLUE",
96
+ userType: r,
97
+ nodeData: d,
98
+ blockType: m,
99
+ isSkipped: e,
100
+ onNodeAttempt: f,
101
+ onNodeAttemptLocationChange: h,
102
+ onNodeMarkAsDone: s,
103
+ onNodeReattempt: u,
104
+ onNodeReview: b,
105
+ onNodeView: x
106
+ },
107
+ d.node_id
108
+ )) })
109
+ ] })
110
+ }
111
+ );
112
+ };
113
+ export {
114
+ F as default
115
+ };
116
+ //# sourceMappingURL=block-section-view.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"block-section-view.js","sources":["../../../../../src/features/chapters-v2/chapter-details/block-sections/block-section-view.tsx"],"sourcesContent":["import type { INodeMenuOption } from '../../comps/node-card/node-menu-options/node-menu-options-types';\nimport type { IBlockSectionProps } from './block-sections-types';\nimport type { FC } from 'react';\n\nimport MoreVerticalIcon from '../../../../assets/line-icons/icons/more-vertical';\nimport SkipIcon from '../../../../assets/line-icons/icons/skip';\nimport ContextMenu from '../../../ui/context-menu/context-menu';\nimport FlexView from '../../../ui/layout/flex-view';\nimport Text from '../../../ui/text/text';\nimport NodeCard from '../../comps/node-card/node-card';\nimport NodeMenuOptions from '../../comps/node-card/node-menu-options/node-menu-options';\nimport { BLOCK_NAME } from '../../constants/block-constants';\nimport * as Styled from './block-sections-styled';\n\nconst BlockSectionView: FC<IBlockSectionProps> = ({\n userType,\n imageHue,\n blockData,\n lessonIdx,\n isLastBlock,\n onNodeAttempt,\n onNodeAttemptLocationChange,\n onNodeMarkAsDone,\n onNodeReattempt,\n onNodeReview,\n onNodeView,\n onBlockSkipUnskip,\n}) => {\n const {\n block_type: blockType,\n name,\n block_id: blockId,\n sheets,\n is_skipped: isSkipped,\n } = blockData;\n\n const blockName = BLOCK_NAME[blockType];\n\n const menuOptions: INodeMenuOption[] = [\n {\n id: 'node-card-skip',\n label: isSkipped ? `Revert 'Skip'` : 'Skip',\n icon: SkipIcon,\n disabled: false,\n onClick: () => onBlockSkipUnskip?.(blockId, !isSkipped),\n },\n ];\n\n if (userType === 'STUDENT' && isSkipped) return null;\n\n return (\n <Styled.BlockSectionWrapper\n $background={imageHue ? `${imageHue}_1` : 'WHITE_1'}\n $gutterX={1}\n $lastBlock={isLastBlock}\n $flexGap={12}\n >\n <FlexView $flexGap={12}>\n <FlexView $flexDirection=\"row\" $alignItems=\"center\" $justifyContent=\"space-between\">\n <FlexView $opacity={isSkipped ? 0.5 : 1}>\n <Text\n $renderAs=\"ac4\"\n $color=\"BLACK_T_60\"\n $textDecoration={isSkipped ? 'line-through' : 'none'}\n >\n {blockName} {lessonIdx > 0 && !isSkipped && lessonIdx}\n </Text>\n {lessonIdx > 0 && (\n <Text\n $renderAs=\"ab2-bold\"\n $color=\"BLACK_1\"\n $textDecoration={isSkipped ? 'line-through' : 'none'}\n >\n {name}\n </Text>\n )}\n </FlexView>\n\n {userType === 'TEACHER' && (\n <ContextMenu\n targetElement={\n <Styled.BlockOptionsWrapper\n $width={20}\n $height={20}\n $justifyContent=\"center\"\n $alignItems=\"center\"\n >\n <MoreVerticalIcon width={16} height={16} />\n </Styled.BlockOptionsWrapper>\n }\n menuElement={<NodeMenuOptions options={menuOptions} />}\n menuOffset={5}\n menuZIndex={4}\n />\n )}\n </FlexView>\n\n <Styled.BlockSheetContainer $opacity={isSkipped ? 0.5 : 1}>\n {sheets.map(nodeData => (\n <NodeCard\n key={nodeData.node_id}\n imageHue={imageHue || 'BLUE'}\n userType={userType}\n nodeData={nodeData}\n blockType={blockType}\n isSkipped={isSkipped}\n onNodeAttempt={onNodeAttempt}\n onNodeAttemptLocationChange={onNodeAttemptLocationChange}\n onNodeMarkAsDone={onNodeMarkAsDone}\n onNodeReattempt={onNodeReattempt}\n onNodeReview={onNodeReview}\n onNodeView={onNodeView}\n />\n ))}\n </Styled.BlockSheetContainer>\n </FlexView>\n </Styled.BlockSectionWrapper>\n );\n};\n\nexport default BlockSectionView;\n"],"names":["BlockSectionView","userType","imageHue","blockData","lessonIdx","isLastBlock","onNodeAttempt","onNodeAttemptLocationChange","onNodeMarkAsDone","onNodeReattempt","onNodeReview","onNodeView","onBlockSkipUnskip","blockType","name","blockId","sheets","isSkipped","blockName","BLOCK_NAME","menuOptions","SkipIcon","jsx","Styled.BlockSectionWrapper","jsxs","FlexView","Text","ContextMenu","Styled.BlockOptionsWrapper","MoreVerticalIcon","NodeMenuOptions","Styled.BlockSheetContainer","nodeData","NodeCard"],"mappings":";;;;;;;;;;AAcA,MAAMA,IAA2C,CAAC;AAAA,EAChD,UAAAC;AAAA,EACA,UAAAC;AAAA,EACA,WAAAC;AAAA,EACA,WAAAC;AAAA,EACA,aAAAC;AAAA,EACA,eAAAC;AAAA,EACA,6BAAAC;AAAA,EACA,kBAAAC;AAAA,EACA,iBAAAC;AAAA,EACA,cAAAC;AAAA,EACA,YAAAC;AAAA,EACA,mBAAAC;AACF,MAAM;AACE,QAAA;AAAA,IACJ,YAAYC;AAAA,IACZ,MAAAC;AAAA,IACA,UAAUC;AAAA,IACV,QAAAC;AAAA,IACA,YAAYC;AAAA,EACV,IAAAd,GAEEe,IAAYC,EAAWN,CAAS,GAEhCO,IAAiC;AAAA,IACrC;AAAA,MACE,IAAI;AAAA,MACJ,OAAOH,IAAY,kBAAkB;AAAA,MACrC,MAAMI;AAAA,MACN,UAAU;AAAA,MACV,SAAS,MAAMT,KAAA,gBAAAA,EAAoBG,GAAS,CAACE;AAAA,IAC/C;AAAA,EAAA;AAGE,SAAAhB,MAAa,aAAagB,IAAkB,OAG9C,gBAAAK;AAAA,IAACC;AAAAA,IAAA;AAAA,MACC,aAAarB,IAAW,GAAGA,CAAQ,OAAO;AAAA,MAC1C,UAAU;AAAA,MACV,YAAYG;AAAA,MACZ,UAAU;AAAA,MAEV,UAAA,gBAAAmB,EAACC,GAAS,EAAA,UAAU,IAClB,UAAA;AAAA,QAAA,gBAAAD,EAACC,KAAS,gBAAe,OAAM,aAAY,UAAS,iBAAgB,iBAClE,UAAA;AAAA,UAAA,gBAAAD,EAACC,GAAS,EAAA,UAAUR,IAAY,MAAM,GACpC,UAAA;AAAA,YAAA,gBAAAO;AAAA,cAACE;AAAA,cAAA;AAAA,gBACC,WAAU;AAAA,gBACV,QAAO;AAAA,gBACP,iBAAiBT,IAAY,iBAAiB;AAAA,gBAE7C,UAAA;AAAA,kBAAAC;AAAA,kBAAU;AAAA,kBAAEd,IAAY,KAAK,CAACa,KAAab;AAAA,gBAAA;AAAA,cAAA;AAAA,YAC9C;AAAA,YACCA,IAAY,KACX,gBAAAkB;AAAA,cAACI;AAAA,cAAA;AAAA,gBACC,WAAU;AAAA,gBACV,QAAO;AAAA,gBACP,iBAAiBT,IAAY,iBAAiB;AAAA,gBAE7C,UAAAH;AAAA,cAAA;AAAA,YACH;AAAA,UAAA,GAEJ;AAAA,UAECb,MAAa,aACZ,gBAAAqB;AAAA,YAACK;AAAA,YAAA;AAAA,cACC,eACE,gBAAAL;AAAA,gBAACM;AAAAA,gBAAA;AAAA,kBACC,QAAQ;AAAA,kBACR,SAAS;AAAA,kBACT,iBAAgB;AAAA,kBAChB,aAAY;AAAA,kBAEZ,UAAC,gBAAAN,EAAAO,GAAA,EAAiB,OAAO,IAAI,QAAQ,IAAI;AAAA,gBAAA;AAAA,cAC3C;AAAA,cAEF,aAAa,gBAAAP,EAACQ,GAAgB,EAAA,SAASV,EAAa,CAAA;AAAA,cACpD,YAAY;AAAA,cACZ,YAAY;AAAA,YAAA;AAAA,UACd;AAAA,QAAA,GAEJ;AAAA,QAEA,gBAAAE,EAACS,GAAA,EAA2B,UAAUd,IAAY,MAAM,GACrD,UAAOD,EAAA,IAAI,CACVgB,MAAA,gBAAAV;AAAA,UAACW;AAAA,UAAA;AAAA,YAEC,UAAU/B,KAAY;AAAA,YACtB,UAAAD;AAAA,YACA,UAAA+B;AAAA,YACA,WAAAnB;AAAA,YACA,WAAAI;AAAA,YACA,eAAAX;AAAA,YACA,6BAAAC;AAAA,YACA,kBAAAC;AAAA,YACA,iBAAAC;AAAA,YACA,cAAAC;AAAA,YACA,YAAAC;AAAA,UAAA;AAAA,UAXKqB,EAAS;AAAA,QAajB,CAAA,GACH;AAAA,MAAA,GACF;AAAA,IAAA;AAAA,EAAA;AAGN;"}
@@ -0,0 +1,26 @@
1
+ import o from "styled-components";
2
+ import p from "../../../ui/layout/flex-view.js";
3
+ const i = o(p)(({ $lastBlock: r }) => `
4
+ padding-top: 32px;
5
+ ${r ? "padding-bottom: 32px;" : "padding-bottom: 0px;"}
6
+ `), n = o.div(({ $opacity: r }) => `
7
+ display: grid;
8
+ grid-template-columns: repeat(4, 1fr);
9
+ grid-row-gap: 12px;
10
+ grid-column-gap: 16px;
11
+ opacity: ${r ?? 1};
12
+
13
+ `), d = o(p)(({ theme: r }) => `
14
+ cursor: pointer;
15
+
16
+ &:hover {
17
+ border-radius: 50%;
18
+ background: ${r.colors.WHITE_4};
19
+ }
20
+ `);
21
+ export {
22
+ d as BlockOptionsWrapper,
23
+ i as BlockSectionWrapper,
24
+ n as BlockSheetContainer
25
+ };
26
+ //# sourceMappingURL=block-sections-styled.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"block-sections-styled.js","sources":["../../../../../src/features/chapters-v2/chapter-details/block-sections/block-sections-styled.tsx"],"sourcesContent":["import styled from 'styled-components';\n\nimport FlexView from '../../../ui/layout/flex-view';\n\ninterface IBlockSectionWrapper {\n $lastBlock?: boolean;\n}\n\nconst BlockSectionWrapper = styled(FlexView)<IBlockSectionWrapper>(({ $lastBlock }) => {\n return `\n padding-top: 32px;\n ${$lastBlock ? 'padding-bottom: 32px;' : 'padding-bottom: 0px;'}\n `;\n});\n\ninterface IBlockSheetContainer {\n $opacity?: number;\n}\n\nconst BlockSheetContainer = styled.div<IBlockSheetContainer>(({ $opacity }) => {\n return `\n display: grid;\n grid-template-columns: repeat(4, 1fr);\n grid-row-gap: 12px;\n grid-column-gap: 16px;\n opacity: ${$opacity ?? 1};\n\n `;\n});\n\nconst BlockOptionsWrapper = styled(FlexView)(({ theme }) => {\n return `\n cursor: pointer;\n \n &:hover {\n border-radius: 50%;\n background: ${theme.colors.WHITE_4}; \n }\n `;\n});\n\nexport { BlockSectionWrapper, BlockSheetContainer, BlockOptionsWrapper };\n"],"names":["BlockSectionWrapper","styled","FlexView","$lastBlock","BlockSheetContainer","$opacity","BlockOptionsWrapper","theme"],"mappings":";;AAQA,MAAMA,IAAsBC,EAAOC,CAAQ,EAAwB,CAAC,EAAE,YAAAC,QAC7D;AAAA;AAAA,MAEHA,IAAa,0BAA0B,sBAAsB;AAAA,GAElE,GAMKC,IAAsBH,EAAO,IAA0B,CAAC,EAAE,UAAAI,QACvD;AAAA;AAAA;AAAA;AAAA;AAAA,eAKMA,KAAY,CAAC;AAAA;AAAA,GAG3B,GAEKC,IAAsBL,EAAOC,CAAQ,EAAE,CAAC,EAAE,OAAAK,QACvC;AAAA;AAAA;AAAA;AAAA;AAAA,oBAKWA,EAAM,OAAO,OAAO;AAAA;AAAA,GAGvC;"}
@@ -0,0 +1,68 @@
1
+ import { jsxs as L, jsx as a } from "react/jsx-runtime";
2
+ import { memo as g } from "react";
3
+ import w from "../../../ui/layout/flex-view.js";
4
+ import u from "./block-section-view.js";
5
+ const O = g((x) => {
6
+ const {
7
+ blocks: t,
8
+ imageHue: A,
9
+ userType: n,
10
+ onNodeAttempt: s,
11
+ onNodeAttemptLocationChange: i,
12
+ onNodeMarkAsDone: c,
13
+ onNodeReattempt: l,
14
+ onNodeReview: r,
15
+ onNodeView: p,
16
+ onBlockSkipUnskip: d
17
+ } = x;
18
+ let k = 0;
19
+ const m = t.filter((o) => o.section_code === "GOALS"), B = t.filter((o) => o.section_code !== "GOALS");
20
+ return /* @__PURE__ */ L(w, { children: [
21
+ m.map((o, e) => {
22
+ const { block_type: N, block_id: S, is_skipped: _ } = o;
23
+ let f = 0;
24
+ const b = e === m.length - 1;
25
+ return N === "GOAL" && (_ || (k += 1), f = k), /* @__PURE__ */ a(
26
+ u,
27
+ {
28
+ blockData: o,
29
+ userType: n,
30
+ isLastBlock: b,
31
+ lessonIdx: f,
32
+ imageHue: A,
33
+ onNodeAttempt: s,
34
+ onNodeAttemptLocationChange: i,
35
+ onNodeMarkAsDone: c,
36
+ onNodeReattempt: l,
37
+ onNodeReview: r,
38
+ onNodeView: p,
39
+ onBlockSkipUnskip: d
40
+ },
41
+ S
42
+ );
43
+ }),
44
+ B.map((o) => {
45
+ const { block_id: e } = o;
46
+ return /* @__PURE__ */ a(
47
+ u,
48
+ {
49
+ blockData: o,
50
+ userType: n,
51
+ lessonIdx: 0,
52
+ onNodeAttempt: s,
53
+ onNodeAttemptLocationChange: i,
54
+ onNodeMarkAsDone: c,
55
+ onNodeReattempt: l,
56
+ onNodeReview: r,
57
+ onNodeView: p,
58
+ onBlockSkipUnskip: d
59
+ },
60
+ e
61
+ );
62
+ })
63
+ ] });
64
+ });
65
+ export {
66
+ O as default
67
+ };
68
+ //# sourceMappingURL=block-sections.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"block-sections.js","sources":["../../../../../src/features/chapters-v2/chapter-details/block-sections/block-sections.tsx"],"sourcesContent":["import type { IBlockSectionsProps } from './block-sections-types';\nimport type { FC } from 'react';\n\nimport { memo } from 'react';\n\nimport FlexView from '../../../ui/layout/flex-view';\nimport BlockSectionView from './block-section-view';\n\nconst BlockSections: FC<IBlockSectionsProps> = memo(props => {\n const {\n blocks,\n imageHue,\n userType,\n onNodeAttempt,\n onNodeAttemptLocationChange,\n onNodeMarkAsDone,\n onNodeReattempt,\n onNodeReview,\n onNodeView,\n onBlockSkipUnskip,\n } = props;\n\n let lessonCount = 0;\n\n const goalBlocks = blocks.filter(block => block.section_code === 'GOALS');\n const nonGoalBlocks = blocks.filter(block => block.section_code !== 'GOALS');\n\n return (\n <FlexView>\n {goalBlocks.map((blockData, idx) => {\n const { block_type: blockType, block_id: blockId, is_skipped: isSkipped } = blockData;\n let lessonIdx = 0;\n\n const isLastBlock = idx === goalBlocks.length - 1;\n\n if (blockType === 'GOAL') {\n if (!isSkipped) {\n lessonCount += 1;\n }\n\n lessonIdx = lessonCount;\n }\n\n return (\n <BlockSectionView\n blockData={blockData}\n userType={userType}\n isLastBlock={isLastBlock}\n key={blockId}\n lessonIdx={lessonIdx}\n imageHue={imageHue}\n onNodeAttempt={onNodeAttempt}\n onNodeAttemptLocationChange={onNodeAttemptLocationChange}\n onNodeMarkAsDone={onNodeMarkAsDone}\n onNodeReattempt={onNodeReattempt}\n onNodeReview={onNodeReview}\n onNodeView={onNodeView}\n onBlockSkipUnskip={onBlockSkipUnskip}\n />\n );\n })}\n\n {nonGoalBlocks.map(blockData => {\n const { block_id: blockId } = blockData;\n\n return (\n <BlockSectionView\n key={blockId}\n blockData={blockData}\n userType={userType}\n lessonIdx={0}\n onNodeAttempt={onNodeAttempt}\n onNodeAttemptLocationChange={onNodeAttemptLocationChange}\n onNodeMarkAsDone={onNodeMarkAsDone}\n onNodeReattempt={onNodeReattempt}\n onNodeReview={onNodeReview}\n onNodeView={onNodeView}\n onBlockSkipUnskip={onBlockSkipUnskip}\n />\n );\n })}\n </FlexView>\n );\n});\n\nexport default BlockSections;\n"],"names":["BlockSections","memo","props","blocks","imageHue","userType","onNodeAttempt","onNodeAttemptLocationChange","onNodeMarkAsDone","onNodeReattempt","onNodeReview","onNodeView","onBlockSkipUnskip","lessonCount","goalBlocks","block","nonGoalBlocks","FlexView","blockData","idx","blockType","blockId","isSkipped","lessonIdx","isLastBlock","jsx","BlockSectionView"],"mappings":";;;;AAQM,MAAAA,IAAyCC,EAAK,CAASC,MAAA;AACrD,QAAA;AAAA,IACJ,QAAAC;AAAA,IACA,UAAAC;AAAA,IACA,UAAAC;AAAA,IACA,eAAAC;AAAA,IACA,6BAAAC;AAAA,IACA,kBAAAC;AAAA,IACA,iBAAAC;AAAA,IACA,cAAAC;AAAA,IACA,YAAAC;AAAA,IACA,mBAAAC;AAAA,EACE,IAAAV;AAEJ,MAAIW,IAAc;AAElB,QAAMC,IAAaX,EAAO,OAAO,CAASY,MAAAA,EAAM,iBAAiB,OAAO,GAClEC,IAAgBb,EAAO,OAAO,CAASY,MAAAA,EAAM,iBAAiB,OAAO;AAE3E,2BACGE,GACE,EAAA,UAAA;AAAA,IAAWH,EAAA,IAAI,CAACI,GAAWC,MAAQ;AAClC,YAAM,EAAE,YAAYC,GAAW,UAAUC,GAAS,YAAYC,EAAc,IAAAJ;AAC5E,UAAIK,IAAY;AAEV,YAAAC,IAAcL,MAAQL,EAAW,SAAS;AAEhD,aAAIM,MAAc,WACXE,MACYT,KAAA,IAGLU,IAAAV,IAIZ,gBAAAY;AAAA,QAACC;AAAA,QAAA;AAAA,UACC,WAAAR;AAAA,UACA,UAAAb;AAAA,UACA,aAAAmB;AAAA,UAEA,WAAAD;AAAA,UACA,UAAAnB;AAAA,UACA,eAAAE;AAAA,UACA,6BAAAC;AAAA,UACA,kBAAAC;AAAA,UACA,iBAAAC;AAAA,UACA,cAAAC;AAAA,UACA,YAAAC;AAAA,UACA,mBAAAC;AAAA,QAAA;AAAA,QATKS;AAAA,MAAA;AAAA,IAUP,CAEH;AAAA,IAEAL,EAAc,IAAI,CAAaE,MAAA;AACxB,YAAA,EAAE,UAAUG,EAAY,IAAAH;AAG5B,aAAA,gBAAAO;AAAA,QAACC;AAAA,QAAA;AAAA,UAEC,WAAAR;AAAA,UACA,UAAAb;AAAA,UACA,WAAW;AAAA,UACX,eAAAC;AAAA,UACA,6BAAAC;AAAA,UACA,kBAAAC;AAAA,UACA,iBAAAC;AAAA,UACA,cAAAC;AAAA,UACA,YAAAC;AAAA,UACA,mBAAAC;AAAA,QAAA;AAAA,QAVKS;AAAA,MAAA;AAAA,IAWP,CAEH;AAAA,EACH,EAAA,CAAA;AAEJ,CAAC;"}
@@ -0,0 +1,90 @@
1
+ import o from "styled-components";
2
+ import x from "../../../../assets/line-icons/icons/important.js";
3
+ import i from "../../../ui/layout/flex-view.js";
4
+ const f = o(i)(() => `
5
+ position: relative;
6
+ height: 168px;
7
+ `);
8
+ o.div`
9
+ width: 760px;
10
+ height: 100%;
11
+ position: relative;
12
+ `;
13
+ const m = o(i)`
14
+ position: absolute;
15
+ left: 73px;
16
+ top: 32px;
17
+ `, $ = o.img(({ theme: e }) => {
18
+ const { gutter: t } = e.layout;
19
+ return `
20
+ width: ${t * 6.625}px;
21
+ height: ${t * 6.625}px;
22
+ border-radius: 50%;
23
+ z-index: 1;
24
+ `;
25
+ }), y = o.svg(() => `
26
+ position: absolute;
27
+ inset: 50%;
28
+ transform: translate(-50%, -50%) rotate(-90deg);
29
+ z-index: 2;
30
+ `), I = o.circle(
31
+ ({ theme: e, $progressCircle: t, $progress: n, $progressBackground: s }) => {
32
+ const { colors: r, layout: l } = e, { WHITE_1: h } = r, { gutter: a } = l, p = a * 21, u = t ? p - n : n;
33
+ return `
34
+ stroke-dasharray: ${p};
35
+ stroke-dashoffset: ${u};
36
+ stroke: ${t ? r[s || "BLACK"] : h};
37
+
38
+ stroke-width: ${a * 0.1875}px;
39
+ fill: none;
40
+ `;
41
+ }
42
+ ), b = o(i)(({ theme: e }) => `
43
+ position: absolute;
44
+ top: 50%;
45
+ left: ${e.layout.gutter * 13.75}px;
46
+ transform: translateY(-50%);
47
+ z-index: 1;
48
+ `), k = o(x)(({
49
+ theme: e,
50
+ $progress: t,
51
+ $top: n,
52
+ $left: s
53
+ }) => {
54
+ const { gutter: r } = e.layout;
55
+ return t ? `
56
+ width: ${r * 1.25}px;
57
+ height: ${r * 1.25}px;
58
+ position: absolute;
59
+ top: ${n ?? 0}px;
60
+ left: ${s ?? 0}px;
61
+ transform: translate(-50%, -50%);
62
+ z-index: 2;
63
+ ` : `
64
+ width: ${r * 0.75}px;
65
+ height: ${r * 0.75}px;
66
+ `;
67
+ }), w = o.div(({ theme: e }) => {
68
+ const { layout: t } = e;
69
+ return `
70
+ position: absolute;
71
+ top: 6px;
72
+ right: 8px;
73
+ z-index: 2;
74
+
75
+ width: ${t.gutter * 1.25}px;
76
+ height: ${t.gutter * 1.25}px;
77
+ border-radius: 50%;
78
+ `;
79
+ });
80
+ export {
81
+ f as BannerContainer,
82
+ $ as BannerImage,
83
+ m as BannerImageWrapper,
84
+ b as BannerTitleWrapper,
85
+ y as ChapterProgressSVG,
86
+ I as ChapterProgressSVGCircle,
87
+ w as StyledCheckIcon,
88
+ k as StyledImportantIcon
89
+ };
90
+ //# sourceMappingURL=chapter-banner-styled.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chapter-banner-styled.js","sources":["../../../../../src/features/chapters-v2/chapter-details/chapter-banner/chapter-banner-styled.tsx"],"sourcesContent":["import type { TColorNames } from '../../../ui/types';\n\nimport styled from 'styled-components';\n\nimport ImportantIcon from '../../../../assets/line-icons/icons/important';\nimport FlexView from '../../../ui/layout/flex-view';\n\nconst BannerContainer = styled(FlexView)(() => {\n return `\n position: relative;\n height: 168px;\n `;\n});\n\nconst BannerContainerBg = styled.div`\n width: 760px;\n height: 100%;\n position: relative;\n`;\n\nconst BannerImageWrapper = styled(FlexView)`\n position: absolute;\n left: 73px;\n top: 32px;\n`;\n\nconst BannerImage = styled.img(({ theme }) => {\n const { gutter } = theme.layout;\n\n return `\n width: ${gutter * 6.625}px;\n height: ${gutter * 6.625}px;\n border-radius: 50%;\n z-index: 1;\n `;\n});\n\nconst ChapterProgressSVG = styled.svg(() => {\n return `\n position: absolute;\n inset: 50%;\n transform: translate(-50%, -50%) rotate(-90deg);\n z-index: 2;\n `;\n});\n\ninterface IChapterProgressSVGCircleProps {\n $progressCircle?: boolean;\n $progress: number;\n $progressBackground?: TColorNames;\n}\n\nconst ChapterProgressSVGCircle = styled.circle<IChapterProgressSVGCircleProps>(\n ({ theme, $progressCircle, $progress, $progressBackground }) => {\n const { colors, layout } = theme;\n const { WHITE_1 } = colors;\n const { gutter } = layout;\n\n const strokeDashArray = gutter * 21;\n const strokeDashOffset = $progressCircle ? strokeDashArray - $progress : $progress;\n\n return `\n stroke-dasharray: ${strokeDashArray};\n stroke-dashoffset: ${strokeDashOffset};\n stroke: ${$progressCircle ? colors[$progressBackground || 'BLACK'] : WHITE_1};\n\n stroke-width: ${gutter * 0.1875}px;\n fill: none;\n `;\n },\n);\n\nconst BannerTitleWrapper = styled(FlexView)(({ theme }) => {\n return `\n position: absolute;\n top: 50%;\n left: ${theme.layout.gutter * 13.75}px;\n transform: translateY(-50%);\n z-index: 1;\n `;\n});\n\ninterface IStyledImportantIconProps {\n $left?: number;\n $top?: number;\n $progress?: boolean;\n}\n\nconst StyledImportantIcon = styled(ImportantIcon)<IStyledImportantIconProps>(({\n theme,\n $progress,\n $top,\n $left,\n}) => {\n const { gutter } = theme.layout;\n\n if ($progress) {\n return `\n width: ${gutter * 1.25}px;\n height: ${gutter * 1.25}px;\n position: absolute;\n top: ${$top ?? 0}px;\n left: ${$left ?? 0}px;\n transform: translate(-50%, -50%);\n z-index: 2;\n `;\n }\n\n return `\n width: ${gutter * 0.75}px;\n height: ${gutter * 0.75}px;\n `;\n});\n\nconst StyledCheckIcon = styled.div(({ theme }) => {\n const { layout } = theme;\n\n return `\n position: absolute;\n top: 6px;\n right: 8px;\n z-index: 2;\n\n width: ${layout.gutter * 1.25}px;\n height: ${layout.gutter * 1.25}px;\n border-radius: 50%;\n `;\n});\n\nexport {\n BannerContainer,\n BannerContainerBg,\n BannerImageWrapper,\n BannerImage,\n ChapterProgressSVG,\n ChapterProgressSVGCircle,\n BannerTitleWrapper,\n StyledImportantIcon,\n StyledCheckIcon,\n};\n"],"names":["BannerContainer","styled","FlexView","BannerImageWrapper","BannerImage","theme","gutter","ChapterProgressSVG","ChapterProgressSVGCircle","$progressCircle","$progress","$progressBackground","colors","layout","WHITE_1","strokeDashArray","strokeDashOffset","BannerTitleWrapper","StyledImportantIcon","ImportantIcon","$top","$left","StyledCheckIcon"],"mappings":";;;AAOA,MAAMA,IAAkBC,EAAOC,CAAQ,EAAE,MAChC;AAAA;AAAA;AAAA,GAIR;AAEyBD,EAAO;AAAA;AAAA;AAAA;AAAA;AAM3B,MAAAE,IAAqBF,EAAOC,CAAQ;AAAA;AAAA;AAAA;AAAA,GAMpCE,IAAcH,EAAO,IAAI,CAAC,EAAE,OAAAI,QAAY;AACtC,QAAA,EAAE,QAAAC,EAAO,IAAID,EAAM;AAElB,SAAA;AAAA,aACIC,IAAS,KAAK;AAAA,cACbA,IAAS,KAAK;AAAA;AAAA;AAAA;AAI5B,CAAC,GAEKC,IAAqBN,EAAO,IAAI,MAC7B;AAAA;AAAA;AAAA;AAAA;AAAA,GAMR,GAQKO,IAA2BP,EAAO;AAAA,EACtC,CAAC,EAAE,OAAAI,GAAO,iBAAAI,GAAiB,WAAAC,GAAW,qBAAAC,QAA0B;AACxD,UAAA,EAAE,QAAAC,GAAQ,QAAAC,EAAW,IAAAR,GACrB,EAAE,SAAAS,EAAY,IAAAF,GACd,EAAE,QAAAN,EAAW,IAAAO,GAEbE,IAAkBT,IAAS,IAC3BU,IAAmBP,IAAkBM,IAAkBL,IAAYA;AAElE,WAAA;AAAA,0BACeK,CAAe;AAAA,2BACdC,CAAgB;AAAA,gBAC3BP,IAAkBG,EAAOD,KAAuB,OAAO,IAAIG,CAAO;AAAA;AAAA,sBAE5DR,IAAS,MAAM;AAAA;AAAA;AAAA,EAGnC;AACF,GAEMW,IAAqBhB,EAAOC,CAAQ,EAAE,CAAC,EAAE,OAAAG,QACtC;AAAA;AAAA;AAAA,YAGGA,EAAM,OAAO,SAAS,KAAK;AAAA;AAAA;AAAA,GAItC,GAQKa,IAAsBjB,EAAOkB,CAAa,EAA6B,CAAC;AAAA,EAC5E,OAAAd;AAAA,EACA,WAAAK;AAAA,EACA,MAAAU;AAAA,EACA,OAAAC;AACF,MAAM;AACE,QAAA,EAAE,QAAAf,EAAO,IAAID,EAAM;AAEzB,SAAIK,IACK;AAAA,eACIJ,IAAS,IAAI;AAAA,gBACZA,IAAS,IAAI;AAAA;AAAA,aAEhBc,KAAQ,CAAC;AAAA,cACRC,KAAS,CAAC;AAAA;AAAA;AAAA,QAMf;AAAA,aACIf,IAAS,IAAI;AAAA,cACZA,IAAS,IAAI;AAAA;AAE3B,CAAC,GAEKgB,IAAkBrB,EAAO,IAAI,CAAC,EAAE,OAAAI,QAAY;AAC1C,QAAA,EAAE,QAAAQ,EAAW,IAAAR;AAEZ,SAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,aAMIQ,EAAO,SAAS,IAAI;AAAA,cACnBA,EAAO,SAAS,IAAI;AAAA;AAAA;AAGlC,CAAC;"}
@@ -0,0 +1,95 @@
1
+ import { jsx as e, jsxs as t } from "react/jsx-runtime";
2
+ import { memo as B, useMemo as h } from "react";
3
+ import { ILLUSTRATIONS as D } from "../../../../assets/illustrations/illustrations.js";
4
+ import d from "../../../../assets/line-icons/icons/check2.js";
5
+ import V from "../../../ui/image/image.js";
6
+ import o from "../../../ui/layout/flex-view.js";
7
+ import i from "../../../ui/text/text.js";
8
+ import g from "../../comps/tag/tag.js";
9
+ import { getChapterCompletionPercentage as W } from "../../utils/index.js";
10
+ import { BannerContainer as b, BannerImageWrapper as M, BannerImage as O, ChapterProgressSVG as X, ChapterProgressSVGCircle as C, StyledImportantIcon as $, StyledCheckIcon as j, BannerTitleWrapper as H } from "./chapter-banner-styled.js";
11
+ const n = 52, c = 54, s = 54, ee = B((f) => {
12
+ const { progressStats: a, imageHue: I, title: S, imageUrl: x } = f, { mandatory: R, optional: u, class_work: E } = a || {}, { completed: _ = 0, total: w = 0 } = R || {}, { completed: T = 0, total: l = 0 } = u || {}, { completed: k = 0, total: p = 0 } = E || {}, y = p > 0 && k === p, r = h(() => W(a), [a]), { iconTopVal: G, iconLeftVal: L } = h(() => {
13
+ const m = (-(r === 100 ? 60 : r) * 3.6 - 180) * Math.PI / 180, P = s + n * Math.sin(m), A = c + n * Math.cos(m);
14
+ return {
15
+ iconLeftVal: P,
16
+ iconTopVal: A
17
+ };
18
+ }, [r]);
19
+ return /* @__PURE__ */ e(
20
+ b,
21
+ {
22
+ $flexDirection: "row",
23
+ $justifyContent: "center",
24
+ $alignItems: "center",
25
+ $widthX: 50,
26
+ $background: `${I}_4`,
27
+ children: /* @__PURE__ */ t(o, { $height: 168, $position: "relative", children: [
28
+ /* @__PURE__ */ e(
29
+ V,
30
+ {
31
+ width: "100%",
32
+ height: "168px",
33
+ src: D.CHAPTER_HEADER_BG,
34
+ alt: "Chapter header background",
35
+ withLoader: !0
36
+ }
37
+ ),
38
+ /* @__PURE__ */ t(M, { children: [
39
+ /* @__PURE__ */ e(O, { src: x, alt: "Chapter image" }),
40
+ /* @__PURE__ */ t(X, { width: "108px", height: "108px", children: [
41
+ /* @__PURE__ */ e(
42
+ C,
43
+ {
44
+ $progress: 0,
45
+ r: n,
46
+ cx: c,
47
+ cy: s
48
+ }
49
+ ),
50
+ /* @__PURE__ */ e(
51
+ C,
52
+ {
53
+ $progressCircle: !0,
54
+ $progressBackground: "BLACK",
55
+ $progress: 3.3 * r,
56
+ r: n,
57
+ cx: c,
58
+ cy: s
59
+ }
60
+ )
61
+ ] }),
62
+ r > 0 && /* @__PURE__ */ e($, { $progress: !0, $top: G, $left: L }),
63
+ r === 100 && /* @__PURE__ */ e(j, { children: /* @__PURE__ */ e(g, { Icon: d }) })
64
+ ] }),
65
+ /* @__PURE__ */ t(H, { $flexGap: 4, children: [
66
+ /* @__PURE__ */ e(i, { $renderAs: "ah4-bold", children: S }),
67
+ /* @__PURE__ */ t(o, { $flexDirection: "row", $alignItems: "center", $flexGapX: 2.75, children: [
68
+ /* @__PURE__ */ t(o, { $position: "relative", $flexDirection: "row", children: [
69
+ /* @__PURE__ */ e($, {}),
70
+ /* @__PURE__ */ t(o, { $flexDirection: "row", $alignItems: "center", $flexGap: 4, children: [
71
+ /* @__PURE__ */ t(i, { $renderAs: "ab2", children: [
72
+ "Core - ",
73
+ _,
74
+ "/",
75
+ w
76
+ ] }),
77
+ y && /* @__PURE__ */ e(g, { Icon: d, label: "CW" })
78
+ ] })
79
+ ] }),
80
+ l && /* @__PURE__ */ t(i, { $renderAs: "ab2", children: [
81
+ "Supplementary - ",
82
+ T,
83
+ "/",
84
+ l
85
+ ] })
86
+ ] })
87
+ ] })
88
+ ] })
89
+ }
90
+ );
91
+ });
92
+ export {
93
+ ee as default
94
+ };
95
+ //# sourceMappingURL=chapter-banner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chapter-banner.js","sources":["../../../../../src/features/chapters-v2/chapter-details/chapter-banner/chapter-banner.tsx"],"sourcesContent":["import type { IChapterBannerProps } from './chapter-banner-types';\nimport type { FC } from 'react';\n\nimport { memo, useMemo } from 'react';\n\nimport { ILLUSTRATIONS } from '../../../../assets/illustrations/illustrations';\nimport Check2Icon from '../../../../assets/line-icons/icons/check2';\nimport Image from '../../../ui/image/image';\nimport FlexView from '../../../ui/layout/flex-view';\nimport Text from '../../../ui/text/text';\nimport Tag from '../../comps/tag/tag';\nimport { getChapterCompletionPercentage } from '../../utils';\nimport * as Styled from './chapter-banner-styled';\n\nconst PROGRESS_CIRCLE_RADIUS = 52;\nconst PROGRESS_CIRCLE_CENTER_X = 54;\nconst PROGRESS_CIRCLE_CENTER_Y = 54;\n\n// This component renders a banner for a chapter, displaying its title, progress, and associated tags.\n// It includes an image, progress visualization, and details about the chapter's core and supplementary sheets.\n// It calculates the completion percentage and dynamically positions an icon based on progress.\nconst ChapterBanner: FC<IChapterBannerProps> = memo(props => {\n const { progressStats, imageHue, title, imageUrl } = props;\n\n const { mandatory, optional, class_work: classWork } = progressStats || {};\n const { completed: completedMandatorySheets = 0, total: totalMandatorySheets = 0 } =\n mandatory || {};\n const { completed: completedOptionalSheets = 0, total: totalOptionalSheets = 0 } = optional || {};\n const { completed: completedClassWorkSheets = 0, total: totalClassWorkSheets = 0 } =\n classWork || {};\n\n const showClassWorkTag =\n totalClassWorkSheets > 0 && completedClassWorkSheets === totalClassWorkSheets;\n\n const completionPercentage = useMemo(() => {\n return getChapterCompletionPercentage(progressStats);\n }, [progressStats]);\n\n const { iconTopVal, iconLeftVal } = useMemo(() => {\n //* Calculate the position of the important icon based on the completion percentage\n //* Convert degrees to radians\n const angleInDegree = completionPercentage === 100 ? 60 : completionPercentage;\n\n const angleInRadian = ((-angleInDegree * 3.6 - 180) * Math.PI) / 180;\n const positionX = PROGRESS_CIRCLE_CENTER_Y + PROGRESS_CIRCLE_RADIUS * Math.sin(angleInRadian);\n const positionY = PROGRESS_CIRCLE_CENTER_X + PROGRESS_CIRCLE_RADIUS * Math.cos(angleInRadian);\n\n return {\n iconLeftVal: positionX,\n iconTopVal: positionY,\n };\n }, [completionPercentage]);\n\n return (\n <Styled.BannerContainer\n $flexDirection=\"row\"\n $justifyContent=\"center\"\n $alignItems=\"center\"\n $widthX={50}\n $background={`${imageHue}_4`}\n >\n <FlexView $height={168} $position=\"relative\">\n <Image\n width=\"100%\"\n height=\"168px\"\n src={ILLUSTRATIONS.CHAPTER_HEADER_BG}\n alt=\"Chapter header background\"\n withLoader\n />\n\n <Styled.BannerImageWrapper>\n <Styled.BannerImage src={imageUrl} alt=\"Chapter image\" />\n\n <Styled.ChapterProgressSVG width=\"108px\" height=\"108px\">\n <Styled.ChapterProgressSVGCircle\n $progress={0}\n r={PROGRESS_CIRCLE_RADIUS}\n cx={PROGRESS_CIRCLE_CENTER_X}\n cy={PROGRESS_CIRCLE_CENTER_Y}\n />\n <Styled.ChapterProgressSVGCircle\n $progressCircle\n $progressBackground={'BLACK'}\n $progress={3.3 * completionPercentage}\n r={PROGRESS_CIRCLE_RADIUS}\n cx={PROGRESS_CIRCLE_CENTER_X}\n cy={PROGRESS_CIRCLE_CENTER_Y}\n />\n </Styled.ChapterProgressSVG>\n\n {completionPercentage > 0 && (\n <Styled.StyledImportantIcon $progress $top={iconTopVal} $left={iconLeftVal} />\n )}\n\n {completionPercentage === 100 && (\n <Styled.StyledCheckIcon>\n <Tag Icon={Check2Icon} />\n </Styled.StyledCheckIcon>\n )}\n </Styled.BannerImageWrapper>\n\n <Styled.BannerTitleWrapper $flexGap={4}>\n <Text $renderAs=\"ah4-bold\">{title}</Text>\n\n <FlexView $flexDirection=\"row\" $alignItems=\"center\" $flexGapX={2.75}>\n <FlexView $position=\"relative\" $flexDirection=\"row\">\n <Styled.StyledImportantIcon />\n\n <FlexView $flexDirection=\"row\" $alignItems=\"center\" $flexGap={4}>\n <Text $renderAs=\"ab2\">\n Core - {completedMandatorySheets}/{totalMandatorySheets}\n </Text>\n\n {showClassWorkTag && <Tag Icon={Check2Icon} label=\"CW\" />}\n </FlexView>\n </FlexView>\n\n {totalOptionalSheets && (\n <Text $renderAs=\"ab2\">\n Supplementary - {completedOptionalSheets}/{totalOptionalSheets}\n </Text>\n )}\n </FlexView>\n </Styled.BannerTitleWrapper>\n </FlexView>\n </Styled.BannerContainer>\n );\n});\n\nexport default ChapterBanner;\n"],"names":["PROGRESS_CIRCLE_RADIUS","PROGRESS_CIRCLE_CENTER_X","PROGRESS_CIRCLE_CENTER_Y","ChapterBanner","memo","props","progressStats","imageHue","title","imageUrl","mandatory","optional","classWork","completedMandatorySheets","totalMandatorySheets","completedOptionalSheets","totalOptionalSheets","completedClassWorkSheets","totalClassWorkSheets","showClassWorkTag","completionPercentage","useMemo","getChapterCompletionPercentage","iconTopVal","iconLeftVal","angleInRadian","positionX","positionY","jsx","Styled.BannerContainer","jsxs","FlexView","Image","ILLUSTRATIONS","Styled.BannerImageWrapper","Styled.BannerImage","Styled.ChapterProgressSVG","Styled.ChapterProgressSVGCircle","Styled.StyledImportantIcon","Styled.StyledCheckIcon","Tag","Check2Icon","Styled.BannerTitleWrapper","Text"],"mappings":"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"}