@etus/ui 0.4.0-beta.21 → 0.4.0-beta.22

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 (234) hide show
  1. package/dist/{chunk-KBU4KJKC.js → chunk-2DFFIU44.js} +4 -4
  2. package/dist/{chunk-KBU4KJKC.js.map → chunk-2DFFIU44.js.map} +1 -1
  3. package/dist/{chunk-MR6RUPVT.js → chunk-2JDLQ4VR.js} +3 -3
  4. package/dist/{chunk-MR6RUPVT.js.map → chunk-2JDLQ4VR.js.map} +1 -1
  5. package/dist/{chunk-JE46MFMN.js → chunk-2LVRSLWI.js} +4 -4
  6. package/dist/{chunk-JE46MFMN.js.map → chunk-2LVRSLWI.js.map} +1 -1
  7. package/dist/{chunk-GRODCJS4.js → chunk-2VOKY2TU.js} +4 -4
  8. package/dist/{chunk-GRODCJS4.js.map → chunk-2VOKY2TU.js.map} +1 -1
  9. package/dist/{chunk-UC5J6GWG.js → chunk-3TRT6TKW.js} +6 -6
  10. package/dist/chunk-3TRT6TKW.js.map +1 -0
  11. package/dist/{chunk-UZZCEQH4.js → chunk-3XVOI4HK.js} +3 -3
  12. package/dist/{chunk-UZZCEQH4.js.map → chunk-3XVOI4HK.js.map} +1 -1
  13. package/dist/{chunk-WGKOYZRI.js → chunk-4S6CPTSO.js} +5 -5
  14. package/dist/chunk-4S6CPTSO.js.map +1 -0
  15. package/dist/{chunk-GVNG5ME6.js → chunk-6CO3FRGG.js} +201 -17
  16. package/dist/chunk-6CO3FRGG.js.map +1 -0
  17. package/dist/chunk-7MJS37Q4.js +135 -0
  18. package/dist/chunk-7MJS37Q4.js.map +1 -0
  19. package/dist/{chunk-QXET2TML.js → chunk-A33MLHXO.js} +3 -3
  20. package/dist/{chunk-QXET2TML.js.map → chunk-A33MLHXO.js.map} +1 -1
  21. package/dist/{chunk-STADVFL2.js → chunk-A6BDDZ27.js} +3 -3
  22. package/dist/{chunk-STADVFL2.js.map → chunk-A6BDDZ27.js.map} +1 -1
  23. package/dist/{chunk-WSDWJX4Y.js → chunk-AGXEGVSY.js} +3 -3
  24. package/dist/{chunk-WSDWJX4Y.js.map → chunk-AGXEGVSY.js.map} +1 -1
  25. package/dist/{chunk-R42LSLJL.js → chunk-AOLVER6U.js} +3 -3
  26. package/dist/{chunk-R42LSLJL.js.map → chunk-AOLVER6U.js.map} +1 -1
  27. package/dist/{chunk-YMQDTTO7.js → chunk-CEUARW3D.js} +3 -3
  28. package/dist/{chunk-YMQDTTO7.js.map → chunk-CEUARW3D.js.map} +1 -1
  29. package/dist/{chunk-LDK6ADKM.js → chunk-DZV32N5V.js} +4 -4
  30. package/dist/{chunk-LDK6ADKM.js.map → chunk-DZV32N5V.js.map} +1 -1
  31. package/dist/{chunk-2SUZS6GZ.js → chunk-E5UFATRY.js} +11 -3
  32. package/dist/chunk-E5UFATRY.js.map +1 -0
  33. package/dist/{chunk-RQBYBBMP.js → chunk-EINYBB7T.js} +5 -5
  34. package/dist/{chunk-RQBYBBMP.js.map → chunk-EINYBB7T.js.map} +1 -1
  35. package/dist/{chunk-4LZ53BAG.js → chunk-EKKJXJX7.js} +4 -2
  36. package/dist/chunk-EKKJXJX7.js.map +1 -0
  37. package/dist/{chunk-4OWRNWHW.js → chunk-FCVFYUCL.js} +14 -5
  38. package/dist/chunk-FCVFYUCL.js.map +1 -0
  39. package/dist/{chunk-6QVXMYKH.js → chunk-FGTYI4ZG.js} +3 -3
  40. package/dist/{chunk-6QVXMYKH.js.map → chunk-FGTYI4ZG.js.map} +1 -1
  41. package/dist/{chunk-6G5QK3SU.js → chunk-FLXU5LWR.js} +44 -4
  42. package/dist/chunk-FLXU5LWR.js.map +1 -0
  43. package/dist/{chunk-P4WMDGAQ.js → chunk-G5JO3Q3K.js} +3 -3
  44. package/dist/{chunk-P4WMDGAQ.js.map → chunk-G5JO3Q3K.js.map} +1 -1
  45. package/dist/{chunk-RMJVCJ6U.js → chunk-GKG2LRGY.js} +6 -6
  46. package/dist/chunk-GKG2LRGY.js.map +1 -0
  47. package/dist/{chunk-N7VMQWM3.js → chunk-GN6B4W3G.js} +4 -4
  48. package/dist/{chunk-N7VMQWM3.js.map → chunk-GN6B4W3G.js.map} +1 -1
  49. package/dist/chunk-GX2VJT7D.js +136 -0
  50. package/dist/chunk-GX2VJT7D.js.map +1 -0
  51. package/dist/{chunk-MNYU5MHO.js → chunk-H4KC2YSL.js} +5 -5
  52. package/dist/{chunk-MNYU5MHO.js.map → chunk-H4KC2YSL.js.map} +1 -1
  53. package/dist/{chunk-GLHKHYJY.js → chunk-IARO2PPN.js} +55 -15
  54. package/dist/chunk-IARO2PPN.js.map +1 -0
  55. package/dist/{chunk-ELRIFGMN.js → chunk-JWXZFGNT.js} +30 -6
  56. package/dist/chunk-JWXZFGNT.js.map +1 -0
  57. package/dist/{chunk-Y4FEW7SR.js → chunk-K5RHYIFF.js} +16 -6
  58. package/dist/chunk-K5RHYIFF.js.map +1 -0
  59. package/dist/{chunk-T3LWBCVR.js → chunk-LKCOHB3C.js} +36 -3
  60. package/dist/chunk-LKCOHB3C.js.map +1 -0
  61. package/dist/{chunk-7PX3WBR3.js → chunk-LWIIO75I.js} +5 -3
  62. package/dist/chunk-LWIIO75I.js.map +1 -0
  63. package/dist/{chunk-U7TPJMGY.js → chunk-MR3IPJAO.js} +6 -2
  64. package/dist/chunk-MR3IPJAO.js.map +1 -0
  65. package/dist/chunk-MVL4DVRW.js +177 -0
  66. package/dist/chunk-MVL4DVRW.js.map +1 -0
  67. package/dist/{chunk-L4OQ6BJ5.js → chunk-N3DBRKUS.js} +3 -3
  68. package/dist/{chunk-L4OQ6BJ5.js.map → chunk-N3DBRKUS.js.map} +1 -1
  69. package/dist/{chunk-TIPKU427.js → chunk-N7DAU4LE.js} +3 -3
  70. package/dist/{chunk-TIPKU427.js.map → chunk-N7DAU4LE.js.map} +1 -1
  71. package/dist/{chunk-ZVSMLMMS.js → chunk-NORI6ECA.js} +44 -4
  72. package/dist/chunk-NORI6ECA.js.map +1 -0
  73. package/dist/{chunk-7MLRRVOX.js → chunk-NT4GLWNR.js} +3 -3
  74. package/dist/{chunk-7MLRRVOX.js.map → chunk-NT4GLWNR.js.map} +1 -1
  75. package/dist/{chunk-7AR5QRRX.js → chunk-NZNAR4HJ.js} +27 -11
  76. package/dist/chunk-NZNAR4HJ.js.map +1 -0
  77. package/dist/{chunk-TNSMTINE.js → chunk-OJIFG4LW.js} +3 -3
  78. package/dist/{chunk-TNSMTINE.js.map → chunk-OJIFG4LW.js.map} +1 -1
  79. package/dist/{chunk-PTXC4KPQ.js → chunk-OSHGYI2O.js} +4 -4
  80. package/dist/{chunk-PTXC4KPQ.js.map → chunk-OSHGYI2O.js.map} +1 -1
  81. package/dist/chunk-OW5R4KST.js +108 -0
  82. package/dist/chunk-OW5R4KST.js.map +1 -0
  83. package/dist/{chunk-QJOWG2D4.js → chunk-PVF23ZX2.js} +3 -3
  84. package/dist/{chunk-QJOWG2D4.js.map → chunk-PVF23ZX2.js.map} +1 -1
  85. package/dist/{chunk-KHCHATTD.js → chunk-PYCQBP4O.js} +4 -4
  86. package/dist/{chunk-KHCHATTD.js.map → chunk-PYCQBP4O.js.map} +1 -1
  87. package/dist/{chunk-KDNTSZF5.js → chunk-Q4E7OG7J.js} +3 -3
  88. package/dist/{chunk-KDNTSZF5.js.map → chunk-Q4E7OG7J.js.map} +1 -1
  89. package/dist/{chunk-KLFYTLF3.js → chunk-Q7MAQ7MO.js} +3 -3
  90. package/dist/{chunk-KLFYTLF3.js.map → chunk-Q7MAQ7MO.js.map} +1 -1
  91. package/dist/{chunk-S6BREP2G.js → chunk-QMCQIOCP.js} +21 -7
  92. package/dist/chunk-QMCQIOCP.js.map +1 -0
  93. package/dist/{chunk-SSKSWSVO.js → chunk-R2Z64IC3.js} +4 -4
  94. package/dist/{chunk-SSKSWSVO.js.map → chunk-R2Z64IC3.js.map} +1 -1
  95. package/dist/{chunk-UNHPLKMR.js → chunk-RK27HS7W.js} +3 -3
  96. package/dist/{chunk-UNHPLKMR.js.map → chunk-RK27HS7W.js.map} +1 -1
  97. package/dist/{chunk-IKLFWGFS.js → chunk-RTSAERFS.js} +7 -7
  98. package/dist/{chunk-IKLFWGFS.js.map → chunk-RTSAERFS.js.map} +1 -1
  99. package/dist/{chunk-EO4NGM5W.js → chunk-S7HXZ5T3.js} +65 -16
  100. package/dist/chunk-S7HXZ5T3.js.map +1 -0
  101. package/dist/{chunk-I5RDX6O3.js → chunk-TBPPBA3S.js} +31 -25
  102. package/dist/chunk-TBPPBA3S.js.map +1 -0
  103. package/dist/{chunk-TDANAN5A.js → chunk-TD2EFGHO.js} +7 -3
  104. package/dist/chunk-TD2EFGHO.js.map +1 -0
  105. package/dist/{chunk-3R6MY3YJ.js → chunk-TVAIT3F5.js} +3 -3
  106. package/dist/{chunk-3R6MY3YJ.js.map → chunk-TVAIT3F5.js.map} +1 -1
  107. package/dist/{chunk-VHJ6ALIE.js → chunk-TX4GUAZ6.js} +11 -3
  108. package/dist/chunk-TX4GUAZ6.js.map +1 -0
  109. package/dist/{chunk-7XJQYAGY.js → chunk-U55YU7DB.js} +22 -6
  110. package/dist/chunk-U55YU7DB.js.map +1 -0
  111. package/dist/{chunk-5GV4LDX7.js → chunk-VI3QWOII.js} +4 -2
  112. package/dist/chunk-VI3QWOII.js.map +1 -0
  113. package/dist/{chunk-PXR6CZIL.js → chunk-VYCXCOUH.js} +3 -3
  114. package/dist/{chunk-PXR6CZIL.js.map → chunk-VYCXCOUH.js.map} +1 -1
  115. package/dist/{chunk-SKI25Q7O.js → chunk-W72PXQDH.js} +4 -4
  116. package/dist/{chunk-SKI25Q7O.js.map → chunk-W72PXQDH.js.map} +1 -1
  117. package/dist/{chunk-4SFBDK4E.js → chunk-WTKHA2NF.js} +3 -3
  118. package/dist/{chunk-4SFBDK4E.js.map → chunk-WTKHA2NF.js.map} +1 -1
  119. package/dist/{chunk-KXJ3SEW7.js → chunk-YNZ6T4IU.js} +13 -5
  120. package/dist/chunk-YNZ6T4IU.js.map +1 -0
  121. package/dist/{chunk-7QEFKWUR.js → chunk-YZBCJDYO.js} +4 -4
  122. package/dist/{chunk-7QEFKWUR.js.map → chunk-YZBCJDYO.js.map} +1 -1
  123. package/dist/{chunk-PVIIIQJI.js → chunk-ZTD3QXLY.js} +4 -4
  124. package/dist/{chunk-PVIIIQJI.js.map → chunk-ZTD3QXLY.js.map} +1 -1
  125. package/dist/{chunk-HHWUROMA.js → chunk-ZZFCKHE2.js} +4 -4
  126. package/dist/{chunk-HHWUROMA.js.map → chunk-ZZFCKHE2.js.map} +1 -1
  127. package/dist/components/advanced/Calendar/index.js +3 -3
  128. package/dist/components/advanced/Command/index.js +2 -2
  129. package/dist/components/advanced/EventCalendar/index.js +3 -3
  130. package/dist/components/advanced/FilterBuilder/index.js +5 -5
  131. package/dist/components/advanced/MarkdownEditor/index.js +2 -2
  132. package/dist/components/advanced/ReportBuilder/index.js +4 -4
  133. package/dist/components/advanced/index.js +12 -12
  134. package/dist/components/data-display/Banner/index.js +1 -1
  135. package/dist/components/data-display/BarChart/index.js +1 -1
  136. package/dist/components/data-display/Carousel/index.js +3 -3
  137. package/dist/components/data-display/DataTable/FilterBuilder/index.js +5 -5
  138. package/dist/components/data-display/DataTable/index.js +9 -9
  139. package/dist/components/data-display/ImageGallery/index.js +4 -4
  140. package/dist/components/data-display/Item/index.js +1 -1
  141. package/dist/components/data-display/KPICard/index.js +1 -1
  142. package/dist/components/data-display/List/index.js +2 -2
  143. package/dist/components/data-display/RadarChart/index.js +1 -1
  144. package/dist/components/data-display/RadialChart/index.js +1 -1
  145. package/dist/components/data-display/index.js +35 -35
  146. package/dist/components/feedback/AlertDialog/index.js +3 -3
  147. package/dist/components/feedback/ConfirmModal/index.js +4 -4
  148. package/dist/components/feedback/Dialog/index.js +1 -1
  149. package/dist/components/feedback/ErrorPage/index.js +1 -1
  150. package/dist/components/feedback/Notification/index.js +2 -2
  151. package/dist/components/feedback/index.js +9 -9
  152. package/dist/components/forms/DatePicker/index.js +4 -4
  153. package/dist/components/forms/DateRangePicker/index.js +5 -5
  154. package/dist/components/forms/EmailInput/index.js +3 -3
  155. package/dist/components/forms/InputGroup/index.js +5 -5
  156. package/dist/components/forms/NumberInput/index.js +2 -2
  157. package/dist/components/forms/PasswordInput/index.js +3 -3
  158. package/dist/components/forms/PaymentInput/index.js +1 -1
  159. package/dist/components/forms/PhoneInput/index.js +1 -1
  160. package/dist/components/forms/RadioGroup/index.js +1 -1
  161. package/dist/components/forms/Rating/index.js +1 -1
  162. package/dist/components/forms/SearchInput/index.js +3 -3
  163. package/dist/components/forms/Switch/index.js +1 -1
  164. package/dist/components/forms/TagsInput/index.js +1 -1
  165. package/dist/components/forms/TextInput/index.js +2 -2
  166. package/dist/components/forms/URLInput/index.js +3 -3
  167. package/dist/components/forms/index.js +25 -25
  168. package/dist/components/index.js +137 -137
  169. package/dist/components/layout/Collapsible/index.js +1 -1
  170. package/dist/components/layout/index.js +4 -4
  171. package/dist/components/navigation/AccountSwitch/index.js +3 -3
  172. package/dist/components/navigation/Breadcrumb/index.js +1 -1
  173. package/dist/components/navigation/ContextMenu/index.js +1 -1
  174. package/dist/components/navigation/DropdownMenu/index.js +1 -1
  175. package/dist/components/navigation/Pagination/index.js +3 -3
  176. package/dist/components/navigation/Sidebar/index.js +8 -7
  177. package/dist/components/navigation/index.js +17 -16
  178. package/dist/components/primitives/Avatar/index.js +1 -1
  179. package/dist/components/primitives/Button/index.js +2 -2
  180. package/dist/components/primitives/ButtonGroup/index.js +1 -1
  181. package/dist/components/primitives/ConfirmButton/index.js +4 -4
  182. package/dist/components/primitives/Icon/index.js +1 -1
  183. package/dist/components/primitives/Kbd/index.js +1 -1
  184. package/dist/components/primitives/Link/index.js +1 -1
  185. package/dist/components/primitives/ProgressCircle/index.js +1 -1
  186. package/dist/components/primitives/SplitButton/index.js +2 -2
  187. package/dist/components/primitives/Text/index.js +1 -1
  188. package/dist/components/primitives/index.js +16 -16
  189. package/dist/components/workflow/ApprovalFlow/index.js +4 -4
  190. package/dist/components/workflow/CommentSystem/index.js +4 -4
  191. package/dist/components/workflow/Dashboard/index.js +3 -3
  192. package/dist/components/workflow/DashboardBuilder/index.js +5 -5
  193. package/dist/components/workflow/KanbanBoard/index.js +4 -4
  194. package/dist/components/workflow/ReportGenerator/index.js +3 -3
  195. package/dist/components/workflow/TaskStatus/index.js +2 -2
  196. package/dist/components/workflow/Wizard/index.js +3 -3
  197. package/dist/components/workflow/index.js +16 -16
  198. package/dist/hooks/index.js +1 -1
  199. package/dist/index.d.ts +303 -42
  200. package/dist/index.js +137 -137
  201. package/dist/styles.css +27 -8
  202. package/package.json +2 -2
  203. package/dist/chunk-2SUZS6GZ.js.map +0 -1
  204. package/dist/chunk-4LZ53BAG.js.map +0 -1
  205. package/dist/chunk-4OWRNWHW.js.map +0 -1
  206. package/dist/chunk-5GV4LDX7.js.map +0 -1
  207. package/dist/chunk-6G5QK3SU.js.map +0 -1
  208. package/dist/chunk-6VEQLD2P.js +0 -75
  209. package/dist/chunk-6VEQLD2P.js.map +0 -1
  210. package/dist/chunk-7AR5QRRX.js.map +0 -1
  211. package/dist/chunk-7PX3WBR3.js.map +0 -1
  212. package/dist/chunk-7XJQYAGY.js.map +0 -1
  213. package/dist/chunk-ELRIFGMN.js.map +0 -1
  214. package/dist/chunk-EO4NGM5W.js.map +0 -1
  215. package/dist/chunk-GLHKHYJY.js.map +0 -1
  216. package/dist/chunk-GVNG5ME6.js.map +0 -1
  217. package/dist/chunk-I5RDX6O3.js.map +0 -1
  218. package/dist/chunk-JUZ4JQWH.js +0 -69
  219. package/dist/chunk-JUZ4JQWH.js.map +0 -1
  220. package/dist/chunk-K4UCALQQ.js +0 -67
  221. package/dist/chunk-K4UCALQQ.js.map +0 -1
  222. package/dist/chunk-KXJ3SEW7.js.map +0 -1
  223. package/dist/chunk-RMJVCJ6U.js.map +0 -1
  224. package/dist/chunk-S6BREP2G.js.map +0 -1
  225. package/dist/chunk-T3LWBCVR.js.map +0 -1
  226. package/dist/chunk-TDANAN5A.js.map +0 -1
  227. package/dist/chunk-U7TPJMGY.js.map +0 -1
  228. package/dist/chunk-UC5J6GWG.js.map +0 -1
  229. package/dist/chunk-VHJ6ALIE.js.map +0 -1
  230. package/dist/chunk-WGKOYZRI.js.map +0 -1
  231. package/dist/chunk-WUS45IZW.js +0 -36
  232. package/dist/chunk-WUS45IZW.js.map +0 -1
  233. package/dist/chunk-Y4FEW7SR.js.map +0 -1
  234. package/dist/chunk-ZVSMLMMS.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/feedback/AlertDialog/AlertDialog.tsx"],"names":[],"mappings":"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","file":"chunk-PTXC4KPQ.js","sourcesContent":["\"use client\"\n\nimport * as AlertDialogPrimitive from \"@radix-ui/react-alert-dialog\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\nimport * as React from \"react\"\n\nimport { cn } from \"../../../lib/utils\"\nimport { buttonVariants } from \"../../primitives/Button\"\n\nfunction AlertDialog({\n ...props\n}: React.ComponentProps<typeof AlertDialogPrimitive.Root>) {\n return <AlertDialogPrimitive.Root data-slot=\"alert-dialog\" {...props} />\n}\n\nfunction AlertDialogTrigger({\n ...props\n}: React.ComponentProps<typeof AlertDialogPrimitive.Trigger>) {\n return (\n <AlertDialogPrimitive.Trigger data-slot=\"alert-dialog-trigger\" {...props} />\n )\n}\n\nfunction AlertDialogPortal({\n ...props\n}: React.ComponentProps<typeof AlertDialogPrimitive.Portal>) {\n return (\n <AlertDialogPrimitive.Portal data-slot=\"alert-dialog-portal\" {...props} />\n )\n}\n\nfunction AlertDialogOverlay({\n className,\n ...props\n}: React.ComponentProps<typeof AlertDialogPrimitive.Overlay>) {\n return (\n <AlertDialogPrimitive.Overlay\n className={cn(\n \"data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 fixed inset-0 z-50 bg-[color:var(--alert-dialog-overlay-bg)]\",\n className\n )}\n data-slot=\"alert-dialog-overlay\"\n {...props}\n />\n )\n}\n\nfunction AlertDialogContent({\n className,\n ...props\n}: React.ComponentProps<typeof AlertDialogPrimitive.Content>) {\n return (\n <AlertDialogPortal>\n <AlertDialogOverlay />\n <AlertDialogPrimitive.Content\n className={cn(\n \"data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 fixed top-[50%] left-[50%] z-50 grid w-full translate-x-[-50%] translate-y-[-50%] duration-200\",\n \"bg-[color:var(--alert-dialog-content-bg)] rounded-[var(--alert-dialog-content-radius)] border-[color:var(--alert-dialog-content-border)] shadow-[var(--alert-dialog-content-shadow)] gap-[var(--alert-dialog-content-gap)] p-[var(--alert-dialog-content-padding)] max-w-[var(--alert-dialog-content-max-width)]\",\n className\n )}\n data-slot=\"alert-dialog-content\"\n {...props}\n />\n </AlertDialogPortal>\n )\n}\n\nfunction AlertDialogHeader({\n className,\n ...props\n}: React.ComponentProps<\"div\">) {\n return (\n <div\n className={cn(\"flex flex-col gap-[var(--alert-dialog-header-gap)] text-center sm:text-left\", className)}\n data-slot=\"alert-dialog-header\"\n {...props}\n />\n )\n}\n\nfunction AlertDialogFooter({\n className,\n ...props\n}: React.ComponentProps<\"div\">) {\n return (\n <div\n className={cn(\n \"flex flex-col-reverse gap-[var(--alert-dialog-footer-gap)] sm:flex-row sm:justify-end\",\n className\n )}\n data-slot=\"alert-dialog-footer\"\n {...props}\n />\n )\n}\n\nfunction AlertDialogTitle({\n className,\n ...props\n}: React.ComponentProps<typeof AlertDialogPrimitive.Title>) {\n return (\n <AlertDialogPrimitive.Title\n className={cn(\"text-lg font-semibold\", className)}\n data-slot=\"alert-dialog-title\"\n {...props}\n />\n )\n}\n\nfunction AlertDialogDescription({\n className,\n ...props\n}: React.ComponentProps<typeof AlertDialogPrimitive.Description>) {\n return (\n <AlertDialogPrimitive.Description\n className={cn(\"text-muted-foreground text-sm\", className)}\n data-slot=\"alert-dialog-description\"\n {...props}\n />\n )\n}\n\nfunction AlertDialogAction({\n className,\n variant = \"default\",\n ...props\n}: React.ComponentProps<typeof AlertDialogPrimitive.Action> & {\n variant?: \"default\" | \"destructive\"\n}) {\n return (\n <AlertDialogPrimitive.Action\n className={cn(buttonVariants({ variant }), className)}\n data-slot=\"alert-dialog-action\"\n {...props}\n />\n )\n}\n\nfunction AlertDialogCancel({\n className,\n ...props\n}: React.ComponentProps<typeof AlertDialogPrimitive.Cancel>) {\n return (\n <AlertDialogPrimitive.Cancel\n className={cn(buttonVariants({ variant: \"outline\" }), className)}\n data-slot=\"alert-dialog-cancel\"\n {...props}\n />\n )\n}\n\n\nconst alertDialogIconPillVariants = cva(\n [\n \"flex size-fit items-center justify-center\",\n \"rounded-[var(--alert-dialog-icon-pill-radius)] p-[var(--alert-dialog-icon-pill-padding)]\",\n \"[&_svg]:size-[var(--alert-dialog-icon-pill-icon-size)] [&_svg]:shrink-0\",\n ],\n {\n variants: {\n variant: {\n default:\n \"bg-[color:var(--alert-dialog-icon-pill-color-default-bg)] text-[color:var(--alert-dialog-icon-pill-color-default-fg)]\",\n warning:\n \"bg-[color:var(--alert-dialog-icon-pill-color-warning-bg)] text-[color:var(--alert-dialog-icon-pill-color-warning-fg)]\",\n destructive:\n \"bg-[color:var(--alert-dialog-icon-pill-color-destructive-bg)] text-[color:var(--alert-dialog-icon-pill-color-destructive-fg)]\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n },\n }\n)\n\n/**\n * AlertDialogIconPill - Tinted icon pill for the dialog header (Figma 1405:15827).\n */\nfunction AlertDialogIconPill({\n className,\n variant,\n ...props\n}: React.ComponentProps<\"span\"> & VariantProps<typeof alertDialogIconPillVariants>) {\n return (\n <span\n className={cn(alertDialogIconPillVariants({ variant }), className)}\n data-slot=\"alert-dialog-icon-pill\"\n {...props}\n />\n )\n}\n\nexport {\n AlertDialog,\n AlertDialogAction,\n AlertDialogCancel,\n AlertDialogContent,\n AlertDialogDescription,\n AlertDialogFooter,\n AlertDialogHeader,\n AlertDialogIconPill,\n AlertDialogOverlay,\n AlertDialogPortal,\n AlertDialogTitle,\n AlertDialogTrigger,\n}\n"]}
1
+ {"version":3,"sources":["../src/components/feedback/AlertDialog/AlertDialog.tsx"],"names":[],"mappings":"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","file":"chunk-OSHGYI2O.js","sourcesContent":["\"use client\"\n\nimport * as AlertDialogPrimitive from \"@radix-ui/react-alert-dialog\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\nimport * as React from \"react\"\n\nimport { cn } from \"../../../lib/utils\"\nimport { buttonVariants } from \"../../primitives/Button\"\n\nfunction AlertDialog({\n ...props\n}: React.ComponentProps<typeof AlertDialogPrimitive.Root>) {\n return <AlertDialogPrimitive.Root data-slot=\"alert-dialog\" {...props} />\n}\n\nfunction AlertDialogTrigger({\n ...props\n}: React.ComponentProps<typeof AlertDialogPrimitive.Trigger>) {\n return (\n <AlertDialogPrimitive.Trigger data-slot=\"alert-dialog-trigger\" {...props} />\n )\n}\n\nfunction AlertDialogPortal({\n ...props\n}: React.ComponentProps<typeof AlertDialogPrimitive.Portal>) {\n return (\n <AlertDialogPrimitive.Portal data-slot=\"alert-dialog-portal\" {...props} />\n )\n}\n\nfunction AlertDialogOverlay({\n className,\n ...props\n}: React.ComponentProps<typeof AlertDialogPrimitive.Overlay>) {\n return (\n <AlertDialogPrimitive.Overlay\n className={cn(\n \"data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 fixed inset-0 z-50 bg-[color:var(--alert-dialog-overlay-bg)]\",\n className\n )}\n data-slot=\"alert-dialog-overlay\"\n {...props}\n />\n )\n}\n\nfunction AlertDialogContent({\n className,\n ...props\n}: React.ComponentProps<typeof AlertDialogPrimitive.Content>) {\n return (\n <AlertDialogPortal>\n <AlertDialogOverlay />\n <AlertDialogPrimitive.Content\n className={cn(\n \"data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 fixed top-[50%] left-[50%] z-50 grid w-full translate-x-[-50%] translate-y-[-50%] duration-200\",\n \"bg-[color:var(--alert-dialog-content-bg)] rounded-[var(--alert-dialog-content-radius)] border-[color:var(--alert-dialog-content-border)] shadow-[var(--alert-dialog-content-shadow)] gap-[var(--alert-dialog-content-gap)] p-[var(--alert-dialog-content-padding)] max-w-[calc(100%-2rem)] sm:max-w-[var(--alert-dialog-content-max-width)]\",\n className\n )}\n data-slot=\"alert-dialog-content\"\n {...props}\n />\n </AlertDialogPortal>\n )\n}\n\nfunction AlertDialogHeader({\n className,\n ...props\n}: React.ComponentProps<\"div\">) {\n return (\n <div\n className={cn(\"flex flex-col gap-[var(--alert-dialog-header-gap)] text-center sm:text-left\", className)}\n data-slot=\"alert-dialog-header\"\n {...props}\n />\n )\n}\n\nfunction AlertDialogFooter({\n className,\n ...props\n}: React.ComponentProps<\"div\">) {\n return (\n <div\n className={cn(\n \"flex flex-col-reverse gap-[var(--alert-dialog-footer-gap)] sm:flex-row sm:justify-end\",\n className\n )}\n data-slot=\"alert-dialog-footer\"\n {...props}\n />\n )\n}\n\nfunction AlertDialogTitle({\n className,\n ...props\n}: React.ComponentProps<typeof AlertDialogPrimitive.Title>) {\n return (\n <AlertDialogPrimitive.Title\n className={cn(\"text-lg font-semibold\", className)}\n data-slot=\"alert-dialog-title\"\n {...props}\n />\n )\n}\n\nfunction AlertDialogDescription({\n className,\n ...props\n}: React.ComponentProps<typeof AlertDialogPrimitive.Description>) {\n return (\n <AlertDialogPrimitive.Description\n className={cn(\"text-muted-foreground text-sm\", className)}\n data-slot=\"alert-dialog-description\"\n {...props}\n />\n )\n}\n\nfunction AlertDialogAction({\n className,\n variant = \"default\",\n ...props\n}: React.ComponentProps<typeof AlertDialogPrimitive.Action> & {\n variant?: \"default\" | \"destructive\"\n}) {\n return (\n <AlertDialogPrimitive.Action\n className={cn(buttonVariants({ variant }), className)}\n data-slot=\"alert-dialog-action\"\n {...props}\n />\n )\n}\n\nfunction AlertDialogCancel({\n className,\n ...props\n}: React.ComponentProps<typeof AlertDialogPrimitive.Cancel>) {\n return (\n <AlertDialogPrimitive.Cancel\n className={cn(buttonVariants({ variant: \"outline\" }), className)}\n data-slot=\"alert-dialog-cancel\"\n {...props}\n />\n )\n}\n\n\nconst alertDialogIconPillVariants = cva(\n [\n \"flex size-fit items-center justify-center\",\n \"rounded-[var(--alert-dialog-icon-pill-radius)] p-[var(--alert-dialog-icon-pill-padding)]\",\n \"[&_svg]:size-[var(--alert-dialog-icon-pill-icon-size)] [&_svg]:shrink-0\",\n ],\n {\n variants: {\n variant: {\n default:\n \"bg-[color:var(--alert-dialog-icon-pill-color-default-bg)] text-[color:var(--alert-dialog-icon-pill-color-default-fg)]\",\n warning:\n \"bg-[color:var(--alert-dialog-icon-pill-color-warning-bg)] text-[color:var(--alert-dialog-icon-pill-color-warning-fg)]\",\n destructive:\n \"bg-[color:var(--alert-dialog-icon-pill-color-destructive-bg)] text-[color:var(--alert-dialog-icon-pill-color-destructive-fg)]\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n },\n }\n)\n\n/**\n * AlertDialogIconPill - Tinted icon pill for the dialog header (Figma 1405:15827).\n */\nfunction AlertDialogIconPill({\n className,\n variant,\n ...props\n}: React.ComponentProps<\"span\"> & VariantProps<typeof alertDialogIconPillVariants>) {\n return (\n <span\n className={cn(alertDialogIconPillVariants({ variant }), className)}\n data-slot=\"alert-dialog-icon-pill\"\n {...props}\n />\n )\n}\n\nexport {\n AlertDialog,\n AlertDialogAction,\n AlertDialogCancel,\n AlertDialogContent,\n AlertDialogDescription,\n AlertDialogFooter,\n AlertDialogHeader,\n AlertDialogIconPill,\n AlertDialogOverlay,\n AlertDialogPortal,\n AlertDialogTitle,\n AlertDialogTrigger,\n}\n"]}
@@ -0,0 +1,108 @@
1
+ import { radioGroupVariants, radioGroupIndicatorVariants, radioGroupItemVariants } from './chunk-ONTUN5XH.js';
2
+ import { cn } from './chunk-RVAYDRMA.js';
3
+ import * as RadioGroupPrimitive from '@radix-ui/react-radio-group';
4
+ import * as React from 'react';
5
+ import { jsx, jsxs } from 'react/jsx-runtime';
6
+
7
+ function RadioGroup({
8
+ className,
9
+ orientation = "vertical",
10
+ ...props
11
+ }) {
12
+ return /* @__PURE__ */ jsx(
13
+ RadioGroupPrimitive.Root,
14
+ {
15
+ className: cn(radioGroupVariants({ orientation }), className),
16
+ "data-slot": "radio-group",
17
+ orientation,
18
+ ...props
19
+ }
20
+ );
21
+ }
22
+ function RadioGroupItem({
23
+ className,
24
+ size = "md",
25
+ label,
26
+ description,
27
+ id,
28
+ "aria-describedby": ariaDescribedBy,
29
+ ...props
30
+ }) {
31
+ const generatedId = React.useId();
32
+ const itemId = id ?? generatedId;
33
+ const descriptionId = `${itemId}-description`;
34
+ const describedByParts = [
35
+ description ? descriptionId : void 0,
36
+ ariaDescribedBy
37
+ ].filter(Boolean);
38
+ const describedBy = describedByParts.length > 0 ? describedByParts.join(" ") : void 0;
39
+ const item = /* @__PURE__ */ jsx(
40
+ RadioGroupPrimitive.Item,
41
+ {
42
+ "aria-describedby": describedBy,
43
+ className: cn(radioGroupItemVariants({ size }), className),
44
+ "data-slot": "radio-group-item",
45
+ id: itemId,
46
+ ...props,
47
+ children: /* @__PURE__ */ jsx(
48
+ RadioGroupPrimitive.Indicator,
49
+ {
50
+ className: radioGroupIndicatorVariants({ size }),
51
+ "data-slot": "radio-group-indicator"
52
+ }
53
+ )
54
+ }
55
+ );
56
+ if (!label) return item;
57
+ return /* @__PURE__ */ jsxs(
58
+ "div",
59
+ {
60
+ className: cn(
61
+ "flex gap-2",
62
+ description ? "items-start" : "items-center"
63
+ ),
64
+ "data-slot": "radio-group-item-wrapper",
65
+ children: [
66
+ /* @__PURE__ */ jsx(
67
+ "div",
68
+ {
69
+ className: cn(
70
+ "inline-flex items-center justify-center",
71
+ description && "pt-[var(--radio-control-offset-top)]"
72
+ ),
73
+ children: item
74
+ }
75
+ ),
76
+ /* @__PURE__ */ jsxs("div", { className: "grid gap-0.5", children: [
77
+ /* @__PURE__ */ jsx(
78
+ "label",
79
+ {
80
+ className: cn(
81
+ "text-sm font-medium leading-none cursor-pointer select-none",
82
+ "peer-disabled:cursor-not-allowed peer-disabled:opacity-50",
83
+ size === "lg" && "text-base",
84
+ size === "sm" && "text-xs"
85
+ ),
86
+ "data-slot": "radio-group-item-label",
87
+ htmlFor: itemId,
88
+ children: label
89
+ }
90
+ ),
91
+ description && /* @__PURE__ */ jsx(
92
+ "p",
93
+ {
94
+ className: "text-xs leading-4 text-[color:var(--muted-foreground)] peer-disabled:opacity-50",
95
+ "data-slot": "radio-group-item-description",
96
+ id: descriptionId,
97
+ children: description
98
+ }
99
+ )
100
+ ] })
101
+ ]
102
+ }
103
+ );
104
+ }
105
+
106
+ export { RadioGroup, RadioGroupItem };
107
+ //# sourceMappingURL=chunk-OW5R4KST.js.map
108
+ //# sourceMappingURL=chunk-OW5R4KST.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/forms/RadioGroup/RadioGroup.tsx"],"names":[],"mappings":"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","file":"chunk-OW5R4KST.js","sourcesContent":["\"use client\"\n\nimport type { RadioGroupItemProps, RadioGroupProps } from \"./RadioGroup.types\"\n\nimport * as RadioGroupPrimitive from \"@radix-ui/react-radio-group\"\nimport * as React from \"react\"\n\nimport { cn } from \"../../../lib/utils\"\nimport {\n radioGroupIndicatorVariants,\n radioGroupItemVariants,\n radioGroupVariants,\n} from \"./RadioGroup.variants\"\n\nfunction RadioGroup({\n className,\n orientation = \"vertical\",\n ...props\n}: RadioGroupProps) {\n return (\n <RadioGroupPrimitive.Root\n className={cn(radioGroupVariants({ orientation }), className)}\n data-slot=\"radio-group\"\n orientation={orientation}\n {...props}\n />\n )\n}\n\nfunction RadioGroupItem({\n className,\n size = \"md\",\n label,\n description,\n id,\n \"aria-describedby\": ariaDescribedBy,\n ...props\n}: RadioGroupItemProps) {\n const generatedId = React.useId()\n const itemId = id ?? generatedId\n const descriptionId = `${itemId}-description`\n const describedByParts = [\n description ? descriptionId : undefined,\n ariaDescribedBy,\n ].filter(Boolean)\n const describedBy =\n describedByParts.length > 0 ? describedByParts.join(\" \") : undefined\n\n const item = (\n <RadioGroupPrimitive.Item\n aria-describedby={describedBy}\n className={cn(radioGroupItemVariants({ size }), className)}\n data-slot=\"radio-group-item\"\n id={itemId}\n {...props}\n >\n <RadioGroupPrimitive.Indicator\n className={radioGroupIndicatorVariants({ size })}\n data-slot=\"radio-group-indicator\"\n />\n </RadioGroupPrimitive.Item>\n )\n\n if (!label) return item\n\n return (\n <div\n className={cn(\n \"flex gap-2\",\n description ? \"items-start\" : \"items-center\"\n )}\n data-slot=\"radio-group-item-wrapper\"\n >\n <div\n className={cn(\n \"inline-flex items-center justify-center\",\n description && \"pt-[var(--radio-control-offset-top)]\"\n )}\n >\n {item}\n </div>\n <div className=\"grid gap-0.5\">\n <label\n className={cn(\n \"text-sm font-medium leading-none cursor-pointer select-none\",\n \"peer-disabled:cursor-not-allowed peer-disabled:opacity-50\",\n size === \"lg\" && \"text-base\",\n size === \"sm\" && \"text-xs\"\n )}\n data-slot=\"radio-group-item-label\"\n htmlFor={itemId}\n >\n {label}\n </label>\n {description && (\n <p\n className=\"text-xs leading-4 text-[color:var(--muted-foreground)] peer-disabled:opacity-50\"\n data-slot=\"radio-group-item-description\"\n id={descriptionId}\n >\n {description}\n </p>\n )}\n </div>\n </div>\n )\n}\n\nexport { RadioGroup, RadioGroupItem }\n"]}
@@ -1,5 +1,5 @@
1
1
  import { Lightbox } from './chunk-C34UNXMN.js';
2
- import { Carousel, CarouselContent, CarouselItem, CarouselPrevious, CarouselNext } from './chunk-QXET2TML.js';
2
+ import { Carousel, CarouselContent, CarouselItem, CarouselPrevious, CarouselNext } from './chunk-A33MLHXO.js';
3
3
  import { AspectRatio } from './chunk-45D4O7RK.js';
4
4
  import { cn } from './chunk-RVAYDRMA.js';
5
5
  import { cva } from 'class-variance-authority';
@@ -593,5 +593,5 @@ function ImageGallery({
593
593
  }
594
594
 
595
595
  export { ImageGallery, ImageGalleryItem };
596
- //# sourceMappingURL=chunk-QJOWG2D4.js.map
597
- //# sourceMappingURL=chunk-QJOWG2D4.js.map
596
+ //# sourceMappingURL=chunk-PVF23ZX2.js.map
597
+ //# sourceMappingURL=chunk-PVF23ZX2.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/data-display/ImageGallery/ImageGallery.tsx"],"names":[],"mappings":"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","file":"chunk-QJOWG2D4.js","sourcesContent":["\"use client\"\n\nimport type {\n ImageGalleryGap,\n ImageGalleryItemProps,\n ImageGalleryLayout,\n ImageGalleryProps,\n ImageItem,\n ResponsiveColumns,\n} from \"./ImageGallery.types\"\n\nimport { cva } from \"class-variance-authority\"\nimport { Check } from \"lucide-react\"\nimport * as React from \"react\"\n\nimport { cn } from \"../../../lib/utils\"\nimport { AspectRatio } from \"../../primitives/AspectRatio\"\nimport {\n Carousel,\n CarouselContent,\n CarouselItem,\n CarouselNext,\n CarouselPrevious,\n} from \"../Carousel\"\nimport { Lightbox } from \"../Lightbox\"\n\n// Gap size mapping\nconst gapClasses: Record<ImageGalleryGap, string> = {\n lg: \"gap-6\",\n md: \"gap-4\",\n sm: \"gap-2\",\n}\n\n// Static column class mappings for Tailwind v4 detection\nconst columnClasses: Record<number, string> = {\n 1: \"grid-cols-1\",\n 2: \"grid-cols-2\",\n 3: \"grid-cols-3\",\n 4: \"grid-cols-4\",\n 5: \"grid-cols-5\",\n 6: \"grid-cols-6\",\n}\n\nconst smColumnClasses: Record<number, string> = {\n 1: \"sm:grid-cols-1\",\n 2: \"sm:grid-cols-2\",\n 3: \"sm:grid-cols-3\",\n 4: \"sm:grid-cols-4\",\n 5: \"sm:grid-cols-5\",\n 6: \"sm:grid-cols-6\",\n}\n\nconst mdColumnClasses: Record<number, string> = {\n 1: \"md:grid-cols-1\",\n 2: \"md:grid-cols-2\",\n 3: \"md:grid-cols-3\",\n 4: \"md:grid-cols-4\",\n 5: \"md:grid-cols-5\",\n 6: \"md:grid-cols-6\",\n}\n\nconst lgColumnClasses: Record<number, string> = {\n 1: \"lg:grid-cols-1\",\n 2: \"lg:grid-cols-2\",\n 3: \"lg:grid-cols-3\",\n 4: \"lg:grid-cols-4\",\n 5: \"lg:grid-cols-5\",\n 6: \"lg:grid-cols-6\",\n}\n\nconst xlColumnClasses: Record<number, string> = {\n 1: \"xl:grid-cols-1\",\n 2: \"xl:grid-cols-2\",\n 3: \"xl:grid-cols-3\",\n 4: \"xl:grid-cols-4\",\n 5: \"xl:grid-cols-5\",\n 6: \"xl:grid-cols-6\",\n}\n\n\n// Generate responsive column classes using static mappings\nfunction getColumnClasses(\n columns: number | ResponsiveColumns | undefined\n): string {\n if (columns === undefined) {\n return \"grid-cols-2 sm:grid-cols-2 md:grid-cols-3 lg:grid-cols-4\"\n }\n\n if (typeof columns === \"number\") {\n return columnClasses[columns] ?? \"grid-cols-4\"\n }\n\n const classes: string[] = []\n if (columns.sm) classes.push(smColumnClasses[columns.sm] ?? \"sm:grid-cols-2\")\n if (columns.md) classes.push(mdColumnClasses[columns.md] ?? \"md:grid-cols-3\")\n if (columns.lg) classes.push(lgColumnClasses[columns.lg] ?? \"lg:grid-cols-4\")\n if (columns.xl) classes.push(xlColumnClasses[columns.xl] ?? \"xl:grid-cols-4\")\n\n return classes.join(\" \") || \"grid-cols-2 md:grid-cols-3 lg:grid-cols-4\"\n}\n\n// Item variants for consistent styling\nconst imageGalleryItemVariants = cva(\n [\n \"relative overflow-hidden rounded-md\",\n \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2\",\n \"transition-transform duration-200\",\n \"cursor-pointer\",\n ],\n {\n variants: {\n selected: {\n true: \"ring-2 ring-primary ring-offset-2\",\n false: \"\",\n },\n interactive: {\n true: \"hover:scale-[1.02]\",\n false: \"\",\n },\n },\n defaultVariants: {\n selected: false,\n interactive: true,\n },\n }\n)\n\n/**\n * Subscribe an end-of-list sentinel to the viewport so that scrolling it into\n * view fires `onLoadMore`. No observer is created when `onLoadMore` is omitted\n * or when IntersectionObserver is unavailable (SSR / older runtimes).\n */\nfunction useInfiniteScroll(onLoadMore?: () => void) {\n const sentinelRef = React.useRef<HTMLDivElement | null>(null)\n\n React.useEffect(() => {\n const node = sentinelRef.current\n if (!onLoadMore || !node) return\n if (typeof IntersectionObserver === \"undefined\") return\n\n const observer = new IntersectionObserver(\n (entries) => {\n for (const entry of entries) {\n if (entry.isIntersecting) {\n onLoadMore()\n }\n }\n },\n { rootMargin: \"200px\" }\n )\n observer.observe(node)\n\n return () => {\n observer.disconnect()\n }\n }, [onLoadMore])\n\n return sentinelRef\n}\n\n/**\n * Individual gallery item component\n */\nfunction ImageGalleryItem({\n aspectRatio = 1,\n className,\n interactive = true,\n enableSelection = false,\n image,\n index: _index,\n isSelected = false,\n onClick,\n onImageError,\n onImageLoad,\n ...props\n}: ImageGalleryItemProps) {\n const [imageState, setImageState] = React.useState<\n \"error\" | \"loaded\" | \"loading\"\n >(\"loading\")\n\n const handleLoad = React.useCallback(() => {\n setImageState(\"loaded\")\n onImageLoad?.()\n }, [onImageLoad])\n\n const handleError = React.useCallback(() => {\n setImageState(\"error\")\n onImageError?.(new Error(`Failed to load image: ${image.src}`))\n }, [image.src, onImageError])\n\n const handleKeyDown = React.useCallback(\n (event: React.KeyboardEvent) => {\n if (event.key === \"Enter\" || event.key === \" \") {\n event.preventDefault()\n onClick?.()\n }\n },\n [onClick]\n )\n\n return (\n <button\n aria-label={\n enableSelection && isSelected\n ? `${image.alt} (selected)`\n : image.alt\n }\n className={cn(\n imageGalleryItemVariants({\n selected: isSelected,\n interactive,\n }),\n className\n )}\n aria-pressed={enableSelection ? isSelected : undefined}\n data-error={imageState === \"error\" || undefined}\n data-loading={imageState === \"loading\" || undefined}\n data-selected={isSelected || undefined}\n data-slot=\"image-gallery-item\"\n type=\"button\"\n onClick={onClick}\n onKeyDown={handleKeyDown}\n {...props}\n >\n <AspectRatio ratio={aspectRatio}>\n {imageState === \"loading\" && (\n <div className=\"absolute inset-0 animate-pulse bg-muted\" />\n )}\n {imageState === \"error\" ? (\n <div className=\"flex h-full w-full items-center justify-center bg-muted text-muted-foreground\">\n <span className=\"text-sm\">Failed to load</span>\n </div>\n ) : (\n <img\n className={cn(\n \"h-full w-full object-cover transition-opacity duration-200\",\n imageState === \"loading\" ? \"opacity-0\" : \"opacity-100\"\n )}\n alt={image.alt}\n data-slot=\"image-gallery-image\"\n loading=\"lazy\"\n src={image.thumbnail ?? image.src}\n onError={handleError}\n onLoad={handleLoad}\n />\n )}\n </AspectRatio>\n\n {/* Selection indicator */}\n {enableSelection && isSelected && (\n <div className=\"absolute right-2 top-2 flex h-6 w-6 items-center justify-center rounded-full bg-primary text-primary-foreground\">\n <Check className=\"h-4 w-4\" />\n </div>\n )}\n </button>\n )\n}\n\n/**\n * Grid layout component\n */\nfunction GridLayout({\n aspectRatio = 1,\n columns,\n enableSelection = false,\n gap = \"md\",\n images,\n onImageError,\n onImageLoad,\n onItemClick,\n selectedIds = [],\n}: {\n aspectRatio?: number\n columns?: number | ResponsiveColumns\n enableSelection?: boolean\n gap?: ImageGalleryGap\n images: ImageItem[]\n onImageError?: (image: ImageItem, error: Error) => void\n onImageLoad?: (image: ImageItem) => void\n onItemClick: (image: ImageItem, index: number) => void\n selectedIds?: string[]\n}) {\n // Only emit inline-style fallback for fixed numeric column counts.\n // For responsive ResponsiveColumns objects, Tailwind classes handle breakpoints —\n // inline style would override them and break responsiveness.\n const inlineGridStyle =\n typeof columns === \"number\"\n ? { gridTemplateColumns: `repeat(${String(columns)}, minmax(0, 1fr))` }\n : undefined\n\n return (\n <div\n className={cn(\"grid\", getColumnClasses(columns), gapClasses[gap])}\n data-layout=\"grid\"\n style={inlineGridStyle}\n >\n {images.map((image, index) => (\n <ImageGalleryItem\n key={image.id}\n aspectRatio={aspectRatio}\n enableSelection={enableSelection}\n image={image}\n index={index}\n isSelected={selectedIds.includes(image.id)}\n onClick={() => {\n onItemClick(image, index)\n }}\n onImageError={(error) => {\n onImageError?.(image, error)\n }}\n onImageLoad={() => {\n onImageLoad?.(image)\n }}\n />\n ))}\n </div>\n )\n}\n\n/**\n * Masonry layout component\n * Uses CSS columns for a Pinterest-style layout\n */\nfunction MasonryLayout({\n columns,\n enableSelection = false,\n gap = \"md\",\n images,\n onImageError,\n onImageLoad,\n onItemClick,\n selectedIds = [],\n}: {\n columns?: number | ResponsiveColumns\n enableSelection?: boolean\n gap?: ImageGalleryGap\n images: ImageItem[]\n onImageError?: (image: ImageItem, error: Error) => void\n onImageLoad?: (image: ImageItem) => void\n onItemClick: (image: ImageItem, index: number) => void\n selectedIds?: string[]\n}) {\n const columnCount =\n typeof columns === \"number\" ? columns : columns?.lg ?? columns?.md ?? 3\n\n const gapValue = gap === \"sm\" ? \"0.5rem\" : gap === \"lg\" ? \"1.5rem\" : \"1rem\"\n\n return (\n <div\n style={{\n columnCount,\n columnGap: gapValue,\n }}\n className=\"[column-fill:balance]\"\n data-layout=\"masonry\"\n >\n {images.map((image, index) => {\n const aspectRatio =\n image.width && image.height ? image.width / image.height : 1\n\n return (\n <div\n key={image.id}\n style={{\n marginBottom: gapValue,\n }}\n className=\"mb-2 break-inside-avoid md:mb-4 lg:mb-6\"\n >\n <ImageGalleryItem\n aspectRatio={aspectRatio}\n enableSelection={enableSelection}\n image={image}\n index={index}\n isSelected={selectedIds.includes(image.id)}\n onClick={() => {\n onItemClick(image, index)\n }}\n onImageError={(error) => {\n onImageError?.(image, error)\n }}\n onImageLoad={() => {\n onImageLoad?.(image)\n }}\n />\n </div>\n )\n })}\n </div>\n )\n}\n\n/**\n * Featured layout component\n * Shows first image large with thumbnails on the side\n */\nfunction FeaturedLayout({\n aspectRatio = 1,\n enableSelection = false,\n gap = \"md\",\n images,\n onImageError,\n onImageLoad,\n onItemClick,\n selectedIds = [],\n}: {\n aspectRatio?: number\n enableSelection?: boolean\n gap?: ImageGalleryGap\n images: ImageItem[]\n onImageError?: (image: ImageItem, error: Error) => void\n onImageLoad?: (image: ImageItem) => void\n onItemClick: (image: ImageItem, index: number) => void\n selectedIds?: string[]\n}) {\n const [featuredIndex, setFeaturedIndex] = React.useState(0)\n\n const handleThumbnailClick = React.useCallback(\n (image: ImageItem, originalIndex: number) => {\n setFeaturedIndex(originalIndex)\n onItemClick(image, originalIndex)\n },\n [onItemClick]\n )\n\n if (images.length === 0) return null\n\n const featuredImage = images[featuredIndex]\n if (!featuredImage) return null\n\n const thumbnails = images.filter((_, i) => i !== featuredIndex)\n\n return (\n <div\n className={cn(\"flex flex-col gap-4 md:flex-row\", gapClasses[gap])}\n data-layout=\"featured\"\n >\n {/* Main featured image */}\n <div className=\"flex-1\">\n <ImageGalleryItem\n aspectRatio={aspectRatio}\n className=\"h-full\"\n enableSelection={enableSelection}\n image={featuredImage}\n index={featuredIndex}\n isSelected={selectedIds.includes(featuredImage.id)}\n onClick={() => {\n onItemClick(featuredImage, featuredIndex)\n }}\n onImageError={(error) => {\n onImageError?.(featuredImage, error)\n }}\n onImageLoad={() => {\n onImageLoad?.(featuredImage)\n }}\n />\n </div>\n\n {/* Thumbnails sidebar */}\n {thumbnails.length > 0 && (\n <div\n className={cn(\n \"flex w-full flex-row md:w-24 md:flex-col lg:w-32\",\n gapClasses[gap]\n )}\n >\n {thumbnails.map((image) => {\n const originalIndex = images.findIndex((img) => img.id === image.id)\n return (\n <ImageGalleryItem\n key={image.id}\n aspectRatio={1}\n className=\"flex-1 md:flex-none\"\n enableSelection={enableSelection}\n image={image}\n index={originalIndex}\n interactive={enableSelection}\n isSelected={selectedIds.includes(image.id)}\n onClick={() => {\n handleThumbnailClick(image, originalIndex)\n }}\n onImageError={(error) => {\n onImageError?.(image, error)\n }}\n onImageLoad={() => {\n onImageLoad?.(image)\n }}\n />\n )\n })}\n </div>\n )}\n </div>\n )\n}\n\n/**\n * Carousel layout component\n *\n * Composes the shared Carousel primitive (drag, keyboard arrows, prev/next\n * buttons) instead of re-implementing embla. The horizontal padding leaves\n * room for the absolutely-positioned navigation buttons.\n */\nfunction CarouselLayout({\n aspectRatio = 1,\n enableSelection = false,\n images,\n onImageError,\n onImageLoad,\n onItemClick,\n selectedIds = [],\n}: {\n aspectRatio?: number\n enableSelection?: boolean\n images: ImageItem[]\n onImageError?: (image: ImageItem, error: Error) => void\n onImageLoad?: (image: ImageItem) => void\n onItemClick: (image: ImageItem, index: number) => void\n selectedIds?: string[]\n}) {\n return (\n <div\n className=\"px-[var(--carousel-button-offset)]\"\n data-layout=\"carousel\"\n >\n <Carousel className=\"w-full\" opts={{ align: \"start\", loop: false }}>\n <CarouselContent>\n {images.map((image, index) => (\n <CarouselItem\n key={image.id}\n className=\"basis-full sm:basis-1/2 md:basis-1/3 lg:basis-1/4\"\n >\n <ImageGalleryItem\n aspectRatio={aspectRatio}\n enableSelection={enableSelection}\n image={image}\n index={index}\n isSelected={selectedIds.includes(image.id)}\n onClick={() => {\n onItemClick(image, index)\n }}\n onImageError={(error) => {\n onImageError?.(image, error)\n }}\n onImageLoad={() => {\n onImageLoad?.(image)\n }}\n />\n </CarouselItem>\n ))}\n </CarouselContent>\n <CarouselPrevious />\n <CarouselNext />\n </Carousel>\n </div>\n )\n}\n\n/**\n * Loading skeleton for the gallery\n */\nfunction LoadingSkeleton({\n aspectRatio = 1,\n columns,\n count = 8,\n gap = \"md\",\n}: {\n aspectRatio?: number\n columns?: number | ResponsiveColumns\n count?: number\n gap?: ImageGalleryGap\n}) {\n // Generate stable keys for skeleton items\n const skeletonKeys = React.useMemo(\n () => Array.from({ length: count }, (_, i) => `skeleton-${String(i)}`),\n [count]\n )\n\n const skeletonInlineStyle =\n typeof columns === \"number\"\n ? { gridTemplateColumns: `repeat(${String(columns)}, minmax(0, 1fr))` }\n : undefined\n\n return (\n <div\n className={cn(\"grid\", getColumnClasses(columns), gapClasses[gap])}\n data-loading=\"true\"\n style={skeletonInlineStyle}\n >\n {skeletonKeys.map((key) => (\n <AspectRatio key={key} ratio={aspectRatio}>\n <div className=\"h-full w-full animate-pulse rounded-md bg-muted\" />\n </AspectRatio>\n ))}\n </div>\n )\n}\n\n/**\n * ImageGallery - A component for displaying collections of images in various layouts\n *\n * Composes the {@link Carousel} primitive for the `carousel` layout and the\n * {@link Lightbox} for full-screen viewing (`enableLightbox`). `enableLightbox`\n * and `enableSelection` are mutually exclusive — see the prop docs.\n *\n * @example\n * ```tsx\n * <ImageGallery\n * images={[\n * { id: \"1\", src: \"/photo.jpg\", alt: \"Beach sunset\" },\n * { id: \"2\", src: \"/mountain.jpg\", alt: \"Mountain view\" },\n * ]}\n * layout=\"grid\"\n * columns={{ sm: 2, md: 3, lg: 4 }}\n * gap=\"md\"\n * />\n * ```\n */\nfunction ImageGallery({\n aspectRatio = 1,\n className,\n columns,\n enableLightbox = false,\n enableSelection = false,\n gap = \"md\",\n images,\n layout = \"grid\",\n loading = false,\n maxSelection,\n onImageClick,\n onImageError,\n onImageLoad,\n onLoadMore,\n onSelectionChange,\n ref,\n selectedIds: controlledSelectedIds,\n ...props\n}: ImageGalleryProps) {\n // `enableLightbox` and `enableSelection` are mutually exclusive: a click\n // cannot both open a viewer and toggle a selection. Selection wins; the\n // lightbox is disabled and a dev-only warning flags the misuse.\n const isProd =\n // eslint-disable-next-line @typescript-eslint/dot-notation -- noPropertyAccessFromIndexSignature; bracket access on process.env is required by CI tsc.\n typeof process !== \"undefined\" && process.env[\"NODE_ENV\"] === \"production\"\n const lightboxEnabled = enableLightbox && !enableSelection\n if (enableLightbox && enableSelection && !isProd) {\n\n console.warn(\n \"<ImageGallery> received both `enableLightbox` and `enableSelection`. They are mutually exclusive; `enableSelection` takes precedence and the lightbox is disabled. Enable only one.\"\n )\n }\n\n // Internal selection state when uncontrolled\n const [internalSelectedIds, setInternalSelectedIds] = React.useState<\n string[]\n >([])\n const selectedIds = controlledSelectedIds ?? internalSelectedIds\n\n // Lightbox state — index of the image to open in the full-screen viewer\n const [lightboxOpen, setLightboxOpen] = React.useState(false)\n const [lightboxIndex, setLightboxIndex] = React.useState(0)\n\n const sentinelRef = useInfiniteScroll(onLoadMore)\n\n const handleItemClick = React.useCallback(\n (image: ImageItem, index: number) => {\n // Handle selection mode\n if (enableSelection) {\n const newSelectedIds = selectedIds.includes(image.id)\n ? selectedIds.filter((id) => id !== image.id)\n : maxSelection && selectedIds.length >= maxSelection\n ? selectedIds // Don't add if at max\n : [...selectedIds, image.id]\n\n if (controlledSelectedIds === undefined) {\n setInternalSelectedIds(newSelectedIds)\n }\n onSelectionChange?.(newSelectedIds)\n }\n\n // Open the lightbox (mutually exclusive with selection)\n if (lightboxEnabled) {\n setLightboxIndex(index)\n setLightboxOpen(true)\n }\n\n // Always call onImageClick callback\n onImageClick?.(image, index)\n },\n [\n enableSelection,\n selectedIds,\n maxSelection,\n controlledSelectedIds,\n onSelectionChange,\n lightboxEnabled,\n onImageClick,\n ]\n )\n\n // Render loading skeleton\n if (loading) {\n return (\n <div\n ref={ref}\n aria-busy=\"true\"\n aria-label=\"Image gallery loading\"\n className={cn(\"relative w-full\", className)}\n data-slot=\"image-gallery\"\n role=\"group\"\n {...props}\n >\n <LoadingSkeleton\n aspectRatio={aspectRatio}\n columns={columns}\n count={8}\n gap={gap}\n />\n </div>\n )\n }\n\n // Empty state\n if (images.length === 0) {\n return (\n <div\n ref={ref}\n className={cn(\n \"flex min-h-52 items-center justify-center rounded-lg border-2 border-dashed border-muted\",\n className\n )}\n aria-label=\"Empty image gallery\"\n data-slot=\"image-gallery\"\n role=\"group\"\n {...props}\n >\n <p className=\"text-muted-foreground\">No images to display</p>\n </div>\n )\n }\n\n const layoutProps = {\n aspectRatio,\n columns,\n enableSelection,\n gap,\n images,\n onImageError,\n onImageLoad,\n onItemClick: handleItemClick,\n selectedIds,\n }\n\n const layoutComponents: Record<ImageGalleryLayout, React.ReactNode> = {\n carousel: <CarouselLayout {...layoutProps} />,\n featured: <FeaturedLayout {...layoutProps} />,\n grid: <GridLayout {...layoutProps} />,\n masonry: <MasonryLayout {...layoutProps} />,\n }\n\n return (\n <div\n ref={ref}\n aria-label={`Image gallery with ${String(images.length)} images`}\n aria-roledescription=\"gallery\"\n className={cn(\"relative w-full\", className)}\n data-layout={layout}\n data-slot=\"image-gallery\"\n role=\"group\"\n {...props}\n >\n {layoutComponents[layout]}\n\n {/* Infinite-scroll sentinel — observed only when onLoadMore is set */}\n {onLoadMore && (\n <div\n ref={sentinelRef}\n aria-hidden=\"true\"\n className=\"h-px w-full\"\n data-slot=\"image-gallery-sentinel\"\n />\n )}\n\n {/* Full-screen viewer — composed from the shared Lightbox primitive */}\n {lightboxEnabled && (\n <Lightbox\n images={images}\n initialIndex={lightboxIndex}\n open={lightboxOpen}\n onOpenChange={setLightboxOpen}\n />\n )}\n </div>\n )\n}\n\nexport { ImageGallery, ImageGalleryItem }\n"]}
1
+ {"version":3,"sources":["../src/components/data-display/ImageGallery/ImageGallery.tsx"],"names":[],"mappings":";;;;;;;;;AA2BA,IAAM,UAAA,GAA8C;AAAA,EAClD,EAAA,EAAI,OAAA;AAAA,EACJ,EAAA,EAAI,OAAA;AAAA,EACJ,EAAA,EAAI;AACN,CAAA;AAGA,IAAM,aAAA,GAAwC;AAAA,EAC5C,CAAA,EAAG,aAAA;AAAA,EACH,CAAA,EAAG,aAAA;AAAA,EACH,CAAA,EAAG,aAAA;AAAA,EACH,CAAA,EAAG,aAAA;AAAA,EACH,CAAA,EAAG,aAAA;AAAA,EACH,CAAA,EAAG;AACL,CAAA;AAEA,IAAM,eAAA,GAA0C;AAAA,EAC9C,CAAA,EAAG,gBAAA;AAAA,EACH,CAAA,EAAG,gBAAA;AAAA,EACH,CAAA,EAAG,gBAAA;AAAA,EACH,CAAA,EAAG,gBAAA;AAAA,EACH,CAAA,EAAG,gBAAA;AAAA,EACH,CAAA,EAAG;AACL,CAAA;AAEA,IAAM,eAAA,GAA0C;AAAA,EAC9C,CAAA,EAAG,gBAAA;AAAA,EACH,CAAA,EAAG,gBAAA;AAAA,EACH,CAAA,EAAG,gBAAA;AAAA,EACH,CAAA,EAAG,gBAAA;AAAA,EACH,CAAA,EAAG,gBAAA;AAAA,EACH,CAAA,EAAG;AACL,CAAA;AAEA,IAAM,eAAA,GAA0C;AAAA,EAC9C,CAAA,EAAG,gBAAA;AAAA,EACH,CAAA,EAAG,gBAAA;AAAA,EACH,CAAA,EAAG,gBAAA;AAAA,EACH,CAAA,EAAG,gBAAA;AAAA,EACH,CAAA,EAAG,gBAAA;AAAA,EACH,CAAA,EAAG;AACL,CAAA;AAEA,IAAM,eAAA,GAA0C;AAAA,EAC9C,CAAA,EAAG,gBAAA;AAAA,EACH,CAAA,EAAG,gBAAA;AAAA,EACH,CAAA,EAAG,gBAAA;AAAA,EACH,CAAA,EAAG,gBAAA;AAAA,EACH,CAAA,EAAG,gBAAA;AAAA,EACH,CAAA,EAAG;AACL,CAAA;AAIA,SAAS,iBACP,OAAA,EACQ;AACR,EAAA,IAAI,YAAY,MAAA,EAAW;AACzB,IAAA,OAAO,0DAAA;AAAA,EACT;AAEA,EAAA,IAAI,OAAO,YAAY,QAAA,EAAU;AAC/B,IAAA,OAAO,aAAA,CAAc,OAAO,CAAA,IAAK,aAAA;AAAA,EACnC;AAEA,EAAA,MAAM,UAAoB,EAAC;AAC3B,EAAA,IAAI,OAAA,CAAQ,IAAI,OAAA,CAAQ,IAAA,CAAK,gBAAgB,OAAA,CAAQ,EAAE,KAAK,gBAAgB,CAAA;AAC5E,EAAA,IAAI,OAAA,CAAQ,IAAI,OAAA,CAAQ,IAAA,CAAK,gBAAgB,OAAA,CAAQ,EAAE,KAAK,gBAAgB,CAAA;AAC5E,EAAA,IAAI,OAAA,CAAQ,IAAI,OAAA,CAAQ,IAAA,CAAK,gBAAgB,OAAA,CAAQ,EAAE,KAAK,gBAAgB,CAAA;AAC5E,EAAA,IAAI,OAAA,CAAQ,IAAI,OAAA,CAAQ,IAAA,CAAK,gBAAgB,OAAA,CAAQ,EAAE,KAAK,gBAAgB,CAAA;AAE5E,EAAA,OAAO,OAAA,CAAQ,IAAA,CAAK,GAAG,CAAA,IAAK,2CAAA;AAC9B;AAGA,IAAM,wBAAA,GAA2B,GAAA;AAAA,EAC/B;AAAA,IACE,qCAAA;AAAA,IACA,qGAAA;AAAA,IACA,mCAAA;AAAA,IACA;AAAA,GACF;AAAA,EACA;AAAA,IACE,QAAA,EAAU;AAAA,MACR,QAAA,EAAU;AAAA,QACR,IAAA,EAAM,mCAAA;AAAA,QACN,KAAA,EAAO;AAAA,OACT;AAAA,MACA,WAAA,EAAa;AAAA,QACX,IAAA,EAAM,oBAAA;AAAA,QACN,KAAA,EAAO;AAAA;AACT,KACF;AAAA,IACA,eAAA,EAAiB;AAAA,MACf,QAAA,EAAU,KAAA;AAAA,MACV,WAAA,EAAa;AAAA;AACf;AAEJ,CAAA;AAOA,SAAS,kBAAkB,UAAA,EAAyB;AAClD,EAAA,MAAM,WAAA,GAAoB,aAA8B,IAAI,CAAA;AAE5D,EAAM,gBAAU,MAAM;AACpB,IAAA,MAAM,OAAO,WAAA,CAAY,OAAA;AACzB,IAAA,IAAI,CAAC,UAAA,IAAc,CAAC,IAAA,EAAM;AAC1B,IAAA,IAAI,OAAO,yBAAyB,WAAA,EAAa;AAEjD,IAAA,MAAM,WAAW,IAAI,oBAAA;AAAA,MACnB,CAAC,OAAA,KAAY;AACX,QAAA,KAAA,MAAW,SAAS,OAAA,EAAS;AAC3B,UAAA,IAAI,MAAM,cAAA,EAAgB;AACxB,YAAA,UAAA,EAAW;AAAA,UACb;AAAA,QACF;AAAA,MACF,CAAA;AAAA,MACA,EAAE,YAAY,OAAA;AAAQ,KACxB;AACA,IAAA,QAAA,CAAS,QAAQ,IAAI,CAAA;AAErB,IAAA,OAAO,MAAM;AACX,MAAA,QAAA,CAAS,UAAA,EAAW;AAAA,IACtB,CAAA;AAAA,EACF,CAAA,EAAG,CAAC,UAAU,CAAC,CAAA;AAEf,EAAA,OAAO,WAAA;AACT;AAKA,SAAS,gBAAA,CAAiB;AAAA,EACxB,WAAA,GAAc,CAAA;AAAA,EACd,SAAA;AAAA,EACA,WAAA,GAAc,IAAA;AAAA,EACd,eAAA,GAAkB,KAAA;AAAA,EAClB,KAAA;AAAA,EACA,KAAA,EAAO,MAAA;AAAA,EACP,UAAA,GAAa,KAAA;AAAA,EACb,OAAA;AAAA,EACA,YAAA;AAAA,EACA,WAAA;AAAA,EACA,GAAG;AACL,CAAA,EAA0B;AACxB,EAAA,MAAM,CAAC,UAAA,EAAY,aAAa,CAAA,GAAU,eAExC,SAAS,CAAA;AAEX,EAAA,MAAM,UAAA,GAAmB,kBAAY,MAAM;AACzC,IAAA,aAAA,CAAc,QAAQ,CAAA;AACtB,IAAA,WAAA,IAAc;AAAA,EAChB,CAAA,EAAG,CAAC,WAAW,CAAC,CAAA;AAEhB,EAAA,MAAM,WAAA,GAAoB,kBAAY,MAAM;AAC1C,IAAA,aAAA,CAAc,OAAO,CAAA;AACrB,IAAA,YAAA,GAAe,IAAI,KAAA,CAAM,CAAA,sBAAA,EAAyB,KAAA,CAAM,GAAG,EAAE,CAAC,CAAA;AAAA,EAChE,CAAA,EAAG,CAAC,KAAA,CAAM,GAAA,EAAK,YAAY,CAAC,CAAA;AAE5B,EAAA,MAAM,aAAA,GAAsB,KAAA,CAAA,WAAA;AAAA,IAC1B,CAAC,KAAA,KAA+B;AAC9B,MAAA,IAAI,KAAA,CAAM,GAAA,KAAQ,OAAA,IAAW,KAAA,CAAM,QAAQ,GAAA,EAAK;AAC9C,QAAA,KAAA,CAAM,cAAA,EAAe;AACrB,QAAA,OAAA,IAAU;AAAA,MACZ;AAAA,IACF,CAAA;AAAA,IACA,CAAC,OAAO;AAAA,GACV;AAEA,EAAA,uBACE,IAAA;AAAA,IAAC,QAAA;AAAA,IAAA;AAAA,MACC,cACE,eAAA,IAAmB,UAAA,GACf,GAAG,KAAA,CAAM,GAAG,gBACZ,KAAA,CAAM,GAAA;AAAA,MAEZ,SAAA,EAAW,EAAA;AAAA,QACT,wBAAA,CAAyB;AAAA,UACvB,QAAA,EAAU,UAAA;AAAA,UACV;AAAA,SACD,CAAA;AAAA,QACD;AAAA,OACF;AAAA,MACA,cAAA,EAAc,kBAAkB,UAAA,GAAa,MAAA;AAAA,MAC7C,YAAA,EAAY,eAAe,OAAA,IAAW,MAAA;AAAA,MACtC,cAAA,EAAc,eAAe,SAAA,IAAa,MAAA;AAAA,MAC1C,iBAAe,UAAA,IAAc,MAAA;AAAA,MAC7B,WAAA,EAAU,oBAAA;AAAA,MACV,IAAA,EAAK,QAAA;AAAA,MACL,OAAA;AAAA,MACA,SAAA,EAAW,aAAA;AAAA,MACV,GAAG,KAAA;AAAA,MAEJ,QAAA,EAAA;AAAA,wBAAA,IAAA,CAAC,WAAA,EAAA,EAAY,OAAO,WAAA,EACjB,QAAA,EAAA;AAAA,UAAA,UAAA,KAAe,SAAA,oBACd,GAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,yCAAA,EAA0C,CAAA;AAAA,UAE1D,UAAA,KAAe,OAAA,mBACd,GAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,+EAAA,EACb,QAAA,kBAAA,GAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,SAAA,EAAU,QAAA,EAAA,gBAAA,EAAc,CAAA,EAC1C,CAAA,mBAEA,GAAA;AAAA,YAAC,KAAA;AAAA,YAAA;AAAA,cACC,SAAA,EAAW,EAAA;AAAA,gBACT,4DAAA;AAAA,gBACA,UAAA,KAAe,YAAY,WAAA,GAAc;AAAA,eAC3C;AAAA,cACA,KAAK,KAAA,CAAM,GAAA;AAAA,cACX,WAAA,EAAU,qBAAA;AAAA,cACV,OAAA,EAAQ,MAAA;AAAA,cACR,GAAA,EAAK,KAAA,CAAM,SAAA,IAAa,KAAA,CAAM,GAAA;AAAA,cAC9B,OAAA,EAAS,WAAA;AAAA,cACT,MAAA,EAAQ;AAAA;AAAA;AACV,SAAA,EAEJ,CAAA;AAAA,QAGC,eAAA,IAAmB,UAAA,oBAClB,GAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,mHACb,QAAA,kBAAA,GAAA,CAAC,KAAA,EAAA,EAAM,SAAA,EAAU,SAAA,EAAU,CAAA,EAC7B;AAAA;AAAA;AAAA,GAEJ;AAEJ;AAKA,SAAS,UAAA,CAAW;AAAA,EAClB,WAAA,GAAc,CAAA;AAAA,EACd,OAAA;AAAA,EACA,eAAA,GAAkB,KAAA;AAAA,EAClB,GAAA,GAAM,IAAA;AAAA,EACN,MAAA;AAAA,EACA,YAAA;AAAA,EACA,WAAA;AAAA,EACA,WAAA;AAAA,EACA,cAAc;AAChB,CAAA,EAUG;AAID,EAAA,MAAM,eAAA,GACJ,OAAO,OAAA,KAAY,QAAA,GACf,EAAE,mBAAA,EAAqB,CAAA,OAAA,EAAU,MAAA,CAAO,OAAO,CAAC,CAAA,iBAAA,CAAA,EAAoB,GACpE,MAAA;AAEN,EAAA,uBACE,GAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAW,GAAG,MAAA,EAAQ,gBAAA,CAAiB,OAAO,CAAA,EAAG,UAAA,CAAW,GAAG,CAAC,CAAA;AAAA,MAChE,aAAA,EAAY,MAAA;AAAA,MACZ,KAAA,EAAO,eAAA;AAAA,MAEN,QAAA,EAAA,MAAA,CAAO,GAAA,CAAI,CAAC,KAAA,EAAO,KAAA,qBAClB,GAAA;AAAA,QAAC,gBAAA;AAAA,QAAA;AAAA,UAEC,WAAA;AAAA,UACA,eAAA;AAAA,UACA,KAAA;AAAA,UACA,KAAA;AAAA,UACA,UAAA,EAAY,WAAA,CAAY,QAAA,CAAS,KAAA,CAAM,EAAE,CAAA;AAAA,UACzC,SAAS,MAAM;AACb,YAAA,WAAA,CAAY,OAAO,KAAK,CAAA;AAAA,UAC1B,CAAA;AAAA,UACA,YAAA,EAAc,CAAC,KAAA,KAAU;AACvB,YAAA,YAAA,GAAe,OAAO,KAAK,CAAA;AAAA,UAC7B,CAAA;AAAA,UACA,aAAa,MAAM;AACjB,YAAA,WAAA,GAAc,KAAK,CAAA;AAAA,UACrB;AAAA,SAAA;AAAA,QAdK,KAAA,CAAM;AAAA,OAgBd;AAAA;AAAA,GACH;AAEJ;AAMA,SAAS,aAAA,CAAc;AAAA,EACrB,OAAA;AAAA,EACA,eAAA,GAAkB,KAAA;AAAA,EAClB,GAAA,GAAM,IAAA;AAAA,EACN,MAAA;AAAA,EACA,YAAA;AAAA,EACA,WAAA;AAAA,EACA,WAAA;AAAA,EACA,cAAc;AAChB,CAAA,EASG;AACD,EAAA,MAAM,WAAA,GACJ,OAAO,OAAA,KAAY,QAAA,GAAW,UAAU,OAAA,EAAS,EAAA,IAAM,SAAS,EAAA,IAAM,CAAA;AAExE,EAAA,MAAM,WAAW,GAAA,KAAQ,IAAA,GAAO,QAAA,GAAW,GAAA,KAAQ,OAAO,QAAA,GAAW,MAAA;AAErE,EAAA,uBACE,GAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,KAAA,EAAO;AAAA,QACL,WAAA;AAAA,QACA,SAAA,EAAW;AAAA,OACb;AAAA,MACA,SAAA,EAAU,uBAAA;AAAA,MACV,aAAA,EAAY,SAAA;AAAA,MAEX,QAAA,EAAA,MAAA,CAAO,GAAA,CAAI,CAAC,KAAA,EAAO,KAAA,KAAU;AAC5B,QAAA,MAAM,WAAA,GACJ,MAAM,KAAA,IAAS,KAAA,CAAM,SAAS,KAAA,CAAM,KAAA,GAAQ,MAAM,MAAA,GAAS,CAAA;AAE7D,QAAA,uBACE,GAAA;AAAA,UAAC,KAAA;AAAA,UAAA;AAAA,YAEC,KAAA,EAAO;AAAA,cACL,YAAA,EAAc;AAAA,aAChB;AAAA,YACA,SAAA,EAAU,yCAAA;AAAA,YAEV,QAAA,kBAAA,GAAA;AAAA,cAAC,gBAAA;AAAA,cAAA;AAAA,gBACC,WAAA;AAAA,gBACA,eAAA;AAAA,gBACA,KAAA;AAAA,gBACA,KAAA;AAAA,gBACA,UAAA,EAAY,WAAA,CAAY,QAAA,CAAS,KAAA,CAAM,EAAE,CAAA;AAAA,gBACzC,SAAS,MAAM;AACb,kBAAA,WAAA,CAAY,OAAO,KAAK,CAAA;AAAA,gBAC1B,CAAA;AAAA,gBACA,YAAA,EAAc,CAAC,KAAA,KAAU;AACvB,kBAAA,YAAA,GAAe,OAAO,KAAK,CAAA;AAAA,gBAC7B,CAAA;AAAA,gBACA,aAAa,MAAM;AACjB,kBAAA,WAAA,GAAc,KAAK,CAAA;AAAA,gBACrB;AAAA;AAAA;AACF,WAAA;AAAA,UArBK,KAAA,CAAM;AAAA,SAsBb;AAAA,MAEJ,CAAC;AAAA;AAAA,GACH;AAEJ;AAMA,SAAS,cAAA,CAAe;AAAA,EACtB,WAAA,GAAc,CAAA;AAAA,EACd,eAAA,GAAkB,KAAA;AAAA,EAClB,GAAA,GAAM,IAAA;AAAA,EACN,MAAA;AAAA,EACA,YAAA;AAAA,EACA,WAAA;AAAA,EACA,WAAA;AAAA,EACA,cAAc;AAChB,CAAA,EASG;AACD,EAAA,MAAM,CAAC,aAAA,EAAe,gBAAgB,CAAA,GAAU,eAAS,CAAC,CAAA;AAE1D,EAAA,MAAM,oBAAA,GAA6B,KAAA,CAAA,WAAA;AAAA,IACjC,CAAC,OAAkB,aAAA,KAA0B;AAC3C,MAAA,gBAAA,CAAiB,aAAa,CAAA;AAC9B,MAAA,WAAA,CAAY,OAAO,aAAa,CAAA;AAAA,IAClC,CAAA;AAAA,IACA,CAAC,WAAW;AAAA,GACd;AAEA,EAAA,IAAI,MAAA,CAAO,MAAA,KAAW,CAAA,EAAG,OAAO,IAAA;AAEhC,EAAA,MAAM,aAAA,GAAgB,OAAO,aAAa,CAAA;AAC1C,EAAA,IAAI,CAAC,eAAe,OAAO,IAAA;AAE3B,EAAA,MAAM,aAAa,MAAA,CAAO,MAAA,CAAO,CAAC,CAAA,EAAG,CAAA,KAAM,MAAM,aAAa,CAAA;AAE9D,EAAA,uBACE,IAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAW,EAAA,CAAG,iCAAA,EAAmC,UAAA,CAAW,GAAG,CAAC,CAAA;AAAA,MAChE,aAAA,EAAY,UAAA;AAAA,MAGZ,QAAA,EAAA;AAAA,wBAAA,GAAA,CAAC,KAAA,EAAA,EAAI,WAAU,QAAA,EACb,QAAA,kBAAA,GAAA;AAAA,UAAC,gBAAA;AAAA,UAAA;AAAA,YACC,WAAA;AAAA,YACA,SAAA,EAAU,QAAA;AAAA,YACV,eAAA;AAAA,YACA,KAAA,EAAO,aAAA;AAAA,YACP,KAAA,EAAO,aAAA;AAAA,YACP,UAAA,EAAY,WAAA,CAAY,QAAA,CAAS,aAAA,CAAc,EAAE,CAAA;AAAA,YACjD,SAAS,MAAM;AACb,cAAA,WAAA,CAAY,eAAe,aAAa,CAAA;AAAA,YAC1C,CAAA;AAAA,YACA,YAAA,EAAc,CAAC,KAAA,KAAU;AACvB,cAAA,YAAA,GAAe,eAAe,KAAK,CAAA;AAAA,YACrC,CAAA;AAAA,YACA,aAAa,MAAM;AACjB,cAAA,WAAA,GAAc,aAAa,CAAA;AAAA,YAC7B;AAAA;AAAA,SACF,EACF,CAAA;AAAA,QAGC,UAAA,CAAW,SAAS,CAAA,oBACnB,GAAA;AAAA,UAAC,KAAA;AAAA,UAAA;AAAA,YACC,SAAA,EAAW,EAAA;AAAA,cACT,kDAAA;AAAA,cACA,WAAW,GAAG;AAAA,aAChB;AAAA,YAEC,QAAA,EAAA,UAAA,CAAW,GAAA,CAAI,CAAC,KAAA,KAAU;AACzB,cAAA,MAAM,aAAA,GAAgB,OAAO,SAAA,CAAU,CAAC,QAAQ,GAAA,CAAI,EAAA,KAAO,MAAM,EAAE,CAAA;AACnE,cAAA,uBACE,GAAA;AAAA,gBAAC,gBAAA;AAAA,gBAAA;AAAA,kBAEC,WAAA,EAAa,CAAA;AAAA,kBACb,SAAA,EAAU,qBAAA;AAAA,kBACV,eAAA;AAAA,kBACA,KAAA;AAAA,kBACA,KAAA,EAAO,aAAA;AAAA,kBACP,WAAA,EAAa,eAAA;AAAA,kBACb,UAAA,EAAY,WAAA,CAAY,QAAA,CAAS,KAAA,CAAM,EAAE,CAAA;AAAA,kBACzC,SAAS,MAAM;AACb,oBAAA,oBAAA,CAAqB,OAAO,aAAa,CAAA;AAAA,kBAC3C,CAAA;AAAA,kBACA,YAAA,EAAc,CAAC,KAAA,KAAU;AACvB,oBAAA,YAAA,GAAe,OAAO,KAAK,CAAA;AAAA,kBAC7B,CAAA;AAAA,kBACA,aAAa,MAAM;AACjB,oBAAA,WAAA,GAAc,KAAK,CAAA;AAAA,kBACrB;AAAA,iBAAA;AAAA,gBAhBK,KAAA,CAAM;AAAA,eAiBb;AAAA,YAEJ,CAAC;AAAA;AAAA;AACH;AAAA;AAAA,GAEJ;AAEJ;AASA,SAAS,cAAA,CAAe;AAAA,EACtB,WAAA,GAAc,CAAA;AAAA,EACd,eAAA,GAAkB,KAAA;AAAA,EAClB,MAAA;AAAA,EACA,YAAA;AAAA,EACA,WAAA;AAAA,EACA,WAAA;AAAA,EACA,cAAc;AAChB,CAAA,EAQG;AACD,EAAA,uBACE,GAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAU,oCAAA;AAAA,MACV,aAAA,EAAY,UAAA;AAAA,MAEZ,QAAA,kBAAA,IAAA,CAAC,QAAA,EAAA,EAAS,SAAA,EAAU,QAAA,EAAS,IAAA,EAAM,EAAE,KAAA,EAAO,OAAA,EAAS,IAAA,EAAM,KAAA,EAAM,EAC/D,QAAA,EAAA;AAAA,wBAAA,GAAA,CAAC,eAAA,EAAA,EACE,QAAA,EAAA,MAAA,CAAO,GAAA,CAAI,CAAC,OAAO,KAAA,qBAClB,GAAA;AAAA,UAAC,YAAA;AAAA,UAAA;AAAA,YAEC,SAAA,EAAU,mDAAA;AAAA,YAEV,QAAA,kBAAA,GAAA;AAAA,cAAC,gBAAA;AAAA,cAAA;AAAA,gBACC,WAAA;AAAA,gBACA,eAAA;AAAA,gBACA,KAAA;AAAA,gBACA,KAAA;AAAA,gBACA,UAAA,EAAY,WAAA,CAAY,QAAA,CAAS,KAAA,CAAM,EAAE,CAAA;AAAA,gBACzC,SAAS,MAAM;AACb,kBAAA,WAAA,CAAY,OAAO,KAAK,CAAA;AAAA,gBAC1B,CAAA;AAAA,gBACA,YAAA,EAAc,CAAC,KAAA,KAAU;AACvB,kBAAA,YAAA,GAAe,OAAO,KAAK,CAAA;AAAA,gBAC7B,CAAA;AAAA,gBACA,aAAa,MAAM;AACjB,kBAAA,WAAA,GAAc,KAAK,CAAA;AAAA,gBACrB;AAAA;AAAA;AACF,WAAA;AAAA,UAlBK,KAAA,CAAM;AAAA,SAoBd,CAAA,EACH,CAAA;AAAA,4BACC,gBAAA,EAAA,EAAiB,CAAA;AAAA,4BACjB,YAAA,EAAA,EAAa;AAAA,OAAA,EAChB;AAAA;AAAA,GACF;AAEJ;AAKA,SAAS,eAAA,CAAgB;AAAA,EACvB,WAAA,GAAc,CAAA;AAAA,EACd,OAAA;AAAA,EACA,KAAA,GAAQ,CAAA;AAAA,EACR,GAAA,GAAM;AACR,CAAA,EAKG;AAED,EAAA,MAAM,YAAA,GAAqB,KAAA,CAAA,OAAA;AAAA,IACzB,MAAM,KAAA,CAAM,IAAA,CAAK,EAAE,QAAQ,KAAA,EAAM,EAAG,CAAC,CAAA,EAAG,CAAA,KAAM,CAAA,SAAA,EAAY,MAAA,CAAO,CAAC,CAAC,CAAA,CAAE,CAAA;AAAA,IACrE,CAAC,KAAK;AAAA,GACR;AAEA,EAAA,MAAM,mBAAA,GACJ,OAAO,OAAA,KAAY,QAAA,GACf,EAAE,mBAAA,EAAqB,CAAA,OAAA,EAAU,MAAA,CAAO,OAAO,CAAC,CAAA,iBAAA,CAAA,EAAoB,GACpE,MAAA;AAEN,EAAA,uBACE,GAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAW,GAAG,MAAA,EAAQ,gBAAA,CAAiB,OAAO,CAAA,EAAG,UAAA,CAAW,GAAG,CAAC,CAAA;AAAA,MAChE,cAAA,EAAa,MAAA;AAAA,MACb,KAAA,EAAO,mBAAA;AAAA,MAEN,QAAA,EAAA,YAAA,CAAa,GAAA,CAAI,CAAC,GAAA,yBAChB,WAAA,EAAA,EAAsB,KAAA,EAAO,WAAA,EAC5B,QAAA,kBAAA,GAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,iDAAA,EAAkD,CAAA,EAAA,EADjD,GAElB,CACD;AAAA;AAAA,GACH;AAEJ;AAsBA,SAAS,YAAA,CAAa;AAAA,EACpB,WAAA,GAAc,CAAA;AAAA,EACd,SAAA;AAAA,EACA,OAAA;AAAA,EACA,cAAA,GAAiB,KAAA;AAAA,EACjB,eAAA,GAAkB,KAAA;AAAA,EAClB,GAAA,GAAM,IAAA;AAAA,EACN,MAAA;AAAA,EACA,MAAA,GAAS,MAAA;AAAA,EACT,OAAA,GAAU,KAAA;AAAA,EACV,YAAA;AAAA,EACA,YAAA;AAAA,EACA,YAAA;AAAA,EACA,WAAA;AAAA,EACA,UAAA;AAAA,EACA,iBAAA;AAAA,EACA,GAAA;AAAA,EACA,WAAA,EAAa,qBAAA;AAAA,EACb,GAAG;AACL,CAAA,EAAsB;AAIpB,EAAA,MAAM,MAAA;AAAA;AAAA,IAEJ,OAAO,OAAA,KAAY,WAAA,IAAe,OAAA,CAAQ,GAAA,CAAI,UAAU,CAAA,KAAM;AAAA,GAAA;AAChE,EAAA,MAAM,eAAA,GAAkB,kBAAkB,CAAC,eAAA;AAC3C,EAAA,IAAI,cAAA,IAAkB,eAAA,IAAmB,CAAC,MAAA,EAAQ;AAEhD,IAAA,OAAA,CAAQ,IAAA;AAAA,MACN;AAAA,KACF;AAAA,EACF;AAGA,EAAA,MAAM,CAAC,mBAAA,EAAqB,sBAAsB,CAAA,GAAU,KAAA,CAAA,QAAA,CAE1D,EAAE,CAAA;AACJ,EAAA,MAAM,cAAc,qBAAA,IAAyB,mBAAA;AAG7C,EAAA,MAAM,CAAC,YAAA,EAAc,eAAe,CAAA,GAAU,eAAS,KAAK,CAAA;AAC5D,EAAA,MAAM,CAAC,aAAA,EAAe,gBAAgB,CAAA,GAAU,eAAS,CAAC,CAAA;AAE1D,EAAA,MAAM,WAAA,GAAc,kBAAkB,UAAU,CAAA;AAEhD,EAAA,MAAM,eAAA,GAAwB,KAAA,CAAA,WAAA;AAAA,IAC5B,CAAC,OAAkB,KAAA,KAAkB;AAEnC,MAAA,IAAI,eAAA,EAAiB;AACnB,QAAA,MAAM,cAAA,GAAiB,YAAY,QAAA,CAAS,KAAA,CAAM,EAAE,CAAA,GAChD,WAAA,CAAY,MAAA,CAAO,CAAC,EAAA,KAAO,EAAA,KAAO,MAAM,EAAE,CAAA,GAC1C,YAAA,IAAgB,WAAA,CAAY,MAAA,IAAU,YAAA,GACpC,cACA,CAAC,GAAG,WAAA,EAAa,KAAA,CAAM,EAAE,CAAA;AAE/B,QAAA,IAAI,0BAA0B,MAAA,EAAW;AACvC,UAAA,sBAAA,CAAuB,cAAc,CAAA;AAAA,QACvC;AACA,QAAA,iBAAA,GAAoB,cAAc,CAAA;AAAA,MACpC;AAGA,MAAA,IAAI,eAAA,EAAiB;AACnB,QAAA,gBAAA,CAAiB,KAAK,CAAA;AACtB,QAAA,eAAA,CAAgB,IAAI,CAAA;AAAA,MACtB;AAGA,MAAA,YAAA,GAAe,OAAO,KAAK,CAAA;AAAA,IAC7B,CAAA;AAAA,IACA;AAAA,MACE,eAAA;AAAA,MACA,WAAA;AAAA,MACA,YAAA;AAAA,MACA,qBAAA;AAAA,MACA,iBAAA;AAAA,MACA,eAAA;AAAA,MACA;AAAA;AACF,GACF;AAGA,EAAA,IAAI,OAAA,EAAS;AACX,IAAA,uBACE,GAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,GAAA;AAAA,QACA,WAAA,EAAU,MAAA;AAAA,QACV,YAAA,EAAW,uBAAA;AAAA,QACX,SAAA,EAAW,EAAA,CAAG,iBAAA,EAAmB,SAAS,CAAA;AAAA,QAC1C,WAAA,EAAU,eAAA;AAAA,QACV,IAAA,EAAK,OAAA;AAAA,QACJ,GAAG,KAAA;AAAA,QAEJ,QAAA,kBAAA,GAAA;AAAA,UAAC,eAAA;AAAA,UAAA;AAAA,YACC,WAAA;AAAA,YACA,OAAA;AAAA,YACA,KAAA,EAAO,CAAA;AAAA,YACP;AAAA;AAAA;AACF;AAAA,KACF;AAAA,EAEJ;AAGA,EAAA,IAAI,MAAA,CAAO,WAAW,CAAA,EAAG;AACvB,IAAA,uBACE,GAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,GAAA;AAAA,QACA,SAAA,EAAW,EAAA;AAAA,UACT,0FAAA;AAAA,UACA;AAAA,SACF;AAAA,QACA,YAAA,EAAW,qBAAA;AAAA,QACX,WAAA,EAAU,eAAA;AAAA,QACV,IAAA,EAAK,OAAA;AAAA,QACJ,GAAG,KAAA;AAAA,QAEJ,QAAA,kBAAA,GAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,uBAAA,EAAwB,QAAA,EAAA,sBAAA,EAAoB;AAAA;AAAA,KAC3D;AAAA,EAEJ;AAEA,EAAA,MAAM,WAAA,GAAc;AAAA,IAClB,WAAA;AAAA,IACA,OAAA;AAAA,IACA,eAAA;AAAA,IACA,GAAA;AAAA,IACA,MAAA;AAAA,IACA,YAAA;AAAA,IACA,WAAA;AAAA,IACA,WAAA,EAAa,eAAA;AAAA,IACb;AAAA,GACF;AAEA,EAAA,MAAM,gBAAA,GAAgE;AAAA,IACpE,QAAA,kBAAU,GAAA,CAAC,cAAA,EAAA,EAAgB,GAAG,WAAA,EAAa,CAAA;AAAA,IAC3C,QAAA,kBAAU,GAAA,CAAC,cAAA,EAAA,EAAgB,GAAG,WAAA,EAAa,CAAA;AAAA,IAC3C,IAAA,kBAAM,GAAA,CAAC,UAAA,EAAA,EAAY,GAAG,WAAA,EAAa,CAAA;AAAA,IACnC,OAAA,kBAAS,GAAA,CAAC,aAAA,EAAA,EAAe,GAAG,WAAA,EAAa;AAAA,GAC3C;AAEA,EAAA,uBACE,IAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,GAAA;AAAA,MACA,YAAA,EAAY,CAAA,mBAAA,EAAsB,MAAA,CAAO,MAAA,CAAO,MAAM,CAAC,CAAA,OAAA,CAAA;AAAA,MACvD,sBAAA,EAAqB,SAAA;AAAA,MACrB,SAAA,EAAW,EAAA,CAAG,iBAAA,EAAmB,SAAS,CAAA;AAAA,MAC1C,aAAA,EAAa,MAAA;AAAA,MACb,WAAA,EAAU,eAAA;AAAA,MACV,IAAA,EAAK,OAAA;AAAA,MACJ,GAAG,KAAA;AAAA,MAEH,QAAA,EAAA;AAAA,QAAA,gBAAA,CAAiB,MAAM,CAAA;AAAA,QAGvB,UAAA,oBACC,GAAA;AAAA,UAAC,KAAA;AAAA,UAAA;AAAA,YACC,GAAA,EAAK,WAAA;AAAA,YACL,aAAA,EAAY,MAAA;AAAA,YACZ,SAAA,EAAU,aAAA;AAAA,YACV,WAAA,EAAU;AAAA;AAAA,SACZ;AAAA,QAID,eAAA,oBACC,GAAA;AAAA,UAAC,QAAA;AAAA,UAAA;AAAA,YACC,MAAA;AAAA,YACA,YAAA,EAAc,aAAA;AAAA,YACd,IAAA,EAAM,YAAA;AAAA,YACN,YAAA,EAAc;AAAA;AAAA;AAChB;AAAA;AAAA,GAEJ;AAEJ","file":"chunk-PVF23ZX2.js","sourcesContent":["\"use client\"\n\nimport type {\n ImageGalleryGap,\n ImageGalleryItemProps,\n ImageGalleryLayout,\n ImageGalleryProps,\n ImageItem,\n ResponsiveColumns,\n} from \"./ImageGallery.types\"\n\nimport { cva } from \"class-variance-authority\"\nimport { Check } from \"lucide-react\"\nimport * as React from \"react\"\n\nimport { cn } from \"../../../lib/utils\"\nimport { AspectRatio } from \"../../primitives/AspectRatio\"\nimport {\n Carousel,\n CarouselContent,\n CarouselItem,\n CarouselNext,\n CarouselPrevious,\n} from \"../Carousel\"\nimport { Lightbox } from \"../Lightbox\"\n\n// Gap size mapping\nconst gapClasses: Record<ImageGalleryGap, string> = {\n lg: \"gap-6\",\n md: \"gap-4\",\n sm: \"gap-2\",\n}\n\n// Static column class mappings for Tailwind v4 detection\nconst columnClasses: Record<number, string> = {\n 1: \"grid-cols-1\",\n 2: \"grid-cols-2\",\n 3: \"grid-cols-3\",\n 4: \"grid-cols-4\",\n 5: \"grid-cols-5\",\n 6: \"grid-cols-6\",\n}\n\nconst smColumnClasses: Record<number, string> = {\n 1: \"sm:grid-cols-1\",\n 2: \"sm:grid-cols-2\",\n 3: \"sm:grid-cols-3\",\n 4: \"sm:grid-cols-4\",\n 5: \"sm:grid-cols-5\",\n 6: \"sm:grid-cols-6\",\n}\n\nconst mdColumnClasses: Record<number, string> = {\n 1: \"md:grid-cols-1\",\n 2: \"md:grid-cols-2\",\n 3: \"md:grid-cols-3\",\n 4: \"md:grid-cols-4\",\n 5: \"md:grid-cols-5\",\n 6: \"md:grid-cols-6\",\n}\n\nconst lgColumnClasses: Record<number, string> = {\n 1: \"lg:grid-cols-1\",\n 2: \"lg:grid-cols-2\",\n 3: \"lg:grid-cols-3\",\n 4: \"lg:grid-cols-4\",\n 5: \"lg:grid-cols-5\",\n 6: \"lg:grid-cols-6\",\n}\n\nconst xlColumnClasses: Record<number, string> = {\n 1: \"xl:grid-cols-1\",\n 2: \"xl:grid-cols-2\",\n 3: \"xl:grid-cols-3\",\n 4: \"xl:grid-cols-4\",\n 5: \"xl:grid-cols-5\",\n 6: \"xl:grid-cols-6\",\n}\n\n\n// Generate responsive column classes using static mappings\nfunction getColumnClasses(\n columns: number | ResponsiveColumns | undefined\n): string {\n if (columns === undefined) {\n return \"grid-cols-2 sm:grid-cols-2 md:grid-cols-3 lg:grid-cols-4\"\n }\n\n if (typeof columns === \"number\") {\n return columnClasses[columns] ?? \"grid-cols-4\"\n }\n\n const classes: string[] = []\n if (columns.sm) classes.push(smColumnClasses[columns.sm] ?? \"sm:grid-cols-2\")\n if (columns.md) classes.push(mdColumnClasses[columns.md] ?? \"md:grid-cols-3\")\n if (columns.lg) classes.push(lgColumnClasses[columns.lg] ?? \"lg:grid-cols-4\")\n if (columns.xl) classes.push(xlColumnClasses[columns.xl] ?? \"xl:grid-cols-4\")\n\n return classes.join(\" \") || \"grid-cols-2 md:grid-cols-3 lg:grid-cols-4\"\n}\n\n// Item variants for consistent styling\nconst imageGalleryItemVariants = cva(\n [\n \"relative overflow-hidden rounded-md\",\n \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2\",\n \"transition-transform duration-200\",\n \"cursor-pointer\",\n ],\n {\n variants: {\n selected: {\n true: \"ring-2 ring-primary ring-offset-2\",\n false: \"\",\n },\n interactive: {\n true: \"hover:scale-[1.02]\",\n false: \"\",\n },\n },\n defaultVariants: {\n selected: false,\n interactive: true,\n },\n }\n)\n\n/**\n * Subscribe an end-of-list sentinel to the viewport so that scrolling it into\n * view fires `onLoadMore`. No observer is created when `onLoadMore` is omitted\n * or when IntersectionObserver is unavailable (SSR / older runtimes).\n */\nfunction useInfiniteScroll(onLoadMore?: () => void) {\n const sentinelRef = React.useRef<HTMLDivElement | null>(null)\n\n React.useEffect(() => {\n const node = sentinelRef.current\n if (!onLoadMore || !node) return\n if (typeof IntersectionObserver === \"undefined\") return\n\n const observer = new IntersectionObserver(\n (entries) => {\n for (const entry of entries) {\n if (entry.isIntersecting) {\n onLoadMore()\n }\n }\n },\n { rootMargin: \"200px\" }\n )\n observer.observe(node)\n\n return () => {\n observer.disconnect()\n }\n }, [onLoadMore])\n\n return sentinelRef\n}\n\n/**\n * Individual gallery item component\n */\nfunction ImageGalleryItem({\n aspectRatio = 1,\n className,\n interactive = true,\n enableSelection = false,\n image,\n index: _index,\n isSelected = false,\n onClick,\n onImageError,\n onImageLoad,\n ...props\n}: ImageGalleryItemProps) {\n const [imageState, setImageState] = React.useState<\n \"error\" | \"loaded\" | \"loading\"\n >(\"loading\")\n\n const handleLoad = React.useCallback(() => {\n setImageState(\"loaded\")\n onImageLoad?.()\n }, [onImageLoad])\n\n const handleError = React.useCallback(() => {\n setImageState(\"error\")\n onImageError?.(new Error(`Failed to load image: ${image.src}`))\n }, [image.src, onImageError])\n\n const handleKeyDown = React.useCallback(\n (event: React.KeyboardEvent) => {\n if (event.key === \"Enter\" || event.key === \" \") {\n event.preventDefault()\n onClick?.()\n }\n },\n [onClick]\n )\n\n return (\n <button\n aria-label={\n enableSelection && isSelected\n ? `${image.alt} (selected)`\n : image.alt\n }\n className={cn(\n imageGalleryItemVariants({\n selected: isSelected,\n interactive,\n }),\n className\n )}\n aria-pressed={enableSelection ? isSelected : undefined}\n data-error={imageState === \"error\" || undefined}\n data-loading={imageState === \"loading\" || undefined}\n data-selected={isSelected || undefined}\n data-slot=\"image-gallery-item\"\n type=\"button\"\n onClick={onClick}\n onKeyDown={handleKeyDown}\n {...props}\n >\n <AspectRatio ratio={aspectRatio}>\n {imageState === \"loading\" && (\n <div className=\"absolute inset-0 animate-pulse bg-muted\" />\n )}\n {imageState === \"error\" ? (\n <div className=\"flex h-full w-full items-center justify-center bg-muted text-muted-foreground\">\n <span className=\"text-sm\">Failed to load</span>\n </div>\n ) : (\n <img\n className={cn(\n \"h-full w-full object-cover transition-opacity duration-200\",\n imageState === \"loading\" ? \"opacity-0\" : \"opacity-100\"\n )}\n alt={image.alt}\n data-slot=\"image-gallery-image\"\n loading=\"lazy\"\n src={image.thumbnail ?? image.src}\n onError={handleError}\n onLoad={handleLoad}\n />\n )}\n </AspectRatio>\n\n {/* Selection indicator */}\n {enableSelection && isSelected && (\n <div className=\"absolute right-2 top-2 flex h-6 w-6 items-center justify-center rounded-full bg-primary text-primary-foreground\">\n <Check className=\"h-4 w-4\" />\n </div>\n )}\n </button>\n )\n}\n\n/**\n * Grid layout component\n */\nfunction GridLayout({\n aspectRatio = 1,\n columns,\n enableSelection = false,\n gap = \"md\",\n images,\n onImageError,\n onImageLoad,\n onItemClick,\n selectedIds = [],\n}: {\n aspectRatio?: number\n columns?: number | ResponsiveColumns\n enableSelection?: boolean\n gap?: ImageGalleryGap\n images: ImageItem[]\n onImageError?: (image: ImageItem, error: Error) => void\n onImageLoad?: (image: ImageItem) => void\n onItemClick: (image: ImageItem, index: number) => void\n selectedIds?: string[]\n}) {\n // Only emit inline-style fallback for fixed numeric column counts.\n // For responsive ResponsiveColumns objects, Tailwind classes handle breakpoints —\n // inline style would override them and break responsiveness.\n const inlineGridStyle =\n typeof columns === \"number\"\n ? { gridTemplateColumns: `repeat(${String(columns)}, minmax(0, 1fr))` }\n : undefined\n\n return (\n <div\n className={cn(\"grid\", getColumnClasses(columns), gapClasses[gap])}\n data-layout=\"grid\"\n style={inlineGridStyle}\n >\n {images.map((image, index) => (\n <ImageGalleryItem\n key={image.id}\n aspectRatio={aspectRatio}\n enableSelection={enableSelection}\n image={image}\n index={index}\n isSelected={selectedIds.includes(image.id)}\n onClick={() => {\n onItemClick(image, index)\n }}\n onImageError={(error) => {\n onImageError?.(image, error)\n }}\n onImageLoad={() => {\n onImageLoad?.(image)\n }}\n />\n ))}\n </div>\n )\n}\n\n/**\n * Masonry layout component\n * Uses CSS columns for a Pinterest-style layout\n */\nfunction MasonryLayout({\n columns,\n enableSelection = false,\n gap = \"md\",\n images,\n onImageError,\n onImageLoad,\n onItemClick,\n selectedIds = [],\n}: {\n columns?: number | ResponsiveColumns\n enableSelection?: boolean\n gap?: ImageGalleryGap\n images: ImageItem[]\n onImageError?: (image: ImageItem, error: Error) => void\n onImageLoad?: (image: ImageItem) => void\n onItemClick: (image: ImageItem, index: number) => void\n selectedIds?: string[]\n}) {\n const columnCount =\n typeof columns === \"number\" ? columns : columns?.lg ?? columns?.md ?? 3\n\n const gapValue = gap === \"sm\" ? \"0.5rem\" : gap === \"lg\" ? \"1.5rem\" : \"1rem\"\n\n return (\n <div\n style={{\n columnCount,\n columnGap: gapValue,\n }}\n className=\"[column-fill:balance]\"\n data-layout=\"masonry\"\n >\n {images.map((image, index) => {\n const aspectRatio =\n image.width && image.height ? image.width / image.height : 1\n\n return (\n <div\n key={image.id}\n style={{\n marginBottom: gapValue,\n }}\n className=\"mb-2 break-inside-avoid md:mb-4 lg:mb-6\"\n >\n <ImageGalleryItem\n aspectRatio={aspectRatio}\n enableSelection={enableSelection}\n image={image}\n index={index}\n isSelected={selectedIds.includes(image.id)}\n onClick={() => {\n onItemClick(image, index)\n }}\n onImageError={(error) => {\n onImageError?.(image, error)\n }}\n onImageLoad={() => {\n onImageLoad?.(image)\n }}\n />\n </div>\n )\n })}\n </div>\n )\n}\n\n/**\n * Featured layout component\n * Shows first image large with thumbnails on the side\n */\nfunction FeaturedLayout({\n aspectRatio = 1,\n enableSelection = false,\n gap = \"md\",\n images,\n onImageError,\n onImageLoad,\n onItemClick,\n selectedIds = [],\n}: {\n aspectRatio?: number\n enableSelection?: boolean\n gap?: ImageGalleryGap\n images: ImageItem[]\n onImageError?: (image: ImageItem, error: Error) => void\n onImageLoad?: (image: ImageItem) => void\n onItemClick: (image: ImageItem, index: number) => void\n selectedIds?: string[]\n}) {\n const [featuredIndex, setFeaturedIndex] = React.useState(0)\n\n const handleThumbnailClick = React.useCallback(\n (image: ImageItem, originalIndex: number) => {\n setFeaturedIndex(originalIndex)\n onItemClick(image, originalIndex)\n },\n [onItemClick]\n )\n\n if (images.length === 0) return null\n\n const featuredImage = images[featuredIndex]\n if (!featuredImage) return null\n\n const thumbnails = images.filter((_, i) => i !== featuredIndex)\n\n return (\n <div\n className={cn(\"flex flex-col gap-4 md:flex-row\", gapClasses[gap])}\n data-layout=\"featured\"\n >\n {/* Main featured image */}\n <div className=\"flex-1\">\n <ImageGalleryItem\n aspectRatio={aspectRatio}\n className=\"h-full\"\n enableSelection={enableSelection}\n image={featuredImage}\n index={featuredIndex}\n isSelected={selectedIds.includes(featuredImage.id)}\n onClick={() => {\n onItemClick(featuredImage, featuredIndex)\n }}\n onImageError={(error) => {\n onImageError?.(featuredImage, error)\n }}\n onImageLoad={() => {\n onImageLoad?.(featuredImage)\n }}\n />\n </div>\n\n {/* Thumbnails sidebar */}\n {thumbnails.length > 0 && (\n <div\n className={cn(\n \"flex w-full flex-row md:w-24 md:flex-col lg:w-32\",\n gapClasses[gap]\n )}\n >\n {thumbnails.map((image) => {\n const originalIndex = images.findIndex((img) => img.id === image.id)\n return (\n <ImageGalleryItem\n key={image.id}\n aspectRatio={1}\n className=\"flex-1 md:flex-none\"\n enableSelection={enableSelection}\n image={image}\n index={originalIndex}\n interactive={enableSelection}\n isSelected={selectedIds.includes(image.id)}\n onClick={() => {\n handleThumbnailClick(image, originalIndex)\n }}\n onImageError={(error) => {\n onImageError?.(image, error)\n }}\n onImageLoad={() => {\n onImageLoad?.(image)\n }}\n />\n )\n })}\n </div>\n )}\n </div>\n )\n}\n\n/**\n * Carousel layout component\n *\n * Composes the shared Carousel primitive (drag, keyboard arrows, prev/next\n * buttons) instead of re-implementing embla. The horizontal padding leaves\n * room for the absolutely-positioned navigation buttons.\n */\nfunction CarouselLayout({\n aspectRatio = 1,\n enableSelection = false,\n images,\n onImageError,\n onImageLoad,\n onItemClick,\n selectedIds = [],\n}: {\n aspectRatio?: number\n enableSelection?: boolean\n images: ImageItem[]\n onImageError?: (image: ImageItem, error: Error) => void\n onImageLoad?: (image: ImageItem) => void\n onItemClick: (image: ImageItem, index: number) => void\n selectedIds?: string[]\n}) {\n return (\n <div\n className=\"px-[var(--carousel-button-offset)]\"\n data-layout=\"carousel\"\n >\n <Carousel className=\"w-full\" opts={{ align: \"start\", loop: false }}>\n <CarouselContent>\n {images.map((image, index) => (\n <CarouselItem\n key={image.id}\n className=\"basis-full sm:basis-1/2 md:basis-1/3 lg:basis-1/4\"\n >\n <ImageGalleryItem\n aspectRatio={aspectRatio}\n enableSelection={enableSelection}\n image={image}\n index={index}\n isSelected={selectedIds.includes(image.id)}\n onClick={() => {\n onItemClick(image, index)\n }}\n onImageError={(error) => {\n onImageError?.(image, error)\n }}\n onImageLoad={() => {\n onImageLoad?.(image)\n }}\n />\n </CarouselItem>\n ))}\n </CarouselContent>\n <CarouselPrevious />\n <CarouselNext />\n </Carousel>\n </div>\n )\n}\n\n/**\n * Loading skeleton for the gallery\n */\nfunction LoadingSkeleton({\n aspectRatio = 1,\n columns,\n count = 8,\n gap = \"md\",\n}: {\n aspectRatio?: number\n columns?: number | ResponsiveColumns\n count?: number\n gap?: ImageGalleryGap\n}) {\n // Generate stable keys for skeleton items\n const skeletonKeys = React.useMemo(\n () => Array.from({ length: count }, (_, i) => `skeleton-${String(i)}`),\n [count]\n )\n\n const skeletonInlineStyle =\n typeof columns === \"number\"\n ? { gridTemplateColumns: `repeat(${String(columns)}, minmax(0, 1fr))` }\n : undefined\n\n return (\n <div\n className={cn(\"grid\", getColumnClasses(columns), gapClasses[gap])}\n data-loading=\"true\"\n style={skeletonInlineStyle}\n >\n {skeletonKeys.map((key) => (\n <AspectRatio key={key} ratio={aspectRatio}>\n <div className=\"h-full w-full animate-pulse rounded-md bg-muted\" />\n </AspectRatio>\n ))}\n </div>\n )\n}\n\n/**\n * ImageGallery - A component for displaying collections of images in various layouts\n *\n * Composes the {@link Carousel} primitive for the `carousel` layout and the\n * {@link Lightbox} for full-screen viewing (`enableLightbox`). `enableLightbox`\n * and `enableSelection` are mutually exclusive — see the prop docs.\n *\n * @example\n * ```tsx\n * <ImageGallery\n * images={[\n * { id: \"1\", src: \"/photo.jpg\", alt: \"Beach sunset\" },\n * { id: \"2\", src: \"/mountain.jpg\", alt: \"Mountain view\" },\n * ]}\n * layout=\"grid\"\n * columns={{ sm: 2, md: 3, lg: 4 }}\n * gap=\"md\"\n * />\n * ```\n */\nfunction ImageGallery({\n aspectRatio = 1,\n className,\n columns,\n enableLightbox = false,\n enableSelection = false,\n gap = \"md\",\n images,\n layout = \"grid\",\n loading = false,\n maxSelection,\n onImageClick,\n onImageError,\n onImageLoad,\n onLoadMore,\n onSelectionChange,\n ref,\n selectedIds: controlledSelectedIds,\n ...props\n}: ImageGalleryProps) {\n // `enableLightbox` and `enableSelection` are mutually exclusive: a click\n // cannot both open a viewer and toggle a selection. Selection wins; the\n // lightbox is disabled and a dev-only warning flags the misuse.\n const isProd =\n // eslint-disable-next-line @typescript-eslint/dot-notation -- noPropertyAccessFromIndexSignature; bracket access on process.env is required by CI tsc.\n typeof process !== \"undefined\" && process.env[\"NODE_ENV\"] === \"production\"\n const lightboxEnabled = enableLightbox && !enableSelection\n if (enableLightbox && enableSelection && !isProd) {\n\n console.warn(\n \"<ImageGallery> received both `enableLightbox` and `enableSelection`. They are mutually exclusive; `enableSelection` takes precedence and the lightbox is disabled. Enable only one.\"\n )\n }\n\n // Internal selection state when uncontrolled\n const [internalSelectedIds, setInternalSelectedIds] = React.useState<\n string[]\n >([])\n const selectedIds = controlledSelectedIds ?? internalSelectedIds\n\n // Lightbox state — index of the image to open in the full-screen viewer\n const [lightboxOpen, setLightboxOpen] = React.useState(false)\n const [lightboxIndex, setLightboxIndex] = React.useState(0)\n\n const sentinelRef = useInfiniteScroll(onLoadMore)\n\n const handleItemClick = React.useCallback(\n (image: ImageItem, index: number) => {\n // Handle selection mode\n if (enableSelection) {\n const newSelectedIds = selectedIds.includes(image.id)\n ? selectedIds.filter((id) => id !== image.id)\n : maxSelection && selectedIds.length >= maxSelection\n ? selectedIds // Don't add if at max\n : [...selectedIds, image.id]\n\n if (controlledSelectedIds === undefined) {\n setInternalSelectedIds(newSelectedIds)\n }\n onSelectionChange?.(newSelectedIds)\n }\n\n // Open the lightbox (mutually exclusive with selection)\n if (lightboxEnabled) {\n setLightboxIndex(index)\n setLightboxOpen(true)\n }\n\n // Always call onImageClick callback\n onImageClick?.(image, index)\n },\n [\n enableSelection,\n selectedIds,\n maxSelection,\n controlledSelectedIds,\n onSelectionChange,\n lightboxEnabled,\n onImageClick,\n ]\n )\n\n // Render loading skeleton\n if (loading) {\n return (\n <div\n ref={ref}\n aria-busy=\"true\"\n aria-label=\"Image gallery loading\"\n className={cn(\"relative w-full\", className)}\n data-slot=\"image-gallery\"\n role=\"group\"\n {...props}\n >\n <LoadingSkeleton\n aspectRatio={aspectRatio}\n columns={columns}\n count={8}\n gap={gap}\n />\n </div>\n )\n }\n\n // Empty state\n if (images.length === 0) {\n return (\n <div\n ref={ref}\n className={cn(\n \"flex min-h-52 items-center justify-center rounded-lg border-2 border-dashed border-muted\",\n className\n )}\n aria-label=\"Empty image gallery\"\n data-slot=\"image-gallery\"\n role=\"group\"\n {...props}\n >\n <p className=\"text-muted-foreground\">No images to display</p>\n </div>\n )\n }\n\n const layoutProps = {\n aspectRatio,\n columns,\n enableSelection,\n gap,\n images,\n onImageError,\n onImageLoad,\n onItemClick: handleItemClick,\n selectedIds,\n }\n\n const layoutComponents: Record<ImageGalleryLayout, React.ReactNode> = {\n carousel: <CarouselLayout {...layoutProps} />,\n featured: <FeaturedLayout {...layoutProps} />,\n grid: <GridLayout {...layoutProps} />,\n masonry: <MasonryLayout {...layoutProps} />,\n }\n\n return (\n <div\n ref={ref}\n aria-label={`Image gallery with ${String(images.length)} images`}\n aria-roledescription=\"gallery\"\n className={cn(\"relative w-full\", className)}\n data-layout={layout}\n data-slot=\"image-gallery\"\n role=\"group\"\n {...props}\n >\n {layoutComponents[layout]}\n\n {/* Infinite-scroll sentinel — observed only when onLoadMore is set */}\n {onLoadMore && (\n <div\n ref={sentinelRef}\n aria-hidden=\"true\"\n className=\"h-px w-full\"\n data-slot=\"image-gallery-sentinel\"\n />\n )}\n\n {/* Full-screen viewer — composed from the shared Lightbox primitive */}\n {lightboxEnabled && (\n <Lightbox\n images={images}\n initialIndex={lightboxIndex}\n open={lightboxOpen}\n onOpenChange={setLightboxOpen}\n />\n )}\n </div>\n )\n}\n\nexport { ImageGallery, ImageGalleryItem }\n"]}
@@ -1,5 +1,5 @@
1
- import { Avatar, AvatarImage, AvatarFallback } from './chunk-U7TPJMGY.js';
2
- import { Button } from './chunk-L4OQ6BJ5.js';
1
+ import { Avatar, AvatarImage, AvatarFallback } from './chunk-MR3IPJAO.js';
2
+ import { Button } from './chunk-N3DBRKUS.js';
3
3
  import { cn } from './chunk-RVAYDRMA.js';
4
4
  import { Check, X, User, TrendingUp, ChevronRight, Forward, Clock } from 'lucide-react';
5
5
  import { useId, useState } from 'react';
@@ -540,5 +540,5 @@ function ApprovalFlow({
540
540
  }
541
541
 
542
542
  export { ApprovalFlow, ApprovalFlowConnector, ApprovalFlowMarker, ApprovalFlowStep, approvalFlowActionsVariants, approvalFlowConnectorVariants, approvalFlowMarkerVariants, approvalFlowStepCardVariants, approvalFlowStepVariants, approvalFlowVariants };
543
- //# sourceMappingURL=chunk-KHCHATTD.js.map
544
- //# sourceMappingURL=chunk-KHCHATTD.js.map
543
+ //# sourceMappingURL=chunk-PYCQBP4O.js.map
544
+ //# sourceMappingURL=chunk-PYCQBP4O.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/workflow/ApprovalFlow/ApprovalFlow.variants.ts","../src/components/workflow/ApprovalFlow/ApprovalFlow.tsx"],"names":[],"mappings":"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","file":"chunk-KHCHATTD.js","sourcesContent":["import { cva, type VariantProps } from \"class-variance-authority\"\n\n/**\n * ApprovalFlow container variants\n */\nexport const approvalFlowVariants = cva(\n \"relative rounded-lg border bg-card p-6 transition-all duration-300\",\n {\n variants: {\n variant: {\n linear: \"\",\n parallel: \"\",\n conditional: \"\",\n hybrid: \"\",\n },\n layout: {\n horizontal: \"flex flex-row gap-4 overflow-x-auto\",\n vertical: \"flex flex-col gap-4\",\n compact: \"flex flex-col gap-2 p-4\",\n },\n },\n defaultVariants: {\n variant: \"linear\",\n layout: \"horizontal\",\n },\n }\n)\n\n/**\n * ApprovalFlow step variants\n */\nexport const approvalFlowStepVariants = cva(\n \"relative flex transition-all duration-300 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2\",\n {\n variants: {\n layout: {\n horizontal: \"flex-col items-center gap-2 min-w-40\",\n vertical: \"flex-row gap-4\",\n compact: \"flex-row gap-3\",\n },\n status: {\n pending: \"\",\n in_progress: \"\",\n awaiting: \"\",\n approved: \"\",\n rejected: \"\",\n escalated: \"\",\n skipped: \"opacity-50\",\n },\n },\n defaultVariants: {\n layout: \"horizontal\",\n status: \"pending\",\n },\n }\n)\n\n/**\n * Step marker/indicator variants based on status\n */\nexport const approvalFlowMarkerVariants = cva(\n \"flex shrink-0 items-center justify-center rounded-full border-2 transition-all duration-300\",\n {\n variants: {\n status: {\n pending: \"border-muted-foreground/50 bg-muted text-muted-foreground\",\n in_progress:\n \"border-primary bg-primary text-primary-foreground animate-pulse\",\n awaiting: \"border-warning bg-warning text-warning-foreground\",\n approved: \"border-success bg-success text-success-foreground\",\n rejected: \"border-destructive bg-destructive text-destructive-foreground\",\n escalated: \"border-warning bg-warning text-warning-foreground\",\n skipped: \"border-muted-foreground/30 bg-muted/50 text-muted-foreground/50\",\n },\n size: {\n sm: \"h-8 w-8 text-xs\",\n default: \"h-10 w-10 text-sm\",\n lg: \"h-12 w-12 text-base\",\n },\n },\n defaultVariants: {\n status: \"pending\",\n size: \"default\",\n },\n }\n)\n\n/**\n * Connector line variants between steps\n */\nexport const approvalFlowConnectorVariants = cva(\n \"transition-colors duration-300\",\n {\n variants: {\n layout: {\n horizontal: \"h-0.5 flex-1 min-w-10\",\n vertical: \"w-0.5 min-h-10 ml-5\",\n compact: \"w-0.5 min-h-6 ml-4\",\n },\n status: {\n pending: \"bg-muted-foreground/30\",\n in_progress: \"bg-primary/50\",\n awaiting: \"bg-warning/50\",\n approved: \"bg-success\",\n rejected: \"bg-destructive/50\",\n escalated: \"bg-warning/50\",\n skipped: \"bg-muted-foreground/20\",\n },\n style: {\n solid: \"\",\n dashed: \"border-dashed border-2 bg-transparent\",\n },\n },\n compoundVariants: [\n {\n layout: \"horizontal\",\n style: \"dashed\",\n className: \"border-l-0 border-r-0 border-t-2 border-b-0 h-0\",\n },\n {\n layout: \"vertical\",\n style: \"dashed\",\n className: \"border-t-0 border-b-0 border-l-2 border-r-0 w-0\",\n },\n {\n layout: \"compact\",\n style: \"dashed\",\n className: \"border-t-0 border-b-0 border-l-2 border-r-0 w-0\",\n },\n ],\n defaultVariants: {\n layout: \"horizontal\",\n status: \"pending\",\n style: \"solid\",\n },\n }\n)\n\n/**\n * Step card variants\n */\nexport const approvalFlowStepCardVariants = cva(\n \"rounded-md border bg-background p-4 transition-all duration-200\",\n {\n variants: {\n status: {\n pending: \"border-muted\",\n in_progress: \"border-primary shadow-sm ring-1 ring-primary/20\",\n awaiting: \"border-warning shadow-sm\",\n approved: \"border-success/50 bg-success/5\",\n rejected: \"border-destructive/50 bg-destructive/5\",\n escalated: \"border-warning/50 bg-warning/5\",\n skipped: \"border-muted/50 bg-muted/10\",\n },\n layout: {\n horizontal: \"w-full max-w-52\",\n vertical: \"flex-1\",\n compact: \"flex-1 py-2\",\n },\n },\n defaultVariants: {\n status: \"pending\",\n layout: \"horizontal\",\n },\n }\n)\n\n/**\n * Action button group variants\n */\nexport const approvalFlowActionsVariants = cva(\n \"flex gap-2 transition-opacity duration-200\",\n {\n variants: {\n layout: {\n horizontal: \"flex-wrap justify-center mt-2\",\n vertical: \"flex-wrap\",\n compact: \"flex-wrap\",\n },\n visible: {\n true: \"opacity-100\",\n false: \"opacity-0 pointer-events-none\",\n },\n },\n defaultVariants: {\n layout: \"horizontal\",\n visible: true,\n },\n }\n)\n\nexport type ApprovalFlowVariantProps = VariantProps<typeof approvalFlowVariants>\nexport type ApprovalFlowStepVariantProps = VariantProps<\n typeof approvalFlowStepVariants\n>\nexport type ApprovalFlowMarkerVariantProps = VariantProps<\n typeof approvalFlowMarkerVariants\n>\nexport type ApprovalFlowConnectorVariantProps = VariantProps<\n typeof approvalFlowConnectorVariants\n>\nexport type ApprovalFlowStepCardVariantProps = VariantProps<\n typeof approvalFlowStepCardVariants\n>\nexport type ApprovalFlowActionsVariantProps = VariantProps<\n typeof approvalFlowActionsVariants\n>\n","import type {\n ApprovalFlowProps,\n ApprovalFlowStepProps,\n ApprovalStep,\n ApprovalStepStatus,\n Approver,\n} from \"./ApprovalFlow.types\"\nimport type { KeyboardEvent, ReactNode } from \"react\"\n\nimport {\n Check,\n ChevronRight,\n Clock,\n Forward,\n TrendingUp,\n User,\n X,\n} from \"lucide-react\"\nimport { useId, useState } from \"react\"\n\nimport { cn } from \"../../../lib/utils\"\nimport { Avatar, AvatarFallback, AvatarImage } from \"../../primitives/Avatar\"\nimport { Button } from \"../../primitives/Button\"\nimport {\n approvalFlowActionsVariants,\n approvalFlowConnectorVariants,\n approvalFlowMarkerVariants,\n approvalFlowStepCardVariants,\n approvalFlowStepVariants,\n approvalFlowVariants,\n} from \"./ApprovalFlow.variants\"\n\n/**\n * Get initials from a name\n */\nfunction getInitials(name: string): string {\n return name\n .split(\" \")\n .map((part) => part[0])\n .join(\"\")\n .toUpperCase()\n .slice(0, 2)\n}\n\n/**\n * Get icon for status\n */\nfunction getStatusIcon(status: ApprovalStepStatus): ReactNode {\n switch (status) {\n case \"approved\":\n return <Check className=\"h-4 w-4\" />\n case \"rejected\":\n return <X className=\"h-4 w-4\" />\n case \"in_progress\":\n case \"awaiting\":\n return <Clock className=\"h-4 w-4\" />\n case \"escalated\":\n return <TrendingUp className=\"h-4 w-4\" />\n case \"skipped\":\n return <Forward className=\"h-4 w-4\" />\n default:\n return null\n }\n}\n\n/**\n * Get accessible status label\n */\nfunction getStatusLabel(status: ApprovalStepStatus): string {\n const labels: Record<ApprovalStepStatus, string> = {\n pending: \"Pending\",\n in_progress: \"In progress\",\n awaiting: \"Awaiting approval\",\n approved: \"Approved\",\n rejected: \"Rejected\",\n escalated: \"Escalated\",\n skipped: \"Skipped\",\n }\n return labels[status]\n}\n\n/**\n * ApprovalFlowMarker component renders the status indicator\n */\nfunction ApprovalFlowMarker({\n index,\n status = \"pending\",\n}: {\n index: number\n status?: ApprovalStepStatus\n}) {\n const icon = getStatusIcon(status)\n\n return (\n <div\n aria-hidden=\"true\"\n className={approvalFlowMarkerVariants({ status })}\n data-slot=\"approval-flow-marker\"\n data-status={status}\n >\n {icon ?? (\n <span className=\"font-medium\">{index + 1}</span>\n )}\n </div>\n )\n}\n\n/**\n * ApprovalFlowConnector component renders the line between steps\n */\nfunction ApprovalFlowConnector({\n layout = \"horizontal\",\n status = \"pending\",\n isConditional = false,\n}: {\n isConditional?: boolean\n layout?: \"compact\" | \"horizontal\" | \"vertical\"\n status?: ApprovalStepStatus\n}) {\n return (\n <div\n className={approvalFlowConnectorVariants({\n layout,\n status,\n style: isConditional ? \"dashed\" : \"solid\",\n })}\n aria-hidden=\"true\"\n data-slot=\"approval-flow-connector\"\n />\n )\n}\n\n/**\n * ApproverAvatar component renders an approver's avatar\n */\nfunction ApproverAvatar({ approver }: { approver: Approver }) {\n return (\n <div className=\"flex items-center gap-2\" title={`${approver.name} (${approver.role})`}>\n <Avatar size=\"sm\">\n {approver.avatar ? (\n <AvatarImage alt={approver.name} src={approver.avatar} />\n ) : null}\n <AvatarFallback>{getInitials(approver.name)}</AvatarFallback>\n </Avatar>\n </div>\n )\n}\n\n/**\n * ApprovalFlowStepContent renders the content of a step\n */\nfunction ApprovalFlowStepContent({\n step,\n layout = \"horizontal\",\n}: {\n layout?: \"compact\" | \"horizontal\" | \"vertical\"\n step: ApprovalStep\n}) {\n const showApproversCount = step.approvers.length > 3\n const visibleApprovers = showApproversCount\n ? step.approvers.slice(0, 3)\n : step.approvers\n\n return (\n <div\n className={approvalFlowStepCardVariants({ status: step.status, layout })}\n data-slot=\"approval-flow-step-card\"\n >\n <div className=\"space-y-2\">\n <div data-slot=\"approval-flow-step-title\">\n <span className=\"text-sm font-medium text-foreground\">\n {step.title}\n </span>\n </div>\n\n {step.description && (\n <div data-slot=\"approval-flow-step-description\">\n <span className=\"text-xs text-muted-foreground\">\n {step.description}\n </span>\n </div>\n )}\n\n {step.approvers.length > 0 && (\n <div\n className=\"flex items-center gap-1\"\n data-slot=\"approval-flow-step-approvers\"\n >\n <div className=\"flex -space-x-2\">\n {visibleApprovers.map((approver) => (\n <ApproverAvatar key={approver.id} approver={approver} />\n ))}\n </div>\n {showApproversCount && (\n <span className=\"ml-2 text-xs text-muted-foreground\">\n +{step.approvers.length - 3} more\n </span>\n )}\n </div>\n )}\n\n {step.requiredApprovals && step.requiredApprovals > 1 && (\n <div\n className=\"text-xs text-muted-foreground\"\n data-slot=\"approval-flow-step-required\"\n >\n Requires {step.requiredApprovals} of {step.approvers.length} approvals\n </div>\n )}\n\n {step.deadline && (\n <div\n className=\"flex items-center gap-1 text-xs text-muted-foreground\"\n data-slot=\"approval-flow-step-deadline\"\n >\n <Clock className=\"h-3 w-3\" />\n <span>Due: {step.deadline.toLocaleDateString()}</span>\n </div>\n )}\n </div>\n </div>\n )\n}\n\n/**\n * ApprovalFlowStep component renders a single approval step\n */\nfunction ApprovalFlowStep({\n step,\n index,\n isCurrent,\n isLast,\n showConnector = true,\n layout = \"horizontal\",\n readOnly = false,\n allowDelegation = true,\n allowEscalation = true,\n onApprove,\n onReject,\n onDelegate,\n onEscalate,\n className,\n ...props\n}: ApprovalFlowStepProps) {\n const stepId = useId()\n const statusLabel = getStatusLabel(step.status)\n // Normalize null to undefined for layout\n const normalizedLayout = layout ?? \"horizontal\"\n const canAct =\n isCurrent &&\n !readOnly &&\n (step.status === \"in_progress\" || step.status === \"awaiting\")\n\n const handleKeyDown = (event: KeyboardEvent<HTMLDivElement>) => {\n const target = event.currentTarget\n const parent = target.parentElement\n if (!parent) return\n\n const siblings = [\n ...parent.querySelectorAll('[data-slot=\"approval-flow-step\"]'),\n ] as HTMLDivElement[]\n const currentIndex = siblings.indexOf(target)\n\n let nextIndex = -1\n\n switch (event.key) {\n case \"ArrowDown\":\n case \"ArrowRight\":\n event.preventDefault()\n nextIndex = Math.min(currentIndex + 1, siblings.length - 1)\n break\n case \"ArrowUp\":\n case \"ArrowLeft\":\n event.preventDefault()\n nextIndex = Math.max(currentIndex - 1, 0)\n break\n default:\n return\n }\n\n const nextElement = siblings[nextIndex]\n if (nextIndex !== -1 && nextElement) {\n nextElement.focus()\n }\n }\n\n return (\n <div\n className={cn(\n approvalFlowStepVariants({ layout: normalizedLayout, status: step.status }),\n className\n )}\n aria-current={isCurrent ? \"step\" : undefined}\n aria-describedby={`${stepId}-description`}\n aria-label={`${step.title} - ${statusLabel}`}\n data-active={isCurrent ? \"\" : undefined}\n data-slot=\"approval-flow-step\"\n data-status={step.status}\n role=\"listitem\"\n tabIndex={0}\n onKeyDown={handleKeyDown}\n {...props}\n >\n {/* Marker and Connector for vertical/compact layouts */}\n {(normalizedLayout === \"vertical\" || normalizedLayout === \"compact\") && (\n <div className=\"relative flex flex-col items-center\">\n <ApprovalFlowMarker index={index} status={step.status} />\n {showConnector && !isLast && (\n <ApprovalFlowConnector layout={normalizedLayout} status={step.status} />\n )}\n </div>\n )}\n\n {/* Main content wrapper */}\n <div className=\"flex flex-1 flex-col gap-2\">\n {/* Marker for horizontal layout */}\n {normalizedLayout === \"horizontal\" && (\n <div className=\"flex items-center justify-center\">\n <ApprovalFlowMarker index={index} status={step.status} />\n </div>\n )}\n\n {/* Step content */}\n <ApprovalFlowStepContent layout={normalizedLayout} step={step} />\n\n {/* Actions */}\n <div\n className={approvalFlowActionsVariants({\n layout: normalizedLayout,\n visible: canAct,\n })}\n data-slot=\"approval-flow-step-actions\"\n id={`${stepId}-description`}\n >\n {canAct && (\n <>\n <Button\n aria-label={`Approve ${step.title}`}\n size=\"sm\"\n variant=\"default\"\n onClick={onApprove}\n >\n <Check className=\"h-4 w-4\" />\n Approve\n </Button>\n <Button\n aria-label={`Reject ${step.title}`}\n size=\"sm\"\n variant=\"destructive\"\n onClick={onReject}\n >\n <X className=\"h-4 w-4\" />\n Reject\n </Button>\n {allowDelegation && (\n <Button\n aria-label={`Delegate ${step.title}`}\n size=\"sm\"\n variant=\"outline\"\n onClick={onDelegate}\n >\n <User className=\"h-4 w-4\" />\n Delegate\n </Button>\n )}\n {allowEscalation && (\n <Button\n aria-label={`Escalate ${step.title}`}\n size=\"sm\"\n variant=\"outline\"\n onClick={onEscalate}\n >\n <TrendingUp className=\"h-4 w-4\" />\n Escalate\n </Button>\n )}\n </>\n )}\n </div>\n </div>\n\n {/* Connector for horizontal layout */}\n {normalizedLayout === \"horizontal\" && showConnector && !isLast && (\n <div className=\"flex items-center self-start mt-5\">\n <ApprovalFlowConnector layout={normalizedLayout} status={step.status} />\n <ChevronRight className=\"h-4 w-4 text-muted-foreground shrink-0\" />\n </div>\n )}\n </div>\n )\n}\n\n/**\n * ApprovalFlow component displays and manages an approval workflow.\n *\n * @example\n * ```tsx\n * const steps = [\n * { id: \"1\", title: \"Request\", status: \"approved\", approvers: [] },\n * { id: \"2\", title: \"Manager\", status: \"in_progress\", approvers: [{ id: \"1\", name: \"John\", email: \"john@example.com\", role: \"Manager\" }] },\n * { id: \"3\", title: \"Director\", status: \"pending\", approvers: [] },\n * ]\n *\n * <ApprovalFlow\n * steps={steps}\n * currentStep={1}\n * onApprove={({ stepId }) => console.log(\"Approved:\", stepId)}\n * onReject={({ stepId, reason }) => console.log(\"Rejected:\", stepId, reason)}\n * />\n * ```\n */\nfunction ApprovalFlow({\n \"aria-label\": ariaLabel = \"Approval workflow\",\n className,\n steps,\n currentStep = 0,\n variant = \"linear\",\n layout = \"horizontal\",\n allowDelegation = true,\n allowEscalation = true,\n showTimeline: _showTimeline = true,\n showComments: _showComments = true,\n readOnly = false,\n history: _history,\n onApprove,\n onReject,\n onDelegate,\n onEscalate,\n onStepChange: _onStepChange,\n onComplete: _onComplete,\n ...props\n}: ApprovalFlowProps) {\n const [_activeStepIndex, setActiveStepIndex] = useState(currentStep)\n\n // Determine effective layout based on screen size\n // On mobile, force vertical layout\n const effectiveLayout = layout\n\n const handleApprove = (stepId: string) => {\n onApprove?.({ stepId })\n }\n\n const handleReject = (stepId: string) => {\n // In a real implementation, this would open a dialog for the reason\n onReject?.({ stepId, reason: \"\" })\n }\n\n const handleDelegate = (stepId: string) => {\n // In a real implementation, this would open a dialog to select delegate\n onDelegate?.({\n stepId,\n delegateTo: { id: \"\", name: \"\", email: \"\", role: \"\" },\n })\n }\n\n const handleEscalate = (stepId: string) => {\n // In a real implementation, this would open a dialog to select escalation target\n onEscalate?.({\n stepId,\n escalateTo: { id: \"\", name: \"\", email: \"\", role: \"\" },\n })\n }\n\n // Handle keyboard navigation between steps\n const handleStepFocus = (index: number) => {\n setActiveStepIndex(index)\n }\n\n const hasSteps = steps.length > 0\n\n return (\n <div\n aria-label={ariaLabel}\n className={cn(approvalFlowVariants({ variant, layout: effectiveLayout }), className)}\n data-slot=\"approval-flow\"\n data-variant={variant}\n role=\"list\"\n {...props}\n >\n {hasSteps\n ? steps.map((step, index) => (\n <ApprovalFlowStep\n key={step.id}\n allowDelegation={allowDelegation}\n allowEscalation={allowEscalation}\n index={index}\n isCurrent={index === currentStep}\n isLast={index === steps.length - 1}\n layout={effectiveLayout}\n readOnly={readOnly}\n showConnector={variant !== \"conditional\"}\n step={step}\n onApprove={() => { handleApprove(step.id); }}\n onDelegate={() => { handleDelegate(step.id); }}\n onEscalate={() => { handleEscalate(step.id); }}\n onFocus={() => { handleStepFocus(index); }}\n onReject={() => { handleReject(step.id); }}\n />\n ))\n : null}\n </div>\n )\n}\n\nexport {\n ApprovalFlow,\n approvalFlowActionsVariants,\n ApprovalFlowConnector,\n approvalFlowConnectorVariants,\n ApprovalFlowMarker,\n approvalFlowMarkerVariants,\n ApprovalFlowStep,\n approvalFlowStepCardVariants,\n approvalFlowStepVariants,\n approvalFlowVariants,\n}\nexport type {\n ApprovalFlowProps,\n ApprovalFlowStepProps,\n ApprovalStep,\n ApprovalStepStatus,\n}\n"]}
1
+ {"version":3,"sources":["../src/components/workflow/ApprovalFlow/ApprovalFlow.variants.ts","../src/components/workflow/ApprovalFlow/ApprovalFlow.tsx"],"names":[],"mappings":"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","file":"chunk-PYCQBP4O.js","sourcesContent":["import { cva, type VariantProps } from \"class-variance-authority\"\n\n/**\n * ApprovalFlow container variants\n */\nexport const approvalFlowVariants = cva(\n \"relative rounded-lg border bg-card p-6 transition-all duration-300\",\n {\n variants: {\n variant: {\n linear: \"\",\n parallel: \"\",\n conditional: \"\",\n hybrid: \"\",\n },\n layout: {\n horizontal: \"flex flex-row gap-4 overflow-x-auto\",\n vertical: \"flex flex-col gap-4\",\n compact: \"flex flex-col gap-2 p-4\",\n },\n },\n defaultVariants: {\n variant: \"linear\",\n layout: \"horizontal\",\n },\n }\n)\n\n/**\n * ApprovalFlow step variants\n */\nexport const approvalFlowStepVariants = cva(\n \"relative flex transition-all duration-300 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2\",\n {\n variants: {\n layout: {\n horizontal: \"flex-col items-center gap-2 min-w-40\",\n vertical: \"flex-row gap-4\",\n compact: \"flex-row gap-3\",\n },\n status: {\n pending: \"\",\n in_progress: \"\",\n awaiting: \"\",\n approved: \"\",\n rejected: \"\",\n escalated: \"\",\n skipped: \"opacity-50\",\n },\n },\n defaultVariants: {\n layout: \"horizontal\",\n status: \"pending\",\n },\n }\n)\n\n/**\n * Step marker/indicator variants based on status\n */\nexport const approvalFlowMarkerVariants = cva(\n \"flex shrink-0 items-center justify-center rounded-full border-2 transition-all duration-300\",\n {\n variants: {\n status: {\n pending: \"border-muted-foreground/50 bg-muted text-muted-foreground\",\n in_progress:\n \"border-primary bg-primary text-primary-foreground animate-pulse\",\n awaiting: \"border-warning bg-warning text-warning-foreground\",\n approved: \"border-success bg-success text-success-foreground\",\n rejected: \"border-destructive bg-destructive text-destructive-foreground\",\n escalated: \"border-warning bg-warning text-warning-foreground\",\n skipped: \"border-muted-foreground/30 bg-muted/50 text-muted-foreground/50\",\n },\n size: {\n sm: \"h-8 w-8 text-xs\",\n default: \"h-10 w-10 text-sm\",\n lg: \"h-12 w-12 text-base\",\n },\n },\n defaultVariants: {\n status: \"pending\",\n size: \"default\",\n },\n }\n)\n\n/**\n * Connector line variants between steps\n */\nexport const approvalFlowConnectorVariants = cva(\n \"transition-colors duration-300\",\n {\n variants: {\n layout: {\n horizontal: \"h-0.5 flex-1 min-w-10\",\n vertical: \"w-0.5 min-h-10 ml-5\",\n compact: \"w-0.5 min-h-6 ml-4\",\n },\n status: {\n pending: \"bg-muted-foreground/30\",\n in_progress: \"bg-primary/50\",\n awaiting: \"bg-warning/50\",\n approved: \"bg-success\",\n rejected: \"bg-destructive/50\",\n escalated: \"bg-warning/50\",\n skipped: \"bg-muted-foreground/20\",\n },\n style: {\n solid: \"\",\n dashed: \"border-dashed border-2 bg-transparent\",\n },\n },\n compoundVariants: [\n {\n layout: \"horizontal\",\n style: \"dashed\",\n className: \"border-l-0 border-r-0 border-t-2 border-b-0 h-0\",\n },\n {\n layout: \"vertical\",\n style: \"dashed\",\n className: \"border-t-0 border-b-0 border-l-2 border-r-0 w-0\",\n },\n {\n layout: \"compact\",\n style: \"dashed\",\n className: \"border-t-0 border-b-0 border-l-2 border-r-0 w-0\",\n },\n ],\n defaultVariants: {\n layout: \"horizontal\",\n status: \"pending\",\n style: \"solid\",\n },\n }\n)\n\n/**\n * Step card variants\n */\nexport const approvalFlowStepCardVariants = cva(\n \"rounded-md border bg-background p-4 transition-all duration-200\",\n {\n variants: {\n status: {\n pending: \"border-muted\",\n in_progress: \"border-primary shadow-sm ring-1 ring-primary/20\",\n awaiting: \"border-warning shadow-sm\",\n approved: \"border-success/50 bg-success/5\",\n rejected: \"border-destructive/50 bg-destructive/5\",\n escalated: \"border-warning/50 bg-warning/5\",\n skipped: \"border-muted/50 bg-muted/10\",\n },\n layout: {\n horizontal: \"w-full max-w-52\",\n vertical: \"flex-1\",\n compact: \"flex-1 py-2\",\n },\n },\n defaultVariants: {\n status: \"pending\",\n layout: \"horizontal\",\n },\n }\n)\n\n/**\n * Action button group variants\n */\nexport const approvalFlowActionsVariants = cva(\n \"flex gap-2 transition-opacity duration-200\",\n {\n variants: {\n layout: {\n horizontal: \"flex-wrap justify-center mt-2\",\n vertical: \"flex-wrap\",\n compact: \"flex-wrap\",\n },\n visible: {\n true: \"opacity-100\",\n false: \"opacity-0 pointer-events-none\",\n },\n },\n defaultVariants: {\n layout: \"horizontal\",\n visible: true,\n },\n }\n)\n\nexport type ApprovalFlowVariantProps = VariantProps<typeof approvalFlowVariants>\nexport type ApprovalFlowStepVariantProps = VariantProps<\n typeof approvalFlowStepVariants\n>\nexport type ApprovalFlowMarkerVariantProps = VariantProps<\n typeof approvalFlowMarkerVariants\n>\nexport type ApprovalFlowConnectorVariantProps = VariantProps<\n typeof approvalFlowConnectorVariants\n>\nexport type ApprovalFlowStepCardVariantProps = VariantProps<\n typeof approvalFlowStepCardVariants\n>\nexport type ApprovalFlowActionsVariantProps = VariantProps<\n typeof approvalFlowActionsVariants\n>\n","import type {\n ApprovalFlowProps,\n ApprovalFlowStepProps,\n ApprovalStep,\n ApprovalStepStatus,\n Approver,\n} from \"./ApprovalFlow.types\"\nimport type { KeyboardEvent, ReactNode } from \"react\"\n\nimport {\n Check,\n ChevronRight,\n Clock,\n Forward,\n TrendingUp,\n User,\n X,\n} from \"lucide-react\"\nimport { useId, useState } from \"react\"\n\nimport { cn } from \"../../../lib/utils\"\nimport { Avatar, AvatarFallback, AvatarImage } from \"../../primitives/Avatar\"\nimport { Button } from \"../../primitives/Button\"\nimport {\n approvalFlowActionsVariants,\n approvalFlowConnectorVariants,\n approvalFlowMarkerVariants,\n approvalFlowStepCardVariants,\n approvalFlowStepVariants,\n approvalFlowVariants,\n} from \"./ApprovalFlow.variants\"\n\n/**\n * Get initials from a name\n */\nfunction getInitials(name: string): string {\n return name\n .split(\" \")\n .map((part) => part[0])\n .join(\"\")\n .toUpperCase()\n .slice(0, 2)\n}\n\n/**\n * Get icon for status\n */\nfunction getStatusIcon(status: ApprovalStepStatus): ReactNode {\n switch (status) {\n case \"approved\":\n return <Check className=\"h-4 w-4\" />\n case \"rejected\":\n return <X className=\"h-4 w-4\" />\n case \"in_progress\":\n case \"awaiting\":\n return <Clock className=\"h-4 w-4\" />\n case \"escalated\":\n return <TrendingUp className=\"h-4 w-4\" />\n case \"skipped\":\n return <Forward className=\"h-4 w-4\" />\n default:\n return null\n }\n}\n\n/**\n * Get accessible status label\n */\nfunction getStatusLabel(status: ApprovalStepStatus): string {\n const labels: Record<ApprovalStepStatus, string> = {\n pending: \"Pending\",\n in_progress: \"In progress\",\n awaiting: \"Awaiting approval\",\n approved: \"Approved\",\n rejected: \"Rejected\",\n escalated: \"Escalated\",\n skipped: \"Skipped\",\n }\n return labels[status]\n}\n\n/**\n * ApprovalFlowMarker component renders the status indicator\n */\nfunction ApprovalFlowMarker({\n index,\n status = \"pending\",\n}: {\n index: number\n status?: ApprovalStepStatus\n}) {\n const icon = getStatusIcon(status)\n\n return (\n <div\n aria-hidden=\"true\"\n className={approvalFlowMarkerVariants({ status })}\n data-slot=\"approval-flow-marker\"\n data-status={status}\n >\n {icon ?? (\n <span className=\"font-medium\">{index + 1}</span>\n )}\n </div>\n )\n}\n\n/**\n * ApprovalFlowConnector component renders the line between steps\n */\nfunction ApprovalFlowConnector({\n layout = \"horizontal\",\n status = \"pending\",\n isConditional = false,\n}: {\n isConditional?: boolean\n layout?: \"compact\" | \"horizontal\" | \"vertical\"\n status?: ApprovalStepStatus\n}) {\n return (\n <div\n className={approvalFlowConnectorVariants({\n layout,\n status,\n style: isConditional ? \"dashed\" : \"solid\",\n })}\n aria-hidden=\"true\"\n data-slot=\"approval-flow-connector\"\n />\n )\n}\n\n/**\n * ApproverAvatar component renders an approver's avatar\n */\nfunction ApproverAvatar({ approver }: { approver: Approver }) {\n return (\n <div className=\"flex items-center gap-2\" title={`${approver.name} (${approver.role})`}>\n <Avatar size=\"sm\">\n {approver.avatar ? (\n <AvatarImage alt={approver.name} src={approver.avatar} />\n ) : null}\n <AvatarFallback>{getInitials(approver.name)}</AvatarFallback>\n </Avatar>\n </div>\n )\n}\n\n/**\n * ApprovalFlowStepContent renders the content of a step\n */\nfunction ApprovalFlowStepContent({\n step,\n layout = \"horizontal\",\n}: {\n layout?: \"compact\" | \"horizontal\" | \"vertical\"\n step: ApprovalStep\n}) {\n const showApproversCount = step.approvers.length > 3\n const visibleApprovers = showApproversCount\n ? step.approvers.slice(0, 3)\n : step.approvers\n\n return (\n <div\n className={approvalFlowStepCardVariants({ status: step.status, layout })}\n data-slot=\"approval-flow-step-card\"\n >\n <div className=\"space-y-2\">\n <div data-slot=\"approval-flow-step-title\">\n <span className=\"text-sm font-medium text-foreground\">\n {step.title}\n </span>\n </div>\n\n {step.description && (\n <div data-slot=\"approval-flow-step-description\">\n <span className=\"text-xs text-muted-foreground\">\n {step.description}\n </span>\n </div>\n )}\n\n {step.approvers.length > 0 && (\n <div\n className=\"flex items-center gap-1\"\n data-slot=\"approval-flow-step-approvers\"\n >\n <div className=\"flex -space-x-2\">\n {visibleApprovers.map((approver) => (\n <ApproverAvatar key={approver.id} approver={approver} />\n ))}\n </div>\n {showApproversCount && (\n <span className=\"ml-2 text-xs text-muted-foreground\">\n +{step.approvers.length - 3} more\n </span>\n )}\n </div>\n )}\n\n {step.requiredApprovals && step.requiredApprovals > 1 && (\n <div\n className=\"text-xs text-muted-foreground\"\n data-slot=\"approval-flow-step-required\"\n >\n Requires {step.requiredApprovals} of {step.approvers.length} approvals\n </div>\n )}\n\n {step.deadline && (\n <div\n className=\"flex items-center gap-1 text-xs text-muted-foreground\"\n data-slot=\"approval-flow-step-deadline\"\n >\n <Clock className=\"h-3 w-3\" />\n <span>Due: {step.deadline.toLocaleDateString()}</span>\n </div>\n )}\n </div>\n </div>\n )\n}\n\n/**\n * ApprovalFlowStep component renders a single approval step\n */\nfunction ApprovalFlowStep({\n step,\n index,\n isCurrent,\n isLast,\n showConnector = true,\n layout = \"horizontal\",\n readOnly = false,\n allowDelegation = true,\n allowEscalation = true,\n onApprove,\n onReject,\n onDelegate,\n onEscalate,\n className,\n ...props\n}: ApprovalFlowStepProps) {\n const stepId = useId()\n const statusLabel = getStatusLabel(step.status)\n // Normalize null to undefined for layout\n const normalizedLayout = layout ?? \"horizontal\"\n const canAct =\n isCurrent &&\n !readOnly &&\n (step.status === \"in_progress\" || step.status === \"awaiting\")\n\n const handleKeyDown = (event: KeyboardEvent<HTMLDivElement>) => {\n const target = event.currentTarget\n const parent = target.parentElement\n if (!parent) return\n\n const siblings = [\n ...parent.querySelectorAll('[data-slot=\"approval-flow-step\"]'),\n ] as HTMLDivElement[]\n const currentIndex = siblings.indexOf(target)\n\n let nextIndex = -1\n\n switch (event.key) {\n case \"ArrowDown\":\n case \"ArrowRight\":\n event.preventDefault()\n nextIndex = Math.min(currentIndex + 1, siblings.length - 1)\n break\n case \"ArrowUp\":\n case \"ArrowLeft\":\n event.preventDefault()\n nextIndex = Math.max(currentIndex - 1, 0)\n break\n default:\n return\n }\n\n const nextElement = siblings[nextIndex]\n if (nextIndex !== -1 && nextElement) {\n nextElement.focus()\n }\n }\n\n return (\n <div\n className={cn(\n approvalFlowStepVariants({ layout: normalizedLayout, status: step.status }),\n className\n )}\n aria-current={isCurrent ? \"step\" : undefined}\n aria-describedby={`${stepId}-description`}\n aria-label={`${step.title} - ${statusLabel}`}\n data-active={isCurrent ? \"\" : undefined}\n data-slot=\"approval-flow-step\"\n data-status={step.status}\n role=\"listitem\"\n tabIndex={0}\n onKeyDown={handleKeyDown}\n {...props}\n >\n {/* Marker and Connector for vertical/compact layouts */}\n {(normalizedLayout === \"vertical\" || normalizedLayout === \"compact\") && (\n <div className=\"relative flex flex-col items-center\">\n <ApprovalFlowMarker index={index} status={step.status} />\n {showConnector && !isLast && (\n <ApprovalFlowConnector layout={normalizedLayout} status={step.status} />\n )}\n </div>\n )}\n\n {/* Main content wrapper */}\n <div className=\"flex flex-1 flex-col gap-2\">\n {/* Marker for horizontal layout */}\n {normalizedLayout === \"horizontal\" && (\n <div className=\"flex items-center justify-center\">\n <ApprovalFlowMarker index={index} status={step.status} />\n </div>\n )}\n\n {/* Step content */}\n <ApprovalFlowStepContent layout={normalizedLayout} step={step} />\n\n {/* Actions */}\n <div\n className={approvalFlowActionsVariants({\n layout: normalizedLayout,\n visible: canAct,\n })}\n data-slot=\"approval-flow-step-actions\"\n id={`${stepId}-description`}\n >\n {canAct && (\n <>\n <Button\n aria-label={`Approve ${step.title}`}\n size=\"sm\"\n variant=\"default\"\n onClick={onApprove}\n >\n <Check className=\"h-4 w-4\" />\n Approve\n </Button>\n <Button\n aria-label={`Reject ${step.title}`}\n size=\"sm\"\n variant=\"destructive\"\n onClick={onReject}\n >\n <X className=\"h-4 w-4\" />\n Reject\n </Button>\n {allowDelegation && (\n <Button\n aria-label={`Delegate ${step.title}`}\n size=\"sm\"\n variant=\"outline\"\n onClick={onDelegate}\n >\n <User className=\"h-4 w-4\" />\n Delegate\n </Button>\n )}\n {allowEscalation && (\n <Button\n aria-label={`Escalate ${step.title}`}\n size=\"sm\"\n variant=\"outline\"\n onClick={onEscalate}\n >\n <TrendingUp className=\"h-4 w-4\" />\n Escalate\n </Button>\n )}\n </>\n )}\n </div>\n </div>\n\n {/* Connector for horizontal layout */}\n {normalizedLayout === \"horizontal\" && showConnector && !isLast && (\n <div className=\"flex items-center self-start mt-5\">\n <ApprovalFlowConnector layout={normalizedLayout} status={step.status} />\n <ChevronRight className=\"h-4 w-4 text-muted-foreground shrink-0\" />\n </div>\n )}\n </div>\n )\n}\n\n/**\n * ApprovalFlow component displays and manages an approval workflow.\n *\n * @example\n * ```tsx\n * const steps = [\n * { id: \"1\", title: \"Request\", status: \"approved\", approvers: [] },\n * { id: \"2\", title: \"Manager\", status: \"in_progress\", approvers: [{ id: \"1\", name: \"John\", email: \"john@example.com\", role: \"Manager\" }] },\n * { id: \"3\", title: \"Director\", status: \"pending\", approvers: [] },\n * ]\n *\n * <ApprovalFlow\n * steps={steps}\n * currentStep={1}\n * onApprove={({ stepId }) => console.log(\"Approved:\", stepId)}\n * onReject={({ stepId, reason }) => console.log(\"Rejected:\", stepId, reason)}\n * />\n * ```\n */\nfunction ApprovalFlow({\n \"aria-label\": ariaLabel = \"Approval workflow\",\n className,\n steps,\n currentStep = 0,\n variant = \"linear\",\n layout = \"horizontal\",\n allowDelegation = true,\n allowEscalation = true,\n showTimeline: _showTimeline = true,\n showComments: _showComments = true,\n readOnly = false,\n history: _history,\n onApprove,\n onReject,\n onDelegate,\n onEscalate,\n onStepChange: _onStepChange,\n onComplete: _onComplete,\n ...props\n}: ApprovalFlowProps) {\n const [_activeStepIndex, setActiveStepIndex] = useState(currentStep)\n\n // Determine effective layout based on screen size\n // On mobile, force vertical layout\n const effectiveLayout = layout\n\n const handleApprove = (stepId: string) => {\n onApprove?.({ stepId })\n }\n\n const handleReject = (stepId: string) => {\n // In a real implementation, this would open a dialog for the reason\n onReject?.({ stepId, reason: \"\" })\n }\n\n const handleDelegate = (stepId: string) => {\n // In a real implementation, this would open a dialog to select delegate\n onDelegate?.({\n stepId,\n delegateTo: { id: \"\", name: \"\", email: \"\", role: \"\" },\n })\n }\n\n const handleEscalate = (stepId: string) => {\n // In a real implementation, this would open a dialog to select escalation target\n onEscalate?.({\n stepId,\n escalateTo: { id: \"\", name: \"\", email: \"\", role: \"\" },\n })\n }\n\n // Handle keyboard navigation between steps\n const handleStepFocus = (index: number) => {\n setActiveStepIndex(index)\n }\n\n const hasSteps = steps.length > 0\n\n return (\n <div\n aria-label={ariaLabel}\n className={cn(approvalFlowVariants({ variant, layout: effectiveLayout }), className)}\n data-slot=\"approval-flow\"\n data-variant={variant}\n role=\"list\"\n {...props}\n >\n {hasSteps\n ? steps.map((step, index) => (\n <ApprovalFlowStep\n key={step.id}\n allowDelegation={allowDelegation}\n allowEscalation={allowEscalation}\n index={index}\n isCurrent={index === currentStep}\n isLast={index === steps.length - 1}\n layout={effectiveLayout}\n readOnly={readOnly}\n showConnector={variant !== \"conditional\"}\n step={step}\n onApprove={() => { handleApprove(step.id); }}\n onDelegate={() => { handleDelegate(step.id); }}\n onEscalate={() => { handleEscalate(step.id); }}\n onFocus={() => { handleStepFocus(index); }}\n onReject={() => { handleReject(step.id); }}\n />\n ))\n : null}\n </div>\n )\n}\n\nexport {\n ApprovalFlow,\n approvalFlowActionsVariants,\n ApprovalFlowConnector,\n approvalFlowConnectorVariants,\n ApprovalFlowMarker,\n approvalFlowMarkerVariants,\n ApprovalFlowStep,\n approvalFlowStepCardVariants,\n approvalFlowStepVariants,\n approvalFlowVariants,\n}\nexport type {\n ApprovalFlowProps,\n ApprovalFlowStepProps,\n ApprovalStep,\n ApprovalStepStatus,\n}\n"]}
@@ -1,4 +1,4 @@
1
- import { Dialog, DialogHeader, DialogTitle, DialogDescription, DialogContent } from './chunk-TIPKU427.js';
1
+ import { Dialog, DialogHeader, DialogTitle, DialogDescription, DialogContent } from './chunk-N7DAU4LE.js';
2
2
  import { cn } from './chunk-RVAYDRMA.js';
3
3
  import { Command as Command$1 } from 'cmdk';
4
4
  import { SearchIcon, XIcon } from 'lucide-react';
@@ -462,5 +462,5 @@ function CommandShortcut({
462
462
  }
463
463
 
464
464
  export { Command, CommandDialog, CommandEmpty, CommandGroup, CommandInput, CommandItem, CommandList, CommandSeparator, CommandShortcut, commandEmptyVariants, commandGroupVariants, commandInputClearVariants, commandInputIconVariants, commandInputVariants, commandInputWrapperVariants, commandItemVariants, commandListVariants, commandSeparatorVariants, commandShortcutVariants, commandVariants };
465
- //# sourceMappingURL=chunk-KDNTSZF5.js.map
466
- //# sourceMappingURL=chunk-KDNTSZF5.js.map
465
+ //# sourceMappingURL=chunk-Q4E7OG7J.js.map
466
+ //# sourceMappingURL=chunk-Q4E7OG7J.js.map