@inzumer/ui-library 1.4.0 → 2.0.0

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 (84) hide show
  1. package/dist/Select.styles-CeZROqOk.d.ts +8 -0
  2. package/dist/{chunk-BKPP4D3Q.js → chunk-27HTTVFO.js} +2 -2
  3. package/dist/{chunk-BKPP4D3Q.js.map → chunk-27HTTVFO.js.map} +1 -1
  4. package/dist/chunk-4H6VER5P.js +36 -0
  5. package/dist/chunk-4H6VER5P.js.map +1 -0
  6. package/dist/chunk-4TPQTZSR.js +76 -0
  7. package/dist/chunk-4TPQTZSR.js.map +1 -0
  8. package/dist/{chunk-D4I5OF3C.js → chunk-5LKLTY55.js} +2 -2
  9. package/dist/{chunk-D4I5OF3C.js.map → chunk-5LKLTY55.js.map} +1 -1
  10. package/dist/{chunk-WUEVXL76.js → chunk-DIA7L6IA.js} +4 -33
  11. package/dist/chunk-DIA7L6IA.js.map +1 -0
  12. package/dist/{chunk-DP274HDM.js → chunk-IY452YEX.js} +14 -4
  13. package/dist/chunk-IY452YEX.js.map +1 -0
  14. package/dist/{chunk-W3H7DYWX.js → chunk-J7X6NLSR.js} +30 -12
  15. package/dist/chunk-J7X6NLSR.js.map +1 -0
  16. package/dist/{chunk-5IHM2545.js → chunk-KAU7S3D4.js} +2 -2
  17. package/dist/{chunk-5IHM2545.js.map → chunk-KAU7S3D4.js.map} +1 -1
  18. package/dist/{chunk-ZABQF65Z.js → chunk-KSNAVEJP.js} +3 -3
  19. package/dist/{chunk-ZABQF65Z.js.map → chunk-KSNAVEJP.js.map} +1 -1
  20. package/dist/chunk-LLJXVAR6.js +184 -0
  21. package/dist/chunk-LLJXVAR6.js.map +1 -0
  22. package/dist/{chunk-7HQFLM4A.js → chunk-NA7YKEO4.js} +2 -2
  23. package/dist/{chunk-7HQFLM4A.js.map → chunk-NA7YKEO4.js.map} +1 -1
  24. package/dist/{chunk-ULLCBART.js → chunk-NTXFFBL6.js} +4 -4
  25. package/dist/{chunk-ULLCBART.js.map → chunk-NTXFFBL6.js.map} +1 -1
  26. package/dist/{chunk-P4CV2EPR.js → chunk-SPDOYFCU.js} +2 -2
  27. package/dist/{chunk-P4CV2EPR.js.map → chunk-SPDOYFCU.js.map} +1 -1
  28. package/dist/{chunk-VGLFR5SB.js → chunk-TO3FF6FR.js} +4 -4
  29. package/dist/{chunk-VGLFR5SB.js.map → chunk-TO3FF6FR.js.map} +1 -1
  30. package/dist/{chunk-UL33H4AD.js → chunk-TRLFK626.js} +24 -4
  31. package/dist/chunk-TRLFK626.js.map +1 -0
  32. package/dist/{chunk-3YRDRHO3.js → chunk-UUW7L2AV.js} +3 -3
  33. package/dist/{chunk-3YRDRHO3.js.map → chunk-UUW7L2AV.js.map} +1 -1
  34. package/dist/{chunk-PE6XEC7Y.js → chunk-VCJN4FS2.js} +4 -4
  35. package/dist/{chunk-PE6XEC7Y.js.map → chunk-VCJN4FS2.js.map} +1 -1
  36. package/dist/chunk-VK24YOIC.js +184 -0
  37. package/dist/chunk-VK24YOIC.js.map +1 -0
  38. package/dist/chunk-XUGSIK2P.js +238 -0
  39. package/dist/chunk-XUGSIK2P.js.map +1 -0
  40. package/dist/{chunk-N5CLCKR3.js → chunk-ZH2EDGW6.js} +3 -3
  41. package/dist/{chunk-N5CLCKR3.js.map → chunk-ZH2EDGW6.js.map} +1 -1
  42. package/dist/components/atoms/Icon/index.js +1 -1
  43. package/dist/components/atoms/Image/index.js +1 -1
  44. package/dist/components/atoms/Input/index.js +2 -2
  45. package/dist/components/atoms/Link/index.js +1 -1
  46. package/dist/components/atoms/RichText/index.js +1 -1
  47. package/dist/components/atoms/Select/index.d.ts +1 -5
  48. package/dist/components/atoms/Select/index.js +3 -2
  49. package/dist/components/atoms/Switch/index.js +2 -2
  50. package/dist/components/atoms/Textarea/index.js +2 -2
  51. package/dist/components/molecules/BottomSheet/index.js +3 -3
  52. package/dist/components/molecules/Breadcrumbs/index.js +3 -3
  53. package/dist/components/molecules/Card/index.js +2 -2
  54. package/dist/components/molecules/Carousel/index.d.ts +61 -0
  55. package/dist/components/molecules/{CookieBanner → Carousel}/index.js +2 -2
  56. package/dist/components/molecules/Drawer/index.js +3 -3
  57. package/dist/components/molecules/Dropdown/index.d.ts +44 -0
  58. package/dist/components/molecules/Dropdown/index.js +8 -0
  59. package/dist/components/molecules/MediaCard/index.d.ts +56 -0
  60. package/dist/components/molecules/MediaCard/index.js +6 -0
  61. package/dist/components/molecules/MediaCard/index.js.map +1 -0
  62. package/dist/components/molecules/Modal/index.d.ts +4 -0
  63. package/dist/components/molecules/Modal/index.js +3 -3
  64. package/dist/components/molecules/Snackbar/index.js +1 -1
  65. package/dist/components/molecules/Timeline/index.d.ts +7 -0
  66. package/dist/components/molecules/Timeline/index.js +3 -2
  67. package/dist/components/organisms/CookieConsent/index.d.ts +59 -0
  68. package/dist/components/{molecules/CookiePreferences → organisms/CookieConsent}/index.js +5 -5
  69. package/dist/components/organisms/CookieConsent/index.js.map +1 -0
  70. package/dist/index.d.ts +5 -2
  71. package/dist/index.js +22 -19
  72. package/package.json +15 -7
  73. package/dist/chunk-36CVKI5R.js +0 -79
  74. package/dist/chunk-36CVKI5R.js.map +0 -1
  75. package/dist/chunk-DP274HDM.js.map +0 -1
  76. package/dist/chunk-TR7XKJCO.js +0 -85
  77. package/dist/chunk-TR7XKJCO.js.map +0 -1
  78. package/dist/chunk-UL33H4AD.js.map +0 -1
  79. package/dist/chunk-W3H7DYWX.js.map +0 -1
  80. package/dist/chunk-WUEVXL76.js.map +0 -1
  81. package/dist/components/molecules/CookieBanner/index.d.ts +0 -46
  82. package/dist/components/molecules/CookiePreferences/index.d.ts +0 -34
  83. /package/dist/components/molecules/{CookieBanner → Carousel}/index.js.map +0 -0
  84. /package/dist/components/molecules/{CookiePreferences → Dropdown}/index.js.map +0 -0
@@ -0,0 +1,184 @@
1
+ import { useMediaQuery } from './chunk-2HCMNEIQ.js';
2
+ import { Button } from './chunk-KL6I2JFC.js';
3
+ import { cn } from './chunk-6LLGTBM6.js';
4
+ import { forwardRef, useRef, useState, Children, useCallback, useEffect } from 'react';
5
+ import { cva } from 'class-variance-authority';
6
+ import { jsxs, jsx } from 'react/jsx-runtime';
7
+
8
+ var carouselStyles = "relative flex flex-col gap-3";
9
+ var carouselTrackStyles = [
10
+ "flex snap-x snap-mandatory gap-4 overflow-x-auto scroll-px-1 px-1 pb-2",
11
+ "[scrollbar-width:none] [&::-webkit-scrollbar]:hidden"
12
+ ].join(" ");
13
+ var carouselSlideStyles = "shrink-0 snap-start";
14
+ var carouselSlideWidthStyles = "w-[80%] sm:w-[45%] lg:w-[31%]";
15
+ var carouselControlsStyles = "flex items-center justify-center gap-3";
16
+ var carouselIndicatorsStyles = "flex flex-wrap items-center justify-center gap-1";
17
+ var carouselIndicatorStyles = [
18
+ "flex h-6 min-w-6 items-center justify-center rounded-full",
19
+ "focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[var(--border-focus)]"
20
+ ].join(" ");
21
+ var carouselDotStyles = cva(
22
+ "block h-2 rounded-full transition-all duration-200 motion-reduce:transition-none",
23
+ {
24
+ variants: {
25
+ active: {
26
+ true: "w-6 bg-[var(--btn-primary-bg)]",
27
+ false: "w-2 bg-[var(--border-strong)] hover:bg-[var(--text-secondary)]"
28
+ }
29
+ },
30
+ defaultVariants: {
31
+ active: false
32
+ }
33
+ }
34
+ );
35
+ var EDGE_TOLERANCE_PX = 4;
36
+ var Carousel = forwardRef(
37
+ ({
38
+ label,
39
+ children,
40
+ previousLabel,
41
+ nextLabel,
42
+ slideLabel = (index, total) => `${index + 1} / ${total}`,
43
+ goToLabel = (index) => `Go to slide ${index + 1}`,
44
+ indicatorsLabel,
45
+ indicators = true,
46
+ header,
47
+ slideClassName,
48
+ buttonIds = {},
49
+ className,
50
+ ...props
51
+ }, ref) => {
52
+ const trackRef = useRef(null);
53
+ const slideRefs = useRef([]);
54
+ const reducedMotion = useMediaQuery("(prefers-reduced-motion: reduce)");
55
+ const [edges, setEdges] = useState({ start: true, end: false });
56
+ const [active, setActive] = useState(0);
57
+ const slides = Children.toArray(children);
58
+ const behavior = reducedMotion ? "auto" : "smooth";
59
+ const offsetOf = (index) => (slideRefs.current[index]?.offsetLeft ?? 0) - (slideRefs.current[0]?.offsetLeft ?? 0);
60
+ const update = useCallback(() => {
61
+ const track = trackRef.current;
62
+ if (!track) {
63
+ return;
64
+ }
65
+ const max = track.scrollWidth - track.clientWidth;
66
+ const atEnd = track.scrollLeft >= max - EDGE_TOLERANCE_PX;
67
+ setEdges({ start: track.scrollLeft <= EDGE_TOLERANCE_PX, end: atEnd });
68
+ const offsets = slideRefs.current.map(
69
+ (slide) => slide ? slide.offsetLeft - (slideRefs.current[0]?.offsetLeft ?? 0) : 0
70
+ );
71
+ const nearest = offsets.reduce(
72
+ (best, offset, index) => Math.abs(offset - track.scrollLeft) < Math.abs((offsets[best] ?? 0) - track.scrollLeft) ? index : best,
73
+ 0
74
+ );
75
+ setActive(atEnd && max > 0 ? offsets.length - 1 : nearest);
76
+ }, []);
77
+ useEffect(() => {
78
+ update();
79
+ const track = trackRef.current;
80
+ if (!track || typeof ResizeObserver === "undefined") {
81
+ return void 0;
82
+ }
83
+ const observer = new ResizeObserver(update);
84
+ observer.observe(track);
85
+ return () => observer.disconnect();
86
+ }, [update, slides.length]);
87
+ const scrollByPage = (direction) => {
88
+ trackRef.current?.scrollBy({
89
+ left: direction * trackRef.current.clientWidth * 0.9,
90
+ behavior
91
+ });
92
+ };
93
+ const goTo = (index) => {
94
+ trackRef.current?.scrollTo({ left: offsetOf(index), behavior });
95
+ };
96
+ return /* @__PURE__ */ jsxs(
97
+ "section",
98
+ {
99
+ ref,
100
+ "aria-roledescription": "carousel",
101
+ "aria-label": label,
102
+ className: cn(carouselStyles, className),
103
+ ...props,
104
+ children: [
105
+ header,
106
+ /* @__PURE__ */ jsx(
107
+ "div",
108
+ {
109
+ ref: trackRef,
110
+ className: carouselTrackStyles,
111
+ "data-carousel-track": "",
112
+ onScroll: update,
113
+ children: slides.map((slide, index) => /* @__PURE__ */ jsx(
114
+ "div",
115
+ {
116
+ ref: (node) => {
117
+ slideRefs.current[index] = node;
118
+ },
119
+ role: "group",
120
+ "aria-roledescription": "slide",
121
+ "aria-label": slideLabel(index, slides.length),
122
+ className: cn(carouselSlideStyles, carouselSlideWidthStyles, slideClassName),
123
+ children: slide
124
+ },
125
+ index
126
+ ))
127
+ }
128
+ ),
129
+ /* @__PURE__ */ jsxs("div", { className: carouselControlsStyles, children: [
130
+ /* @__PURE__ */ jsx(
131
+ Button,
132
+ {
133
+ id: buttonIds.previous,
134
+ type: "button",
135
+ variant: "secondary",
136
+ size: "icon",
137
+ "aria-label": previousLabel,
138
+ disabled: edges.start,
139
+ onClick: () => scrollByPage(-1),
140
+ children: /* @__PURE__ */ jsx("span", { "aria-hidden": "true", children: "\u2039" })
141
+ }
142
+ ),
143
+ indicators && slides.length > 1 && /* @__PURE__ */ jsx("div", { role: "group", "aria-label": indicatorsLabel, className: carouselIndicatorsStyles, children: slides.map((_, index) => /* @__PURE__ */ jsx(
144
+ "button",
145
+ {
146
+ type: "button",
147
+ "aria-label": goToLabel(index, slides.length),
148
+ "aria-current": index === active ? "true" : void 0,
149
+ className: carouselIndicatorStyles,
150
+ onClick: () => goTo(index),
151
+ children: /* @__PURE__ */ jsx(
152
+ "span",
153
+ {
154
+ "aria-hidden": "true",
155
+ className: carouselDotStyles({ active: index === active })
156
+ }
157
+ )
158
+ },
159
+ index
160
+ )) }),
161
+ /* @__PURE__ */ jsx(
162
+ Button,
163
+ {
164
+ id: buttonIds.next,
165
+ type: "button",
166
+ variant: "secondary",
167
+ size: "icon",
168
+ "aria-label": nextLabel,
169
+ disabled: edges.end,
170
+ onClick: () => scrollByPage(1),
171
+ children: /* @__PURE__ */ jsx("span", { "aria-hidden": "true", children: "\u203A" })
172
+ }
173
+ )
174
+ ] })
175
+ ]
176
+ }
177
+ );
178
+ }
179
+ );
180
+ Carousel.displayName = "Carousel";
181
+
182
+ export { Carousel };
183
+ //# sourceMappingURL=chunk-LLJXVAR6.js.map
184
+ //# sourceMappingURL=chunk-LLJXVAR6.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/molecules/Carousel/Carousel.styles.ts","../src/components/molecules/Carousel/Carousel.tsx"],"names":[],"mappings":";;;;;;;AAEO,IAAM,cAAA,GAAiB,8BAAA;AAEvB,IAAM,mBAAA,GAAsB;AAAA,EACjC,wEAAA;AAAA,EACA;AACF,CAAA,CAAE,KAAK,GAAG,CAAA;AAEH,IAAM,mBAAA,GAAsB,qBAAA;AAG5B,IAAM,wBAAA,GAA2B,+BAAA;AAGjC,IAAM,sBAAA,GAAyB,wCAAA;AAE/B,IAAM,wBAAA,GAA2B,kDAAA;AAGjC,IAAM,uBAAA,GAA0B;AAAA,EACrC,2DAAA;AAAA,EACA;AACF,CAAA,CAAE,KAAK,GAAG,CAAA;AAEH,IAAM,iBAAA,GAAoB,GAAA;AAAA,EAC/B,kFAAA;AAAA,EACA;AAAA,IACE,QAAA,EAAU;AAAA,MACR,MAAA,EAAQ;AAAA,QACN,IAAA,EAAM,gCAAA;AAAA,QACN,KAAA,EAAO;AAAA;AACT,KACF;AAAA,IACA,eAAA,EAAiB;AAAA,MACf,MAAA,EAAQ;AAAA;AACV;AAEJ,CAAA;ACSA,IAAM,iBAAA,GAAoB,CAAA;AAQnB,IAAM,QAAA,GAAW,UAAA;AAAA,EACtB,CACE;AAAA,IACE,KAAA;AAAA,IACA,QAAA;AAAA,IACA,aAAA;AAAA,IACA,SAAA;AAAA,IACA,UAAA,GAAa,CAAC,KAAA,EAAO,KAAA,KAAU,GAAG,KAAA,GAAQ,CAAC,MAAM,KAAK,CAAA,CAAA;AAAA,IACtD,SAAA,GAAY,CAAC,KAAA,KAAU,CAAA,YAAA,EAAe,QAAQ,CAAC,CAAA,CAAA;AAAA,IAC/C,eAAA;AAAA,IACA,UAAA,GAAa,IAAA;AAAA,IACb,MAAA;AAAA,IACA,cAAA;AAAA,IACA,YAAY,EAAC;AAAA,IACb,SAAA;AAAA,IACA,GAAG;AAAA,KAEL,GAAA,KACG;AACH,IAAA,MAAM,QAAA,GAAW,OAA8B,IAAI,CAAA;AACnD,IAAA,MAAM,SAAA,GAAY,MAAA,CAAqC,EAAE,CAAA;AACzD,IAAA,MAAM,aAAA,GAAgB,cAAc,kCAAkC,CAAA;AACtE,IAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAI,QAAA,CAAS,EAAE,KAAA,EAAO,IAAA,EAAM,GAAA,EAAK,KAAA,EAAO,CAAA;AAC9D,IAAA,MAAM,CAAC,MAAA,EAAQ,SAAS,CAAA,GAAI,SAAS,CAAC,CAAA;AACtC,IAAA,MAAM,MAAA,GAAS,QAAA,CAAS,OAAA,CAAQ,QAAQ,CAAA;AACxC,IAAA,MAAM,QAAA,GAAW,gBAAgB,MAAA,GAAS,QAAA;AAG1C,IAAA,MAAM,QAAA,GAAW,CAAC,KAAA,KAAA,CACf,SAAA,CAAU,OAAA,CAAQ,KAAK,CAAA,EAAG,UAAA,IAAc,CAAA,KAAM,SAAA,CAAU,OAAA,CAAQ,CAAC,GAAG,UAAA,IAAc,CAAA,CAAA;AAErF,IAAA,MAAM,MAAA,GAAS,YAAY,MAAM;AAC/B,MAAA,MAAM,QAAQ,QAAA,CAAS,OAAA;AACvB,MAAA,IAAI,CAAC,KAAA,EAAO;AACV,QAAA;AAAA,MACF;AACA,MAAA,MAAM,GAAA,GAAM,KAAA,CAAM,WAAA,GAAc,KAAA,CAAM,WAAA;AACtC,MAAA,MAAM,KAAA,GAAQ,KAAA,CAAM,UAAA,IAAc,GAAA,GAAM,iBAAA;AACxC,MAAA,QAAA,CAAS,EAAE,KAAA,EAAO,KAAA,CAAM,cAAc,iBAAA,EAAmB,GAAA,EAAK,OAAO,CAAA;AACrE,MAAA,MAAM,OAAA,GAAU,UAAU,OAAA,CAAQ,GAAA;AAAA,QAAI,CAAC,KAAA,KACrC,KAAA,GAAQ,KAAA,CAAM,UAAA,IAAc,UAAU,OAAA,CAAQ,CAAC,CAAA,EAAG,UAAA,IAAc,CAAA,CAAA,GAAK;AAAA,OACvE;AACA,MAAA,MAAM,UAAU,OAAA,CAAQ,MAAA;AAAA,QACtB,CAAC,IAAA,EAAM,MAAA,EAAQ,UACb,IAAA,CAAK,GAAA,CAAI,SAAS,KAAA,CAAM,UAAU,IAAI,IAAA,CAAK,GAAA,CAAA,CAAK,QAAQ,IAAI,CAAA,IAAK,KAAK,KAAA,CAAM,UAAU,IAClF,KAAA,GACA,IAAA;AAAA,QACN;AAAA,OACF;AACA,MAAA,SAAA,CAAU,SAAS,GAAA,GAAM,CAAA,GAAI,OAAA,CAAQ,MAAA,GAAS,IAAI,OAAO,CAAA;AAAA,IAC3D,CAAA,EAAG,EAAE,CAAA;AAEL,IAAA,SAAA,CAAU,MAAM;AACd,MAAA,MAAA,EAAO;AACP,MAAA,MAAM,QAAQ,QAAA,CAAS,OAAA;AACvB,MAAA,IAAI,CAAC,KAAA,IAAS,OAAO,cAAA,KAAmB,WAAA,EAAa;AACnD,QAAA,OAAO,MAAA;AAAA,MACT;AACA,MAAA,MAAM,QAAA,GAAW,IAAI,cAAA,CAAe,MAAM,CAAA;AAC1C,MAAA,QAAA,CAAS,QAAQ,KAAK,CAAA;AACtB,MAAA,OAAO,MAAM,SAAS,UAAA,EAAW;AAAA,IACnC,CAAA,EAAG,CAAC,MAAA,EAAQ,MAAA,CAAO,MAAM,CAAC,CAAA;AAE1B,IAAA,MAAM,YAAA,GAAe,CAAC,SAAA,KAAsB;AAC1C,MAAA,QAAA,CAAS,SAAS,QAAA,CAAS;AAAA,QACzB,IAAA,EAAM,SAAA,GAAY,QAAA,CAAS,OAAA,CAAQ,WAAA,GAAc,GAAA;AAAA,QACjD;AAAA,OACD,CAAA;AAAA,IACH,CAAA;AAEA,IAAA,MAAM,IAAA,GAAO,CAAC,KAAA,KAAkB;AAC9B,MAAA,QAAA,CAAS,OAAA,EAAS,SAAS,EAAE,IAAA,EAAM,SAAS,KAAK,CAAA,EAAG,UAAU,CAAA;AAAA,IAChE,CAAA;AAEA,IAAA,uBACE,IAAA;AAAA,MAAC,SAAA;AAAA,MAAA;AAAA,QACC,GAAA;AAAA,QACA,sBAAA,EAAqB,UAAA;AAAA,QACrB,YAAA,EAAY,KAAA;AAAA,QACZ,SAAA,EAAW,EAAA,CAAG,cAAA,EAAgB,SAAS,CAAA;AAAA,QACtC,GAAG,KAAA;AAAA,QAEH,QAAA,EAAA;AAAA,UAAA,MAAA;AAAA,0BACD,GAAA;AAAA,YAAC,KAAA;AAAA,YAAA;AAAA,cACC,GAAA,EAAK,QAAA;AAAA,cACL,SAAA,EAAW,mBAAA;AAAA,cACX,qBAAA,EAAoB,EAAA;AAAA,cACpB,QAAA,EAAU,MAAA;AAAA,cAET,QAAA,EAAA,MAAA,CAAO,GAAA,CAAI,CAAC,KAAA,EAAO,KAAA,qBAClB,GAAA;AAAA,gBAAC,KAAA;AAAA,gBAAA;AAAA,kBAEC,GAAA,EAAK,CAAC,IAAA,KAAS;AACb,oBAAA,SAAA,CAAU,OAAA,CAAQ,KAAK,CAAA,GAAI,IAAA;AAAA,kBAC7B,CAAA;AAAA,kBACA,IAAA,EAAK,OAAA;AAAA,kBACL,sBAAA,EAAqB,OAAA;AAAA,kBACrB,YAAA,EAAY,UAAA,CAAW,KAAA,EAAO,MAAA,CAAO,MAAM,CAAA;AAAA,kBAC3C,SAAA,EAAW,EAAA,CAAG,mBAAA,EAAqB,wBAAA,EAA0B,cAAc,CAAA;AAAA,kBAE1E,QAAA,EAAA;AAAA,iBAAA;AAAA,gBATI;AAAA,eAWR;AAAA;AAAA,WACH;AAAA,0BACA,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAW,sBAAA,EACd,QAAA,EAAA;AAAA,4BAAA,GAAA;AAAA,cAAC,MAAA;AAAA,cAAA;AAAA,gBACC,IAAI,SAAA,CAAU,QAAA;AAAA,gBACd,IAAA,EAAK,QAAA;AAAA,gBACL,OAAA,EAAQ,WAAA;AAAA,gBACR,IAAA,EAAK,MAAA;AAAA,gBACL,YAAA,EAAY,aAAA;AAAA,gBACZ,UAAU,KAAA,CAAM,KAAA;AAAA,gBAChB,OAAA,EAAS,MAAM,YAAA,CAAa,EAAE,CAAA;AAAA,gBAE9B,QAAA,kBAAA,GAAA,CAAC,MAAA,EAAA,EAAK,aAAA,EAAY,MAAA,EAAO,QAAA,EAAA,QAAA,EAAC;AAAA;AAAA,aAC5B;AAAA,YACC,cAAc,MAAA,CAAO,MAAA,GAAS,CAAA,oBAC7B,GAAA,CAAC,SAAI,IAAA,EAAK,OAAA,EAAQ,YAAA,EAAY,eAAA,EAAiB,WAAW,wBAAA,EACvD,QAAA,EAAA,MAAA,CAAO,GAAA,CAAI,CAAC,GAAG,KAAA,qBACd,GAAA;AAAA,cAAC,QAAA;AAAA,cAAA;AAAA,gBAEC,IAAA,EAAK,QAAA;AAAA,gBACL,YAAA,EAAY,SAAA,CAAU,KAAA,EAAO,MAAA,CAAO,MAAM,CAAA;AAAA,gBAC1C,cAAA,EAAc,KAAA,KAAU,MAAA,GAAS,MAAA,GAAS,MAAA;AAAA,gBAC1C,SAAA,EAAW,uBAAA;AAAA,gBACX,OAAA,EAAS,MAAM,IAAA,CAAK,KAAK,CAAA;AAAA,gBAEzB,QAAA,kBAAA,GAAA;AAAA,kBAAC,MAAA;AAAA,kBAAA;AAAA,oBACC,aAAA,EAAY,MAAA;AAAA,oBACZ,WAAW,iBAAA,CAAkB,EAAE,MAAA,EAAQ,KAAA,KAAU,QAAQ;AAAA;AAAA;AAC3D,eAAA;AAAA,cAVK;AAAA,aAYR,CAAA,EACH,CAAA;AAAA,4BAEF,GAAA;AAAA,cAAC,MAAA;AAAA,cAAA;AAAA,gBACC,IAAI,SAAA,CAAU,IAAA;AAAA,gBACd,IAAA,EAAK,QAAA;AAAA,gBACL,OAAA,EAAQ,WAAA;AAAA,gBACR,IAAA,EAAK,MAAA;AAAA,gBACL,YAAA,EAAY,SAAA;AAAA,gBACZ,UAAU,KAAA,CAAM,GAAA;AAAA,gBAChB,OAAA,EAAS,MAAM,YAAA,CAAa,CAAC,CAAA;AAAA,gBAE7B,QAAA,kBAAA,GAAA,CAAC,MAAA,EAAA,EAAK,aAAA,EAAY,MAAA,EAAO,QAAA,EAAA,QAAA,EAAC;AAAA;AAAA;AAC5B,WAAA,EACF;AAAA;AAAA;AAAA,KACF;AAAA,EAEJ;AACF;AAEA,QAAA,CAAS,WAAA,GAAc,UAAA","file":"chunk-LLJXVAR6.js","sourcesContent":["import { cva } from 'class-variance-authority';\n\nexport const carouselStyles = 'relative flex flex-col gap-3';\n\nexport const carouselTrackStyles = [\n 'flex snap-x snap-mandatory gap-4 overflow-x-auto scroll-px-1 px-1 pb-2',\n '[scrollbar-width:none] [&::-webkit-scrollbar]:hidden',\n].join(' ');\n\nexport const carouselSlideStyles = 'shrink-0 snap-start';\n\n/** Default slide widths: most of the screen on mobile, two on tablets, three on desktop. */\nexport const carouselSlideWidthStyles = 'w-[80%] sm:w-[45%] lg:w-[31%]';\n\n/** Previous · indicators · next, centered under the cards. */\nexport const carouselControlsStyles = 'flex items-center justify-center gap-3';\n\nexport const carouselIndicatorsStyles = 'flex flex-wrap items-center justify-center gap-1';\n\n/** 24px hit area around a small dot, so the indicators are easy to tap. */\nexport const carouselIndicatorStyles = [\n 'flex h-6 min-w-6 items-center justify-center rounded-full',\n 'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[var(--border-focus)]',\n].join(' ');\n\nexport const carouselDotStyles = cva(\n 'block h-2 rounded-full transition-all duration-200 motion-reduce:transition-none',\n {\n variants: {\n active: {\n true: 'w-6 bg-[var(--btn-primary-bg)]',\n false: 'w-2 bg-[var(--border-strong)] hover:bg-[var(--text-secondary)]',\n },\n },\n defaultVariants: {\n active: false,\n },\n },\n);\n","import { Button } from '@components';\nimport { useMediaQuery } from '@hooks';\nimport { cn } from '@utils';\nimport {\n Children,\n forwardRef,\n useCallback,\n useEffect,\n useRef,\n useState,\n type HTMLAttributes,\n type ReactNode,\n} from 'react';\nimport {\n carouselControlsStyles,\n carouselDotStyles,\n carouselIndicatorsStyles,\n carouselIndicatorStyles,\n carouselSlideStyles,\n carouselSlideWidthStyles,\n carouselStyles,\n carouselTrackStyles,\n} from './Carousel.styles';\n\nexport type CarouselProps = Omit<HTMLAttributes<HTMLElement>, 'children'> & {\n /** Accessible name of the carousel, e.g. \"Featured recipes\". */\n label: string;\n /** One child per slide. */\n children: ReactNode;\n previousLabel: string;\n nextLabel: string;\n /** Accessible name of each slide; defaults to \"1 / 6\". */\n slideLabel?: (index: number, total: number) => string;\n /** Accessible name of each indicator; defaults to \"Go to slide 3\". */\n goToLabel?: (index: number, total: number) => string;\n /** Accessible name of the indicators group, e.g. \"Choose a recipe\". */\n indicatorsLabel?: string;\n /** Show the indicators between the buttons (default `true`). */\n indicators?: boolean;\n /** Optional visible heading or \"See all\" link above the cards. */\n header?: ReactNode;\n /** Width classes for each slide (defaults: 80% mobile, 45% tablet, 31% desktop). */\n slideClassName?: string;\n /** Stable ids for the buttons, e.g. for analytics click triggers. */\n buttonIds?: { previous?: string; next?: string };\n};\n\nconst EDGE_TOLERANCE_PX = 4;\n\n/**\n * Horizontal carousel of cards: native scroll with snap (touch and trackpad drag work as usual),\n * and below the cards previous/next buttons around indicators that show the current card and jump\n * to any of them. Tabbing to a card scrolls it into view. No autoplay; the smooth scroll is turned\n * off when the person prefers reduced motion.\n */\nexport const Carousel = forwardRef<HTMLElement, CarouselProps>(\n (\n {\n label,\n children,\n previousLabel,\n nextLabel,\n slideLabel = (index, total) => `${index + 1} / ${total}`,\n goToLabel = (index) => `Go to slide ${index + 1}`,\n indicatorsLabel,\n indicators = true,\n header,\n slideClassName,\n buttonIds = {},\n className,\n ...props\n },\n ref,\n ) => {\n const trackRef = useRef<HTMLDivElement | null>(null);\n const slideRefs = useRef<Array<HTMLDivElement | null>>([]);\n const reducedMotion = useMediaQuery('(prefers-reduced-motion: reduce)');\n const [edges, setEdges] = useState({ start: true, end: false });\n const [active, setActive] = useState(0);\n const slides = Children.toArray(children);\n const behavior = reducedMotion ? 'auto' : 'smooth';\n\n /** Offset of a slide from the start of the track's content. */\n const offsetOf = (index: number) =>\n (slideRefs.current[index]?.offsetLeft ?? 0) - (slideRefs.current[0]?.offsetLeft ?? 0);\n\n const update = useCallback(() => {\n const track = trackRef.current;\n if (!track) {\n return;\n }\n const max = track.scrollWidth - track.clientWidth;\n const atEnd = track.scrollLeft >= max - EDGE_TOLERANCE_PX;\n setEdges({ start: track.scrollLeft <= EDGE_TOLERANCE_PX, end: atEnd });\n const offsets = slideRefs.current.map((slide) =>\n slide ? slide.offsetLeft - (slideRefs.current[0]?.offsetLeft ?? 0) : 0,\n );\n const nearest = offsets.reduce(\n (best, offset, index) =>\n Math.abs(offset - track.scrollLeft) < Math.abs((offsets[best] ?? 0) - track.scrollLeft)\n ? index\n : best,\n 0,\n );\n setActive(atEnd && max > 0 ? offsets.length - 1 : nearest);\n }, []);\n\n useEffect(() => {\n update();\n const track = trackRef.current;\n if (!track || typeof ResizeObserver === 'undefined') {\n return undefined;\n }\n const observer = new ResizeObserver(update);\n observer.observe(track);\n return () => observer.disconnect();\n }, [update, slides.length]);\n\n const scrollByPage = (direction: 1 | -1) => {\n trackRef.current?.scrollBy({\n left: direction * trackRef.current.clientWidth * 0.9,\n behavior,\n });\n };\n\n const goTo = (index: number) => {\n trackRef.current?.scrollTo({ left: offsetOf(index), behavior });\n };\n\n return (\n <section\n ref={ref}\n aria-roledescription=\"carousel\"\n aria-label={label}\n className={cn(carouselStyles, className)}\n {...props}\n >\n {header}\n <div\n ref={trackRef}\n className={carouselTrackStyles}\n data-carousel-track=\"\"\n onScroll={update}\n >\n {slides.map((slide, index) => (\n <div\n key={index}\n ref={(node) => {\n slideRefs.current[index] = node;\n }}\n role=\"group\"\n aria-roledescription=\"slide\"\n aria-label={slideLabel(index, slides.length)}\n className={cn(carouselSlideStyles, carouselSlideWidthStyles, slideClassName)}\n >\n {slide}\n </div>\n ))}\n </div>\n <div className={carouselControlsStyles}>\n <Button\n id={buttonIds.previous}\n type=\"button\"\n variant=\"secondary\"\n size=\"icon\"\n aria-label={previousLabel}\n disabled={edges.start}\n onClick={() => scrollByPage(-1)}\n >\n <span aria-hidden=\"true\">‹</span>\n </Button>\n {indicators && slides.length > 1 && (\n <div role=\"group\" aria-label={indicatorsLabel} className={carouselIndicatorsStyles}>\n {slides.map((_, index) => (\n <button\n key={index}\n type=\"button\"\n aria-label={goToLabel(index, slides.length)}\n aria-current={index === active ? 'true' : undefined}\n className={carouselIndicatorStyles}\n onClick={() => goTo(index)}\n >\n <span\n aria-hidden=\"true\"\n className={carouselDotStyles({ active: index === active })}\n />\n </button>\n ))}\n </div>\n )}\n <Button\n id={buttonIds.next}\n type=\"button\"\n variant=\"secondary\"\n size=\"icon\"\n aria-label={nextLabel}\n disabled={edges.end}\n onClick={() => scrollByPage(1)}\n >\n <span aria-hidden=\"true\">›</span>\n </Button>\n </div>\n </section>\n );\n },\n);\n\nCarousel.displayName = 'Carousel';\n"]}
@@ -27,5 +27,5 @@ var Icon = ({ icon: IconComponent, size, className, label, ...props }) => /* @__
27
27
  Icon.displayName = "Icon";
28
28
 
29
29
  export { Icon };
30
- //# sourceMappingURL=chunk-7HQFLM4A.js.map
31
- //# sourceMappingURL=chunk-7HQFLM4A.js.map
30
+ //# sourceMappingURL=chunk-NA7YKEO4.js.map
31
+ //# sourceMappingURL=chunk-NA7YKEO4.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/atoms/Icon/Icon.styles.ts","../src/components/atoms/Icon/Icon.tsx"],"names":[],"mappings":";;;;AAEO,IAAM,UAAA,GAAa,IAAI,uBAAA,EAAyB;AAAA,EACrD,QAAA,EAAU;AAAA,IACR,IAAA,EAAM;AAAA,MACJ,EAAA,EAAI,SAAA;AAAA,MACJ,EAAA,EAAI,SAAA;AAAA,MACJ,EAAA,EAAI;AAAA;AACN,GACF;AAAA,EACA,eAAA,EAAiB;AAAA,IACf,IAAA,EAAM;AAAA;AAEV,CAAC,CAAA;ACFM,IAAM,IAAA,GAAO,CAAC,EAAE,IAAA,EAAM,aAAA,EAAe,MAAM,SAAA,EAAW,KAAA,EAAO,GAAG,KAAA,EAAM,qBAC3E,GAAA;AAAA,EAAC,aAAA;AAAA,EAAA;AAAA,IACC,WAAW,EAAA,CAAG,UAAA,CAAW,EAAE,IAAA,EAAM,GAAG,SAAS,CAAA;AAAA,IAC7C,IAAA,EAAM,QAAQ,KAAA,GAAQ,MAAA;AAAA,IACtB,YAAA,EAAY,KAAA;AAAA,IACZ,aAAA,EAAa,QAAQ,MAAA,GAAY,IAAA;AAAA,IAChC,GAAG;AAAA;AACN;AAGF,IAAA,CAAK,WAAA,GAAc,MAAA","file":"chunk-7HQFLM4A.js","sourcesContent":["import { cva } from 'class-variance-authority';\n\nexport const iconStyles = cva('inline-block shrink-0', {\n variants: {\n size: {\n sm: 'h-4 w-4',\n md: 'h-5 w-5',\n lg: 'h-6 w-6',\n },\n },\n defaultVariants: {\n size: 'md',\n },\n});\n","import type { VariantProps } from 'class-variance-authority';\nimport type { ComponentType, SVGProps } from 'react';\nimport { cn } from '@utils';\nimport { iconStyles } from './Icon.styles';\n\nexport type IconProps = Omit<SVGProps<SVGSVGElement>, 'children'> &\n VariantProps<typeof iconStyles> & {\n icon: ComponentType<SVGProps<SVGSVGElement>>;\n label?: string;\n };\n\nexport const Icon = ({ icon: IconComponent, size, className, label, ...props }: IconProps) => (\n <IconComponent\n className={cn(iconStyles({ size }), className)}\n role={label ? 'img' : undefined}\n aria-label={label}\n aria-hidden={label ? undefined : true}\n {...props}\n />\n);\n\nIcon.displayName = 'Icon';\n"]}
1
+ {"version":3,"sources":["../src/components/atoms/Icon/Icon.styles.ts","../src/components/atoms/Icon/Icon.tsx"],"names":[],"mappings":";;;;AAEO,IAAM,UAAA,GAAa,IAAI,uBAAA,EAAyB;AAAA,EACrD,QAAA,EAAU;AAAA,IACR,IAAA,EAAM;AAAA,MACJ,EAAA,EAAI,SAAA;AAAA,MACJ,EAAA,EAAI,SAAA;AAAA,MACJ,EAAA,EAAI;AAAA;AACN,GACF;AAAA,EACA,eAAA,EAAiB;AAAA,IACf,IAAA,EAAM;AAAA;AAEV,CAAC,CAAA;ACFM,IAAM,IAAA,GAAO,CAAC,EAAE,IAAA,EAAM,aAAA,EAAe,MAAM,SAAA,EAAW,KAAA,EAAO,GAAG,KAAA,EAAM,qBAC3E,GAAA;AAAA,EAAC,aAAA;AAAA,EAAA;AAAA,IACC,WAAW,EAAA,CAAG,UAAA,CAAW,EAAE,IAAA,EAAM,GAAG,SAAS,CAAA;AAAA,IAC7C,IAAA,EAAM,QAAQ,KAAA,GAAQ,MAAA;AAAA,IACtB,YAAA,EAAY,KAAA;AAAA,IACZ,aAAA,EAAa,QAAQ,MAAA,GAAY,IAAA;AAAA,IAChC,GAAG;AAAA;AACN;AAGF,IAAA,CAAK,WAAA,GAAc,MAAA","file":"chunk-NA7YKEO4.js","sourcesContent":["import { cva } from 'class-variance-authority';\n\nexport const iconStyles = cva('inline-block shrink-0', {\n variants: {\n size: {\n sm: 'h-4 w-4',\n md: 'h-5 w-5',\n lg: 'h-6 w-6',\n },\n },\n defaultVariants: {\n size: 'md',\n },\n});\n","import { cn } from '@utils';\nimport type { VariantProps } from 'class-variance-authority';\nimport type { ComponentType, SVGProps } from 'react';\nimport { iconStyles } from './Icon.styles';\n\nexport type IconProps = Omit<SVGProps<SVGSVGElement>, 'children'> &\n VariantProps<typeof iconStyles> & {\n icon: ComponentType<SVGProps<SVGSVGElement>>;\n label?: string;\n };\n\nexport const Icon = ({ icon: IconComponent, size, className, label, ...props }: IconProps) => (\n <IconComponent\n className={cn(iconStyles({ size }), className)}\n role={label ? 'img' : undefined}\n aria-label={label}\n aria-hidden={label ? undefined : true}\n {...props}\n />\n);\n\nIcon.displayName = 'Icon';\n"]}
@@ -1,9 +1,9 @@
1
1
  import { useFocusTrap } from './chunk-QT62VC36.js';
2
2
  import { useScrollLock } from './chunk-53YMHM24.js';
3
- import { useDelayedUnmount } from './chunk-BNEEI7S5.js';
4
3
  import { useDismissableLayer } from './chunk-JCJP427C.js';
4
+ import { useDelayedUnmount } from './chunk-BNEEI7S5.js';
5
5
  import { useMergedRef } from './chunk-P4Z7HH66.js';
6
- import { RichText } from './chunk-P4CV2EPR.js';
6
+ import { RichText } from './chunk-SPDOYFCU.js';
7
7
  import { cn } from './chunk-6LLGTBM6.js';
8
8
  import { forwardRef, useRef, useId } from 'react';
9
9
  import { cva } from 'class-variance-authority';
@@ -83,5 +83,5 @@ var BottomSheet = forwardRef(
83
83
  BottomSheet.displayName = "BottomSheet";
84
84
 
85
85
  export { BottomSheet };
86
- //# sourceMappingURL=chunk-ULLCBART.js.map
87
- //# sourceMappingURL=chunk-ULLCBART.js.map
86
+ //# sourceMappingURL=chunk-NTXFFBL6.js.map
87
+ //# sourceMappingURL=chunk-NTXFFBL6.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/molecules/BottomSheet/BottomSheet.styles.ts","../src/components/molecules/BottomSheet/BottomSheet.tsx"],"names":[],"mappings":";;;;;;;;;;;AAEO,IAAM,wBAAA,GAA2B,GAAA;AAAA,EACtC;AAAA,IACE,8EAAA;AAAA,IACA;AAAA,GACF;AAAA,EACA;AAAA,IACE,QAAA,EAAU;AAAA,MACR,OAAA,EAAS;AAAA,QACP,IAAA,EAAM,aAAA;AAAA,QACN,KAAA,EAAO;AAAA;AACT,KACF;AAAA,IACA,eAAA,EAAiB;AAAA,MACf,OAAA,EAAS;AAAA;AACX;AAEJ,CAAA;AAEO,IAAM,sBAAA,GAAyB,GAAA;AAAA,EACpC;AAAA,IACE,+EAAA;AAAA,IACA,6CAAA;AAAA,IACA;AAAA,GACF;AAAA,EACA;AAAA,IACE,QAAA,EAAU;AAAA,MACR,OAAA,EAAS;AAAA,QACP,IAAA,EAAM,eAAA;AAAA,QACN,KAAA,EAAO;AAAA;AACT,KACF;AAAA,IACA,eAAA,EAAiB;AAAA,MACf,OAAA,EAAS;AAAA;AACX;AAEJ,CAAA;AAEO,IAAM,uBAAA,GACX,gEAAA;AAEK,IAAM,sBAAA,GAAyB,uDAAA;AAE/B,IAAM,uBAAA,GAA0B,0CAAA;AC1BvC,IAAM,gBAAA,GAAmB,GAAA;AAUlB,IAAM,WAAA,GAAc,UAAA;AAAA,EACzB,CACE,EAAE,IAAA,EAAM,OAAA,EAAS,KAAA,EAAO,MAAA,EAAQ,oBAAA,GAAuB,IAAA,EAAM,SAAA,EAAW,QAAA,EAAU,GAAG,KAAA,IACrF,GAAA,KACG;AACH,IAAA,MAAM,QAAA,GAAW,OAA8B,IAAI,CAAA;AACnD,IAAA,MAAM,WAAA,GAAc,YAAA,CAAa,GAAA,EAAK,QAAQ,CAAA;AAC9C,IAAA,MAAM,UAAU,KAAA,EAAM;AACtB,IAAA,MAAM,EAAE,OAAA,EAAS,OAAA,EAAQ,GAAI,iBAAA,CAAkB,MAAM,gBAAgB,CAAA;AAErE,IAAA,mBAAA,CAAoB,IAAA,EAAM,OAAA,EAAS,QAAA,EAAU,oBAAoB,CAAA;AAEjE,IAAA,YAAA,CAAa,IAAA,IAAQ,SAAS,QAAQ,CAAA;AACtC,IAAA,aAAA,CAAc,IAAI,CAAA;AAElB,IAAA,IAAI,CAAC,OAAA,EAAS;AACZ,MAAA,OAAO,IAAA;AAAA,IACT;AAEA,IAAA,2BACG,KAAA,EAAA,EAAI,SAAA,EAAW,yBAAyB,EAAE,OAAA,EAAS,CAAA,EAClD,QAAA,kBAAA,IAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,GAAA,EAAK,WAAA;AAAA,QACL,IAAA,EAAK,QAAA;AAAA,QACL,YAAA,EAAW,MAAA;AAAA,QACX,iBAAA,EAAiB,QAAQ,OAAA,GAAU,MAAA;AAAA,QACnC,QAAA,EAAU,EAAA;AAAA,QACV,WAAW,EAAA,CAAG,sBAAA,CAAuB,EAAE,OAAA,EAAS,GAAG,SAAS,CAAA;AAAA,QAC3D,GAAG,KAAA;AAAA,QAEJ,QAAA,EAAA;AAAA,0BAAA,GAAA,CAAC,KAAA,EAAA,EAAI,aAAA,EAAW,IAAA,EAAC,SAAA,EAAW,uBAAA,EAAyB,CAAA;AAAA,UACpD,KAAA,oBACC,GAAA,CAAC,QAAA,EAAA,EAAS,EAAA,EAAG,IAAA,EAAK,EAAA,EAAI,OAAA,EAAS,OAAA,EAAQ,IAAA,EAAK,SAAA,EAAW,sBAAA,EACpD,QAAA,EAAA,KAAA,EACH,CAAA;AAAA,UAED,QAAA;AAAA,UACA,MAAA,oBAAU,GAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAW,yBAA0B,QAAA,EAAA,MAAA,EAAO;AAAA;AAAA;AAAA,KAC9D,EACF,CAAA;AAAA,EAEJ;AACF;AAEA,WAAA,CAAY,WAAA,GAAc,aAAA","file":"chunk-ULLCBART.js","sourcesContent":["import { cva } from 'class-variance-authority';\n\nexport const bottomSheetOverlayStyles = cva(\n [\n 'fixed inset-0 z-50 flex items-end justify-center bg-[var(--surface-overlay)]',\n 'transition-opacity duration-200 ease-out',\n ],\n {\n variants: {\n visible: {\n true: 'opacity-100',\n false: 'opacity-0',\n },\n },\n defaultVariants: {\n visible: false,\n },\n },\n);\n\nexport const bottomSheetPanelStyles = cva(\n [\n 'w-full max-w-md rounded-t-xl border border-b-0 border-[var(--border-default)]',\n 'bg-[var(--surface-secondary)] p-6 shadow-lg',\n 'transition-transform duration-200 ease-out',\n ],\n {\n variants: {\n visible: {\n true: 'translate-y-0',\n false: 'translate-y-full',\n },\n },\n defaultVariants: {\n visible: false,\n },\n },\n);\n\nexport const bottomSheetHandleStyles =\n 'mx-auto mb-4 h-1.5 w-10 rounded-full bg-[var(--border-strong)]';\n\nexport const bottomSheetTitleStyles = 'mb-4 text-lg font-semibold text-[var(--text-primary)]';\n\nexport const bottomSheetFooterStyles = 'mt-6 flex items-center justify-end gap-2';\n","import { forwardRef, useId, useRef, type HTMLAttributes, type ReactNode } from 'react';\nimport { RichText } from '@components';\nimport {\n useDelayedUnmount,\n useDismissableLayer,\n useFocusTrap,\n useMergedRef,\n useScrollLock,\n} from '@hooks';\nimport { cn } from '@utils';\nimport {\n bottomSheetFooterStyles,\n bottomSheetHandleStyles,\n bottomSheetOverlayStyles,\n bottomSheetPanelStyles,\n bottomSheetTitleStyles,\n} from './BottomSheet.styles';\n\nconst EXIT_DURATION_MS = 200;\n\nexport type BottomSheetProps = Omit<HTMLAttributes<HTMLDivElement>, 'title'> & {\n open: boolean;\n onClose: () => void;\n title?: ReactNode;\n footer?: ReactNode;\n closeOnBackdropClick?: boolean;\n};\n\nexport const BottomSheet = forwardRef<HTMLDivElement, BottomSheetProps>(\n (\n { open, onClose, title, footer, closeOnBackdropClick = true, className, children, ...props },\n ref,\n ) => {\n const panelRef = useRef<HTMLDivElement | null>(null);\n const setPanelRef = useMergedRef(ref, panelRef);\n const titleId = useId();\n const { mounted, visible } = useDelayedUnmount(open, EXIT_DURATION_MS);\n\n useDismissableLayer(open, onClose, panelRef, closeOnBackdropClick);\n // The panel mounts one render after `open` flips, so the trap starts once it exists.\n useFocusTrap(open && mounted, panelRef);\n useScrollLock(open);\n\n if (!mounted) {\n return null;\n }\n\n return (\n <div className={bottomSheetOverlayStyles({ visible })}>\n <div\n ref={setPanelRef}\n role=\"dialog\"\n aria-modal=\"true\"\n aria-labelledby={title ? titleId : undefined}\n tabIndex={-1}\n className={cn(bottomSheetPanelStyles({ visible }), className)}\n {...props}\n >\n <div aria-hidden className={bottomSheetHandleStyles} />\n {title && (\n <RichText as=\"h2\" id={titleId} variant=\"s1\" className={bottomSheetTitleStyles}>\n {title}\n </RichText>\n )}\n {children}\n {footer && <div className={bottomSheetFooterStyles}>{footer}</div>}\n </div>\n </div>\n );\n },\n);\n\nBottomSheet.displayName = 'BottomSheet';\n"]}
1
+ {"version":3,"sources":["../src/components/molecules/BottomSheet/BottomSheet.styles.ts","../src/components/molecules/BottomSheet/BottomSheet.tsx"],"names":[],"mappings":";;;;;;;;;;;AAEO,IAAM,wBAAA,GAA2B,GAAA;AAAA,EACtC;AAAA,IACE,8EAAA;AAAA,IACA;AAAA,GACF;AAAA,EACA;AAAA,IACE,QAAA,EAAU;AAAA,MACR,OAAA,EAAS;AAAA,QACP,IAAA,EAAM,aAAA;AAAA,QACN,KAAA,EAAO;AAAA;AACT,KACF;AAAA,IACA,eAAA,EAAiB;AAAA,MACf,OAAA,EAAS;AAAA;AACX;AAEJ,CAAA;AAEO,IAAM,sBAAA,GAAyB,GAAA;AAAA,EACpC;AAAA,IACE,+EAAA;AAAA,IACA,6CAAA;AAAA,IACA;AAAA,GACF;AAAA,EACA;AAAA,IACE,QAAA,EAAU;AAAA,MACR,OAAA,EAAS;AAAA,QACP,IAAA,EAAM,eAAA;AAAA,QACN,KAAA,EAAO;AAAA;AACT,KACF;AAAA,IACA,eAAA,EAAiB;AAAA,MACf,OAAA,EAAS;AAAA;AACX;AAEJ,CAAA;AAEO,IAAM,uBAAA,GACX,gEAAA;AAEK,IAAM,sBAAA,GAAyB,uDAAA;AAE/B,IAAM,uBAAA,GAA0B,0CAAA;AC1BvC,IAAM,gBAAA,GAAmB,GAAA;AAUlB,IAAM,WAAA,GAAc,UAAA;AAAA,EACzB,CACE,EAAE,IAAA,EAAM,OAAA,EAAS,KAAA,EAAO,MAAA,EAAQ,oBAAA,GAAuB,IAAA,EAAM,SAAA,EAAW,QAAA,EAAU,GAAG,KAAA,IACrF,GAAA,KACG;AACH,IAAA,MAAM,QAAA,GAAW,OAA8B,IAAI,CAAA;AACnD,IAAA,MAAM,WAAA,GAAc,YAAA,CAAa,GAAA,EAAK,QAAQ,CAAA;AAC9C,IAAA,MAAM,UAAU,KAAA,EAAM;AACtB,IAAA,MAAM,EAAE,OAAA,EAAS,OAAA,EAAQ,GAAI,iBAAA,CAAkB,MAAM,gBAAgB,CAAA;AAErE,IAAA,mBAAA,CAAoB,IAAA,EAAM,OAAA,EAAS,QAAA,EAAU,oBAAoB,CAAA;AAEjE,IAAA,YAAA,CAAa,IAAA,IAAQ,SAAS,QAAQ,CAAA;AACtC,IAAA,aAAA,CAAc,IAAI,CAAA;AAElB,IAAA,IAAI,CAAC,OAAA,EAAS;AACZ,MAAA,OAAO,IAAA;AAAA,IACT;AAEA,IAAA,2BACG,KAAA,EAAA,EAAI,SAAA,EAAW,yBAAyB,EAAE,OAAA,EAAS,CAAA,EAClD,QAAA,kBAAA,IAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,GAAA,EAAK,WAAA;AAAA,QACL,IAAA,EAAK,QAAA;AAAA,QACL,YAAA,EAAW,MAAA;AAAA,QACX,iBAAA,EAAiB,QAAQ,OAAA,GAAU,MAAA;AAAA,QACnC,QAAA,EAAU,EAAA;AAAA,QACV,WAAW,EAAA,CAAG,sBAAA,CAAuB,EAAE,OAAA,EAAS,GAAG,SAAS,CAAA;AAAA,QAC3D,GAAG,KAAA;AAAA,QAEJ,QAAA,EAAA;AAAA,0BAAA,GAAA,CAAC,KAAA,EAAA,EAAI,aAAA,EAAW,IAAA,EAAC,SAAA,EAAW,uBAAA,EAAyB,CAAA;AAAA,UACpD,KAAA,oBACC,GAAA,CAAC,QAAA,EAAA,EAAS,EAAA,EAAG,IAAA,EAAK,EAAA,EAAI,OAAA,EAAS,OAAA,EAAQ,IAAA,EAAK,SAAA,EAAW,sBAAA,EACpD,QAAA,EAAA,KAAA,EACH,CAAA;AAAA,UAED,QAAA;AAAA,UACA,MAAA,oBAAU,GAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAW,yBAA0B,QAAA,EAAA,MAAA,EAAO;AAAA;AAAA;AAAA,KAC9D,EACF,CAAA;AAAA,EAEJ;AACF;AAEA,WAAA,CAAY,WAAA,GAAc,aAAA","file":"chunk-NTXFFBL6.js","sourcesContent":["import { cva } from 'class-variance-authority';\n\nexport const bottomSheetOverlayStyles = cva(\n [\n 'fixed inset-0 z-50 flex items-end justify-center bg-[var(--surface-overlay)]',\n 'transition-opacity duration-200 ease-out',\n ],\n {\n variants: {\n visible: {\n true: 'opacity-100',\n false: 'opacity-0',\n },\n },\n defaultVariants: {\n visible: false,\n },\n },\n);\n\nexport const bottomSheetPanelStyles = cva(\n [\n 'w-full max-w-md rounded-t-xl border border-b-0 border-[var(--border-default)]',\n 'bg-[var(--surface-secondary)] p-6 shadow-lg',\n 'transition-transform duration-200 ease-out',\n ],\n {\n variants: {\n visible: {\n true: 'translate-y-0',\n false: 'translate-y-full',\n },\n },\n defaultVariants: {\n visible: false,\n },\n },\n);\n\nexport const bottomSheetHandleStyles =\n 'mx-auto mb-4 h-1.5 w-10 rounded-full bg-[var(--border-strong)]';\n\nexport const bottomSheetTitleStyles = 'mb-4 text-lg font-semibold text-[var(--text-primary)]';\n\nexport const bottomSheetFooterStyles = 'mt-6 flex items-center justify-end gap-2';\n","import { RichText } from '@components';\nimport {\n useDelayedUnmount,\n useDismissableLayer,\n useFocusTrap,\n useMergedRef,\n useScrollLock,\n} from '@hooks';\nimport { cn } from '@utils';\nimport { forwardRef, useId, useRef, type HTMLAttributes, type ReactNode } from 'react';\nimport {\n bottomSheetFooterStyles,\n bottomSheetHandleStyles,\n bottomSheetOverlayStyles,\n bottomSheetPanelStyles,\n bottomSheetTitleStyles,\n} from './BottomSheet.styles';\n\nconst EXIT_DURATION_MS = 200;\n\nexport type BottomSheetProps = Omit<HTMLAttributes<HTMLDivElement>, 'title'> & {\n open: boolean;\n onClose: () => void;\n title?: ReactNode;\n footer?: ReactNode;\n closeOnBackdropClick?: boolean;\n};\n\nexport const BottomSheet = forwardRef<HTMLDivElement, BottomSheetProps>(\n (\n { open, onClose, title, footer, closeOnBackdropClick = true, className, children, ...props },\n ref,\n ) => {\n const panelRef = useRef<HTMLDivElement | null>(null);\n const setPanelRef = useMergedRef(ref, panelRef);\n const titleId = useId();\n const { mounted, visible } = useDelayedUnmount(open, EXIT_DURATION_MS);\n\n useDismissableLayer(open, onClose, panelRef, closeOnBackdropClick);\n // The panel mounts one render after `open` flips, so the trap starts once it exists.\n useFocusTrap(open && mounted, panelRef);\n useScrollLock(open);\n\n if (!mounted) {\n return null;\n }\n\n return (\n <div className={bottomSheetOverlayStyles({ visible })}>\n <div\n ref={setPanelRef}\n role=\"dialog\"\n aria-modal=\"true\"\n aria-labelledby={title ? titleId : undefined}\n tabIndex={-1}\n className={cn(bottomSheetPanelStyles({ visible }), className)}\n {...props}\n >\n <div aria-hidden className={bottomSheetHandleStyles} />\n {title && (\n <RichText as=\"h2\" id={titleId} variant=\"s1\" className={bottomSheetTitleStyles}>\n {title}\n </RichText>\n )}\n {children}\n {footer && <div className={bottomSheetFooterStyles}>{footer}</div>}\n </div>\n </div>\n );\n },\n);\n\nBottomSheet.displayName = 'BottomSheet';\n"]}
@@ -68,5 +68,5 @@ var RichText = forwardRef(
68
68
  RichText.displayName = "RichText";
69
69
 
70
70
  export { RichText, elementByVariant };
71
- //# sourceMappingURL=chunk-P4CV2EPR.js.map
72
- //# sourceMappingURL=chunk-P4CV2EPR.js.map
71
+ //# sourceMappingURL=chunk-SPDOYFCU.js.map
72
+ //# sourceMappingURL=chunk-SPDOYFCU.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/atoms/RichText/RichText.styles.ts","../src/components/atoms/RichText/RichText.tsx"],"names":[],"mappings":";;;;;AAEO,IAAM,cAAA,GAAiB,IAAI,4BAAA,EAA8B;AAAA,EAC9D,QAAA,EAAU;AAAA,IACR,OAAA,EAAS;AAAA,MACP,EAAA,EAAI,wBAAA;AAAA,MACJ,EAAA,EAAI,wBAAA;AAAA,MACJ,EAAA,EAAI,uBAAA;AAAA,MACJ,EAAA,EAAI,sBAAA;AAAA,MACJ,EAAA,EAAI,wBAAA;AAAA,MACJ,EAAA,EAAI,0BAAA;AAAA,MACJ,EAAA,EAAI,wBAAA;AAAA,MACJ,EAAA,EAAI,0BAAA;AAAA,MACJ,EAAA,EAAI,wBAAA;AAAA,MACJ,EAAA,EAAI,wBAAA;AAAA,MACJ,EAAA,EAAI,yBAAA;AAAA,MACJ,EAAA,EAAI,2BAAA;AAAA,MACJ,EAAA,EAAI,yBAAA;AAAA,MACJ,EAAA,EAAI;AAAA,KACN;AAAA,IACA,MAAA,EAAQ;AAAA,MACN,KAAA,EAAO,YAAA;AAAA,MACP,MAAA,EAAQ,aAAA;AAAA,MACR,IAAA,EAAM;AAAA;AACR,GACF;AAAA,EACA,eAAA,EAAiB;AAAA,IACf,OAAA,EAAS,IAAA;AAAA,IACT,MAAA,EAAQ;AAAA;AAEZ,CAAC,CAAA;ACvBM,IAAM,gBAAA,GAAyD;AAAA,EACpE,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,MAAA;AAAA,EACJ,EAAA,EAAI,MAAA;AAAA,EACJ,EAAA,EAAI,MAAA;AAAA,EACJ,EAAA,EAAI,MAAA;AAAA,EACJ,EAAA,EAAI,GAAA;AAAA,EACJ,EAAA,EAAI,GAAA;AAAA,EACJ,EAAA,EAAI,GAAA;AAAA,EACJ,EAAA,EAAI;AACN;AAQO,IAAM,QAAA,GAAW,UAAA;AAAA,EACtB,CAAC,EAAE,EAAA,EAAI,OAAA,EAAS,MAAA,EAAQ,MAAM,SAAA,EAAW,GAAG,KAAA,EAAM,EAAG,GAAA,KAAQ;AAC3D,IAAA,MAAM,kBAAkB,OAAA,IAAW,IAAA;AACnC,IAAA,MAAM,OAAA,GAAU,EAAA,IAAM,gBAAA,CAAiB,eAAe,CAAA;AAEtD,IAAA,uBACE,GAAA;AAAA,MAAC,OAAA;AAAA,MAAA;AAAA,QACC,GAAA;AAAA,QACA,SAAA,EAAW,EAAA;AAAA,UACT,cAAA,CAAe,EAAE,OAAA,EAAS,eAAA,EAAiB,QAAQ,IAAA,GAAO,MAAA,GAAS,QAAQ,CAAA;AAAA,UAC3E;AAAA,SACF;AAAA,QACC,GAAG;AAAA;AAAA,KACN;AAAA,EAEJ;AACF;AAEA,QAAA,CAAS,WAAA,GAAc,UAAA","file":"chunk-P4CV2EPR.js","sourcesContent":["import { cva } from 'class-variance-authority';\n\nexport const richTextStyles = cva('text-[var(--text-primary)]', {\n variants: {\n variant: {\n h1: 'text-4xl leading-tight',\n h2: 'text-3xl leading-tight',\n h3: 'text-2xl leading-snug',\n h4: 'text-xl leading-snug',\n h5: 'text-lg leading-normal',\n h6: 'text-base leading-normal',\n s1: 'text-lg leading-normal',\n s2: 'text-base leading-normal',\n s3: 'text-sm leading-normal',\n s4: 'text-xs leading-normal',\n p1: 'text-lg leading-relaxed',\n p2: 'text-base leading-relaxed',\n p3: 'text-sm leading-relaxed',\n p4: 'text-xs leading-relaxed',\n },\n weight: {\n light: 'font-light',\n normal: 'font-normal',\n bold: 'font-bold',\n },\n },\n defaultVariants: {\n variant: 'p2',\n weight: 'normal',\n },\n});\n","import type { VariantProps } from 'class-variance-authority';\nimport { forwardRef, type ElementType, type HTMLAttributes } from 'react';\nimport { cn } from '@utils';\nimport { richTextStyles } from './RichText.styles';\n\nexport type RichTextVariant = NonNullable<VariantProps<typeof richTextStyles>['variant']>;\n\nexport const elementByVariant: Record<RichTextVariant, ElementType> = {\n h1: 'h1',\n h2: 'h2',\n h3: 'h3',\n h4: 'h4',\n h5: 'h5',\n h6: 'h6',\n s1: 'span',\n s2: 'span',\n s3: 'span',\n s4: 'span',\n p1: 'p',\n p2: 'p',\n p3: 'p',\n p4: 'p',\n};\n\nexport type RichTextProps = HTMLAttributes<HTMLElement> &\n VariantProps<typeof richTextStyles> & {\n as?: ElementType;\n bold?: boolean;\n };\n\nexport const RichText = forwardRef<HTMLElement, RichTextProps>(\n ({ as, variant, weight, bold, className, ...props }, ref) => {\n const resolvedVariant = variant ?? 'p2';\n const Element = as ?? elementByVariant[resolvedVariant];\n\n return (\n <Element\n ref={ref}\n className={cn(\n richTextStyles({ variant: resolvedVariant, weight: bold ? 'bold' : weight }),\n className,\n )}\n {...props}\n />\n );\n },\n);\n\nRichText.displayName = 'RichText';\n"]}
1
+ {"version":3,"sources":["../src/components/atoms/RichText/RichText.styles.ts","../src/components/atoms/RichText/RichText.tsx"],"names":[],"mappings":";;;;;AAEO,IAAM,cAAA,GAAiB,IAAI,4BAAA,EAA8B;AAAA,EAC9D,QAAA,EAAU;AAAA,IACR,OAAA,EAAS;AAAA,MACP,EAAA,EAAI,wBAAA;AAAA,MACJ,EAAA,EAAI,wBAAA;AAAA,MACJ,EAAA,EAAI,uBAAA;AAAA,MACJ,EAAA,EAAI,sBAAA;AAAA,MACJ,EAAA,EAAI,wBAAA;AAAA,MACJ,EAAA,EAAI,0BAAA;AAAA,MACJ,EAAA,EAAI,wBAAA;AAAA,MACJ,EAAA,EAAI,0BAAA;AAAA,MACJ,EAAA,EAAI,wBAAA;AAAA,MACJ,EAAA,EAAI,wBAAA;AAAA,MACJ,EAAA,EAAI,yBAAA;AAAA,MACJ,EAAA,EAAI,2BAAA;AAAA,MACJ,EAAA,EAAI,yBAAA;AAAA,MACJ,EAAA,EAAI;AAAA,KACN;AAAA,IACA,MAAA,EAAQ;AAAA,MACN,KAAA,EAAO,YAAA;AAAA,MACP,MAAA,EAAQ,aAAA;AAAA,MACR,IAAA,EAAM;AAAA;AACR,GACF;AAAA,EACA,eAAA,EAAiB;AAAA,IACf,OAAA,EAAS,IAAA;AAAA,IACT,MAAA,EAAQ;AAAA;AAEZ,CAAC,CAAA;ACvBM,IAAM,gBAAA,GAAyD;AAAA,EACpE,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,MAAA;AAAA,EACJ,EAAA,EAAI,MAAA;AAAA,EACJ,EAAA,EAAI,MAAA;AAAA,EACJ,EAAA,EAAI,MAAA;AAAA,EACJ,EAAA,EAAI,GAAA;AAAA,EACJ,EAAA,EAAI,GAAA;AAAA,EACJ,EAAA,EAAI,GAAA;AAAA,EACJ,EAAA,EAAI;AACN;AAQO,IAAM,QAAA,GAAW,UAAA;AAAA,EACtB,CAAC,EAAE,EAAA,EAAI,OAAA,EAAS,MAAA,EAAQ,MAAM,SAAA,EAAW,GAAG,KAAA,EAAM,EAAG,GAAA,KAAQ;AAC3D,IAAA,MAAM,kBAAkB,OAAA,IAAW,IAAA;AACnC,IAAA,MAAM,OAAA,GAAU,EAAA,IAAM,gBAAA,CAAiB,eAAe,CAAA;AAEtD,IAAA,uBACE,GAAA;AAAA,MAAC,OAAA;AAAA,MAAA;AAAA,QACC,GAAA;AAAA,QACA,SAAA,EAAW,EAAA;AAAA,UACT,cAAA,CAAe,EAAE,OAAA,EAAS,eAAA,EAAiB,QAAQ,IAAA,GAAO,MAAA,GAAS,QAAQ,CAAA;AAAA,UAC3E;AAAA,SACF;AAAA,QACC,GAAG;AAAA;AAAA,KACN;AAAA,EAEJ;AACF;AAEA,QAAA,CAAS,WAAA,GAAc,UAAA","file":"chunk-SPDOYFCU.js","sourcesContent":["import { cva } from 'class-variance-authority';\n\nexport const richTextStyles = cva('text-[var(--text-primary)]', {\n variants: {\n variant: {\n h1: 'text-4xl leading-tight',\n h2: 'text-3xl leading-tight',\n h3: 'text-2xl leading-snug',\n h4: 'text-xl leading-snug',\n h5: 'text-lg leading-normal',\n h6: 'text-base leading-normal',\n s1: 'text-lg leading-normal',\n s2: 'text-base leading-normal',\n s3: 'text-sm leading-normal',\n s4: 'text-xs leading-normal',\n p1: 'text-lg leading-relaxed',\n p2: 'text-base leading-relaxed',\n p3: 'text-sm leading-relaxed',\n p4: 'text-xs leading-relaxed',\n },\n weight: {\n light: 'font-light',\n normal: 'font-normal',\n bold: 'font-bold',\n },\n },\n defaultVariants: {\n variant: 'p2',\n weight: 'normal',\n },\n});\n","import { cn } from '@utils';\nimport type { VariantProps } from 'class-variance-authority';\nimport { forwardRef, type ElementType, type HTMLAttributes } from 'react';\nimport { richTextStyles } from './RichText.styles';\n\nexport type RichTextVariant = NonNullable<VariantProps<typeof richTextStyles>['variant']>;\n\nexport const elementByVariant: Record<RichTextVariant, ElementType> = {\n h1: 'h1',\n h2: 'h2',\n h3: 'h3',\n h4: 'h4',\n h5: 'h5',\n h6: 'h6',\n s1: 'span',\n s2: 'span',\n s3: 'span',\n s4: 'span',\n p1: 'p',\n p2: 'p',\n p3: 'p',\n p4: 'p',\n};\n\nexport type RichTextProps = HTMLAttributes<HTMLElement> &\n VariantProps<typeof richTextStyles> & {\n as?: ElementType;\n bold?: boolean;\n };\n\nexport const RichText = forwardRef<HTMLElement, RichTextProps>(\n ({ as, variant, weight, bold, className, ...props }, ref) => {\n const resolvedVariant = variant ?? 'p2';\n const Element = as ?? elementByVariant[resolvedVariant];\n\n return (\n <Element\n ref={ref}\n className={cn(\n richTextStyles({ variant: resolvedVariant, weight: bold ? 'bold' : weight }),\n className,\n )}\n {...props}\n />\n );\n },\n);\n\nRichText.displayName = 'RichText';\n"]}
@@ -1,10 +1,10 @@
1
1
  import { useFocusTrap } from './chunk-QT62VC36.js';
2
2
  import { useScrollLock } from './chunk-53YMHM24.js';
3
- import { useDelayedUnmount } from './chunk-BNEEI7S5.js';
4
3
  import { useDismissableLayer } from './chunk-JCJP427C.js';
4
+ import { useDelayedUnmount } from './chunk-BNEEI7S5.js';
5
5
  import { Button } from './chunk-KL6I2JFC.js';
6
6
  import { useMergedRef } from './chunk-P4Z7HH66.js';
7
- import { RichText } from './chunk-P4CV2EPR.js';
7
+ import { RichText } from './chunk-SPDOYFCU.js';
8
8
  import { cn } from './chunk-6LLGTBM6.js';
9
9
  import { forwardRef, useRef, useId } from 'react';
10
10
  import { cva } from 'class-variance-authority';
@@ -138,5 +138,5 @@ var Drawer = forwardRef(
138
138
  Drawer.displayName = "Drawer";
139
139
 
140
140
  export { Drawer };
141
- //# sourceMappingURL=chunk-VGLFR5SB.js.map
142
- //# sourceMappingURL=chunk-VGLFR5SB.js.map
141
+ //# sourceMappingURL=chunk-TO3FF6FR.js.map
142
+ //# sourceMappingURL=chunk-TO3FF6FR.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/molecules/Drawer/Drawer.styles.ts","../src/components/molecules/Drawer/Drawer.tsx"],"names":[],"mappings":"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","file":"chunk-VGLFR5SB.js","sourcesContent":["import { cva } from 'class-variance-authority';\n\nexport const drawerOverlayStyles = cva(\n 'absolute inset-0 bg-[var(--surface-overlay)] transition-opacity duration-200 ease-out',\n {\n variants: {\n visible: {\n true: 'opacity-100',\n false: 'opacity-0',\n },\n },\n defaultVariants: {\n visible: false,\n },\n },\n);\n\nexport const drawerPanelStyles = cva(\n [\n 'absolute inset-y-0 flex w-full max-w-80 flex-col gap-6 overflow-y-auto',\n 'border-[var(--border-default)] bg-[var(--surface-primary)] p-6 shadow-xl',\n 'transition-transform duration-200 ease-out focus:outline-none',\n ],\n {\n variants: {\n side: {\n left: 'left-0 border-r',\n right: 'right-0 border-l',\n },\n visible: {\n true: 'translate-x-0',\n false: '',\n },\n },\n compoundVariants: [\n { side: 'left', visible: false, className: '-translate-x-full' },\n { side: 'right', visible: false, className: 'translate-x-full' },\n ],\n defaultVariants: {\n side: 'right',\n visible: false,\n },\n },\n);\n\nexport const drawerHeaderStyles = 'flex items-center justify-between gap-4';\n\nexport const drawerTitleStyles = 'text-lg font-semibold text-[var(--text-primary)]';\n\nexport const drawerFooterStyles = 'mt-auto flex flex-col gap-4';\n","import { Button, RichText } from '@components';\nimport {\n useDelayedUnmount,\n useDismissableLayer,\n useFocusTrap,\n useMergedRef,\n useScrollLock,\n} from '@hooks';\nimport { cn } from '@utils';\nimport type { VariantProps } from 'class-variance-authority';\nimport { forwardRef, useId, useRef, type HTMLAttributes, type ReactNode } from 'react';\nimport {\n drawerFooterStyles,\n drawerHeaderStyles,\n drawerOverlayStyles,\n drawerPanelStyles,\n drawerTitleStyles,\n} from './Drawer.styles';\n\nconst EXIT_DURATION_MS = 200;\n\nexport type DrawerProps = Omit<HTMLAttributes<HTMLDivElement>, 'title'> &\n Pick<VariantProps<typeof drawerPanelStyles>, 'side'> & {\n open: boolean;\n onClose: () => void;\n title?: ReactNode;\n /** Extra classes for the title (e.g. a display font). */\n titleClassName?: string;\n /** Accessible name of the close button; the button is only rendered when this is set. */\n closeLabel?: string;\n /** Pinned to the bottom of the panel (preferences, actions). */\n footer?: ReactNode;\n closeOnBackdropClick?: boolean;\n };\n\n/**\n * A side panel (navigation menus, filters, settings) that slides in from the left or right.\n * Modal dialog semantics: focus moves inside and is trapped, Escape and backdrop clicks close it,\n * the page behind doesn't scroll, and focus returns to the trigger when it closes.\n */\nexport const Drawer = forwardRef<HTMLDivElement, DrawerProps>(\n (\n {\n open,\n onClose,\n side,\n title,\n titleClassName,\n closeLabel,\n footer,\n closeOnBackdropClick = true,\n className,\n children,\n ...props\n },\n ref,\n ) => {\n const panelRef = useRef<HTMLDivElement | null>(null);\n const setPanelRef = useMergedRef(ref, panelRef);\n const titleId = useId();\n const { mounted, visible } = useDelayedUnmount(open, EXIT_DURATION_MS);\n\n useDismissableLayer(open, onClose, panelRef, closeOnBackdropClick);\n // The panel mounts one render after `open` flips, so the trap starts once it exists.\n useFocusTrap(open && mounted, panelRef);\n useScrollLock(open);\n\n if (!mounted) {\n return null;\n }\n\n return (\n <div className=\"fixed inset-0 z-50\">\n <div aria-hidden=\"true\" className={drawerOverlayStyles({ visible })} />\n <div\n ref={setPanelRef}\n role=\"dialog\"\n aria-modal=\"true\"\n aria-labelledby={title ? titleId : undefined}\n tabIndex={-1}\n className={cn(drawerPanelStyles({ side, visible }), className)}\n {...props}\n >\n {(title || closeLabel) && (\n <div className={drawerHeaderStyles}>\n {title && (\n <RichText\n as=\"h2\"\n id={titleId}\n variant=\"s1\"\n className={cn(drawerTitleStyles, titleClassName)}\n >\n {title}\n </RichText>\n )}\n {closeLabel && (\n <Button\n variant=\"ghost\"\n size=\"icon\"\n aria-label={closeLabel}\n onClick={onClose}\n className=\"ml-auto size-11\"\n >\n <svg\n aria-hidden\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={2}\n strokeLinecap=\"round\"\n className=\"size-6\"\n >\n <path d=\"M6 6l12 12M18 6L6 18\" />\n </svg>\n </Button>\n )}\n </div>\n )}\n {children}\n {footer && <div className={drawerFooterStyles}>{footer}</div>}\n </div>\n </div>\n );\n },\n);\n\nDrawer.displayName = 'Drawer';\n"]}
1
+ {"version":3,"sources":["../src/components/molecules/Drawer/Drawer.styles.ts","../src/components/molecules/Drawer/Drawer.tsx"],"names":[],"mappings":";;;;;;;;;;;;AAEO,IAAM,mBAAA,GAAsB,GAAA;AAAA,EACjC,uFAAA;AAAA,EACA;AAAA,IACE,QAAA,EAAU;AAAA,MACR,OAAA,EAAS;AAAA,QACP,IAAA,EAAM,aAAA;AAAA,QACN,KAAA,EAAO;AAAA;AACT,KACF;AAAA,IACA,eAAA,EAAiB;AAAA,MACf,OAAA,EAAS;AAAA;AACX;AAEJ,CAAA;AAEO,IAAM,iBAAA,GAAoB,GAAA;AAAA,EAC/B;AAAA,IACE,wEAAA;AAAA,IACA,0EAAA;AAAA,IACA;AAAA,GACF;AAAA,EACA;AAAA,IACE,QAAA,EAAU;AAAA,MACR,IAAA,EAAM;AAAA,QACJ,IAAA,EAAM,iBAAA;AAAA,QACN,KAAA,EAAO;AAAA,OACT;AAAA,MACA,OAAA,EAAS;AAAA,QACP,IAAA,EAAM,eAAA;AAAA,QACN,KAAA,EAAO;AAAA;AACT,KACF;AAAA,IACA,gBAAA,EAAkB;AAAA,MAChB,EAAE,IAAA,EAAM,MAAA,EAAQ,OAAA,EAAS,KAAA,EAAO,WAAW,mBAAA,EAAoB;AAAA,MAC/D,EAAE,IAAA,EAAM,OAAA,EAAS,OAAA,EAAS,KAAA,EAAO,WAAW,kBAAA;AAAmB,KACjE;AAAA,IACA,eAAA,EAAiB;AAAA,MACf,IAAA,EAAM,OAAA;AAAA,MACN,OAAA,EAAS;AAAA;AACX;AAEJ,CAAA;AAEO,IAAM,kBAAA,GAAqB,yCAAA;AAE3B,IAAM,iBAAA,GAAoB,kDAAA;AAE1B,IAAM,kBAAA,GAAqB,6BAAA;AC9BlC,IAAM,gBAAA,GAAmB,GAAA;AAqBlB,IAAM,MAAA,GAAS,UAAA;AAAA,EACpB,CACE;AAAA,IACE,IAAA;AAAA,IACA,OAAA;AAAA,IACA,IAAA;AAAA,IACA,KAAA;AAAA,IACA,cAAA;AAAA,IACA,UAAA;AAAA,IACA,MAAA;AAAA,IACA,oBAAA,GAAuB,IAAA;AAAA,IACvB,SAAA;AAAA,IACA,QAAA;AAAA,IACA,GAAG;AAAA,KAEL,GAAA,KACG;AACH,IAAA,MAAM,QAAA,GAAW,OAA8B,IAAI,CAAA;AACnD,IAAA,MAAM,WAAA,GAAc,YAAA,CAAa,GAAA,EAAK,QAAQ,CAAA;AAC9C,IAAA,MAAM,UAAU,KAAA,EAAM;AACtB,IAAA,MAAM,EAAE,OAAA,EAAS,OAAA,EAAQ,GAAI,iBAAA,CAAkB,MAAM,gBAAgB,CAAA;AAErE,IAAA,mBAAA,CAAoB,IAAA,EAAM,OAAA,EAAS,QAAA,EAAU,oBAAoB,CAAA;AAEjE,IAAA,YAAA,CAAa,IAAA,IAAQ,SAAS,QAAQ,CAAA;AACtC,IAAA,aAAA,CAAc,IAAI,CAAA;AAElB,IAAA,IAAI,CAAC,OAAA,EAAS;AACZ,MAAA,OAAO,IAAA;AAAA,IACT;AAEA,IAAA,uBACE,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,oBAAA,EACb,QAAA,EAAA;AAAA,sBAAA,GAAA,CAAC,KAAA,EAAA,EAAI,eAAY,MAAA,EAAO,SAAA,EAAW,oBAAoB,EAAE,OAAA,EAAS,CAAA,EAAG,CAAA;AAAA,sBACrE,IAAA;AAAA,QAAC,KAAA;AAAA,QAAA;AAAA,UACC,GAAA,EAAK,WAAA;AAAA,UACL,IAAA,EAAK,QAAA;AAAA,UACL,YAAA,EAAW,MAAA;AAAA,UACX,iBAAA,EAAiB,QAAQ,OAAA,GAAU,MAAA;AAAA,UACnC,QAAA,EAAU,EAAA;AAAA,UACV,SAAA,EAAW,GAAG,iBAAA,CAAkB,EAAE,MAAM,OAAA,EAAS,GAAG,SAAS,CAAA;AAAA,UAC5D,GAAG,KAAA;AAAA,UAEF,QAAA,EAAA;AAAA,YAAA,CAAA,KAAA,IAAS,UAAA,qBACT,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAW,kBAAA,EACb,QAAA,EAAA;AAAA,cAAA,KAAA,oBACC,GAAA;AAAA,gBAAC,QAAA;AAAA,gBAAA;AAAA,kBACC,EAAA,EAAG,IAAA;AAAA,kBACH,EAAA,EAAI,OAAA;AAAA,kBACJ,OAAA,EAAQ,IAAA;AAAA,kBACR,SAAA,EAAW,EAAA,CAAG,iBAAA,EAAmB,cAAc,CAAA;AAAA,kBAE9C,QAAA,EAAA;AAAA;AAAA,eACH;AAAA,cAED,UAAA,oBACC,GAAA;AAAA,gBAAC,MAAA;AAAA,gBAAA;AAAA,kBACC,OAAA,EAAQ,OAAA;AAAA,kBACR,IAAA,EAAK,MAAA;AAAA,kBACL,YAAA,EAAY,UAAA;AAAA,kBACZ,OAAA,EAAS,OAAA;AAAA,kBACT,SAAA,EAAU,iBAAA;AAAA,kBAEV,QAAA,kBAAA,GAAA;AAAA,oBAAC,KAAA;AAAA,oBAAA;AAAA,sBACC,aAAA,EAAW,IAAA;AAAA,sBACX,OAAA,EAAQ,WAAA;AAAA,sBACR,IAAA,EAAK,MAAA;AAAA,sBACL,MAAA,EAAO,cAAA;AAAA,sBACP,WAAA,EAAa,CAAA;AAAA,sBACb,aAAA,EAAc,OAAA;AAAA,sBACd,SAAA,EAAU,QAAA;AAAA,sBAEV,QAAA,kBAAA,GAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,sBAAA,EAAuB;AAAA;AAAA;AACjC;AAAA;AACF,aAAA,EAEJ,CAAA;AAAA,YAED,QAAA;AAAA,YACA,MAAA,oBAAU,GAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAW,oBAAqB,QAAA,EAAA,MAAA,EAAO;AAAA;AAAA;AAAA;AACzD,KAAA,EACF,CAAA;AAAA,EAEJ;AACF;AAEA,MAAA,CAAO,WAAA,GAAc,QAAA","file":"chunk-TO3FF6FR.js","sourcesContent":["import { cva } from 'class-variance-authority';\n\nexport const drawerOverlayStyles = cva(\n 'absolute inset-0 bg-[var(--surface-overlay)] transition-opacity duration-200 ease-out',\n {\n variants: {\n visible: {\n true: 'opacity-100',\n false: 'opacity-0',\n },\n },\n defaultVariants: {\n visible: false,\n },\n },\n);\n\nexport const drawerPanelStyles = cva(\n [\n 'absolute inset-y-0 flex w-full max-w-80 flex-col gap-6 overflow-y-auto',\n 'border-[var(--border-default)] bg-[var(--surface-primary)] p-6 shadow-xl',\n 'transition-transform duration-200 ease-out focus:outline-none',\n ],\n {\n variants: {\n side: {\n left: 'left-0 border-r',\n right: 'right-0 border-l',\n },\n visible: {\n true: 'translate-x-0',\n false: '',\n },\n },\n compoundVariants: [\n { side: 'left', visible: false, className: '-translate-x-full' },\n { side: 'right', visible: false, className: 'translate-x-full' },\n ],\n defaultVariants: {\n side: 'right',\n visible: false,\n },\n },\n);\n\nexport const drawerHeaderStyles = 'flex items-center justify-between gap-4';\n\nexport const drawerTitleStyles = 'text-lg font-semibold text-[var(--text-primary)]';\n\nexport const drawerFooterStyles = 'mt-auto flex flex-col gap-4';\n","import { Button, RichText } from '@components';\nimport {\n useDelayedUnmount,\n useDismissableLayer,\n useFocusTrap,\n useMergedRef,\n useScrollLock,\n} from '@hooks';\nimport { cn } from '@utils';\nimport type { VariantProps } from 'class-variance-authority';\nimport { forwardRef, useId, useRef, type HTMLAttributes, type ReactNode } from 'react';\nimport {\n drawerFooterStyles,\n drawerHeaderStyles,\n drawerOverlayStyles,\n drawerPanelStyles,\n drawerTitleStyles,\n} from './Drawer.styles';\n\nconst EXIT_DURATION_MS = 200;\n\nexport type DrawerProps = Omit<HTMLAttributes<HTMLDivElement>, 'title'> &\n Pick<VariantProps<typeof drawerPanelStyles>, 'side'> & {\n open: boolean;\n onClose: () => void;\n title?: ReactNode;\n /** Extra classes for the title (e.g. a display font). */\n titleClassName?: string;\n /** Accessible name of the close button; the button is only rendered when this is set. */\n closeLabel?: string;\n /** Pinned to the bottom of the panel (preferences, actions). */\n footer?: ReactNode;\n closeOnBackdropClick?: boolean;\n };\n\n/**\n * A side panel (navigation menus, filters, settings) that slides in from the left or right.\n * Modal dialog semantics: focus moves inside and is trapped, Escape and backdrop clicks close it,\n * the page behind doesn't scroll, and focus returns to the trigger when it closes.\n */\nexport const Drawer = forwardRef<HTMLDivElement, DrawerProps>(\n (\n {\n open,\n onClose,\n side,\n title,\n titleClassName,\n closeLabel,\n footer,\n closeOnBackdropClick = true,\n className,\n children,\n ...props\n },\n ref,\n ) => {\n const panelRef = useRef<HTMLDivElement | null>(null);\n const setPanelRef = useMergedRef(ref, panelRef);\n const titleId = useId();\n const { mounted, visible } = useDelayedUnmount(open, EXIT_DURATION_MS);\n\n useDismissableLayer(open, onClose, panelRef, closeOnBackdropClick);\n // The panel mounts one render after `open` flips, so the trap starts once it exists.\n useFocusTrap(open && mounted, panelRef);\n useScrollLock(open);\n\n if (!mounted) {\n return null;\n }\n\n return (\n <div className=\"fixed inset-0 z-50\">\n <div aria-hidden=\"true\" className={drawerOverlayStyles({ visible })} />\n <div\n ref={setPanelRef}\n role=\"dialog\"\n aria-modal=\"true\"\n aria-labelledby={title ? titleId : undefined}\n tabIndex={-1}\n className={cn(drawerPanelStyles({ side, visible }), className)}\n {...props}\n >\n {(title || closeLabel) && (\n <div className={drawerHeaderStyles}>\n {title && (\n <RichText\n as=\"h2\"\n id={titleId}\n variant=\"s1\"\n className={cn(drawerTitleStyles, titleClassName)}\n >\n {title}\n </RichText>\n )}\n {closeLabel && (\n <Button\n variant=\"ghost\"\n size=\"icon\"\n aria-label={closeLabel}\n onClick={onClose}\n className=\"ml-auto size-11\"\n >\n <svg\n aria-hidden\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={2}\n strokeLinecap=\"round\"\n className=\"size-6\"\n >\n <path d=\"M6 6l12 12M18 6L6 18\" />\n </svg>\n </Button>\n )}\n </div>\n )}\n {children}\n {footer && <div className={drawerFooterStyles}>{footer}</div>}\n </div>\n </div>\n );\n },\n);\n\nDrawer.displayName = 'Drawer';\n"]}
@@ -1,4 +1,5 @@
1
- import { RichText } from './chunk-P4CV2EPR.js';
1
+ import { Image } from './chunk-KAU7S3D4.js';
2
+ import { RichText } from './chunk-SPDOYFCU.js';
2
3
  import { cn } from './chunk-6LLGTBM6.js';
3
4
  import { forwardRef } from 'react';
4
5
  import { jsx, jsxs } from 'react/jsx-runtime';
@@ -10,15 +11,34 @@ var timelineNodeStyles = "absolute -left-6 top-1.5 h-2.5 w-2.5 -translate-x-1/2
10
11
  var timelineTitleStyles = "text-base font-bold text-[var(--text-primary)]";
11
12
  var timelineDescriptionListStyles = "mt-1 flex flex-col gap-1";
12
13
  var timelineDescriptionStyles = "text-sm text-[var(--text-secondary)]";
14
+ var timelineMediaStyles = "mt-3 w-full max-w-md overflow-hidden rounded-xl border border-[var(--border-default)] bg-[var(--surface-secondary)]";
15
+ var timelineImageStyles = "aspect-[4/3] w-full";
13
16
  var Timeline = forwardRef(
14
17
  ({ items, className, ...props }, ref) => /* @__PURE__ */ jsx("ul", { ref, className: cn(timelineStyles, className), ...props, children: items.map((item, index) => /* @__PURE__ */ jsxs("li", { className: timelineItemStyles, children: [
15
18
  /* @__PURE__ */ jsx("span", { className: timelineNodeStyles }),
16
19
  /* @__PURE__ */ jsx(RichText, { as: "p", variant: "p2", className: timelineTitleStyles, children: item.title }),
17
- /* @__PURE__ */ jsx("div", { className: timelineDescriptionListStyles, children: item.description.map((description, descriptionIndex) => /* @__PURE__ */ jsx(RichText, { as: "p", variant: "p3", className: timelineDescriptionStyles, children: description }, descriptionIndex)) })
20
+ /* @__PURE__ */ jsx("div", { className: timelineDescriptionListStyles, children: item.description.map((description, descriptionIndex) => /* @__PURE__ */ jsx(
21
+ RichText,
22
+ {
23
+ as: "p",
24
+ variant: "p3",
25
+ className: timelineDescriptionStyles,
26
+ children: description
27
+ },
28
+ descriptionIndex
29
+ )) }),
30
+ (item.media ?? item.image) && /* @__PURE__ */ jsx("div", { className: timelineMediaStyles, children: item.media ?? (item.image && /* @__PURE__ */ jsx(
31
+ Image,
32
+ {
33
+ src: item.image.src,
34
+ alt: item.image.alt,
35
+ className: timelineImageStyles
36
+ }
37
+ )) })
18
38
  ] }, item.id ?? index)) })
19
39
  );
20
40
  Timeline.displayName = "Timeline";
21
41
 
22
42
  export { Timeline };
23
- //# sourceMappingURL=chunk-UL33H4AD.js.map
24
- //# sourceMappingURL=chunk-UL33H4AD.js.map
43
+ //# sourceMappingURL=chunk-TRLFK626.js.map
44
+ //# sourceMappingURL=chunk-TRLFK626.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/molecules/Timeline/Timeline.styles.ts","../src/components/molecules/Timeline/Timeline.tsx"],"names":[],"mappings":";;;;;;;AAAO,IAAM,cAAA,GACX,0KAAA;AAEK,IAAM,kBAAA,GAAqB,UAAA;AAE3B,IAAM,kBAAA,GACX,+FAAA;AAEK,IAAM,mBAAA,GAAsB,gDAAA;AAE5B,IAAM,6BAAA,GAAgC,0BAAA;AAEtC,IAAM,yBAAA,GAA4B,sCAAA;AAGlC,IAAM,mBAAA,GACX,qHAAA;AAEK,IAAM,mBAAA,GAAsB,qBAAA;ACU5B,IAAM,QAAA,GAAW,UAAA;AAAA,EACtB,CAAC,EAAE,KAAA,EAAO,SAAA,EAAW,GAAG,KAAA,EAAM,EAAG,GAAA,qBAC/B,GAAA,CAAC,IAAA,EAAA,EAAG,GAAA,EAAU,SAAA,EAAW,EAAA,CAAG,gBAAgB,SAAS,CAAA,EAAI,GAAG,KAAA,EACzD,QAAA,EAAA,KAAA,CAAM,GAAA,CAAI,CAAC,IAAA,EAAM,KAAA,qBAChB,IAAA,CAAC,IAAA,EAAA,EAA0B,SAAA,EAAW,kBAAA,EACpC,QAAA,EAAA;AAAA,oBAAA,GAAA,CAAC,MAAA,EAAA,EAAK,WAAW,kBAAA,EAAoB,CAAA;AAAA,oBACrC,GAAA,CAAC,YAAS,EAAA,EAAG,GAAA,EAAI,SAAQ,IAAA,EAAK,SAAA,EAAW,mBAAA,EACtC,QAAA,EAAA,IAAA,CAAK,KAAA,EACR,CAAA;AAAA,oBACA,GAAA,CAAC,SAAI,SAAA,EAAW,6BAAA,EACb,eAAK,WAAA,CAAY,GAAA,CAAI,CAAC,WAAA,EAAa,gBAAA,qBAClC,GAAA;AAAA,MAAC,QAAA;AAAA,MAAA;AAAA,QAEC,EAAA,EAAG,GAAA;AAAA,QACH,OAAA,EAAQ,IAAA;AAAA,QACR,SAAA,EAAW,yBAAA;AAAA,QAEV,QAAA,EAAA;AAAA,OAAA;AAAA,MALI;AAAA,KAOR,CAAA,EACH,CAAA;AAAA,IAAA,CACE,IAAA,CAAK,KAAA,IAAS,IAAA,CAAK,KAAA,qBACnB,GAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAW,mBAAA,EACb,QAAA,EAAA,IAAA,CAAK,KAAA,KACH,IAAA,CAAK,KAAA,oBACJ,GAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,GAAA,EAAK,KAAK,KAAA,CAAM,GAAA;AAAA,QAChB,GAAA,EAAK,KAAK,KAAA,CAAM,GAAA;AAAA,QAChB,SAAA,EAAW;AAAA;AAAA,KACb,CAAA,EAEN;AAAA,GAAA,EAAA,EA3BK,IAAA,CAAK,EAAA,IAAM,KA6BpB,CACD,CAAA,EACH;AAEJ;AAEA,QAAA,CAAS,WAAA,GAAc,UAAA","file":"chunk-TRLFK626.js","sourcesContent":["export const timelineStyles =\n \"relative flex flex-col gap-8 pl-6 before:absolute before:bottom-0 before:left-0 before:top-1.5 before:border-l before:border-[var(--border-default)] before:content-['']\";\n\nexport const timelineItemStyles = 'relative';\n\nexport const timelineNodeStyles =\n 'absolute -left-6 top-1.5 h-2.5 w-2.5 -translate-x-1/2 rounded-full bg-[var(--btn-primary-bg)]';\n\nexport const timelineTitleStyles = 'text-base font-bold text-[var(--text-primary)]';\n\nexport const timelineDescriptionListStyles = 'mt-1 flex flex-col gap-1';\n\nexport const timelineDescriptionStyles = 'text-sm text-[var(--text-secondary)]';\n\n/** Photo of a step (e.g. a recipe step): under the text, rounded, 4:3. */\nexport const timelineMediaStyles =\n 'mt-3 w-full max-w-md overflow-hidden rounded-xl border border-[var(--border-default)] bg-[var(--surface-secondary)]';\n\nexport const timelineImageStyles = 'aspect-[4/3] w-full';\n","import { Image, RichText } from '@components';\nimport { cn } from '@utils';\nimport { forwardRef, type HTMLAttributes, type ReactNode } from 'react';\nimport {\n timelineDescriptionListStyles,\n timelineDescriptionStyles,\n timelineImageStyles,\n timelineItemStyles,\n timelineMediaStyles,\n timelineNodeStyles,\n timelineStyles,\n timelineTitleStyles,\n} from './Timeline.styles';\n\nexport interface TimelineItem {\n id?: string;\n title: ReactNode;\n description: ReactNode[];\n /** Optional photo of the entry, shown under its text (lazy loaded). */\n image?: { src: string; alt: string };\n /** Your own media element instead of `image` (e.g. an optimized `<picture>`). */\n media?: ReactNode;\n}\n\nexport type TimelineProps = HTMLAttributes<HTMLUListElement> & {\n items: TimelineItem[];\n};\n\nexport const Timeline = forwardRef<HTMLUListElement, TimelineProps>(\n ({ items, className, ...props }, ref) => (\n <ul ref={ref} className={cn(timelineStyles, className)} {...props}>\n {items.map((item, index) => (\n <li key={item.id ?? index} className={timelineItemStyles}>\n <span className={timelineNodeStyles} />\n <RichText as=\"p\" variant=\"p2\" className={timelineTitleStyles}>\n {item.title}\n </RichText>\n <div className={timelineDescriptionListStyles}>\n {item.description.map((description, descriptionIndex) => (\n <RichText\n key={descriptionIndex}\n as=\"p\"\n variant=\"p3\"\n className={timelineDescriptionStyles}\n >\n {description}\n </RichText>\n ))}\n </div>\n {(item.media ?? item.image) && (\n <div className={timelineMediaStyles}>\n {item.media ??\n (item.image && (\n <Image\n src={item.image.src}\n alt={item.image.alt}\n className={timelineImageStyles}\n />\n ))}\n </div>\n )}\n </li>\n ))}\n </ul>\n ),\n);\n\nTimeline.displayName = 'Timeline';\n"]}
@@ -1,5 +1,5 @@
1
1
  import { inputLabelStyles, inputErrorStyles, inputHintStyles } from './chunk-FFKHEBQ7.js';
2
- import { RichText } from './chunk-P4CV2EPR.js';
2
+ import { RichText } from './chunk-SPDOYFCU.js';
3
3
  import { cn } from './chunk-6LLGTBM6.js';
4
4
  import { forwardRef, useId } from 'react';
5
5
  import { cva } from 'class-variance-authority';
@@ -75,5 +75,5 @@ var Textarea = forwardRef(
75
75
  Textarea.displayName = "Textarea";
76
76
 
77
77
  export { Textarea };
78
- //# sourceMappingURL=chunk-3YRDRHO3.js.map
79
- //# sourceMappingURL=chunk-3YRDRHO3.js.map
78
+ //# sourceMappingURL=chunk-UUW7L2AV.js.map
79
+ //# sourceMappingURL=chunk-UUW7L2AV.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/atoms/Textarea/Textarea.styles.ts","../src/components/atoms/Textarea/Textarea.tsx"],"names":[],"mappings":";;;;;;;AAEO,IAAM,cAAA,GAAiB,GAAA;AAAA,EAC5B;AAAA,IACE,2CAAA;AAAA,IACA,+CAAA;AAAA,IACA,qCAAA;AAAA,IACA,6CAAA;AAAA,IACA,4CAAA;AAAA,IACA,sHAAA;AAAA,IACA,kDAAA;AAAA,IACA;AAAA,GACF;AAAA,EACA;AAAA,IACE,QAAA,EAAU;AAAA,MACR,KAAA,EAAO;AAAA,QACL,OAAA,EAAS,EAAA;AAAA,QACT,KAAA,EAAO;AAAA,OACT;AAAA,MACA,SAAA,EAAW;AAAA,QACT,EAAA,EAAI,SAAA;AAAA,QACJ,EAAA,EAAI,SAAA;AAAA,QACJ,EAAA,EAAI;AAAA,OACN;AAAA,MACA,MAAA,EAAQ;AAAA,QACN,QAAA,EAAU,UAAA;AAAA,QACV,IAAA,EAAM;AAAA;AACR,KACF;AAAA,IACA,eAAA,EAAiB;AAAA,MACf,KAAA,EAAO,SAAA;AAAA,MACP,SAAA,EAAW,IAAA;AAAA,MACX,MAAA,EAAQ;AAAA;AACV;AAEJ,CAAA;AChBO,IAAM,QAAA,GAAW,UAAA;AAAA,EACtB,CAAC,EAAE,SAAA,EAAW,KAAA,EAAO,WAAW,MAAA,EAAQ,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,EAAA,EAAI,MAAA,EAAQ,GAAG,KAAA,IAAS,GAAA,KAAQ;AAC1F,IAAA,MAAM,cAAc,KAAA,EAAM;AAC1B,IAAA,MAAM,KAAK,MAAA,IAAU,WAAA;AACrB,IAAA,MAAM,aAAA,GAAgB,QAAQ,OAAA,GAAU,KAAA;AAExC,IAAA,uBACE,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,uBAAA,EACZ,QAAA,EAAA;AAAA,MAAA,KAAA,oBACC,GAAA,CAAC,OAAA,EAAA,EAAM,OAAA,EAAS,EAAA,EACd,QAAA,kBAAA,GAAA,CAAC,QAAA,EAAA,EAAS,EAAA,EAAG,MAAA,EAAO,OAAA,EAAQ,IAAA,EAAK,SAAA,EAAW,gBAAA,EACzC,iBACH,CAAA,EACF,CAAA;AAAA,sBAEF,GAAA;AAAA,QAAC,UAAA;AAAA,QAAA;AAAA,UACC,GAAA;AAAA,UACA,EAAA;AAAA,UACA,kBAAA,EAAkB,QAAQ,CAAA,EAAG,EAAE,WAAW,IAAA,GAAO,CAAA,EAAG,EAAE,CAAA,KAAA,CAAA,GAAU,MAAA;AAAA,UAChE,cAAA,EAAc,QAAQ,MAAA,GAAS,MAAA;AAAA,UAC/B,SAAA,EAAW,EAAA,CAAG,cAAA,CAAe,EAAE,KAAA,EAAO,eAAe,SAAA,EAAW,MAAA,EAAQ,CAAA,EAAG,SAAS,CAAA;AAAA,UACnF,GAAG;AAAA;AAAA,OACN;AAAA,MACC,KAAA,oBACC,GAAA;AAAA,QAAC,QAAA;AAAA,QAAA;AAAA,UACC,EAAA,EAAG,GAAA;AAAA,UACH,EAAA,EAAI,GAAG,EAAE,CAAA,MAAA,CAAA;AAAA,UACT,IAAA,EAAK,OAAA;AAAA,UACL,OAAA,EAAQ,IAAA;AAAA,UACR,SAAA,EAAW,gBAAA;AAAA,UAEV,QAAA,EAAA;AAAA;AAAA,OACH;AAAA,MAED,CAAC,KAAA,IAAS,IAAA,oBACT,GAAA,CAAC,YAAS,EAAA,EAAG,GAAA,EAAI,EAAA,EAAI,CAAA,EAAG,EAAE,CAAA,KAAA,CAAA,EAAS,OAAA,EAAQ,IAAA,EAAK,SAAA,EAAW,iBACxD,QAAA,EAAA,IAAA,EACH;AAAA,KAAA,EAEJ,CAAA;AAAA,EAEJ;AACF;AAEA,QAAA,CAAS,WAAA,GAAc,UAAA","file":"chunk-3YRDRHO3.js","sourcesContent":["import { cva } from 'class-variance-authority';\n\nexport const textareaStyles = cva(\n [\n 'flex min-h-24 w-full rounded-md px-3 py-2',\n 'text-[var(--input-text)] bg-[var(--input-bg)]',\n 'border border-[var(--input-border)]',\n 'placeholder:text-[var(--input-placeholder)]',\n 'transition-colors duration-150 ease-in-out',\n 'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[var(--border-focus)] focus-visible:ring-offset-0',\n 'focus-visible:border-[var(--input-border-focus)]',\n 'disabled:cursor-not-allowed disabled:opacity-50',\n ],\n {\n variants: {\n state: {\n default: '',\n error: 'border-[var(--input-border-error)] focus-visible:ring-[var(--border-error)]',\n },\n inputSize: {\n sm: 'text-xs',\n md: 'text-sm',\n lg: 'text-base',\n },\n resize: {\n vertical: 'resize-y',\n none: 'resize-none',\n },\n },\n defaultVariants: {\n state: 'default',\n inputSize: 'md',\n resize: 'vertical',\n },\n },\n);\n","import { RichText } from '@components';\nimport { cn } from '@utils';\nimport type { VariantProps } from 'class-variance-authority';\nimport { forwardRef, useId, type TextareaHTMLAttributes } from 'react';\nimport {\n inputErrorStyles,\n inputHintStyles,\n inputLabelStyles,\n} from '@components/atoms/Input/Input.styles';\nimport { textareaStyles } from './Textarea.styles';\n\nexport type TextareaProps = TextareaHTMLAttributes<HTMLTextAreaElement> &\n VariantProps<typeof textareaStyles> & {\n label?: string;\n hint?: string;\n error?: string;\n };\n\n/** Multi-line text entry with the same label / hint / error contract and look as `Input`. */\nexport const Textarea = forwardRef<HTMLTextAreaElement, TextareaProps>(\n ({ className, state, inputSize, resize, label, hint, error, id: idProp, ...props }, ref) => {\n const generatedId = useId();\n const id = idProp ?? generatedId;\n const resolvedState = error ? 'error' : state;\n\n return (\n <div className=\"flex flex-col gap-1.5\">\n {label && (\n <label htmlFor={id}>\n <RichText as=\"span\" variant=\"p3\" className={inputLabelStyles}>\n {label}\n </RichText>\n </label>\n )}\n <textarea\n ref={ref}\n id={id}\n aria-describedby={error ? `${id}-error` : hint ? `${id}-hint` : undefined}\n aria-invalid={error ? 'true' : undefined}\n className={cn(textareaStyles({ state: resolvedState, inputSize, resize }), className)}\n {...props}\n />\n {error && (\n <RichText\n as=\"p\"\n id={`${id}-error`}\n role=\"alert\"\n variant=\"p4\"\n className={inputErrorStyles}\n >\n {error}\n </RichText>\n )}\n {!error && hint && (\n <RichText as=\"p\" id={`${id}-hint`} variant=\"p4\" className={inputHintStyles}>\n {hint}\n </RichText>\n )}\n </div>\n );\n },\n);\n\nTextarea.displayName = 'Textarea';\n"]}
1
+ {"version":3,"sources":["../src/components/atoms/Textarea/Textarea.styles.ts","../src/components/atoms/Textarea/Textarea.tsx"],"names":[],"mappings":";;;;;;;AAEO,IAAM,cAAA,GAAiB,GAAA;AAAA,EAC5B;AAAA,IACE,2CAAA;AAAA,IACA,+CAAA;AAAA,IACA,qCAAA;AAAA,IACA,6CAAA;AAAA,IACA,4CAAA;AAAA,IACA,sHAAA;AAAA,IACA,kDAAA;AAAA,IACA;AAAA,GACF;AAAA,EACA;AAAA,IACE,QAAA,EAAU;AAAA,MACR,KAAA,EAAO;AAAA,QACL,OAAA,EAAS,EAAA;AAAA,QACT,KAAA,EAAO;AAAA,OACT;AAAA,MACA,SAAA,EAAW;AAAA,QACT,EAAA,EAAI,SAAA;AAAA,QACJ,EAAA,EAAI,SAAA;AAAA,QACJ,EAAA,EAAI;AAAA,OACN;AAAA,MACA,MAAA,EAAQ;AAAA,QACN,QAAA,EAAU,UAAA;AAAA,QACV,IAAA,EAAM;AAAA;AACR,KACF;AAAA,IACA,eAAA,EAAiB;AAAA,MACf,KAAA,EAAO,SAAA;AAAA,MACP,SAAA,EAAW,IAAA;AAAA,MACX,MAAA,EAAQ;AAAA;AACV;AAEJ,CAAA;AChBO,IAAM,QAAA,GAAW,UAAA;AAAA,EACtB,CAAC,EAAE,SAAA,EAAW,KAAA,EAAO,WAAW,MAAA,EAAQ,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,EAAA,EAAI,MAAA,EAAQ,GAAG,KAAA,IAAS,GAAA,KAAQ;AAC1F,IAAA,MAAM,cAAc,KAAA,EAAM;AAC1B,IAAA,MAAM,KAAK,MAAA,IAAU,WAAA;AACrB,IAAA,MAAM,aAAA,GAAgB,QAAQ,OAAA,GAAU,KAAA;AAExC,IAAA,uBACE,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,uBAAA,EACZ,QAAA,EAAA;AAAA,MAAA,KAAA,oBACC,GAAA,CAAC,OAAA,EAAA,EAAM,OAAA,EAAS,EAAA,EACd,QAAA,kBAAA,GAAA,CAAC,QAAA,EAAA,EAAS,EAAA,EAAG,MAAA,EAAO,OAAA,EAAQ,IAAA,EAAK,SAAA,EAAW,gBAAA,EACzC,iBACH,CAAA,EACF,CAAA;AAAA,sBAEF,GAAA;AAAA,QAAC,UAAA;AAAA,QAAA;AAAA,UACC,GAAA;AAAA,UACA,EAAA;AAAA,UACA,kBAAA,EAAkB,QAAQ,CAAA,EAAG,EAAE,WAAW,IAAA,GAAO,CAAA,EAAG,EAAE,CAAA,KAAA,CAAA,GAAU,MAAA;AAAA,UAChE,cAAA,EAAc,QAAQ,MAAA,GAAS,MAAA;AAAA,UAC/B,SAAA,EAAW,EAAA,CAAG,cAAA,CAAe,EAAE,KAAA,EAAO,eAAe,SAAA,EAAW,MAAA,EAAQ,CAAA,EAAG,SAAS,CAAA;AAAA,UACnF,GAAG;AAAA;AAAA,OACN;AAAA,MACC,KAAA,oBACC,GAAA;AAAA,QAAC,QAAA;AAAA,QAAA;AAAA,UACC,EAAA,EAAG,GAAA;AAAA,UACH,EAAA,EAAI,GAAG,EAAE,CAAA,MAAA,CAAA;AAAA,UACT,IAAA,EAAK,OAAA;AAAA,UACL,OAAA,EAAQ,IAAA;AAAA,UACR,SAAA,EAAW,gBAAA;AAAA,UAEV,QAAA,EAAA;AAAA;AAAA,OACH;AAAA,MAED,CAAC,KAAA,IAAS,IAAA,oBACT,GAAA,CAAC,YAAS,EAAA,EAAG,GAAA,EAAI,EAAA,EAAI,CAAA,EAAG,EAAE,CAAA,KAAA,CAAA,EAAS,OAAA,EAAQ,IAAA,EAAK,SAAA,EAAW,iBACxD,QAAA,EAAA,IAAA,EACH;AAAA,KAAA,EAEJ,CAAA;AAAA,EAEJ;AACF;AAEA,QAAA,CAAS,WAAA,GAAc,UAAA","file":"chunk-UUW7L2AV.js","sourcesContent":["import { cva } from 'class-variance-authority';\n\nexport const textareaStyles = cva(\n [\n 'flex min-h-24 w-full rounded-md px-3 py-2',\n 'text-[var(--input-text)] bg-[var(--input-bg)]',\n 'border border-[var(--input-border)]',\n 'placeholder:text-[var(--input-placeholder)]',\n 'transition-colors duration-150 ease-in-out',\n 'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[var(--border-focus)] focus-visible:ring-offset-0',\n 'focus-visible:border-[var(--input-border-focus)]',\n 'disabled:cursor-not-allowed disabled:opacity-50',\n ],\n {\n variants: {\n state: {\n default: '',\n error: 'border-[var(--input-border-error)] focus-visible:ring-[var(--border-error)]',\n },\n inputSize: {\n sm: 'text-xs',\n md: 'text-sm',\n lg: 'text-base',\n },\n resize: {\n vertical: 'resize-y',\n none: 'resize-none',\n },\n },\n defaultVariants: {\n state: 'default',\n inputSize: 'md',\n resize: 'vertical',\n },\n },\n);\n","import { RichText } from '@components';\nimport { cn } from '@utils';\nimport type { VariantProps } from 'class-variance-authority';\nimport { forwardRef, useId, type TextareaHTMLAttributes } from 'react';\nimport {\n inputErrorStyles,\n inputHintStyles,\n inputLabelStyles,\n} from '@components/atoms/Input/Input.styles';\nimport { textareaStyles } from './Textarea.styles';\n\nexport type TextareaProps = TextareaHTMLAttributes<HTMLTextAreaElement> &\n VariantProps<typeof textareaStyles> & {\n label?: string;\n hint?: string;\n error?: string;\n };\n\n/** Multi-line text entry with the same label / hint / error contract and look as `Input`. */\nexport const Textarea = forwardRef<HTMLTextAreaElement, TextareaProps>(\n ({ className, state, inputSize, resize, label, hint, error, id: idProp, ...props }, ref) => {\n const generatedId = useId();\n const id = idProp ?? generatedId;\n const resolvedState = error ? 'error' : state;\n\n return (\n <div className=\"flex flex-col gap-1.5\">\n {label && (\n <label htmlFor={id}>\n <RichText as=\"span\" variant=\"p3\" className={inputLabelStyles}>\n {label}\n </RichText>\n </label>\n )}\n <textarea\n ref={ref}\n id={id}\n aria-describedby={error ? `${id}-error` : hint ? `${id}-hint` : undefined}\n aria-invalid={error ? 'true' : undefined}\n className={cn(textareaStyles({ state: resolvedState, inputSize, resize }), className)}\n {...props}\n />\n {error && (\n <RichText\n as=\"p\"\n id={`${id}-error`}\n role=\"alert\"\n variant=\"p4\"\n className={inputErrorStyles}\n >\n {error}\n </RichText>\n )}\n {!error && hint && (\n <RichText as=\"p\" id={`${id}-hint`} variant=\"p4\" className={inputHintStyles}>\n {hint}\n </RichText>\n )}\n </div>\n );\n },\n);\n\nTextarea.displayName = 'Textarea';\n"]}
@@ -1,5 +1,5 @@
1
- import { Link } from './chunk-D4I5OF3C.js';
2
- import { RichText } from './chunk-P4CV2EPR.js';
1
+ import { Link } from './chunk-5LKLTY55.js';
2
+ import { RichText } from './chunk-SPDOYFCU.js';
3
3
  import { cn } from './chunk-6LLGTBM6.js';
4
4
  import { forwardRef } from 'react';
5
5
  import { jsx, jsxs } from 'react/jsx-runtime';
@@ -23,5 +23,5 @@ var Breadcrumbs = forwardRef(
23
23
  Breadcrumbs.displayName = "Breadcrumbs";
24
24
 
25
25
  export { Breadcrumbs };
26
- //# sourceMappingURL=chunk-PE6XEC7Y.js.map
27
- //# sourceMappingURL=chunk-PE6XEC7Y.js.map
26
+ //# sourceMappingURL=chunk-VCJN4FS2.js.map
27
+ //# sourceMappingURL=chunk-VCJN4FS2.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/molecules/Breadcrumbs/Breadcrumbs.styles.ts","../src/components/molecules/Breadcrumbs/Breadcrumbs.tsx"],"names":[],"mappings":";;;;;;;AAAO,IAAM,iBAAA,GAAoB,2BAAA;AAE1B,IAAM,qBAAA,GAAwB,yBAAA;AAE9B,IAAM,qBAAA,GAAwB,yBAAA;AAE9B,IAAM,qBAAA,GAAwB,8BAAA;AAE9B,IAAM,0BAAA,GAA6B,6BAAA;AAEnC,IAAM,wBAAA,GAA2B,wCAAA;ACcjC,IAAM,WAAA,GAAc,UAAA;AAAA,EACzB,CAAC,EAAE,KAAA,EAAO,OAAA,EAAS,SAAA,GAAY,GAAA,EAAK,SAAA,EAAW,GAAG,KAAA,EAAM,EAAG,GAAA,qBACzD,GAAA,CAAC,KAAA,EAAA,EAAI,KAAU,YAAA,EAAW,YAAA,EAAa,SAAA,EAAW,EAAA,CAAG,iBAAA,EAAmB,SAAS,CAAA,EAAI,GAAG,KAAA,EACtF,QAAA,kBAAA,IAAA,CAAC,IAAA,EAAA,EAAG,SAAA,EAAW,qBAAA,EACZ,QAAA,EAAA;AAAA,IAAA,KAAA,CAAM,IAAI,CAAC,IAAA,EAAM,0BAChB,IAAA,CAAC,IAAA,EAAA,EAA0B,WAAW,qBAAA,EACpC,QAAA,EAAA;AAAA,sBAAA,GAAA,CAAC,QAAK,IAAA,EAAM,IAAA,CAAK,IAAA,EAAM,SAAA,EAAU,QAAO,SAAA,EAAW,qBAAA,EACjD,QAAA,kBAAA,GAAA,CAAC,QAAA,EAAA,EAAS,IAAG,MAAA,EAAO,OAAA,EAAQ,IAAA,EACzB,QAAA,EAAA,IAAA,CAAK,OACR,CAAA,EACF,CAAA;AAAA,0BACC,MAAA,EAAA,EAAK,aAAA,EAAW,IAAA,EAAC,SAAA,EAAW,4BAC1B,QAAA,EAAA,SAAA,EACH;AAAA,KAAA,EAAA,EARO,IAAA,CAAK,EAAA,IAAM,KASpB,CACD,CAAA;AAAA,oBACD,GAAA,CAAC,QAAA,EAAA,EAAS,EAAA,EAAG,IAAA,EAAK,cAAA,EAAa,QAAO,OAAA,EAAQ,IAAA,EAAK,SAAA,EAAW,wBAAA,EAC3D,QAAA,EAAA,OAAA,EACH;AAAA,GAAA,EACF,CAAA,EACF;AAEJ;AAEA,WAAA,CAAY,WAAA,GAAc,aAAA","file":"chunk-PE6XEC7Y.js","sourcesContent":["export const breadcrumbsStyles = 'flex items-center text-sm';\n\nexport const breadcrumbsListStyles = 'flex items-center gap-2';\n\nexport const breadcrumbsItemStyles = 'flex items-center gap-2';\n\nexport const breadcrumbsLinkStyles = 'text-[var(--text-secondary)]';\n\nexport const breadcrumbsSeparatorStyles = 'text-[var(--text-tertiary)]';\n\nexport const breadcrumbsCurrentStyles = 'font-medium text-[var(--text-primary)]';\n","import { forwardRef, type HTMLAttributes, type ReactNode } from 'react';\nimport { Link, RichText } from '@components';\nimport { cn } from '@utils';\nimport {\n breadcrumbsCurrentStyles,\n breadcrumbsItemStyles,\n breadcrumbsLinkStyles,\n breadcrumbsListStyles,\n breadcrumbsSeparatorStyles,\n breadcrumbsStyles,\n} from './Breadcrumbs.styles';\n\nexport interface BreadcrumbItem {\n id?: string;\n label: ReactNode;\n href: string;\n}\n\nexport type BreadcrumbsProps = HTMLAttributes<HTMLElement> & {\n items: BreadcrumbItem[];\n current: ReactNode;\n separator?: ReactNode;\n};\n\nexport const Breadcrumbs = forwardRef<HTMLElement, BreadcrumbsProps>(\n ({ items, current, separator = '/', className, ...props }, ref) => (\n <nav ref={ref} aria-label=\"Breadcrumb\" className={cn(breadcrumbsStyles, className)} {...props}>\n <ol className={breadcrumbsListStyles}>\n {items.map((item, index) => (\n <li key={item.id ?? index} className={breadcrumbsItemStyles}>\n <Link href={item.href} underline=\"none\" className={breadcrumbsLinkStyles}>\n <RichText as=\"span\" variant=\"s3\">\n {item.label}\n </RichText>\n </Link>\n <span aria-hidden className={breadcrumbsSeparatorStyles}>\n {separator}\n </span>\n </li>\n ))}\n <RichText as=\"li\" aria-current=\"page\" variant=\"s3\" className={breadcrumbsCurrentStyles}>\n {current}\n </RichText>\n </ol>\n </nav>\n ),\n);\n\nBreadcrumbs.displayName = 'Breadcrumbs';\n"]}
1
+ {"version":3,"sources":["../src/components/molecules/Breadcrumbs/Breadcrumbs.styles.ts","../src/components/molecules/Breadcrumbs/Breadcrumbs.tsx"],"names":[],"mappings":";;;;;;;AAAO,IAAM,iBAAA,GAAoB,2BAAA;AAE1B,IAAM,qBAAA,GAAwB,yBAAA;AAE9B,IAAM,qBAAA,GAAwB,yBAAA;AAE9B,IAAM,qBAAA,GAAwB,8BAAA;AAE9B,IAAM,0BAAA,GAA6B,6BAAA;AAEnC,IAAM,wBAAA,GAA2B,wCAAA;ACcjC,IAAM,WAAA,GAAc,UAAA;AAAA,EACzB,CAAC,EAAE,KAAA,EAAO,OAAA,EAAS,SAAA,GAAY,GAAA,EAAK,SAAA,EAAW,GAAG,KAAA,EAAM,EAAG,GAAA,qBACzD,GAAA,CAAC,KAAA,EAAA,EAAI,KAAU,YAAA,EAAW,YAAA,EAAa,SAAA,EAAW,EAAA,CAAG,iBAAA,EAAmB,SAAS,CAAA,EAAI,GAAG,KAAA,EACtF,QAAA,kBAAA,IAAA,CAAC,IAAA,EAAA,EAAG,SAAA,EAAW,qBAAA,EACZ,QAAA,EAAA;AAAA,IAAA,KAAA,CAAM,IAAI,CAAC,IAAA,EAAM,0BAChB,IAAA,CAAC,IAAA,EAAA,EAA0B,WAAW,qBAAA,EACpC,QAAA,EAAA;AAAA,sBAAA,GAAA,CAAC,QAAK,IAAA,EAAM,IAAA,CAAK,IAAA,EAAM,SAAA,EAAU,QAAO,SAAA,EAAW,qBAAA,EACjD,QAAA,kBAAA,GAAA,CAAC,QAAA,EAAA,EAAS,IAAG,MAAA,EAAO,OAAA,EAAQ,IAAA,EACzB,QAAA,EAAA,IAAA,CAAK,OACR,CAAA,EACF,CAAA;AAAA,0BACC,MAAA,EAAA,EAAK,aAAA,EAAW,IAAA,EAAC,SAAA,EAAW,4BAC1B,QAAA,EAAA,SAAA,EACH;AAAA,KAAA,EAAA,EARO,IAAA,CAAK,EAAA,IAAM,KASpB,CACD,CAAA;AAAA,oBACD,GAAA,CAAC,QAAA,EAAA,EAAS,EAAA,EAAG,IAAA,EAAK,cAAA,EAAa,QAAO,OAAA,EAAQ,IAAA,EAAK,SAAA,EAAW,wBAAA,EAC3D,QAAA,EAAA,OAAA,EACH;AAAA,GAAA,EACF,CAAA,EACF;AAEJ;AAEA,WAAA,CAAY,WAAA,GAAc,aAAA","file":"chunk-VCJN4FS2.js","sourcesContent":["export const breadcrumbsStyles = 'flex items-center text-sm';\n\nexport const breadcrumbsListStyles = 'flex items-center gap-2';\n\nexport const breadcrumbsItemStyles = 'flex items-center gap-2';\n\nexport const breadcrumbsLinkStyles = 'text-[var(--text-secondary)]';\n\nexport const breadcrumbsSeparatorStyles = 'text-[var(--text-tertiary)]';\n\nexport const breadcrumbsCurrentStyles = 'font-medium text-[var(--text-primary)]';\n","import { Link, RichText } from '@components';\nimport { cn } from '@utils';\nimport { forwardRef, type HTMLAttributes, type ReactNode } from 'react';\nimport {\n breadcrumbsCurrentStyles,\n breadcrumbsItemStyles,\n breadcrumbsLinkStyles,\n breadcrumbsListStyles,\n breadcrumbsSeparatorStyles,\n breadcrumbsStyles,\n} from './Breadcrumbs.styles';\n\nexport interface BreadcrumbItem {\n id?: string;\n label: ReactNode;\n href: string;\n}\n\nexport type BreadcrumbsProps = HTMLAttributes<HTMLElement> & {\n items: BreadcrumbItem[];\n current: ReactNode;\n separator?: ReactNode;\n};\n\nexport const Breadcrumbs = forwardRef<HTMLElement, BreadcrumbsProps>(\n ({ items, current, separator = '/', className, ...props }, ref) => (\n <nav ref={ref} aria-label=\"Breadcrumb\" className={cn(breadcrumbsStyles, className)} {...props}>\n <ol className={breadcrumbsListStyles}>\n {items.map((item, index) => (\n <li key={item.id ?? index} className={breadcrumbsItemStyles}>\n <Link href={item.href} underline=\"none\" className={breadcrumbsLinkStyles}>\n <RichText as=\"span\" variant=\"s3\">\n {item.label}\n </RichText>\n </Link>\n <span aria-hidden className={breadcrumbsSeparatorStyles}>\n {separator}\n </span>\n </li>\n ))}\n <RichText as=\"li\" aria-current=\"page\" variant=\"s3\" className={breadcrumbsCurrentStyles}>\n {current}\n </RichText>\n </ol>\n </nav>\n ),\n);\n\nBreadcrumbs.displayName = 'Breadcrumbs';\n"]}