@inzumer/ui-library 1.5.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 (77) hide show
  1. package/dist/{chunk-BKPP4D3Q.js → chunk-27HTTVFO.js} +2 -2
  2. package/dist/{chunk-BKPP4D3Q.js.map → chunk-27HTTVFO.js.map} +1 -1
  3. package/dist/chunk-4TPQTZSR.js +76 -0
  4. package/dist/chunk-4TPQTZSR.js.map +1 -0
  5. package/dist/{chunk-D4I5OF3C.js → chunk-5LKLTY55.js} +2 -2
  6. package/dist/{chunk-D4I5OF3C.js.map → chunk-5LKLTY55.js.map} +1 -1
  7. package/dist/{chunk-YYNW2PXL.js → chunk-DIA7L6IA.js} +3 -3
  8. package/dist/{chunk-YYNW2PXL.js.map → chunk-DIA7L6IA.js.map} +1 -1
  9. package/dist/{chunk-DP274HDM.js → chunk-IY452YEX.js} +14 -4
  10. package/dist/chunk-IY452YEX.js.map +1 -0
  11. package/dist/{chunk-4CY55XM3.js → chunk-J7X6NLSR.js} +29 -11
  12. package/dist/chunk-J7X6NLSR.js.map +1 -0
  13. package/dist/{chunk-5IHM2545.js → chunk-KAU7S3D4.js} +2 -2
  14. package/dist/{chunk-5IHM2545.js.map → chunk-KAU7S3D4.js.map} +1 -1
  15. package/dist/{chunk-ZABQF65Z.js → chunk-KSNAVEJP.js} +3 -3
  16. package/dist/{chunk-ZABQF65Z.js.map → chunk-KSNAVEJP.js.map} +1 -1
  17. package/dist/chunk-LLJXVAR6.js +184 -0
  18. package/dist/chunk-LLJXVAR6.js.map +1 -0
  19. package/dist/{chunk-7HQFLM4A.js → chunk-NA7YKEO4.js} +2 -2
  20. package/dist/{chunk-7HQFLM4A.js.map → chunk-NA7YKEO4.js.map} +1 -1
  21. package/dist/{chunk-L4BPQAXU.js → chunk-NTXFFBL6.js} +3 -3
  22. package/dist/{chunk-L4BPQAXU.js.map → chunk-NTXFFBL6.js.map} +1 -1
  23. package/dist/{chunk-P4CV2EPR.js → chunk-SPDOYFCU.js} +2 -2
  24. package/dist/{chunk-P4CV2EPR.js.map → chunk-SPDOYFCU.js.map} +1 -1
  25. package/dist/{chunk-42G4RRCZ.js → chunk-TO3FF6FR.js} +3 -3
  26. package/dist/{chunk-42G4RRCZ.js.map → chunk-TO3FF6FR.js.map} +1 -1
  27. package/dist/{chunk-UL33H4AD.js → chunk-TRLFK626.js} +24 -4
  28. package/dist/chunk-TRLFK626.js.map +1 -0
  29. package/dist/{chunk-3YRDRHO3.js → chunk-UUW7L2AV.js} +3 -3
  30. package/dist/{chunk-3YRDRHO3.js.map → chunk-UUW7L2AV.js.map} +1 -1
  31. package/dist/{chunk-PE6XEC7Y.js → chunk-VCJN4FS2.js} +4 -4
  32. package/dist/{chunk-PE6XEC7Y.js.map → chunk-VCJN4FS2.js.map} +1 -1
  33. package/dist/chunk-VK24YOIC.js +184 -0
  34. package/dist/chunk-VK24YOIC.js.map +1 -0
  35. package/dist/{chunk-BGUNAALU.js → chunk-XUGSIK2P.js} +3 -3
  36. package/dist/{chunk-BGUNAALU.js.map → chunk-XUGSIK2P.js.map} +1 -1
  37. package/dist/{chunk-N5CLCKR3.js → chunk-ZH2EDGW6.js} +3 -3
  38. package/dist/{chunk-N5CLCKR3.js.map → chunk-ZH2EDGW6.js.map} +1 -1
  39. package/dist/components/atoms/Icon/index.js +1 -1
  40. package/dist/components/atoms/Image/index.js +1 -1
  41. package/dist/components/atoms/Input/index.js +2 -2
  42. package/dist/components/atoms/Link/index.js +1 -1
  43. package/dist/components/atoms/RichText/index.js +1 -1
  44. package/dist/components/atoms/Select/index.js +2 -2
  45. package/dist/components/atoms/Switch/index.js +2 -2
  46. package/dist/components/atoms/Textarea/index.js +2 -2
  47. package/dist/components/molecules/BottomSheet/index.js +2 -2
  48. package/dist/components/molecules/Breadcrumbs/index.js +3 -3
  49. package/dist/components/molecules/Card/index.js +2 -2
  50. package/dist/components/molecules/Carousel/index.d.ts +61 -0
  51. package/dist/components/molecules/{CookieBanner → Carousel}/index.js +2 -2
  52. package/dist/components/molecules/Drawer/index.js +2 -2
  53. package/dist/components/molecules/Dropdown/index.js +2 -2
  54. package/dist/components/molecules/MediaCard/index.d.ts +56 -0
  55. package/dist/components/molecules/MediaCard/index.js +6 -0
  56. package/dist/components/molecules/Modal/index.d.ts +4 -0
  57. package/dist/components/molecules/Modal/index.js +2 -2
  58. package/dist/components/molecules/Snackbar/index.js +1 -1
  59. package/dist/components/molecules/Timeline/index.d.ts +7 -0
  60. package/dist/components/molecules/Timeline/index.js +3 -2
  61. package/dist/components/organisms/CookieConsent/index.d.ts +59 -0
  62. package/dist/components/{molecules/CookiePreferences → organisms/CookieConsent}/index.js +4 -4
  63. package/dist/components/organisms/CookieConsent/index.js.map +1 -0
  64. package/dist/index.d.ts +3 -2
  65. package/dist/index.js +20 -19
  66. package/package.json +13 -9
  67. package/dist/chunk-4CY55XM3.js.map +0 -1
  68. package/dist/chunk-DP274HDM.js.map +0 -1
  69. package/dist/chunk-LSWJBAM6.js +0 -79
  70. package/dist/chunk-LSWJBAM6.js.map +0 -1
  71. package/dist/chunk-TR7XKJCO.js +0 -85
  72. package/dist/chunk-TR7XKJCO.js.map +0 -1
  73. package/dist/chunk-UL33H4AD.js.map +0 -1
  74. package/dist/components/molecules/CookieBanner/index.d.ts +0 -46
  75. package/dist/components/molecules/CookiePreferences/index.d.ts +0 -34
  76. /package/dist/components/molecules/{CookieBanner → Carousel}/index.js.map +0 -0
  77. /package/dist/components/molecules/{CookiePreferences → MediaCard}/index.js.map +0 -0
@@ -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"]}
@@ -3,7 +3,7 @@ import { useScrollLock } from './chunk-53YMHM24.js';
3
3
  import { useDismissableLayer } from './chunk-JCJP427C.js';
4
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-L4BPQAXU.js.map
87
- //# sourceMappingURL=chunk-L4BPQAXU.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-L4BPQAXU.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"]}
@@ -4,7 +4,7 @@ import { useDismissableLayer } from './chunk-JCJP427C.js';
4
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-42G4RRCZ.js.map
142
- //# sourceMappingURL=chunk-42G4RRCZ.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-42G4RRCZ.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":"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","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"]}
@@ -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"]}
@@ -1,7 +1,7 @@
1
1
  import { useDismissableLayer } from './chunk-JCJP427C.js';
2
2
  import { selectStyles, selectChevronStyles } from './chunk-4H6VER5P.js';
3
3
  import { inputLabelStyles, inputErrorStyles, inputHintStyles } from './chunk-FFKHEBQ7.js';
4
- import { RichText } from './chunk-P4CV2EPR.js';
4
+ import { RichText } from './chunk-SPDOYFCU.js';
5
5
  import { cn } from './chunk-6LLGTBM6.js';
6
6
  import { forwardRef, useId, useRef, useState, useCallback, useEffect } from 'react';
7
7
  import { cva } from 'class-variance-authority';
@@ -234,5 +234,5 @@ var Dropdown = forwardRef(
234
234
  Dropdown.displayName = "Dropdown";
235
235
 
236
236
  export { Dropdown };
237
- //# sourceMappingURL=chunk-BGUNAALU.js.map
238
- //# sourceMappingURL=chunk-BGUNAALU.js.map
237
+ //# sourceMappingURL=chunk-XUGSIK2P.js.map
238
+ //# sourceMappingURL=chunk-XUGSIK2P.js.map