@clubmed/trident-ui 2.0.0-beta.74 → 2.0.0-beta.76

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 (59) hide show
  1. package/examples/chapters-demo.d.ts +1 -0
  2. package/examples/chapters-demo.js +46 -0
  3. package/examples/chapters-demo.js.map +1 -0
  4. package/examples/criteria-transports-b2b-demo.d.ts +1 -1
  5. package/examples/criteria-transports-b2b-demo.js +100 -33
  6. package/examples/criteria-transports-b2b-demo.js.map +1 -1
  7. package/examples/criteria-transports-demo.js +209 -20
  8. package/examples/criteria-transports-demo.js.map +1 -1
  9. package/examples/promises-demo.d.ts +1 -0
  10. package/examples/promises-demo.js +50 -0
  11. package/examples/promises-demo.js.map +1 -0
  12. package/examples/sparkle-wrapper-demo.d.ts +1 -0
  13. package/examples/sparkle-wrapper-demo.js +34 -0
  14. package/examples/sparkle-wrapper-demo.js.map +1 -0
  15. package/package.json +1 -1
  16. package/styles/animate.css +19 -0
  17. package/styles/theme.css +1 -0
  18. package/ui/Chapters/Chapter.d.ts +7 -0
  19. package/ui/Chapters/Chapter.js +36 -0
  20. package/ui/Chapters/Chapter.js.map +1 -0
  21. package/ui/Chapters/ChapterTitle.d.ts +14 -0
  22. package/ui/Chapters/ChapterTitle.js +35 -0
  23. package/ui/Chapters/ChapterTitle.js.map +1 -0
  24. package/ui/Chapters/Chapters.d.ts +15 -0
  25. package/ui/Chapters/Chapters.js +42 -0
  26. package/ui/Chapters/Chapters.js.map +1 -0
  27. package/ui/Chapters/Chapters.themes.d.ts +9 -0
  28. package/ui/Chapters/Chapters.themes.js +65 -0
  29. package/ui/Chapters/Chapters.themes.js.map +1 -0
  30. package/ui/Chapters/ChaptersSummary.d.ts +17 -0
  31. package/ui/Chapters/ChaptersSummary.js +29 -0
  32. package/ui/Chapters/ChaptersSummary.js.map +1 -0
  33. package/ui/ElasticHeight.js +1 -0
  34. package/ui/ElasticHeight.js.map +1 -1
  35. package/ui/Promises/Promises.d.ts +26 -0
  36. package/ui/Promises/Promises.js +42 -0
  37. package/ui/Promises/Promises.js.map +1 -0
  38. package/ui/Promises/PromisesMedia.d.ts +12 -0
  39. package/ui/Promises/PromisesMedia.js +64 -0
  40. package/ui/Promises/PromisesMedia.js.map +1 -0
  41. package/ui/Promises/PromisesMenu.d.ts +11 -0
  42. package/ui/Promises/PromisesMenu.js +154 -0
  43. package/ui/Promises/PromisesMenu.js.map +1 -0
  44. package/ui/SparkleWrapper.d.ts +5 -0
  45. package/ui/SparkleWrapper.js +56 -0
  46. package/ui/SparkleWrapper.js.map +1 -0
  47. package/ui/criteria/CriteriaTransports.d.ts +36 -55
  48. package/ui/criteria/CriteriaTransports.js +256 -206
  49. package/ui/criteria/CriteriaTransports.js.map +1 -1
  50. package/ui/forms/NumberField.d.ts +23 -23
  51. package/examples/criteria-transports-b2c-demo.d.ts +0 -1
  52. package/examples/criteria-transports-b2c-demo.js +0 -37
  53. package/examples/criteria-transports-b2c-demo.js.map +0 -1
  54. package/examples/criteria-transports-data.d.ts +0 -7
  55. package/examples/criteria-transports-data.js +0 -151
  56. package/examples/criteria-transports-data.js.map +0 -1
  57. package/examples/criteria-transports-error-demo.d.ts +0 -1
  58. package/examples/criteria-transports-error-demo.js +0 -29
  59. package/examples/criteria-transports-error-demo.js.map +0 -1
@@ -0,0 +1,7 @@
1
+ import { FunctionComponent, PropsWithChildren } from 'react';
2
+ interface Props {
3
+ index: number;
4
+ setActiveChapter: (index: number) => void;
5
+ }
6
+ export declare const Chapter: FunctionComponent<PropsWithChildren<Props>>;
7
+ export {};
@@ -0,0 +1,36 @@
1
+ "use client";
2
+ import { useEffect as e, useRef as t } from "react";
3
+ import { jsx as n } from "react/jsx-runtime";
4
+ var r = (() => {
5
+ let e = [];
6
+ for (let t = 0; t <= 1; t += .03) e.push(parseFloat(t.toFixed(2)));
7
+ return e;
8
+ })(), i = (e) => {
9
+ let t = e.boundingClientRect.height <= window.innerHeight / 2 && e.intersectionRect.height > window.innerHeight / 3, n = e.boundingClientRect.height <= window.innerHeight / 2 && e.boundingClientRect.height === e.intersectionRect.height, r = e.boundingClientRect.height > window.innerHeight / 2 && e.intersectionRect.height > window.innerHeight / 2;
10
+ return t || n || r;
11
+ }, a = ({ children: a, index: o, setActiveChapter: s }) => {
12
+ let c = t(null);
13
+ return e(() => {
14
+ let e = c.current;
15
+ if (e) {
16
+ let t = new IntersectionObserver(([e]) => {
17
+ i(e) && s(o);
18
+ }, {
19
+ threshold: r,
20
+ rootMargin: "0px 0px 0px 0px"
21
+ });
22
+ return t.observe(e), () => t.unobserve(e);
23
+ }
24
+ }, [
25
+ c,
26
+ o,
27
+ s
28
+ ]), /* @__PURE__ */ n("section", {
29
+ ref: c,
30
+ children: a
31
+ });
32
+ };
33
+ //#endregion
34
+ export { a as Chapter };
35
+
36
+ //# sourceMappingURL=Chapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Chapter.js","names":[],"sources":["../../../lib/ui/Chapters/Chapter.tsx"],"sourcesContent":["'use client';\nimport { useEffect, useRef, type FunctionComponent, type PropsWithChildren } from 'react';\n\ninterface Props {\n index: number;\n setActiveChapter: (index: number) => void;\n}\n\nconst generateThreshold = () => {\n const threshold: number[] = [];\n\n for (let i = 0; i <= 1; i += 0.03) {\n threshold.push(parseFloat(i.toFixed(2)));\n }\n\n return threshold;\n};\n\nconst THRESHOLD = generateThreshold();\n\nconst isChapterActive = (entry: IntersectionObserverEntry) => {\n const isHalfHeightAndOneThirdVisible =\n entry.boundingClientRect.height <= window.innerHeight / 2 &&\n entry.intersectionRect.height > window.innerHeight / 3;\n\n const isHalfHeightAndFullyVisible =\n entry.boundingClientRect.height <= window.innerHeight / 2 &&\n entry.boundingClientRect.height === entry.intersectionRect.height;\n\n const isMoreThanHalfHeightAndHalfVisible =\n entry.boundingClientRect.height > window.innerHeight / 2 &&\n entry.intersectionRect.height > window.innerHeight / 2;\n\n return (\n isHalfHeightAndOneThirdVisible ||\n isHalfHeightAndFullyVisible ||\n isMoreThanHalfHeightAndHalfVisible\n );\n};\n\nexport const Chapter: FunctionComponent<PropsWithChildren<Props>> = ({\n children,\n index,\n setActiveChapter,\n}) => {\n const element = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n const current = element.current;\n\n if (current) {\n const observer = new IntersectionObserver(\n ([entry]) => {\n if (isChapterActive(entry)) {\n setActiveChapter(index);\n }\n },\n {\n threshold: THRESHOLD,\n rootMargin: '0px 0px 0px 0px',\n },\n );\n\n observer.observe(current);\n\n return () => observer.unobserve(current);\n }\n }, [element, index, setActiveChapter]);\n\n return <section ref={element}>{children}</section>;\n};\n"],"mappings":";;;AAkBA,IAAM,WAV0B;CAC9B,IAAM,IAAsB,EAAE;AAE9B,MAAK,IAAI,IAAI,GAAG,KAAK,GAAG,KAAK,IAC3B,GAAU,KAAK,WAAW,EAAE,QAAQ,EAAE,CAAC,CAAC;AAG1C,QAAO;IAG4B,EAE/B,KAAmB,MAAqC;CAC5D,IAAM,IACJ,EAAM,mBAAmB,UAAU,OAAO,cAAc,KACxD,EAAM,iBAAiB,SAAS,OAAO,cAAc,GAEjD,IACJ,EAAM,mBAAmB,UAAU,OAAO,cAAc,KACxD,EAAM,mBAAmB,WAAW,EAAM,iBAAiB,QAEvD,IACJ,EAAM,mBAAmB,SAAS,OAAO,cAAc,KACvD,EAAM,iBAAiB,SAAS,OAAO,cAAc;AAEvD,QACE,KACA,KACA;GAIS,KAAwD,EACnE,aACA,UACA,0BACI;CACJ,IAAM,IAAU,EAAuB,KAAK;AAwB5C,QAtBA,QAAgB;EACd,IAAM,IAAU,EAAQ;AAExB,MAAI,GAAS;GACX,IAAM,IAAW,IAAI,sBAClB,CAAC,OAAW;AACX,IAAI,EAAgB,EAAM,IACxB,EAAiB,EAAM;MAG3B;IACE,WAAW;IACX,YAAY;IACb,CACF;AAID,UAFA,EAAS,QAAQ,EAAQ,QAEZ,EAAS,UAAU,EAAQ;;IAEzC;EAAC;EAAS;EAAO;EAAiB,CAAC,EAE/B,kBAAC,WAAD;EAAS,KAAK;EAAU;EAAmB,CAAA"}
@@ -0,0 +1,14 @@
1
+ import { ComponentProps, FunctionComponent, PropsWithChildren } from 'react';
2
+ import { Heading } from '../heading/Heading';
3
+ import { Theme } from '../types/Theme';
4
+ interface Props {
5
+ className?: string;
6
+ hasNext?: boolean;
7
+ hLevel?: ComponentProps<typeof Heading>['level'];
8
+ index: number;
9
+ isActive?: boolean;
10
+ onClick?: () => void;
11
+ theme?: Theme;
12
+ }
13
+ export declare const ChapterTitle: FunctionComponent<PropsWithChildren<Props>>;
14
+ export {};
@@ -0,0 +1,35 @@
1
+ "use client";
2
+ import { t as e } from "../../chunks/clsx.js";
3
+ import { Heading as t } from "../heading/Heading.js";
4
+ import { getTheme as n } from "./Chapters.themes.js";
5
+ import { jsx as r, jsxs as i } from "react/jsx-runtime";
6
+ import { Icon as a } from "@clubmed/trident-icons";
7
+ //#region lib/ui/Chapters/ChapterTitle.tsx
8
+ var o = ({ children: o, className: s, hasNext: c = !1, hLevel: l = 2, index: u, isActive: d = !1, onClick: f, theme: p = "coreRange" }) => {
9
+ let { thTitle: m, thTitleUnActive: h } = n(p);
10
+ return /* @__PURE__ */ i(t, {
11
+ className: e("text-h5 @md:text-h2 sticky top-0 z-1 flex justify-between gap-x-8 p-20 font-serif transition-colors duration-300 @md:static @md:bg-transparent @md:p-0", m, s),
12
+ id: `chapter${u}`,
13
+ level: l,
14
+ children: [/* @__PURE__ */ i("a", {
15
+ className: e("flex-1", { [h]: !d }),
16
+ href: `#chapter${u}`,
17
+ onClick: f,
18
+ children: [/* @__PURE__ */ i("span", {
19
+ className: "@md:hidden",
20
+ children: [u + 1, " - "]
21
+ }), o]
22
+ }), c && /* @__PURE__ */ r("a", {
23
+ className: "@md:hidden",
24
+ href: `#chapter${u + 1}`,
25
+ children: /* @__PURE__ */ r(a, {
26
+ name: "ArrowTailDown",
27
+ width: "24px"
28
+ })
29
+ })]
30
+ });
31
+ };
32
+ //#endregion
33
+ export { o as ChapterTitle };
34
+
35
+ //# sourceMappingURL=ChapterTitle.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ChapterTitle.js","names":[],"sources":["../../../lib/ui/Chapters/ChapterTitle.tsx"],"sourcesContent":["'use client';\nimport clsx from 'clsx';\nimport type { ComponentProps, FunctionComponent, PropsWithChildren } from 'react';\n\nimport { Icon } from '@clubmed/trident-icons';\nimport { Heading } from '../heading/Heading';\nimport type { Theme } from '../types/Theme';\n\nimport { getTheme } from './Chapters.themes';\n\ninterface Props {\n className?: string;\n hasNext?: boolean;\n hLevel?: ComponentProps<typeof Heading>['level'];\n index: number;\n isActive?: boolean;\n onClick?: () => void;\n theme?: Theme;\n}\n\nexport const ChapterTitle: FunctionComponent<PropsWithChildren<Props>> = ({\n children,\n className,\n hasNext = false,\n hLevel = 2,\n index,\n isActive = false,\n onClick,\n theme = 'coreRange',\n}) => {\n const { thTitle, thTitleUnActive } = getTheme(theme);\n\n return (\n <Heading\n className={clsx(\n 'text-h5 @md:text-h2 sticky top-0 z-1 flex justify-between gap-x-8 p-20 font-serif transition-colors duration-300 @md:static @md:bg-transparent @md:p-0',\n thTitle,\n className,\n )}\n id={`chapter${index}`}\n level={hLevel}\n >\n <a\n className={clsx('flex-1', {\n [thTitleUnActive]: !isActive,\n })}\n href={`#chapter${index}`}\n onClick={onClick}\n >\n <span className=\"@md:hidden\">{index + 1} - </span>\n {children}\n </a>\n {hasNext && (\n <a className=\"@md:hidden\" href={`#chapter${index + 1}`}>\n <Icon name=\"ArrowTailDown\" width=\"24px\" />\n </a>\n )}\n </Heading>\n );\n};\n"],"mappings":";;;;;;;AAoBA,IAAa,KAA6D,EACxE,aACA,cACA,aAAU,IACV,YAAS,GACT,UACA,cAAW,IACX,YACA,WAAQ,kBACJ;CACJ,IAAM,EAAE,YAAS,uBAAoB,EAAS,EAAM;AAEpD,QACE,kBAAC,GAAD;EACE,WAAW,EACT,0JACA,GACA,EACD;EACD,IAAI,UAAU;EACd,OAAO;YAPT,CASE,kBAAC,KAAD;GACE,WAAW,EAAK,UAAU,GACvB,IAAkB,CAAC,GACrB,CAAC;GACF,MAAM,WAAW;GACR;aALX,CAOE,kBAAC,QAAD;IAAM,WAAU;cAAhB,CAA8B,IAAQ,GAAE,MAAA;OACvC,EAAA;MAEF,KACC,kBAAC,KAAD;GAAG,WAAU;GAAa,MAAM,WAAW,IAAQ;aACjD,kBAAC,GAAD;IAAM,MAAK;IAAgB,OAAM;IAAS,CAAA;GACxC,CAAA,CAAA"}
@@ -0,0 +1,15 @@
1
+ import { ComponentPropsWithoutRef, FunctionComponent, ReactNode } from 'react';
2
+ import { IconicNames } from '@clubmed/trident-icons';
3
+ import { Theme } from '../types/Theme';
4
+ export interface ChapterItem {
5
+ content: ReactNode;
6
+ title: string;
7
+ }
8
+ export interface ChaptersProps extends Omit<ComponentPropsWithoutRef<'section'>, 'onClick' | 'children'> {
9
+ chapters: ChapterItem[];
10
+ hLevel?: 2 | 3 | 4;
11
+ icon?: IconicNames;
12
+ onClick?: (chapter: ChapterItem) => void;
13
+ theme?: Theme;
14
+ }
15
+ export declare const Chapters: FunctionComponent<ChaptersProps>;
@@ -0,0 +1,42 @@
1
+ "use client";
2
+ import { t as e } from "../../chunks/clsx.js";
3
+ import { Chapter as t } from "./Chapter.js";
4
+ import { ChapterTitle as n } from "./ChapterTitle.js";
5
+ import { ChaptersSummary as r } from "./ChaptersSummary.js";
6
+ import { useState as i } from "react";
7
+ import { jsx as a, jsxs as o } from "react/jsx-runtime";
8
+ //#region lib/ui/Chapters/Chapters.tsx
9
+ var s = ({ chapters: s, className: c, hLevel: l = 2, icon: u, onClick: d, theme: f = "coreRange", ...p }) => {
10
+ let [m, h] = i(0);
11
+ return /* @__PURE__ */ o("section", {
12
+ ...p,
13
+ className: e(c, "flex @container/chapters"),
14
+ children: [/* @__PURE__ */ a(r, {
15
+ activeChapter: m,
16
+ chapters: s,
17
+ className: "hidden w-3/10 @md:block @xl:w-[calc(50%-380px)]",
18
+ icon: u,
19
+ onClick: d,
20
+ theme: f
21
+ }), /* @__PURE__ */ a("div", {
22
+ className: e("relative isolate w-full flex-1 @md:max-w-7/10 @xl:max-w-[calc(50%+380px)]", "@md:ps-20 @lg:ps-40 @xl:ps-120"),
23
+ children: s.map((e, r) => /* @__PURE__ */ o(t, {
24
+ index: r,
25
+ setActiveChapter: h,
26
+ children: [/* @__PURE__ */ a(n, {
27
+ hasNext: r < s.length - 1,
28
+ hLevel: l,
29
+ index: r,
30
+ isActive: r === m,
31
+ onClick: () => d?.(e),
32
+ theme: f,
33
+ children: e.title
34
+ }), e.content]
35
+ }, e.title))
36
+ })]
37
+ });
38
+ };
39
+ //#endregion
40
+ export { s as Chapters };
41
+
42
+ //# sourceMappingURL=Chapters.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Chapters.js","names":[],"sources":["../../../lib/ui/Chapters/Chapters.tsx"],"sourcesContent":["'use client';\nimport clsx from 'clsx';\nimport {\n useState,\n type ComponentPropsWithoutRef,\n type FunctionComponent,\n type ReactNode,\n} from 'react';\n\nimport type { IconicNames } from '@clubmed/trident-icons';\nimport type { Theme } from '../types/Theme';\n\nimport { Chapter } from './Chapter';\nimport { ChapterTitle } from './ChapterTitle';\nimport { ChaptersSummary } from './ChaptersSummary';\n\nexport interface ChapterItem {\n content: ReactNode;\n title: string;\n}\n\nexport interface ChaptersProps\n extends Omit<ComponentPropsWithoutRef<'section'>, 'onClick' | 'children'> {\n chapters: ChapterItem[];\n hLevel?: 2 | 3 | 4;\n icon?: IconicNames;\n onClick?: (chapter: ChapterItem) => void;\n theme?: Theme;\n}\n\nexport const Chapters: FunctionComponent<ChaptersProps> = ({\n chapters,\n className,\n hLevel = 2,\n icon,\n onClick,\n theme = 'coreRange',\n ...attrs\n}) => {\n const [activeChapter, setActiveChapter] = useState(0);\n\n return (\n <section {...attrs} className={clsx(className, 'flex @container/chapters')}>\n <ChaptersSummary\n activeChapter={activeChapter}\n chapters={chapters}\n className=\"hidden w-3/10 @md:block @xl:w-[calc(50%-380px)]\"\n icon={icon}\n onClick={onClick}\n theme={theme}\n />\n\n <div\n className={clsx(\n 'relative isolate w-full flex-1 @md:max-w-7/10 @xl:max-w-[calc(50%+380px)]',\n '@md:ps-20 @lg:ps-40 @xl:ps-120',\n )}\n >\n {chapters.map((chapter, index) => (\n <Chapter index={index} key={chapter.title} setActiveChapter={setActiveChapter}>\n <ChapterTitle\n hasNext={index < chapters.length - 1}\n hLevel={hLevel}\n index={index}\n isActive={index === activeChapter}\n onClick={() => onClick?.(chapter)}\n theme={theme}\n >\n {chapter.title}\n </ChapterTitle>\n {chapter.content}\n </Chapter>\n ))}\n </div>\n </section>\n );\n};\n"],"mappings":";;;;;;;;AA8BA,IAAa,KAA8C,EACzD,aACA,cACA,YAAS,GACT,SACA,YACA,WAAQ,aACR,GAAG,QACC;CACJ,IAAM,CAAC,GAAe,KAAoB,EAAS,EAAE;AAErD,QACE,kBAAC,WAAD;EAAS,GAAI;EAAO,WAAW,EAAK,GAAW,2BAA2B;YAA1E,CACE,kBAAC,GAAD;GACiB;GACL;GACV,WAAU;GACJ;GACG;GACF;GACP,CAAA,EAEF,kBAAC,OAAD;GACE,WAAW,EACT,6EACA,iCACD;aAEA,EAAS,KAAK,GAAS,MACtB,kBAAC,GAAD;IAAgB;IAA6C;cAA7D,CACE,kBAAC,GAAD;KACE,SAAS,IAAQ,EAAS,SAAS;KAC3B;KACD;KACP,UAAU,MAAU;KACpB,eAAe,IAAU,EAAQ;KAC1B;eAEN,EAAQ;KACI,CAAA,EACd,EAAQ,QAAA;MAXiB,EAAQ,MAY1B,CAAA;GAER,CAAA,CAAA"}
@@ -0,0 +1,9 @@
1
+ import { Theme } from '../types/Theme';
2
+ export declare const getTheme: (theme: Theme) => {
3
+ thSummary: string;
4
+ thSummaryIcon: string;
5
+ thSummaryIconName: string;
6
+ thSummaryIconWidth: string;
7
+ thTitle: string;
8
+ thTitleUnActive: string;
9
+ };
@@ -0,0 +1,65 @@
1
+ //#region lib/ui/Chapters/Chapters.themes.ts
2
+ var e = {
3
+ BLACK: {
4
+ thSummary: "bg-black text-white",
5
+ thSummaryIcon: "text-white max-w-140",
6
+ thSummaryIconName: "Trident",
7
+ thSummaryIconWidth: "100%",
8
+ thTitle: "bg-black text-white",
9
+ thTitleUnActive: "max-md:text-white/50"
10
+ },
11
+ CORE_RANGE: {
12
+ thSummary: "bg-lightSand text-black",
13
+ thSummaryIcon: "text-sand max-w-140",
14
+ thSummaryIconName: "Trident",
15
+ thSummaryIconWidth: "100%",
16
+ thTitle: "bg-lightSand text-black",
17
+ thTitleUnActive: "max-md:text-black/50"
18
+ },
19
+ EXCLUSIVE_COLLECTION: {
20
+ thSummary: "bg-ultramarine text-white",
21
+ thSummaryIcon: "text-white max-w-220",
22
+ thSummaryIconName: "ExclusiveCollection",
23
+ thSummaryIconWidth: "100%",
24
+ thTitle: "bg-ultramarine text-white md:text-black",
25
+ thTitleUnActive: "max-md:text-white/50"
26
+ },
27
+ HAPPY_TO_CARE: {
28
+ thSummary: "bg-verdigris text-black",
29
+ thSummaryIcon: "text-black max-w-220",
30
+ thSummaryIconName: "HappyToCare",
31
+ thSummaryIconWidth: "100%",
32
+ thTitle: "bg-verdigris text-black",
33
+ thTitleUnActive: "max-md:text-black/50"
34
+ },
35
+ SIENNA: {
36
+ thSummary: "bg-sienna text-white",
37
+ thSummaryIcon: "text-white max-w-140",
38
+ thSummaryIconName: "Trident",
39
+ thSummaryIconWidth: "100%",
40
+ thTitle: "bg-sienna text-white md:text-black",
41
+ thTitleUnActive: "max-md:text-white/50"
42
+ },
43
+ WHITE: {
44
+ thSummary: "bg-white text-black",
45
+ thSummaryIcon: "text-sand max-w-140",
46
+ thSummaryIconName: "Trident",
47
+ thSummaryIconWidth: "100%",
48
+ thTitle: "bg-white text-black",
49
+ thTitleUnActive: "max-md:text-black/50"
50
+ }
51
+ }, t = (t) => {
52
+ switch (t) {
53
+ case "black": return e.BLACK;
54
+ case "dark":
55
+ case "exclusiveCollection": return e.EXCLUSIVE_COLLECTION;
56
+ case "happyToCare": return e.HAPPY_TO_CARE;
57
+ case "sienna": return e.SIENNA;
58
+ case "white": return e.WHITE;
59
+ default: return e.CORE_RANGE;
60
+ }
61
+ };
62
+ //#endregion
63
+ export { t as getTheme };
64
+
65
+ //# sourceMappingURL=Chapters.themes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Chapters.themes.js","names":[],"sources":["../../../lib/ui/Chapters/Chapters.themes.ts"],"sourcesContent":["import type { Theme } from '../types/Theme';\n\nconst THEMES = {\n BLACK: {\n thSummary: 'bg-black text-white',\n thSummaryIcon: 'text-white max-w-140',\n thSummaryIconName: 'Trident',\n thSummaryIconWidth: '100%',\n thTitle: 'bg-black text-white',\n thTitleUnActive: 'max-md:text-white/50',\n },\n CORE_RANGE: {\n thSummary: 'bg-lightSand text-black',\n thSummaryIcon: 'text-sand max-w-140',\n thSummaryIconName: 'Trident',\n thSummaryIconWidth: '100%',\n thTitle: 'bg-lightSand text-black',\n thTitleUnActive: 'max-md:text-black/50',\n },\n EXCLUSIVE_COLLECTION: {\n thSummary: 'bg-ultramarine text-white',\n thSummaryIcon: 'text-white max-w-220',\n thSummaryIconName: 'ExclusiveCollection',\n thSummaryIconWidth: '100%',\n thTitle: 'bg-ultramarine text-white md:text-black',\n thTitleUnActive: 'max-md:text-white/50',\n },\n HAPPY_TO_CARE: {\n thSummary: 'bg-verdigris text-black',\n thSummaryIcon: 'text-black max-w-220',\n thSummaryIconName: 'HappyToCare',\n thSummaryIconWidth: '100%',\n thTitle: 'bg-verdigris text-black',\n thTitleUnActive: 'max-md:text-black/50',\n },\n SIENNA: {\n thSummary: 'bg-sienna text-white',\n thSummaryIcon: 'text-white max-w-140',\n thSummaryIconName: 'Trident',\n thSummaryIconWidth: '100%',\n thTitle: 'bg-sienna text-white md:text-black',\n thTitleUnActive: 'max-md:text-white/50',\n },\n WHITE: {\n thSummary: 'bg-white text-black',\n thSummaryIcon: 'text-sand max-w-140',\n thSummaryIconName: 'Trident',\n thSummaryIconWidth: '100%',\n thTitle: 'bg-white text-black',\n thTitleUnActive: 'max-md:text-black/50',\n },\n};\n\nexport const getTheme = (theme: Theme) => {\n switch (theme) {\n case 'black':\n return THEMES.BLACK;\n case 'dark':\n case 'exclusiveCollection':\n return THEMES.EXCLUSIVE_COLLECTION;\n case 'happyToCare':\n return THEMES.HAPPY_TO_CARE;\n case 'sienna':\n return THEMES.SIENNA;\n case 'white':\n return THEMES.WHITE;\n case 'light':\n case 'coreRange':\n default:\n return THEMES.CORE_RANGE;\n }\n};\n"],"mappings":";AAEA,IAAM,IAAS;CACb,OAAO;EACL,WAAW;EACX,eAAe;EACf,mBAAmB;EACnB,oBAAoB;EACpB,SAAS;EACT,iBAAiB;EAClB;CACD,YAAY;EACV,WAAW;EACX,eAAe;EACf,mBAAmB;EACnB,oBAAoB;EACpB,SAAS;EACT,iBAAiB;EAClB;CACD,sBAAsB;EACpB,WAAW;EACX,eAAe;EACf,mBAAmB;EACnB,oBAAoB;EACpB,SAAS;EACT,iBAAiB;EAClB;CACD,eAAe;EACb,WAAW;EACX,eAAe;EACf,mBAAmB;EACnB,oBAAoB;EACpB,SAAS;EACT,iBAAiB;EAClB;CACD,QAAQ;EACN,WAAW;EACX,eAAe;EACf,mBAAmB;EACnB,oBAAoB;EACpB,SAAS;EACT,iBAAiB;EAClB;CACD,OAAO;EACL,WAAW;EACX,eAAe;EACf,mBAAmB;EACnB,oBAAoB;EACpB,SAAS;EACT,iBAAiB;EAClB;CACF,EAEY,KAAY,MAAiB;AACxC,SAAQ,GAAR;EACE,KAAK,QACH,QAAO,EAAO;EAChB,KAAK;EACL,KAAK,sBACH,QAAO,EAAO;EAChB,KAAK,cACH,QAAO,EAAO;EAChB,KAAK,SACH,QAAO,EAAO;EAChB,KAAK,QACH,QAAO,EAAO;EAGhB,QACE,QAAO,EAAO"}
@@ -0,0 +1,17 @@
1
+ import { FunctionComponent, ReactNode } from 'react';
2
+ import { IconicNames } from '@clubmed/trident-icons';
3
+ import { Theme } from '../types/Theme';
4
+ interface ChapterSummaryItem {
5
+ content: ReactNode;
6
+ title: string;
7
+ }
8
+ interface Props {
9
+ activeChapter: number;
10
+ chapters: ChapterSummaryItem[];
11
+ className?: string;
12
+ icon?: IconicNames;
13
+ onClick?: (chapter: ChapterSummaryItem) => void;
14
+ theme?: Theme;
15
+ }
16
+ export declare const ChaptersSummary: FunctionComponent<Props>;
17
+ export {};
@@ -0,0 +1,29 @@
1
+ "use client";
2
+ import { t as e } from "../../chunks/clsx.js";
3
+ import { getTheme as t } from "./Chapters.themes.js";
4
+ import { jsx as n, jsxs as r } from "react/jsx-runtime";
5
+ import { Icon as i } from "@clubmed/trident-icons";
6
+ //#region lib/ui/Chapters/ChaptersSummary.tsx
7
+ var a = { HappyToCareFRCA: "translate-y-[28px]" }, o = ({ activeChapter: o, chapters: s, className: c, icon: l, onClick: u, theme: d = "coreRange" }) => {
8
+ let { thSummary: f, thSummaryIcon: p, thSummaryIconName: m, thSummaryIconWidth: h } = t(d), g = l ?? m, _ = a[g];
9
+ return /* @__PURE__ */ n("div", {
10
+ className: e("rounded-e-16", f, c),
11
+ children: /* @__PURE__ */ r("nav", {
12
+ className: "sticky top-0 ms-auto flex w-full max-w-380 flex-col gap-y-20 p-40",
13
+ children: [s.map((t, r) => /* @__PURE__ */ n("a", {
14
+ className: e("text-h5 block font-serif", { "opacity-50": r !== o }),
15
+ href: `#chapter${r}`,
16
+ onClick: () => u?.(t),
17
+ children: t.title
18
+ }, t.title)), /* @__PURE__ */ n(i, {
19
+ className: e("mt-90 self-center", p, _),
20
+ name: g,
21
+ width: h
22
+ })]
23
+ })
24
+ });
25
+ };
26
+ //#endregion
27
+ export { o as ChaptersSummary };
28
+
29
+ //# sourceMappingURL=ChaptersSummary.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ChaptersSummary.js","names":[],"sources":["../../../lib/ui/Chapters/ChaptersSummary.tsx"],"sourcesContent":["'use client';\nimport clsx from 'clsx';\nimport type { FunctionComponent, ReactNode } from 'react';\n\nimport { Icon, type IconicNames } from '@clubmed/trident-icons';\nimport type { Theme } from '../types/Theme';\n\nimport { getTheme } from './Chapters.themes';\n\nconst ICON_VERTICAL_OFFSET_CLASS: Partial<Record<IconicNames, string>> = {\n // FR-CA asset has an intrinsic Y offset; compensate to match EN-CA visual alignment.\n HappyToCareFRCA: 'translate-y-[28px]',\n};\n\ninterface ChapterSummaryItem {\n content: ReactNode;\n title: string;\n}\n\ninterface Props {\n activeChapter: number;\n chapters: ChapterSummaryItem[];\n className?: string;\n icon?: IconicNames;\n onClick?: (chapter: ChapterSummaryItem) => void;\n theme?: Theme;\n}\n\nexport const ChaptersSummary: FunctionComponent<Props> = ({\n activeChapter,\n chapters,\n className,\n icon,\n onClick,\n theme = 'coreRange',\n}) => {\n const { thSummary, thSummaryIcon, thSummaryIconName, thSummaryIconWidth } = getTheme(theme);\n const summaryIconName = (icon ?? thSummaryIconName) as IconicNames;\n const iconVerticalOffsetClass = ICON_VERTICAL_OFFSET_CLASS[summaryIconName];\n\n return (\n <div className={clsx('rounded-e-16', thSummary, className)}>\n <nav className=\"sticky top-0 ms-auto flex w-full max-w-380 flex-col gap-y-20 p-40\">\n {chapters.map((chapter, index) => (\n <a\n className={clsx('text-h5 block font-serif', {\n 'opacity-50': index !== activeChapter,\n })}\n href={`#chapter${index}`}\n key={chapter.title}\n onClick={() => onClick?.(chapter)}\n >\n {chapter.title}\n </a>\n ))}\n <Icon\n className={clsx('mt-90 self-center', thSummaryIcon, iconVerticalOffsetClass)}\n name={summaryIconName}\n width={thSummaryIconWidth}\n />\n </nav>\n </div>\n );\n};\n"],"mappings":";;;;;;AASA,IAAM,IAAmE,EAEvE,iBAAiB,sBAClB,EAgBY,KAA6C,EACxD,kBACA,aACA,cACA,SACA,YACA,WAAQ,kBACJ;CACJ,IAAM,EAAE,cAAW,kBAAe,sBAAmB,0BAAuB,EAAS,EAAM,EACrF,IAAmB,KAAQ,GAC3B,IAA0B,EAA2B;AAE3D,QACE,kBAAC,OAAD;EAAK,WAAW,EAAK,gBAAgB,GAAW,EAAU;YACxD,kBAAC,OAAD;GAAK,WAAU;aAAf,CACG,EAAS,KAAK,GAAS,MACtB,kBAAC,KAAD;IACE,WAAW,EAAK,4BAA4B,EAC1C,cAAc,MAAU,GACzB,CAAC;IACF,MAAM,WAAW;IAEjB,eAAe,IAAU,EAAQ;cAEhC,EAAQ;IACP,EAJG,EAAQ,MAIX,CACJ,EACF,kBAAC,GAAD;IACE,WAAW,EAAK,qBAAqB,GAAe,EAAwB;IAC5E,MAAM;IACN,OAAO;IACP,CAAA,CAAA;;EAEA,CAAA"}
@@ -12,6 +12,7 @@ var r = ({ className: r, children: i, innerClassName: a, isExpanded: o = !1, min
12
12
  style: { minHeight: s },
13
13
  className: e("overflow-hidden", a),
14
14
  ref: l,
15
+ ...o ? {} : { inert: !0 },
15
16
  children: i
16
17
  })
17
18
  });
@@ -1 +1 @@
1
- {"version":3,"file":"ElasticHeight.js","names":[],"sources":["../../lib/ui/ElasticHeight.tsx"],"sourcesContent":["import clsx from 'clsx';\nimport { type ComponentPropsWithoutRef, type FunctionComponent, useRef } from 'react';\n\ninterface ElasticHeightProps extends ComponentPropsWithoutRef<'div'> {\n innerClassName?: string;\n isExpanded?: boolean;\n min?: number;\n}\n\nexport const ElasticHeight: FunctionComponent<ElasticHeightProps> = ({\n className,\n children,\n innerClassName,\n isExpanded = false,\n min = 0,\n ...attrs\n}) => {\n const ref = useRef<HTMLDivElement>(null as any);\n\n return (\n <div\n {...attrs}\n className={clsx(\n 'overflow-hidden transition-all duration-500 grid',\n 'data-[expanded=true]:grid-rows-[1fr]',\n 'data-[expanded=false]:grid-rows-[0fr]',\n className,\n )}\n data-expanded={isExpanded}\n >\n <div style={{ minHeight: min }} className={clsx('overflow-hidden', innerClassName)} ref={ref}>\n {children}\n </div>\n </div>\n );\n};\n"],"mappings":";;;;AASA,IAAa,KAAwD,EACnE,cACA,aACA,mBACA,gBAAa,IACb,SAAM,GACN,GAAG,QACC;CACJ,IAAM,IAAM,EAAuB,KAAY;AAE/C,QACE,kBAAC,OAAD;EACE,GAAI;EACJ,WAAW,EACT,oDACA,wCACA,yCACA,EACD;EACD,iBAAe;YAEf,kBAAC,OAAD;GAAK,OAAO,EAAE,WAAW,GAAK;GAAE,WAAW,EAAK,mBAAmB,EAAe;GAAO;GACtF;GACG,CAAA;EACF,CAAA"}
1
+ {"version":3,"file":"ElasticHeight.js","names":[],"sources":["../../lib/ui/ElasticHeight.tsx"],"sourcesContent":["import clsx from 'clsx';\nimport { type ComponentPropsWithoutRef, type FunctionComponent, useRef } from 'react';\n\ninterface ElasticHeightProps extends ComponentPropsWithoutRef<'div'> {\n innerClassName?: string;\n isExpanded?: boolean;\n min?: number;\n}\n\nexport const ElasticHeight: FunctionComponent<ElasticHeightProps> = ({\n className,\n children,\n innerClassName,\n isExpanded = false,\n min = 0,\n ...attrs\n}) => {\n const ref = useRef<HTMLDivElement>(null as any);\n\n return (\n <div\n {...attrs}\n className={clsx(\n 'overflow-hidden transition-all duration-500 grid',\n 'data-[expanded=true]:grid-rows-[1fr]',\n 'data-[expanded=false]:grid-rows-[0fr]',\n className,\n )}\n data-expanded={isExpanded}\n >\n <div\n style={{ minHeight: min }}\n className={clsx('overflow-hidden', innerClassName)}\n ref={ref}\n {...(!isExpanded ? { inert: true } : {})}\n >\n {children}\n </div>\n </div>\n );\n};\n"],"mappings":";;;;AASA,IAAa,KAAwD,EACnE,cACA,aACA,mBACA,gBAAa,IACb,SAAM,GACN,GAAG,QACC;CACJ,IAAM,IAAM,EAAuB,KAAY;AAE/C,QACE,kBAAC,OAAD;EACE,GAAI;EACJ,WAAW,EACT,oDACA,wCACA,yCACA,EACD;EACD,iBAAe;YAEf,kBAAC,OAAD;GACE,OAAO,EAAE,WAAW,GAAK;GACzB,WAAW,EAAK,mBAAmB,EAAe;GAC7C;GACL,GAAM,IAA+B,EAAE,GAApB,EAAE,OAAO,IAAM;GAEjC;GACG,CAAA;EACF,CAAA"}
@@ -0,0 +1,26 @@
1
+ import { ComponentPropsWithoutRef, FunctionComponent } from 'react';
2
+ import { ImageProps } from '../Image';
3
+ export interface PromisesItem {
4
+ href: string;
5
+ id?: string;
6
+ image: ImageProps;
7
+ title: string;
8
+ }
9
+ export interface PromisesLabels {
10
+ anchor: {
11
+ continue: string;
12
+ };
13
+ layer: {
14
+ close: string;
15
+ open: string;
16
+ };
17
+ scroller: {
18
+ previous: string;
19
+ next: string;
20
+ };
21
+ }
22
+ export interface PromisesProps extends ComponentPropsWithoutRef<'div'> {
23
+ items: PromisesItem[];
24
+ labels: PromisesLabels;
25
+ }
26
+ export declare const Promises: FunctionComponent<PromisesProps>;
@@ -0,0 +1,42 @@
1
+ "use client";
2
+ import { t as e } from "../../chunks/clsx.js";
3
+ import { PromisesMedia as t } from "./PromisesMedia.js";
4
+ import { PromisesMenu as n } from "./PromisesMenu.js";
5
+ import { useCallback as r, useEffect as i, useState as a } from "react";
6
+ import { jsx as o, jsxs as s } from "react/jsx-runtime";
7
+ //#region lib/ui/Promises/Promises.tsx
8
+ var c = 1e4, l = ({ className: l, items: u, labels: d, ...f }) => {
9
+ let [p, m] = a(0), [h, g] = a(0), _ = r(() => {
10
+ m((e) => (e - 1 + u.length) % u.length);
11
+ }, [u.length]), v = r(() => {
12
+ m((e) => (e + 1) % u.length);
13
+ }, [u.length]), y = r((e) => {
14
+ m(e), g((e) => e + 1);
15
+ }, []);
16
+ return i(() => {
17
+ let e = setInterval(() => {
18
+ v();
19
+ }, c);
20
+ return () => clearInterval(e);
21
+ }, [v, h]), /* @__PURE__ */ s("div", {
22
+ ...f,
23
+ className: e("relative isolate flex gap-x-20 @container/promises", l),
24
+ children: [/* @__PURE__ */ o(t, {
25
+ activeIndex: p,
26
+ items: u,
27
+ labels: d,
28
+ onClickMenu: (e) => m(e),
29
+ onNext: v,
30
+ onPrevious: _
31
+ }), /* @__PURE__ */ o(n, {
32
+ activeIndex: p,
33
+ items: u,
34
+ labels: d,
35
+ onClickMenu: (e) => y(e)
36
+ })]
37
+ });
38
+ };
39
+ //#endregion
40
+ export { l as Promises };
41
+
42
+ //# sourceMappingURL=Promises.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Promises.js","names":[],"sources":["../../../lib/ui/Promises/Promises.tsx"],"sourcesContent":["'use client';\nimport clsx from 'clsx';\nimport type { ComponentPropsWithoutRef, FunctionComponent } from 'react';\nimport { useCallback, useEffect, useState } from 'react';\n\nimport type { ImageProps } from '../Image';\n\nimport { PromisesMedia } from './PromisesMedia';\nimport { PromisesMenu } from './PromisesMenu';\n\nconst INTERVAL_IN_MS = 10000;\n\nexport interface PromisesItem {\n href: string;\n id?: string;\n image: ImageProps;\n title: string;\n}\n\nexport interface PromisesLabels {\n anchor: { continue: string };\n layer: { close: string; open: string };\n scroller: { previous: string; next: string };\n}\n\nexport interface PromisesProps extends ComponentPropsWithoutRef<'div'> {\n items: PromisesItem[];\n labels: PromisesLabels;\n}\n\nexport const Promises: FunctionComponent<PromisesProps> = ({\n className,\n items,\n labels,\n ...attrs\n}) => {\n const [activeIndex, setActiveIndex] = useState(0);\n const [intervalKey, setIntervalKey] = useState(0);\n\n const previousActiveIndex = useCallback(() => {\n setActiveIndex((state) => (state - 1 + items.length) % items.length);\n }, [items.length]);\n\n const nextActiveIndex = useCallback(() => {\n setActiveIndex((state) => (state + 1) % items.length);\n }, [items.length]);\n\n const goToIndex = useCallback((index: number) => {\n setActiveIndex(index);\n setIntervalKey((k) => k + 1);\n }, []);\n\n useEffect(() => {\n const interval = setInterval(() => {\n nextActiveIndex();\n }, INTERVAL_IN_MS);\n\n return () => clearInterval(interval);\n }, [nextActiveIndex, intervalKey]);\n\n return (\n <div\n {...attrs}\n className={clsx('relative isolate flex gap-x-20 @container/promises', className)}\n >\n <PromisesMedia\n activeIndex={activeIndex}\n items={items}\n labels={labels}\n onClickMenu={(i) => setActiveIndex(i)}\n onNext={nextActiveIndex}\n onPrevious={previousActiveIndex}\n />\n <PromisesMenu\n activeIndex={activeIndex}\n items={items}\n labels={labels}\n onClickMenu={(i) => goToIndex(i)}\n />\n </div>\n );\n};\n"],"mappings":";;;;;;;AAUA,IAAM,IAAiB,KAoBV,KAA8C,EACzD,cACA,UACA,WACA,GAAG,QACC;CACJ,IAAM,CAAC,GAAa,KAAkB,EAAS,EAAE,EAC3C,CAAC,GAAa,KAAkB,EAAS,EAAE,EAE3C,IAAsB,QAAkB;AAC5C,KAAgB,OAAW,IAAQ,IAAI,EAAM,UAAU,EAAM,OAAO;IACnE,CAAC,EAAM,OAAO,CAAC,EAEZ,IAAkB,QAAkB;AACxC,KAAgB,OAAW,IAAQ,KAAK,EAAM,OAAO;IACpD,CAAC,EAAM,OAAO,CAAC,EAEZ,IAAY,GAAa,MAAkB;AAE/C,EADA,EAAe,EAAM,EACrB,GAAgB,MAAM,IAAI,EAAE;IAC3B,EAAE,CAAC;AAUN,QARA,QAAgB;EACd,IAAM,IAAW,kBAAkB;AACjC,MAAiB;KAChB,EAAe;AAElB,eAAa,cAAc,EAAS;IACnC,CAAC,GAAiB,EAAY,CAAC,EAGhC,kBAAC,OAAD;EACE,GAAI;EACJ,WAAW,EAAK,sDAAsD,EAAU;YAFlF,CAIE,kBAAC,GAAD;GACe;GACN;GACC;GACR,cAAc,MAAM,EAAe,EAAE;GACrC,QAAQ;GACR,YAAY;GACZ,CAAA,EACF,kBAAC,GAAD;GACe;GACN;GACC;GACR,cAAc,MAAM,EAAU,EAAA;GAC9B,CAAA,CAAA"}
@@ -0,0 +1,12 @@
1
+ import { ComponentPropsWithoutRef, FunctionComponent } from 'react';
2
+ import { PromisesItem, PromisesLabels } from './Promises';
3
+ interface Props extends ComponentPropsWithoutRef<'div'> {
4
+ activeIndex: number;
5
+ items: PromisesItem[];
6
+ labels: PromisesLabels;
7
+ onClickMenu: (index: number) => void;
8
+ onNext: () => void;
9
+ onPrevious: () => void;
10
+ }
11
+ export declare const PromisesMedia: FunctionComponent<Props>;
12
+ export {};
@@ -0,0 +1,64 @@
1
+ "use client";
2
+ import { t as e } from "../../chunks/clsx.js";
3
+ import { Arrows as t } from "../arrows/Arrows.js";
4
+ import { Image as n } from "../Image.js";
5
+ import { jsx as r, jsxs as i } from "react/jsx-runtime";
6
+ //#region lib/ui/Promises/PromisesMedia.tsx
7
+ var a = ({ activeIndex: a, items: o, labels: s, onClickMenu: c, onNext: l, onPrevious: u, ...d }) => /* @__PURE__ */ i("div", {
8
+ ...d,
9
+ className: "rounded-16 relative isolate w-full shrink-0 overflow-hidden @3xl/promises:max-w-380",
10
+ children: [
11
+ /* @__PURE__ */ r("div", {
12
+ className: "relative isolate grid",
13
+ children: o.map(({ id: t, image: i, title: o }, s) => {
14
+ let c = s === a;
15
+ return /* @__PURE__ */ r("article", {
16
+ "aria-hidden": !c,
17
+ className: e("aspect-vertical-video rounded-16 relative isolate col-start-1 row-start-1 w-full origin-top overflow-hidden opacity-0 transition-opacity duration-500", { "opacity-100": c }),
18
+ inert: !c,
19
+ children: /* @__PURE__ */ r(n, {
20
+ ...i,
21
+ className: "size-full object-cover",
22
+ lazyLoad: !0,
23
+ sizes: "(min-width: 768px) 380px, 100vw"
24
+ })
25
+ }, t ?? `${o}-${s}`);
26
+ })
27
+ }),
28
+ /* @__PURE__ */ r(t, {
29
+ iconType: "ArrowDefault",
30
+ isDisabledHidden: !0,
31
+ isNextDisabled: a === o.length - 1,
32
+ isPrevDisabled: a === 0,
33
+ labels: {
34
+ next: s.scroller.next,
35
+ previous: s.scroller.previous
36
+ },
37
+ size: "small",
38
+ className: "absolute inset-0 -mx-12 !w-[calc(100%_+_24px)] @3xl/promises:hidden",
39
+ onNext: l,
40
+ onPrev: u
41
+ }),
42
+ /* @__PURE__ */ r("ul", {
43
+ className: "absolute inset-x-0 top-0 flex list-none gap-2 p-20",
44
+ children: o.map(({ id: t, title: n }, i) => /* @__PURE__ */ r("li", {
45
+ className: "w-full flex items-start",
46
+ children: /* @__PURE__ */ r("button", {
47
+ "aria-current": i === a,
48
+ "aria-label": n,
49
+ className: e("rounded-pill h-4 w-full overflow-hidden", {
50
+ "bg-white": i < a,
51
+ "bg-white/40": i >= a
52
+ }),
53
+ onClick: () => c(i),
54
+ type: "button",
55
+ children: i === a && /* @__PURE__ */ r("span", { className: "animate-filling block h-full w-full origin-left bg-white rtl:origin-right" })
56
+ })
57
+ }, t ?? i))
58
+ })
59
+ ]
60
+ });
61
+ //#endregion
62
+ export { a as PromisesMedia };
63
+
64
+ //# sourceMappingURL=PromisesMedia.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PromisesMedia.js","names":[],"sources":["../../../lib/ui/Promises/PromisesMedia.tsx"],"sourcesContent":["'use client';\nimport clsx from 'clsx';\nimport type { ComponentPropsWithoutRef, FunctionComponent } from 'react';\n\nimport { Image } from '../Image';\nimport { Arrows } from '../arrows/Arrows';\nimport type { PromisesItem, PromisesLabels } from './Promises';\n\ninterface Props extends ComponentPropsWithoutRef<'div'> {\n activeIndex: number;\n items: PromisesItem[];\n labels: PromisesLabels;\n onClickMenu: (index: number) => void;\n onNext: () => void;\n onPrevious: () => void;\n}\n\nexport const PromisesMedia: FunctionComponent<Props> = ({\n activeIndex,\n items,\n labels,\n onClickMenu,\n onNext,\n onPrevious,\n ...attrs\n}) => {\n return (\n <div\n {...attrs}\n className=\"rounded-16 relative isolate w-full shrink-0 overflow-hidden @3xl/promises:max-w-380\"\n >\n <div className=\"relative isolate grid\">\n {items.map(({ id, image, title }, index) => {\n const isActive = index === activeIndex;\n\n return (\n <article\n aria-hidden={!isActive}\n key={id ?? `${title}-${index}`}\n className={clsx(\n 'aspect-vertical-video rounded-16 relative isolate col-start-1 row-start-1 w-full origin-top overflow-hidden opacity-0 transition-opacity duration-500',\n { 'opacity-100': isActive },\n )}\n inert={!isActive}\n >\n <Image\n {...image}\n className=\"size-full object-cover\"\n lazyLoad\n sizes=\"(min-width: 768px) 380px, 100vw\"\n />\n </article>\n );\n })}\n </div>\n\n <Arrows\n iconType=\"ArrowDefault\"\n isDisabledHidden={true}\n isNextDisabled={activeIndex === items.length - 1}\n isPrevDisabled={activeIndex === 0}\n labels={{\n next: labels.scroller.next,\n previous: labels.scroller.previous,\n }}\n size=\"small\"\n className=\"absolute inset-0 -mx-12 !w-[calc(100%_+_24px)] @3xl/promises:hidden\"\n onNext={onNext}\n onPrev={onPrevious}\n />\n\n <ul className=\"absolute inset-x-0 top-0 flex list-none gap-2 p-20\">\n {items.map(({ id, title }, index) => (\n <li key={id ?? index} className=\"w-full flex items-start\">\n <button\n aria-current={index === activeIndex}\n aria-label={title}\n className={clsx('rounded-pill h-4 w-full overflow-hidden', {\n 'bg-white': index < activeIndex,\n 'bg-white/40': index >= activeIndex,\n })}\n onClick={() => onClickMenu(index)}\n type=\"button\"\n >\n {index === activeIndex && (\n <span className=\"animate-filling block h-full w-full origin-left bg-white rtl:origin-right\" />\n )}\n </button>\n </li>\n ))}\n </ul>\n </div>\n );\n};\n"],"mappings":";;;;;;AAiBA,IAAa,KAA2C,EACtD,gBACA,UACA,WACA,gBACA,WACA,eACA,GAAG,QAGD,kBAAC,OAAD;CACE,GAAI;CACJ,WAAU;WAFZ;EAIE,kBAAC,OAAD;GAAK,WAAU;aACZ,EAAM,KAAK,EAAE,OAAI,UAAO,YAAS,MAAU;IAC1C,IAAM,IAAW,MAAU;AAE3B,WACE,kBAAC,WAAD;KACE,eAAa,CAAC;KAEd,WAAW,EACT,yJACA,EAAE,eAAe,GAAU,CAC5B;KACD,OAAO,CAAC;eAER,kBAAC,GAAD;MACE,GAAI;MACJ,WAAU;MACV,UAAA;MACA,OAAM;MACN,CAAA;KACM,EAbH,KAAM,GAAG,EAAM,GAAG,IAaf;;GAGV,CAAA;EAEN,kBAAC,GAAD;GACE,UAAS;GACT,kBAAkB;GAClB,gBAAgB,MAAgB,EAAM,SAAS;GAC/C,gBAAgB,MAAgB;GAChC,QAAQ;IACN,MAAM,EAAO,SAAS;IACtB,UAAU,EAAO,SAAS;IAC3B;GACD,MAAK;GACL,WAAU;GACF;GACR,QAAQ;GACR,CAAA;EAEF,kBAAC,MAAD;GAAI,WAAU;aACX,EAAM,KAAK,EAAE,OAAI,YAAS,MACzB,kBAAC,MAAD;IAAsB,WAAU;cAC9B,kBAAC,UAAD;KACE,gBAAc,MAAU;KACxB,cAAY;KACZ,WAAW,EAAK,2CAA2C;MACzD,YAAY,IAAQ;MACpB,eAAe,KAAS;MACzB,CAAC;KACF,eAAe,EAAY,EAAM;KACjC,MAAK;eAEJ,MAAU,KACT,kBAAC,QAAD,EAAM,WAAU,6EAA8E,CAAA;KAEzF,CAAA;IACN,EAfI,KAAM,EAeV,CAAA;GAEJ,CAAA"}
@@ -0,0 +1,11 @@
1
+ import { FunctionComponent } from 'react';
2
+ import { PromisesItem, PromisesLabels } from './Promises';
3
+ interface Props {
4
+ activeIndex: number;
5
+ className?: string;
6
+ items: PromisesItem[];
7
+ labels: PromisesLabels;
8
+ onClickMenu: (index: number) => void;
9
+ }
10
+ export declare const PromisesMenu: FunctionComponent<Props>;
11
+ export {};