@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 { Modal } from './chunk-J7X6NLSR.js';
2
+ import { Switch } from './chunk-KSNAVEJP.js';
3
+ import { Button } from './chunk-KL6I2JFC.js';
4
+ import { RichText } from './chunk-SPDOYFCU.js';
5
+ import { cn } from './chunk-6LLGTBM6.js';
6
+ import { useId, useState } from 'react';
7
+ import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
8
+
9
+ // src/components/organisms/CookieConsent/CookieConsent.styles.ts
10
+ var cookieBannerStyles = [
11
+ "fixed inset-x-0 bottom-0 z-40 border-t border-[var(--border-default)]",
12
+ "bg-[var(--surface-primary)] shadow-lg"
13
+ ].join(" ");
14
+ var cookieBannerContentStyles = "mx-auto flex w-full max-w-5xl flex-col gap-3 px-4 py-4";
15
+ var cookieBannerTitleStyles = "text-lg font-semibold text-[var(--text-primary)]";
16
+ var cookieTextStyles = "text-sm text-[var(--text-secondary)]";
17
+ var cookieBannerActionsStyles = "flex flex-wrap gap-2";
18
+ var cookieBannerButtonStyles = "min-h-11 flex-1";
19
+ var cookiePreferencesIntroStyles = "mb-4 text-sm text-[var(--text-secondary)]";
20
+ var cookieCategoryListStyles = "flex flex-col gap-4";
21
+ var cookieCategoryStyles = "flex flex-col gap-2 rounded-lg border border-[var(--border-default)] p-4";
22
+ var cookieCategoryHeaderStyles = "flex items-center justify-between gap-4";
23
+ var cookieCategoryTitleStyles = "font-semibold text-[var(--text-primary)]";
24
+ var cookieCategoryRequiredStyles = "text-xs font-semibold text-[var(--text-secondary)]";
25
+ var choicesFor = (categories, enabled) => Object.fromEntries(
26
+ categories.filter((category) => !category.required).map(({ id }) => [id, enabled])
27
+ );
28
+ var CategoryList = ({
29
+ categories,
30
+ value,
31
+ onToggle,
32
+ requiredLabel,
33
+ switchId
34
+ }) => /* @__PURE__ */ jsx("ul", { className: cookieCategoryListStyles, children: categories.map((category) => {
35
+ const descriptionId = `${switchId(category.id)}-description`;
36
+ return /* @__PURE__ */ jsxs("li", { className: cookieCategoryStyles, children: [
37
+ /* @__PURE__ */ jsx("div", { className: cookieCategoryHeaderStyles, children: category.required ? /* @__PURE__ */ jsxs(Fragment, { children: [
38
+ /* @__PURE__ */ jsx(RichText, { as: "h3", variant: "p2", className: cookieCategoryTitleStyles, children: category.title }),
39
+ /* @__PURE__ */ jsx(RichText, { as: "span", variant: "p4", className: cookieCategoryRequiredStyles, children: requiredLabel })
40
+ ] }) : /* @__PURE__ */ jsx(
41
+ Switch,
42
+ {
43
+ id: switchId(category.id),
44
+ label: category.title,
45
+ checked: value[category.id] === true,
46
+ onCheckedChange: (checked) => onToggle(category.id, checked),
47
+ "aria-describedby": descriptionId
48
+ }
49
+ ) }),
50
+ /* @__PURE__ */ jsx(RichText, { as: "p", id: descriptionId, variant: "p3", className: cookieTextStyles, children: category.description })
51
+ ] }, category.id);
52
+ }) });
53
+ var CookieConsent = ({
54
+ mode,
55
+ categories,
56
+ value,
57
+ onChange,
58
+ labels,
59
+ open,
60
+ onOpenChange,
61
+ getId,
62
+ className
63
+ }) => {
64
+ const baseId = useId();
65
+ const id = (kind, name) => getId ? getId(kind, name) : `${baseId}-${kind}-${name}`;
66
+ const titleId = useId();
67
+ const [innerOpen, setInnerOpen] = useState(false);
68
+ const [draft, setDraft] = useState({});
69
+ const preferencesOpen = open ?? innerOpen;
70
+ const [wasOpen, setWasOpen] = useState(preferencesOpen);
71
+ if (preferencesOpen !== wasOpen) {
72
+ setWasOpen(preferencesOpen);
73
+ if (preferencesOpen) {
74
+ setDraft({ ...choicesFor(categories, false), ...value });
75
+ }
76
+ }
77
+ const setOpen = (next) => {
78
+ setInnerOpen(next);
79
+ onOpenChange?.(next);
80
+ };
81
+ const toggle = (categoryId, enabled) => mode === "inline" ? onChange({ ...choicesFor(categories, false), ...value, [categoryId]: enabled }) : setDraft((current) => ({ ...current, [categoryId]: enabled }));
82
+ if (mode === "inline") {
83
+ return /* @__PURE__ */ jsx("div", { className, children: /* @__PURE__ */ jsx(
84
+ CategoryList,
85
+ {
86
+ categories,
87
+ value: value ?? {},
88
+ onToggle: toggle,
89
+ requiredLabel: labels.required,
90
+ switchId: (name) => id("switch", name)
91
+ }
92
+ ) });
93
+ }
94
+ return /* @__PURE__ */ jsxs(Fragment, { children: [
95
+ mode === "banner" && value === null && !preferencesOpen && /* @__PURE__ */ jsx("section", { "aria-labelledby": titleId, className: cn(cookieBannerStyles, className), children: /* @__PURE__ */ jsxs("div", { className: cookieBannerContentStyles, children: [
96
+ /* @__PURE__ */ jsx(RichText, { as: "h2", id: titleId, variant: "s1", className: cookieBannerTitleStyles, children: labels.title }),
97
+ /* @__PURE__ */ jsx(RichText, { as: "p", variant: "p3", className: cookieTextStyles, children: labels.description }),
98
+ /* @__PURE__ */ jsxs("div", { className: cookieBannerActionsStyles, children: [
99
+ /* @__PURE__ */ jsx(
100
+ Button,
101
+ {
102
+ id: id("button", "accept"),
103
+ type: "button",
104
+ className: cookieBannerButtonStyles,
105
+ onClick: () => onChange(choicesFor(categories, true)),
106
+ children: labels.accept
107
+ }
108
+ ),
109
+ /* @__PURE__ */ jsx(
110
+ Button,
111
+ {
112
+ id: id("button", "reject"),
113
+ type: "button",
114
+ variant: "secondary",
115
+ className: cookieBannerButtonStyles,
116
+ onClick: () => onChange(choicesFor(categories, false)),
117
+ children: labels.reject
118
+ }
119
+ ),
120
+ /* @__PURE__ */ jsx(
121
+ Button,
122
+ {
123
+ id: id("button", "customize"),
124
+ type: "button",
125
+ variant: "ghost",
126
+ className: cookieBannerButtonStyles,
127
+ onClick: () => setOpen(true),
128
+ children: labels.customize
129
+ }
130
+ )
131
+ ] })
132
+ ] }) }),
133
+ /* @__PURE__ */ jsxs(
134
+ Modal,
135
+ {
136
+ open: preferencesOpen,
137
+ onClose: () => setOpen(false),
138
+ title: labels.preferencesTitle,
139
+ className: mode === "modal" ? className : void 0,
140
+ footer: /* @__PURE__ */ jsxs(Fragment, { children: [
141
+ /* @__PURE__ */ jsx(
142
+ Button,
143
+ {
144
+ id: id("button", "cancel"),
145
+ type: "button",
146
+ variant: "ghost",
147
+ onClick: () => setOpen(false),
148
+ children: labels.cancel
149
+ }
150
+ ),
151
+ /* @__PURE__ */ jsx(
152
+ Button,
153
+ {
154
+ id: id("button", "save"),
155
+ type: "button",
156
+ onClick: () => {
157
+ onChange(draft);
158
+ setOpen(false);
159
+ },
160
+ children: labels.save
161
+ }
162
+ )
163
+ ] }),
164
+ children: [
165
+ labels.preferencesDescription && /* @__PURE__ */ jsx(RichText, { as: "p", variant: "p3", className: cookiePreferencesIntroStyles, children: labels.preferencesDescription }),
166
+ /* @__PURE__ */ jsx(
167
+ CategoryList,
168
+ {
169
+ categories,
170
+ value: draft,
171
+ onToggle: toggle,
172
+ requiredLabel: labels.required,
173
+ switchId: (name) => id("switch", name)
174
+ }
175
+ )
176
+ ]
177
+ }
178
+ )
179
+ ] });
180
+ };
181
+
182
+ export { CookieConsent };
183
+ //# sourceMappingURL=chunk-VK24YOIC.js.map
184
+ //# sourceMappingURL=chunk-VK24YOIC.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/organisms/CookieConsent/CookieConsent.styles.ts","../src/components/organisms/CookieConsent/CookieConsent.tsx"],"names":[],"mappings":"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","file":"chunk-VK24YOIC.js","sourcesContent":["export const cookieBannerStyles = [\n 'fixed inset-x-0 bottom-0 z-40 border-t border-[var(--border-default)]',\n 'bg-[var(--surface-primary)] shadow-lg',\n].join(' ');\n\nexport const cookieBannerContentStyles = 'mx-auto flex w-full max-w-5xl flex-col gap-3 px-4 py-4';\n\nexport const cookieBannerTitleStyles = 'text-lg font-semibold text-[var(--text-primary)]';\n\nexport const cookieTextStyles = 'text-sm text-[var(--text-secondary)]';\n\nexport const cookieBannerActionsStyles = 'flex flex-wrap gap-2';\n\nexport const cookieBannerButtonStyles = 'min-h-11 flex-1';\n\nexport const cookiePreferencesIntroStyles = 'mb-4 text-sm text-[var(--text-secondary)]';\n\nexport const cookieCategoryListStyles = 'flex flex-col gap-4';\n\nexport const cookieCategoryStyles =\n 'flex flex-col gap-2 rounded-lg border border-[var(--border-default)] p-4';\n\nexport const cookieCategoryHeaderStyles = 'flex items-center justify-between gap-4';\n\nexport const cookieCategoryTitleStyles = 'font-semibold text-[var(--text-primary)]';\n\nexport const cookieCategoryRequiredStyles = 'text-xs font-semibold text-[var(--text-secondary)]';\n","import { Button, Modal, RichText, Switch } from '@components';\nimport { cn } from '@utils';\nimport { useId, useState, type ReactNode } from 'react';\nimport {\n cookieBannerActionsStyles,\n cookieBannerButtonStyles,\n cookieBannerContentStyles,\n cookieBannerStyles,\n cookieBannerTitleStyles,\n cookieCategoryHeaderStyles,\n cookieCategoryListStyles,\n cookieCategoryRequiredStyles,\n cookieCategoryStyles,\n cookieCategoryTitleStyles,\n cookiePreferencesIntroStyles,\n cookieTextStyles,\n} from './CookieConsent.styles';\n\nexport interface CookieCategory {\n id: string;\n title: string;\n description: ReactNode;\n /** Strictly necessary cookies can't be turned off; they show `labels.required` instead of a switch. */\n required?: boolean;\n}\n\n/** Whether each optional category is allowed, by id. */\nexport type CookieChoices = Record<string, boolean>;\n\n/**\n * - `banner`: bar at the bottom while there is no answer (`value === null`), with accept, reject\n * and customize; customize opens the preferences dialog.\n * - `modal`: only the preferences dialog, opened with `open` / `onOpenChange`.\n * - `inline`: the categories with switches inside a page (privacy, settings); every change is\n * saved at once, there is no save button.\n */\nexport type CookieConsentMode = 'banner' | 'modal' | 'inline';\n\nexport interface CookieConsentLabels {\n /** Banner title. */\n title: ReactNode;\n /** Banner text; usually ends with a link to the privacy policy. */\n description: ReactNode;\n accept: string;\n reject: string;\n customize: string;\n preferencesTitle: ReactNode;\n preferencesDescription?: ReactNode;\n save: string;\n cancel: string;\n /** Shown instead of a switch on required categories, e.g. \"Always on\". */\n required: string;\n}\n\nexport interface CookieConsentProps {\n mode: CookieConsentMode;\n categories: CookieCategory[];\n /** The saved answer, or `null` while the person hasn't answered. */\n value: CookieChoices | null;\n /** Called with the full answer: accept or reject all, the saved preferences, or a switch (inline). */\n onChange: (value: CookieChoices) => void;\n labels: CookieConsentLabels;\n /** Preferences dialog visibility, to open it from outside (e.g. a footer link). Optional in `banner`. */\n open?: boolean;\n onOpenChange?: (open: boolean) => void;\n /** Stable ids for buttons and switches, e.g. for analytics click triggers. */\n getId?: (kind: 'button' | 'switch', name: string) => string;\n className?: string;\n}\n\nconst choicesFor = (categories: CookieCategory[], enabled: boolean): CookieChoices =>\n Object.fromEntries(\n categories.filter((category) => !category.required).map(({ id }) => [id, enabled]),\n );\n\ninterface CategoryListProps {\n categories: CookieCategory[];\n value: CookieChoices;\n onToggle: (id: string, enabled: boolean) => void;\n requiredLabel: string;\n switchId: (name: string) => string;\n}\n\nconst CategoryList = ({\n categories,\n value,\n onToggle,\n requiredLabel,\n switchId,\n}: CategoryListProps) => (\n <ul className={cookieCategoryListStyles}>\n {categories.map((category) => {\n const descriptionId = `${switchId(category.id)}-description`;\n return (\n <li key={category.id} className={cookieCategoryStyles}>\n <div className={cookieCategoryHeaderStyles}>\n {category.required ? (\n <>\n <RichText as=\"h3\" variant=\"p2\" className={cookieCategoryTitleStyles}>\n {category.title}\n </RichText>\n <RichText as=\"span\" variant=\"p4\" className={cookieCategoryRequiredStyles}>\n {requiredLabel}\n </RichText>\n </>\n ) : (\n <Switch\n id={switchId(category.id)}\n label={category.title}\n checked={value[category.id] === true}\n onCheckedChange={(checked) => onToggle(category.id, checked)}\n aria-describedby={descriptionId}\n />\n )}\n </div>\n <RichText as=\"p\" id={descriptionId} variant=\"p3\" className={cookieTextStyles}>\n {category.description}\n </RichText>\n </li>\n );\n })}\n </ul>\n);\n\n/**\n * Cookie consent in one component: the banner, the preferences dialog and the inline settings,\n * chosen with `mode`. Controlled: the consumer stores `value` and loads non-essential scripts only\n * after the person allows them. Accept and reject weigh the same, so rejecting is as easy as\n * accepting (GDPR / ePrivacy).\n */\nexport const CookieConsent = ({\n mode,\n categories,\n value,\n onChange,\n labels,\n open,\n onOpenChange,\n getId,\n className,\n}: CookieConsentProps) => {\n const baseId = useId();\n const id = (kind: 'button' | 'switch', name: string) =>\n getId ? getId(kind, name) : `${baseId}-${kind}-${name}`;\n const titleId = useId();\n const [innerOpen, setInnerOpen] = useState(false);\n const [draft, setDraft] = useState<CookieChoices>({});\n const preferencesOpen = open ?? innerOpen;\n const [wasOpen, setWasOpen] = useState(preferencesOpen);\n\n if (preferencesOpen !== wasOpen) {\n setWasOpen(preferencesOpen);\n if (preferencesOpen) {\n setDraft({ ...choicesFor(categories, false), ...value });\n }\n }\n\n const setOpen = (next: boolean) => {\n setInnerOpen(next);\n onOpenChange?.(next);\n };\n\n const toggle = (categoryId: string, enabled: boolean) =>\n mode === 'inline'\n ? onChange({ ...choicesFor(categories, false), ...value, [categoryId]: enabled })\n : setDraft((current) => ({ ...current, [categoryId]: enabled }));\n\n if (mode === 'inline') {\n return (\n <div className={className}>\n <CategoryList\n categories={categories}\n value={value ?? {}}\n onToggle={toggle}\n requiredLabel={labels.required}\n switchId={(name) => id('switch', name)}\n />\n </div>\n );\n }\n\n return (\n <>\n {mode === 'banner' && value === null && !preferencesOpen && (\n <section aria-labelledby={titleId} className={cn(cookieBannerStyles, className)}>\n <div className={cookieBannerContentStyles}>\n <RichText as=\"h2\" id={titleId} variant=\"s1\" className={cookieBannerTitleStyles}>\n {labels.title}\n </RichText>\n <RichText as=\"p\" variant=\"p3\" className={cookieTextStyles}>\n {labels.description}\n </RichText>\n <div className={cookieBannerActionsStyles}>\n <Button\n id={id('button', 'accept')}\n type=\"button\"\n className={cookieBannerButtonStyles}\n onClick={() => onChange(choicesFor(categories, true))}\n >\n {labels.accept}\n </Button>\n <Button\n id={id('button', 'reject')}\n type=\"button\"\n variant=\"secondary\"\n className={cookieBannerButtonStyles}\n onClick={() => onChange(choicesFor(categories, false))}\n >\n {labels.reject}\n </Button>\n <Button\n id={id('button', 'customize')}\n type=\"button\"\n variant=\"ghost\"\n className={cookieBannerButtonStyles}\n onClick={() => setOpen(true)}\n >\n {labels.customize}\n </Button>\n </div>\n </div>\n </section>\n )}\n <Modal\n open={preferencesOpen}\n onClose={() => setOpen(false)}\n title={labels.preferencesTitle}\n className={mode === 'modal' ? className : undefined}\n footer={\n <>\n <Button\n id={id('button', 'cancel')}\n type=\"button\"\n variant=\"ghost\"\n onClick={() => setOpen(false)}\n >\n {labels.cancel}\n </Button>\n <Button\n id={id('button', 'save')}\n type=\"button\"\n onClick={() => {\n onChange(draft);\n setOpen(false);\n }}\n >\n {labels.save}\n </Button>\n </>\n }\n >\n {labels.preferencesDescription && (\n <RichText as=\"p\" variant=\"p3\" className={cookiePreferencesIntroStyles}>\n {labels.preferencesDescription}\n </RichText>\n )}\n <CategoryList\n categories={categories}\n value={draft}\n onToggle={toggle}\n requiredLabel={labels.required}\n switchId={(name) => id('switch', name)}\n />\n </Modal>\n </>\n );\n};\n"]}
@@ -0,0 +1,238 @@
1
+ import { useDismissableLayer } from './chunk-JCJP427C.js';
2
+ import { selectStyles, selectChevronStyles } from './chunk-4H6VER5P.js';
3
+ import { inputLabelStyles, inputErrorStyles, inputHintStyles } from './chunk-FFKHEBQ7.js';
4
+ import { RichText } from './chunk-SPDOYFCU.js';
5
+ import { cn } from './chunk-6LLGTBM6.js';
6
+ import { forwardRef, useId, useRef, useState, useCallback, useEffect } from 'react';
7
+ import { cva } from 'class-variance-authority';
8
+ import { jsxs, jsx } from 'react/jsx-runtime';
9
+
10
+ var dropdownTriggerStyles = "items-center text-left";
11
+ var dropdownValueStyles = "truncate";
12
+ var dropdownChevronStyles = "transition-transform duration-150 ease-out";
13
+ var dropdownListStyles = [
14
+ "absolute left-0 right-0 top-full z-50 mt-1 max-h-60 overflow-y-auto p-1",
15
+ "rounded-md border border-[var(--input-border)] bg-[var(--input-bg)] shadow-lg",
16
+ "focus:outline-none"
17
+ ].join(" ");
18
+ var dropdownOptionStyles = cva(
19
+ "flex min-h-10 cursor-pointer items-center justify-between gap-3 rounded px-3 text-[var(--input-text)]",
20
+ {
21
+ variants: {
22
+ active: {
23
+ true: "bg-[var(--btn-primary-bg)] text-[var(--btn-primary-text)]",
24
+ false: ""
25
+ },
26
+ selected: {
27
+ true: "font-semibold",
28
+ false: ""
29
+ }
30
+ },
31
+ defaultVariants: {
32
+ active: false,
33
+ selected: false
34
+ }
35
+ }
36
+ );
37
+ var dropdownCheckStyles = "size-4 shrink-0";
38
+ var Dropdown = forwardRef(
39
+ ({
40
+ label,
41
+ options,
42
+ value,
43
+ onChange,
44
+ hint,
45
+ error,
46
+ disabled,
47
+ id: idProp,
48
+ name,
49
+ inputSize,
50
+ state,
51
+ className
52
+ }, ref) => {
53
+ const generatedId = useId();
54
+ const id = idProp ?? generatedId;
55
+ const labelId = `${id}-label`;
56
+ const listId = `${id}-listbox`;
57
+ const containerRef = useRef(null);
58
+ const listRef = useRef(null);
59
+ const [open, setOpen] = useState(false);
60
+ const selectedIndex = Math.max(
61
+ 0,
62
+ options.findIndex((option) => option.value === value)
63
+ );
64
+ const [activeIndex, setActiveIndex] = useState(selectedIndex);
65
+ const last = options.length - 1;
66
+ const resolvedState = error ? "error" : state;
67
+ const close = useCallback(() => setOpen(false), []);
68
+ useDismissableLayer(open, close, containerRef);
69
+ useEffect(() => {
70
+ if (open) {
71
+ listRef.current?.children[activeIndex]?.scrollIntoView?.({ block: "nearest" });
72
+ }
73
+ }, [open, activeIndex]);
74
+ const openAt = (index) => {
75
+ setActiveIndex(index);
76
+ setOpen(true);
77
+ };
78
+ const choose = (index) => {
79
+ const option = options[index];
80
+ if (option && option.value !== value) {
81
+ onChange(option.value);
82
+ }
83
+ setOpen(false);
84
+ };
85
+ const indexForLetter = (key) => {
86
+ const start = (open ? activeIndex : selectedIndex) + 1;
87
+ const ordered = [...options.slice(start), ...options.slice(0, start)];
88
+ const match = ordered.find(
89
+ (option) => option.label.toLowerCase().startsWith(key.toLowerCase())
90
+ );
91
+ return match ? options.indexOf(match) : -1;
92
+ };
93
+ const openKeys = {
94
+ ArrowDown: () => setActiveIndex((index) => Math.min(last, index + 1)),
95
+ ArrowUp: () => setActiveIndex((index) => Math.max(0, index - 1)),
96
+ Home: () => setActiveIndex(0),
97
+ End: () => setActiveIndex(last),
98
+ Enter: () => choose(activeIndex),
99
+ " ": () => choose(activeIndex),
100
+ Escape: close
101
+ };
102
+ const closedKeys = {
103
+ ArrowDown: () => openAt(selectedIndex),
104
+ ArrowUp: () => openAt(selectedIndex),
105
+ Home: () => openAt(0),
106
+ End: () => openAt(last),
107
+ Enter: () => openAt(selectedIndex),
108
+ " ": () => openAt(selectedIndex)
109
+ };
110
+ const handleKeyDown = (event) => {
111
+ if (event.key === "Tab") {
112
+ close();
113
+ return;
114
+ }
115
+ const action = (open ? openKeys : closedKeys)[event.key];
116
+ if (action) {
117
+ event.preventDefault();
118
+ action();
119
+ return;
120
+ }
121
+ if (event.key.length === 1 && event.key.trim() !== "") {
122
+ const index = indexForLetter(event.key);
123
+ if (index >= 0 && open) {
124
+ setActiveIndex(index);
125
+ } else if (index >= 0) {
126
+ choose(index);
127
+ }
128
+ }
129
+ };
130
+ return /* @__PURE__ */ jsxs("div", { className: cn("flex flex-col gap-1.5", className), children: [
131
+ /* @__PURE__ */ jsx(RichText, { as: "span", id: labelId, variant: "p3", className: inputLabelStyles, children: label }),
132
+ /* @__PURE__ */ jsxs("div", { ref: containerRef, className: "relative", children: [
133
+ /* @__PURE__ */ jsx(
134
+ "button",
135
+ {
136
+ ref,
137
+ id,
138
+ type: "button",
139
+ role: "combobox",
140
+ "aria-haspopup": "listbox",
141
+ "aria-expanded": open,
142
+ "aria-controls": listId,
143
+ "aria-labelledby": `${labelId} ${id}`,
144
+ "aria-activedescendant": open ? `${id}-option-${activeIndex}` : void 0,
145
+ "aria-describedby": error ? `${id}-error` : hint ? `${id}-hint` : void 0,
146
+ "aria-invalid": error ? "true" : void 0,
147
+ disabled,
148
+ onClick: () => open ? close() : openAt(selectedIndex),
149
+ onKeyDown: handleKeyDown,
150
+ className: cn(selectStyles({ state: resolvedState, inputSize }), dropdownTriggerStyles),
151
+ children: /* @__PURE__ */ jsx(RichText, { as: "span", variant: "s3", className: cn(dropdownValueStyles, "text-inherit"), children: options[selectedIndex]?.label })
152
+ }
153
+ ),
154
+ /* @__PURE__ */ jsx(
155
+ "svg",
156
+ {
157
+ "aria-hidden": true,
158
+ viewBox: "0 0 24 24",
159
+ fill: "none",
160
+ stroke: "currentColor",
161
+ strokeWidth: 2,
162
+ strokeLinecap: "round",
163
+ strokeLinejoin: "round",
164
+ className: cn(selectChevronStyles, dropdownChevronStyles, open && "rotate-180"),
165
+ children: /* @__PURE__ */ jsx("path", { d: "m6 9 6 6 6-6" })
166
+ }
167
+ ),
168
+ name && /* @__PURE__ */ jsx("input", { type: "hidden", name, value }),
169
+ /* @__PURE__ */ jsx(
170
+ "ul",
171
+ {
172
+ ref: listRef,
173
+ id: listId,
174
+ role: "listbox",
175
+ "aria-labelledby": labelId,
176
+ tabIndex: -1,
177
+ hidden: !open,
178
+ className: dropdownListStyles,
179
+ children: options.map((option, index) => {
180
+ const selected = index === selectedIndex;
181
+ return (
182
+ // Options never take focus (APG select-only combobox): the trigger handles the keys.
183
+ // eslint-disable-next-line jsx-a11y/click-events-have-key-events
184
+ /* @__PURE__ */ jsxs(
185
+ "li",
186
+ {
187
+ id: `${id}-option-${index}`,
188
+ role: "option",
189
+ "aria-selected": selected,
190
+ onPointerDown: (event) => event.preventDefault(),
191
+ onPointerEnter: () => setActiveIndex(index),
192
+ onClick: () => choose(index),
193
+ className: dropdownOptionStyles({ active: index === activeIndex, selected }),
194
+ children: [
195
+ /* @__PURE__ */ jsx(RichText, { as: "span", variant: "s3", className: "text-inherit", children: option.label }),
196
+ selected && /* @__PURE__ */ jsx(
197
+ "svg",
198
+ {
199
+ "aria-hidden": true,
200
+ viewBox: "0 0 24 24",
201
+ fill: "none",
202
+ stroke: "currentColor",
203
+ strokeWidth: 2.5,
204
+ strokeLinecap: "round",
205
+ strokeLinejoin: "round",
206
+ className: dropdownCheckStyles,
207
+ children: /* @__PURE__ */ jsx("path", { d: "M5 12l5 5 9-10" })
208
+ }
209
+ )
210
+ ]
211
+ },
212
+ option.value
213
+ )
214
+ );
215
+ })
216
+ }
217
+ )
218
+ ] }),
219
+ error && /* @__PURE__ */ jsx(
220
+ RichText,
221
+ {
222
+ as: "p",
223
+ id: `${id}-error`,
224
+ role: "alert",
225
+ variant: "p4",
226
+ className: inputErrorStyles,
227
+ children: error
228
+ }
229
+ ),
230
+ !error && hint && /* @__PURE__ */ jsx(RichText, { as: "p", id: `${id}-hint`, variant: "p4", className: inputHintStyles, children: hint })
231
+ ] });
232
+ }
233
+ );
234
+ Dropdown.displayName = "Dropdown";
235
+
236
+ export { Dropdown };
237
+ //# sourceMappingURL=chunk-XUGSIK2P.js.map
238
+ //# sourceMappingURL=chunk-XUGSIK2P.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/molecules/Dropdown/Dropdown.styles.ts","../src/components/molecules/Dropdown/Dropdown.tsx"],"names":[],"mappings":"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","file":"chunk-XUGSIK2P.js","sourcesContent":["import { cva } from 'class-variance-authority';\n\nexport const dropdownTriggerStyles = 'items-center text-left';\n\nexport const dropdownValueStyles = 'truncate';\n\nexport const dropdownChevronStyles = 'transition-transform duration-150 ease-out';\n\nexport const dropdownListStyles = [\n 'absolute left-0 right-0 top-full z-50 mt-1 max-h-60 overflow-y-auto p-1',\n 'rounded-md border border-[var(--input-border)] bg-[var(--input-bg)] shadow-lg',\n 'focus:outline-none',\n].join(' ');\n\nexport const dropdownOptionStyles = cva(\n 'flex min-h-10 cursor-pointer items-center justify-between gap-3 rounded px-3 text-[var(--input-text)]',\n {\n variants: {\n active: {\n true: 'bg-[var(--btn-primary-bg)] text-[var(--btn-primary-text)]',\n false: '',\n },\n selected: {\n true: 'font-semibold',\n false: '',\n },\n },\n defaultVariants: {\n active: false,\n selected: false,\n },\n },\n);\n\nexport const dropdownCheckStyles = 'size-4 shrink-0';\n","import { RichText } from '@components';\nimport { useDismissableLayer } from '@hooks';\nimport { cn } from '@utils';\nimport type { VariantProps } from 'class-variance-authority';\nimport {\n forwardRef,\n useCallback,\n useEffect,\n useId,\n useRef,\n useState,\n type KeyboardEvent,\n} from 'react';\nimport {\n inputErrorStyles,\n inputHintStyles,\n inputLabelStyles,\n} from '@components/atoms/Input/Input.styles';\nimport { selectChevronStyles, selectStyles } from '@components/atoms/Select/Select.styles';\nimport {\n dropdownCheckStyles,\n dropdownChevronStyles,\n dropdownListStyles,\n dropdownOptionStyles,\n dropdownTriggerStyles,\n dropdownValueStyles,\n} from './Dropdown.styles';\n\nexport interface DropdownOption {\n value: string;\n label: string;\n}\n\nexport type DropdownProps = VariantProps<typeof selectStyles> & {\n label: string;\n options: DropdownOption[];\n value: string;\n onChange: (value: string) => void;\n hint?: string;\n error?: string;\n disabled?: boolean;\n id?: string;\n name?: string;\n className?: string;\n};\n\n/**\n * A select whose list is drawn with the theme (a native `<select>` opens the platform picker).\n * WAI-ARIA \"select-only combobox\": focus stays on the trigger and the active option is announced\n * through `aria-activedescendant`; arrows, Home/End, Enter/Space, Escape and typing a letter behave\n * like a native select.\n */\nexport const Dropdown = forwardRef<HTMLButtonElement, DropdownProps>(\n (\n {\n label,\n options,\n value,\n onChange,\n hint,\n error,\n disabled,\n id: idProp,\n name,\n inputSize,\n state,\n className,\n },\n ref,\n ) => {\n const generatedId = useId();\n const id = idProp ?? generatedId;\n const labelId = `${id}-label`;\n const listId = `${id}-listbox`;\n const containerRef = useRef<HTMLDivElement>(null);\n const listRef = useRef<HTMLUListElement>(null);\n const [open, setOpen] = useState(false);\n const selectedIndex = Math.max(\n 0,\n options.findIndex((option) => option.value === value),\n );\n const [activeIndex, setActiveIndex] = useState(selectedIndex);\n const last = options.length - 1;\n const resolvedState = error ? 'error' : state;\n\n const close = useCallback(() => setOpen(false), []);\n useDismissableLayer(open, close, containerRef);\n\n useEffect(() => {\n if (open) {\n listRef.current?.children[activeIndex]?.scrollIntoView?.({ block: 'nearest' });\n }\n }, [open, activeIndex]);\n\n const openAt = (index: number) => {\n setActiveIndex(index);\n setOpen(true);\n };\n\n const choose = (index: number) => {\n const option = options[index];\n if (option && option.value !== value) {\n onChange(option.value);\n }\n setOpen(false);\n };\n\n const indexForLetter = (key: string) => {\n const start = (open ? activeIndex : selectedIndex) + 1;\n const ordered = [...options.slice(start), ...options.slice(0, start)];\n const match = ordered.find((option) =>\n option.label.toLowerCase().startsWith(key.toLowerCase()),\n );\n return match ? options.indexOf(match) : -1;\n };\n\n const openKeys: Record<string, () => void> = {\n ArrowDown: () => setActiveIndex((index) => Math.min(last, index + 1)),\n ArrowUp: () => setActiveIndex((index) => Math.max(0, index - 1)),\n Home: () => setActiveIndex(0),\n End: () => setActiveIndex(last),\n Enter: () => choose(activeIndex),\n ' ': () => choose(activeIndex),\n Escape: close,\n };\n\n const closedKeys: Record<string, () => void> = {\n ArrowDown: () => openAt(selectedIndex),\n ArrowUp: () => openAt(selectedIndex),\n Home: () => openAt(0),\n End: () => openAt(last),\n Enter: () => openAt(selectedIndex),\n ' ': () => openAt(selectedIndex),\n };\n\n const handleKeyDown = (event: KeyboardEvent<HTMLButtonElement>) => {\n if (event.key === 'Tab') {\n close();\n return;\n }\n const action = (open ? openKeys : closedKeys)[event.key];\n if (action) {\n event.preventDefault();\n action();\n return;\n }\n if (event.key.length === 1 && event.key.trim() !== '') {\n const index = indexForLetter(event.key);\n if (index >= 0 && open) {\n setActiveIndex(index);\n } else if (index >= 0) {\n choose(index);\n }\n }\n };\n\n return (\n <div className={cn('flex flex-col gap-1.5', className)}>\n <RichText as=\"span\" id={labelId} variant=\"p3\" className={inputLabelStyles}>\n {label}\n </RichText>\n <div ref={containerRef} className=\"relative\">\n <button\n ref={ref}\n id={id}\n type=\"button\"\n role=\"combobox\"\n aria-haspopup=\"listbox\"\n aria-expanded={open}\n aria-controls={listId}\n aria-labelledby={`${labelId} ${id}`}\n aria-activedescendant={open ? `${id}-option-${activeIndex}` : undefined}\n aria-describedby={error ? `${id}-error` : hint ? `${id}-hint` : undefined}\n aria-invalid={error ? 'true' : undefined}\n disabled={disabled}\n onClick={() => (open ? close() : openAt(selectedIndex))}\n onKeyDown={handleKeyDown}\n className={cn(selectStyles({ state: resolvedState, inputSize }), dropdownTriggerStyles)}\n >\n <RichText as=\"span\" variant=\"s3\" className={cn(dropdownValueStyles, 'text-inherit')}>\n {options[selectedIndex]?.label}\n </RichText>\n </button>\n <svg\n aria-hidden\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={2}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className={cn(selectChevronStyles, dropdownChevronStyles, open && 'rotate-180')}\n >\n <path d=\"m6 9 6 6 6-6\" />\n </svg>\n {name && <input type=\"hidden\" name={name} value={value} />}\n <ul\n ref={listRef}\n id={listId}\n role=\"listbox\"\n aria-labelledby={labelId}\n tabIndex={-1}\n hidden={!open}\n className={dropdownListStyles}\n >\n {options.map((option, index) => {\n const selected = index === selectedIndex;\n return (\n // Options never take focus (APG select-only combobox): the trigger handles the keys.\n // eslint-disable-next-line jsx-a11y/click-events-have-key-events\n <li\n key={option.value}\n id={`${id}-option-${index}`}\n role=\"option\"\n aria-selected={selected}\n onPointerDown={(event) => event.preventDefault()}\n onPointerEnter={() => setActiveIndex(index)}\n onClick={() => choose(index)}\n className={dropdownOptionStyles({ active: index === activeIndex, selected })}\n >\n <RichText as=\"span\" variant=\"s3\" className=\"text-inherit\">\n {option.label}\n </RichText>\n {selected && (\n <svg\n aria-hidden\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={2.5}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className={dropdownCheckStyles}\n >\n <path d=\"M5 12l5 5 9-10\" />\n </svg>\n )}\n </li>\n );\n })}\n </ul>\n </div>\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\nDropdown.displayName = 'Dropdown';\n"]}
@@ -1,4 +1,4 @@
1
- import { RichText } from './chunk-P4CV2EPR.js';
1
+ import { RichText } from './chunk-SPDOYFCU.js';
2
2
  import { cn } from './chunk-6LLGTBM6.js';
3
3
  import { forwardRef } from 'react';
4
4
  import { cva } from 'class-variance-authority';
@@ -67,5 +67,5 @@ var CardFooter = forwardRef(
67
67
  CardFooter.displayName = "CardFooter";
68
68
 
69
69
  export { Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle };
70
- //# sourceMappingURL=chunk-N5CLCKR3.js.map
71
- //# sourceMappingURL=chunk-N5CLCKR3.js.map
70
+ //# sourceMappingURL=chunk-ZH2EDGW6.js.map
71
+ //# sourceMappingURL=chunk-ZH2EDGW6.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/molecules/Card/Card.styles.ts","../src/components/molecules/Card/Card.tsx"],"names":[],"mappings":";;;;;;AAEO,IAAM,UAAA,GAAa,GAAA;AAAA,EACxB,CAAC,kFAAkF,WAAW,CAAA;AAAA,EAC9F;AAAA,IACE,QAAA,EAAU;AAAA,MACR,OAAA,EAAS;AAAA,QACP,IAAA,EAAM,KAAA;AAAA,QACN,KAAA,EAAO;AAAA;AACT,KACF;AAAA,IACA,eAAA,EAAiB;AAAA,MACf,OAAA,EAAS;AAAA;AACX;AAEJ,CAAA;AAEO,IAAM,gBAAA,GAAmB,2BAAA;AAEzB,IAAM,eAAA,GAAkB,+DAAA;AAExB,IAAM,qBAAA,GAAwB,sCAAA;AAE9B,IAAM,iBAAA,GAAoB,WAAA;AAE1B,IAAM,gBAAA,GAAmB,6BAAA;ACTzB,IAAM,IAAA,GAAO,UAAA;AAAA,EAClB,CAAC,EAAE,SAAA,EAAW,SAAA,GAAY,KAAA,EAAO,GAAG,KAAA,EAAM,EAAG,GAAA,qBAC3C,GAAA,CAAC,KAAA,EAAA,EAAI,GAAA,EAAU,WAAW,EAAA,CAAG,UAAA,CAAW,EAAE,OAAA,EAAS,CAAC,SAAA,EAAW,CAAA,EAAG,SAAS,CAAA,EAAI,GAAG,KAAA,EAAO;AAE7F;AACA,IAAA,CAAK,WAAA,GAAc,MAAA;AAIZ,IAAM,UAAA,GAAa,UAAA;AAAA,EACxB,CAAC,EAAE,SAAA,EAAW,GAAG,KAAA,IAAS,GAAA,qBACxB,GAAA,CAAC,KAAA,EAAA,EAAI,GAAA,EAAU,WAAW,EAAA,CAAG,gBAAA,EAAkB,SAAS,CAAA,EAAI,GAAG,KAAA,EAAO;AAE1E;AACA,UAAA,CAAW,WAAA,GAAc,YAAA;AAMlB,IAAM,SAAA,GAAY,UAAA;AAAA,EACvB,CAAC,EAAE,SAAA,EAAW,EAAA,GAAK,MAAM,GAAG,KAAA,IAAS,GAAA,qBACnC,GAAA;AAAA,IAAC,QAAA;AAAA,IAAA;AAAA,MACC,GAAA;AAAA,MACA,EAAA;AAAA,MACA,OAAA,EAAQ,IAAA;AAAA,MACR,SAAA,EAAW,EAAA,CAAG,eAAA,EAAiB,SAAS,CAAA;AAAA,MACvC,GAAG;AAAA;AAAA;AAGV;AACA,SAAA,CAAU,WAAA,GAAc,WAAA;AAIjB,IAAM,eAAA,GAAkB,UAAA;AAAA,EAC7B,CAAC,EAAE,SAAA,EAAW,GAAG,KAAA,IAAS,GAAA,qBACxB,GAAA;AAAA,IAAC,QAAA;AAAA,IAAA;AAAA,MACC,GAAA;AAAA,MACA,EAAA,EAAG,GAAA;AAAA,MACH,OAAA,EAAQ,IAAA;AAAA,MACR,SAAA,EAAW,EAAA,CAAG,qBAAA,EAAuB,SAAS,CAAA;AAAA,MAC7C,GAAG;AAAA;AAAA;AAGV;AACA,eAAA,CAAgB,WAAA,GAAc,iBAAA;AAIvB,IAAM,WAAA,GAAc,UAAA;AAAA,EACzB,CAAC,EAAE,SAAA,EAAW,GAAG,KAAA,IAAS,GAAA,qBACxB,GAAA,CAAC,KAAA,EAAA,EAAI,GAAA,EAAU,WAAW,EAAA,CAAG,iBAAA,EAAmB,SAAS,CAAA,EAAI,GAAG,KAAA,EAAO;AAE3E;AACA,WAAA,CAAY,WAAA,GAAc,aAAA;AAInB,IAAM,UAAA,GAAa,UAAA;AAAA,EACxB,CAAC,EAAE,SAAA,EAAW,GAAG,KAAA,IAAS,GAAA,qBACxB,GAAA,CAAC,KAAA,EAAA,EAAI,GAAA,EAAU,WAAW,EAAA,CAAG,gBAAA,EAAkB,SAAS,CAAA,EAAI,GAAG,KAAA,EAAO;AAE1E;AACA,UAAA,CAAW,WAAA,GAAc,YAAA","file":"chunk-N5CLCKR3.js","sourcesContent":["import { cva } from 'class-variance-authority';\n\nexport const cardStyles = cva(\n ['rounded-xl border border-[var(--border-default)] bg-[var(--surface-secondary)]', 'shadow-sm'],\n {\n variants: {\n padding: {\n true: 'p-6',\n false: '',\n },\n },\n defaultVariants: {\n padding: true,\n },\n },\n);\n\nexport const cardHeaderStyles = 'flex flex-col gap-1.5 p-6';\n\nexport const cardTitleStyles = 'text-lg font-semibold leading-none text-[var(--text-primary)]';\n\nexport const cardDescriptionStyles = 'text-sm text-[var(--text-secondary)]';\n\nexport const cardContentStyles = 'px-6 pb-6';\n\nexport const cardFooterStyles = 'flex items-center px-6 pb-6';\n","import { forwardRef, type ForwardedRef, type HTMLAttributes } from 'react';\nimport { RichText } from '@components';\nimport { cn } from '@utils';\nimport {\n cardContentStyles,\n cardDescriptionStyles,\n cardFooterStyles,\n cardHeaderStyles,\n cardStyles,\n cardTitleStyles,\n} from './Card.styles';\n\nexport type CardProps = HTMLAttributes<HTMLDivElement> & {\n noPadding?: boolean;\n};\n\nexport const Card = forwardRef<HTMLDivElement, CardProps>(\n ({ className, noPadding = false, ...props }, ref) => (\n <div ref={ref} className={cn(cardStyles({ padding: !noPadding }), className)} {...props} />\n ),\n);\nCard.displayName = 'Card';\n\nexport type CardHeaderProps = HTMLAttributes<HTMLDivElement>;\n\nexport const CardHeader = forwardRef<HTMLDivElement, CardHeaderProps>(\n ({ className, ...props }, ref) => (\n <div ref={ref} className={cn(cardHeaderStyles, className)} {...props} />\n ),\n);\nCardHeader.displayName = 'CardHeader';\n\nexport type CardTitleProps = HTMLAttributes<HTMLHeadingElement> & {\n as?: 'h1' | 'h2' | 'h3' | 'h4' | 'h5' | 'h6';\n};\n\nexport const CardTitle = forwardRef<HTMLHeadingElement, CardTitleProps>(\n ({ className, as = 'h3', ...props }, ref) => (\n <RichText\n ref={ref as ForwardedRef<HTMLElement>}\n as={as}\n variant=\"s1\"\n className={cn(cardTitleStyles, className)}\n {...props}\n />\n ),\n);\nCardTitle.displayName = 'CardTitle';\n\nexport type CardDescriptionProps = HTMLAttributes<HTMLParagraphElement>;\n\nexport const CardDescription = forwardRef<HTMLParagraphElement, CardDescriptionProps>(\n ({ className, ...props }, ref) => (\n <RichText\n ref={ref as ForwardedRef<HTMLElement>}\n as=\"p\"\n variant=\"p3\"\n className={cn(cardDescriptionStyles, className)}\n {...props}\n />\n ),\n);\nCardDescription.displayName = 'CardDescription';\n\nexport type CardContentProps = HTMLAttributes<HTMLDivElement>;\n\nexport const CardContent = forwardRef<HTMLDivElement, CardContentProps>(\n ({ className, ...props }, ref) => (\n <div ref={ref} className={cn(cardContentStyles, className)} {...props} />\n ),\n);\nCardContent.displayName = 'CardContent';\n\nexport type CardFooterProps = HTMLAttributes<HTMLDivElement>;\n\nexport const CardFooter = forwardRef<HTMLDivElement, CardFooterProps>(\n ({ className, ...props }, ref) => (\n <div ref={ref} className={cn(cardFooterStyles, className)} {...props} />\n ),\n);\nCardFooter.displayName = 'CardFooter';\n"]}
1
+ {"version":3,"sources":["../src/components/molecules/Card/Card.styles.ts","../src/components/molecules/Card/Card.tsx"],"names":[],"mappings":";;;;;;AAEO,IAAM,UAAA,GAAa,GAAA;AAAA,EACxB,CAAC,kFAAkF,WAAW,CAAA;AAAA,EAC9F;AAAA,IACE,QAAA,EAAU;AAAA,MACR,OAAA,EAAS;AAAA,QACP,IAAA,EAAM,KAAA;AAAA,QACN,KAAA,EAAO;AAAA;AACT,KACF;AAAA,IACA,eAAA,EAAiB;AAAA,MACf,OAAA,EAAS;AAAA;AACX;AAEJ,CAAA;AAEO,IAAM,gBAAA,GAAmB,2BAAA;AAEzB,IAAM,eAAA,GAAkB,+DAAA;AAExB,IAAM,qBAAA,GAAwB,sCAAA;AAE9B,IAAM,iBAAA,GAAoB,WAAA;AAE1B,IAAM,gBAAA,GAAmB,6BAAA;ACTzB,IAAM,IAAA,GAAO,UAAA;AAAA,EAClB,CAAC,EAAE,SAAA,EAAW,SAAA,GAAY,KAAA,EAAO,GAAG,KAAA,EAAM,EAAG,GAAA,qBAC3C,GAAA,CAAC,KAAA,EAAA,EAAI,GAAA,EAAU,WAAW,EAAA,CAAG,UAAA,CAAW,EAAE,OAAA,EAAS,CAAC,SAAA,EAAW,CAAA,EAAG,SAAS,CAAA,EAAI,GAAG,KAAA,EAAO;AAE7F;AACA,IAAA,CAAK,WAAA,GAAc,MAAA;AAIZ,IAAM,UAAA,GAAa,UAAA;AAAA,EACxB,CAAC,EAAE,SAAA,EAAW,GAAG,KAAA,IAAS,GAAA,qBACxB,GAAA,CAAC,KAAA,EAAA,EAAI,GAAA,EAAU,WAAW,EAAA,CAAG,gBAAA,EAAkB,SAAS,CAAA,EAAI,GAAG,KAAA,EAAO;AAE1E;AACA,UAAA,CAAW,WAAA,GAAc,YAAA;AAMlB,IAAM,SAAA,GAAY,UAAA;AAAA,EACvB,CAAC,EAAE,SAAA,EAAW,EAAA,GAAK,MAAM,GAAG,KAAA,IAAS,GAAA,qBACnC,GAAA;AAAA,IAAC,QAAA;AAAA,IAAA;AAAA,MACC,GAAA;AAAA,MACA,EAAA;AAAA,MACA,OAAA,EAAQ,IAAA;AAAA,MACR,SAAA,EAAW,EAAA,CAAG,eAAA,EAAiB,SAAS,CAAA;AAAA,MACvC,GAAG;AAAA;AAAA;AAGV;AACA,SAAA,CAAU,WAAA,GAAc,WAAA;AAIjB,IAAM,eAAA,GAAkB,UAAA;AAAA,EAC7B,CAAC,EAAE,SAAA,EAAW,GAAG,KAAA,IAAS,GAAA,qBACxB,GAAA;AAAA,IAAC,QAAA;AAAA,IAAA;AAAA,MACC,GAAA;AAAA,MACA,EAAA,EAAG,GAAA;AAAA,MACH,OAAA,EAAQ,IAAA;AAAA,MACR,SAAA,EAAW,EAAA,CAAG,qBAAA,EAAuB,SAAS,CAAA;AAAA,MAC7C,GAAG;AAAA;AAAA;AAGV;AACA,eAAA,CAAgB,WAAA,GAAc,iBAAA;AAIvB,IAAM,WAAA,GAAc,UAAA;AAAA,EACzB,CAAC,EAAE,SAAA,EAAW,GAAG,KAAA,IAAS,GAAA,qBACxB,GAAA,CAAC,KAAA,EAAA,EAAI,GAAA,EAAU,WAAW,EAAA,CAAG,iBAAA,EAAmB,SAAS,CAAA,EAAI,GAAG,KAAA,EAAO;AAE3E;AACA,WAAA,CAAY,WAAA,GAAc,aAAA;AAInB,IAAM,UAAA,GAAa,UAAA;AAAA,EACxB,CAAC,EAAE,SAAA,EAAW,GAAG,KAAA,IAAS,GAAA,qBACxB,GAAA,CAAC,KAAA,EAAA,EAAI,GAAA,EAAU,WAAW,EAAA,CAAG,gBAAA,EAAkB,SAAS,CAAA,EAAI,GAAG,KAAA,EAAO;AAE1E;AACA,UAAA,CAAW,WAAA,GAAc,YAAA","file":"chunk-ZH2EDGW6.js","sourcesContent":["import { cva } from 'class-variance-authority';\n\nexport const cardStyles = cva(\n ['rounded-xl border border-[var(--border-default)] bg-[var(--surface-secondary)]', 'shadow-sm'],\n {\n variants: {\n padding: {\n true: 'p-6',\n false: '',\n },\n },\n defaultVariants: {\n padding: true,\n },\n },\n);\n\nexport const cardHeaderStyles = 'flex flex-col gap-1.5 p-6';\n\nexport const cardTitleStyles = 'text-lg font-semibold leading-none text-[var(--text-primary)]';\n\nexport const cardDescriptionStyles = 'text-sm text-[var(--text-secondary)]';\n\nexport const cardContentStyles = 'px-6 pb-6';\n\nexport const cardFooterStyles = 'flex items-center px-6 pb-6';\n","import { RichText } from '@components';\nimport { cn } from '@utils';\nimport { forwardRef, type ForwardedRef, type HTMLAttributes } from 'react';\nimport {\n cardContentStyles,\n cardDescriptionStyles,\n cardFooterStyles,\n cardHeaderStyles,\n cardStyles,\n cardTitleStyles,\n} from './Card.styles';\n\nexport type CardProps = HTMLAttributes<HTMLDivElement> & {\n noPadding?: boolean;\n};\n\nexport const Card = forwardRef<HTMLDivElement, CardProps>(\n ({ className, noPadding = false, ...props }, ref) => (\n <div ref={ref} className={cn(cardStyles({ padding: !noPadding }), className)} {...props} />\n ),\n);\nCard.displayName = 'Card';\n\nexport type CardHeaderProps = HTMLAttributes<HTMLDivElement>;\n\nexport const CardHeader = forwardRef<HTMLDivElement, CardHeaderProps>(\n ({ className, ...props }, ref) => (\n <div ref={ref} className={cn(cardHeaderStyles, className)} {...props} />\n ),\n);\nCardHeader.displayName = 'CardHeader';\n\nexport type CardTitleProps = HTMLAttributes<HTMLHeadingElement> & {\n as?: 'h1' | 'h2' | 'h3' | 'h4' | 'h5' | 'h6';\n};\n\nexport const CardTitle = forwardRef<HTMLHeadingElement, CardTitleProps>(\n ({ className, as = 'h3', ...props }, ref) => (\n <RichText\n ref={ref as ForwardedRef<HTMLElement>}\n as={as}\n variant=\"s1\"\n className={cn(cardTitleStyles, className)}\n {...props}\n />\n ),\n);\nCardTitle.displayName = 'CardTitle';\n\nexport type CardDescriptionProps = HTMLAttributes<HTMLParagraphElement>;\n\nexport const CardDescription = forwardRef<HTMLParagraphElement, CardDescriptionProps>(\n ({ className, ...props }, ref) => (\n <RichText\n ref={ref as ForwardedRef<HTMLElement>}\n as=\"p\"\n variant=\"p3\"\n className={cn(cardDescriptionStyles, className)}\n {...props}\n />\n ),\n);\nCardDescription.displayName = 'CardDescription';\n\nexport type CardContentProps = HTMLAttributes<HTMLDivElement>;\n\nexport const CardContent = forwardRef<HTMLDivElement, CardContentProps>(\n ({ className, ...props }, ref) => (\n <div ref={ref} className={cn(cardContentStyles, className)} {...props} />\n ),\n);\nCardContent.displayName = 'CardContent';\n\nexport type CardFooterProps = HTMLAttributes<HTMLDivElement>;\n\nexport const CardFooter = forwardRef<HTMLDivElement, CardFooterProps>(\n ({ className, ...props }, ref) => (\n <div ref={ref} className={cn(cardFooterStyles, className)} {...props} />\n ),\n);\nCardFooter.displayName = 'CardFooter';\n"]}
@@ -1,4 +1,4 @@
1
- export { Icon } from '../../../chunk-7HQFLM4A.js';
1
+ export { Icon } from '../../../chunk-NA7YKEO4.js';
2
2
  import '../../../chunk-6LLGTBM6.js';
3
3
  //# sourceMappingURL=index.js.map
4
4
  //# sourceMappingURL=index.js.map
@@ -1,4 +1,4 @@
1
- export { Image } from '../../../chunk-5IHM2545.js';
1
+ export { Image } from '../../../chunk-KAU7S3D4.js';
2
2
  import '../../../chunk-6LLGTBM6.js';
3
3
  //# sourceMappingURL=index.js.map
4
4
  //# sourceMappingURL=index.js.map
@@ -1,6 +1,6 @@
1
- export { Input } from '../../../chunk-DP274HDM.js';
1
+ export { Input } from '../../../chunk-IY452YEX.js';
2
2
  import '../../../chunk-FFKHEBQ7.js';
3
- import '../../../chunk-P4CV2EPR.js';
3
+ import '../../../chunk-SPDOYFCU.js';
4
4
  import '../../../chunk-6LLGTBM6.js';
5
5
  //# sourceMappingURL=index.js.map
6
6
  //# sourceMappingURL=index.js.map
@@ -1,4 +1,4 @@
1
- export { Link } from '../../../chunk-D4I5OF3C.js';
1
+ export { Link } from '../../../chunk-5LKLTY55.js';
2
2
  import '../../../chunk-6LLGTBM6.js';
3
3
  //# sourceMappingURL=index.js.map
4
4
  //# sourceMappingURL=index.js.map
@@ -1,4 +1,4 @@
1
- export { RichText, elementByVariant } from '../../../chunk-P4CV2EPR.js';
1
+ export { RichText, elementByVariant } from '../../../chunk-SPDOYFCU.js';
2
2
  import '../../../chunk-6LLGTBM6.js';
3
3
  //# sourceMappingURL=index.js.map
4
4
  //# sourceMappingURL=index.js.map
@@ -2,11 +2,7 @@ import * as react from 'react';
2
2
  import { SelectHTMLAttributes } from 'react';
3
3
  import * as class_variance_authority_types from 'class-variance-authority/types';
4
4
  import { VariantProps } from 'class-variance-authority';
5
-
6
- declare const selectStyles: (props?: ({
7
- state?: "error" | "default" | null | undefined;
8
- inputSize?: "sm" | "md" | "lg" | null | undefined;
9
- } & class_variance_authority_types.ClassProp) | undefined) => string;
5
+ import { s as selectStyles } from '../../../Select.styles-CeZROqOk.js';
10
6
 
11
7
  type SelectProps = SelectHTMLAttributes<HTMLSelectElement> & VariantProps<typeof selectStyles> & {
12
8
  label?: string;
@@ -1,6 +1,7 @@
1
- export { Select } from '../../../chunk-WUEVXL76.js';
1
+ export { Select } from '../../../chunk-DIA7L6IA.js';
2
+ import '../../../chunk-4H6VER5P.js';
2
3
  import '../../../chunk-FFKHEBQ7.js';
3
- import '../../../chunk-P4CV2EPR.js';
4
+ import '../../../chunk-SPDOYFCU.js';
4
5
  import '../../../chunk-6LLGTBM6.js';
5
6
  //# sourceMappingURL=index.js.map
6
7
  //# sourceMappingURL=index.js.map
@@ -1,5 +1,5 @@
1
- export { Switch } from '../../../chunk-ZABQF65Z.js';
2
- import '../../../chunk-P4CV2EPR.js';
1
+ export { Switch } from '../../../chunk-KSNAVEJP.js';
2
+ import '../../../chunk-SPDOYFCU.js';
3
3
  import '../../../chunk-6LLGTBM6.js';
4
4
  //# sourceMappingURL=index.js.map
5
5
  //# sourceMappingURL=index.js.map
@@ -1,6 +1,6 @@
1
- export { Textarea } from '../../../chunk-3YRDRHO3.js';
1
+ export { Textarea } from '../../../chunk-UUW7L2AV.js';
2
2
  import '../../../chunk-FFKHEBQ7.js';
3
- import '../../../chunk-P4CV2EPR.js';
3
+ import '../../../chunk-SPDOYFCU.js';
4
4
  import '../../../chunk-6LLGTBM6.js';
5
5
  //# sourceMappingURL=index.js.map
6
6
  //# sourceMappingURL=index.js.map
@@ -1,10 +1,10 @@
1
- export { BottomSheet } from '../../../chunk-ULLCBART.js';
1
+ export { BottomSheet } from '../../../chunk-NTXFFBL6.js';
2
2
  import '../../../chunk-QT62VC36.js';
3
3
  import '../../../chunk-53YMHM24.js';
4
- import '../../../chunk-BNEEI7S5.js';
5
4
  import '../../../chunk-JCJP427C.js';
5
+ import '../../../chunk-BNEEI7S5.js';
6
6
  import '../../../chunk-P4Z7HH66.js';
7
- import '../../../chunk-P4CV2EPR.js';
7
+ import '../../../chunk-SPDOYFCU.js';
8
8
  import '../../../chunk-6LLGTBM6.js';
9
9
  //# sourceMappingURL=index.js.map
10
10
  //# sourceMappingURL=index.js.map