@etus/ui 0.4.0-beta.6 → 0.4.0-beta.8

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 (225) hide show
  1. package/dist/{chunk-2Y7PQ6ZL.js → chunk-237TQKWH.js} +4 -4
  2. package/dist/{chunk-2Y7PQ6ZL.js.map → chunk-237TQKWH.js.map} +1 -1
  3. package/dist/{chunk-KR3IVNQH.js → chunk-2FJJOHHH.js} +16 -10
  4. package/dist/chunk-2FJJOHHH.js.map +1 -0
  5. package/dist/{chunk-W4NC5CU5.js → chunk-2Q4I4VDB.js} +4 -4
  6. package/dist/{chunk-W4NC5CU5.js.map → chunk-2Q4I4VDB.js.map} +1 -1
  7. package/dist/{chunk-2HM5Z2YP.js → chunk-2YWWZEPE.js} +3 -3
  8. package/dist/{chunk-2HM5Z2YP.js.map → chunk-2YWWZEPE.js.map} +1 -1
  9. package/dist/chunk-2Z722V5K.js +231 -0
  10. package/dist/chunk-2Z722V5K.js.map +1 -0
  11. package/dist/chunk-37IIHQP4.js +233 -0
  12. package/dist/chunk-37IIHQP4.js.map +1 -0
  13. package/dist/{chunk-UFRMZ3M6.js → chunk-3JCV72FO.js} +6 -2
  14. package/dist/chunk-3JCV72FO.js.map +1 -0
  15. package/dist/{chunk-HT5XM6XK.js → chunk-43BS3PPX.js} +3 -3
  16. package/dist/{chunk-HT5XM6XK.js.map → chunk-43BS3PPX.js.map} +1 -1
  17. package/dist/{chunk-2UGDLAYC.js → chunk-45D4O7RK.js} +10 -3
  18. package/dist/chunk-45D4O7RK.js.map +1 -0
  19. package/dist/{chunk-32IJQOUV.js → chunk-4EYYCHLD.js} +4 -4
  20. package/dist/{chunk-32IJQOUV.js.map → chunk-4EYYCHLD.js.map} +1 -1
  21. package/dist/{chunk-J62TFQHR.js → chunk-5I7AXWJU.js} +13 -13
  22. package/dist/chunk-5I7AXWJU.js.map +1 -0
  23. package/dist/{chunk-65YSTUD2.js → chunk-5SUD32RK.js} +44 -14
  24. package/dist/chunk-5SUD32RK.js.map +1 -0
  25. package/dist/{chunk-23BHD62H.js → chunk-5TZDEGZN.js} +4 -4
  26. package/dist/chunk-5TZDEGZN.js.map +1 -0
  27. package/dist/{chunk-VPNFYQBL.js → chunk-6DN2UAIR.js} +3 -3
  28. package/dist/chunk-6DN2UAIR.js.map +1 -0
  29. package/dist/{chunk-EGYWK2XX.js → chunk-7CTFBOD4.js} +3 -3
  30. package/dist/{chunk-EGYWK2XX.js.map → chunk-7CTFBOD4.js.map} +1 -1
  31. package/dist/{chunk-36XTKR3B.js → chunk-BMNCNBPA.js} +3 -3
  32. package/dist/{chunk-36XTKR3B.js.map → chunk-BMNCNBPA.js.map} +1 -1
  33. package/dist/{chunk-AWYOWR5N.js → chunk-C5HSYDJC.js} +3 -3
  34. package/dist/{chunk-AWYOWR5N.js.map → chunk-C5HSYDJC.js.map} +1 -1
  35. package/dist/{chunk-VFALJSXB.js → chunk-DCUFQJYP.js} +3 -3
  36. package/dist/chunk-DCUFQJYP.js.map +1 -0
  37. package/dist/{chunk-LATTRPLQ.js → chunk-E2TI5V67.js} +3 -3
  38. package/dist/{chunk-LATTRPLQ.js.map → chunk-E2TI5V67.js.map} +1 -1
  39. package/dist/{chunk-IRKDMISK.js → chunk-G2MAGZHQ.js} +4 -3
  40. package/dist/chunk-G2MAGZHQ.js.map +1 -0
  41. package/dist/{chunk-ONQCNOLU.js → chunk-HDOR3SN3.js} +3 -3
  42. package/dist/{chunk-ONQCNOLU.js.map → chunk-HDOR3SN3.js.map} +1 -1
  43. package/dist/{chunk-PLLJNHWU.js → chunk-HI3T55XK.js} +3 -33
  44. package/dist/chunk-HI3T55XK.js.map +1 -0
  45. package/dist/chunk-HJ4E6YPW.js +236 -0
  46. package/dist/chunk-HJ4E6YPW.js.map +1 -0
  47. package/dist/{chunk-LS3WD6IZ.js → chunk-I55QJ4CU.js} +4 -4
  48. package/dist/{chunk-LS3WD6IZ.js.map → chunk-I55QJ4CU.js.map} +1 -1
  49. package/dist/{chunk-HKXQLWGR.js → chunk-IOWHM7ZY.js} +13 -11
  50. package/dist/chunk-IOWHM7ZY.js.map +1 -0
  51. package/dist/{chunk-ILAV2AZ4.js → chunk-IZC5YFGO.js} +3 -3
  52. package/dist/{chunk-ILAV2AZ4.js.map → chunk-IZC5YFGO.js.map} +1 -1
  53. package/dist/{chunk-Y7UFBSAD.js → chunk-KHOCAVQO.js} +3 -3
  54. package/dist/{chunk-Y7UFBSAD.js.map → chunk-KHOCAVQO.js.map} +1 -1
  55. package/dist/{chunk-IBVCSZCH.js → chunk-KVJOKWP4.js} +5 -4
  56. package/dist/chunk-KVJOKWP4.js.map +1 -0
  57. package/dist/{chunk-KC6CHPT3.js → chunk-KZRTQF64.js} +3 -3
  58. package/dist/{chunk-KC6CHPT3.js.map → chunk-KZRTQF64.js.map} +1 -1
  59. package/dist/{chunk-QIETN4UU.js → chunk-LEAK22ZP.js} +3 -3
  60. package/dist/{chunk-QIETN4UU.js.map → chunk-LEAK22ZP.js.map} +1 -1
  61. package/dist/{chunk-OWOVCGUZ.js → chunk-M2C7HBR5.js} +3 -3
  62. package/dist/{chunk-OWOVCGUZ.js.map → chunk-M2C7HBR5.js.map} +1 -1
  63. package/dist/{chunk-33JGPMUW.js → chunk-M7TPROVH.js} +20 -7
  64. package/dist/chunk-M7TPROVH.js.map +1 -0
  65. package/dist/{chunk-AVR3LVOQ.js → chunk-MQMRVBUL.js} +4 -4
  66. package/dist/{chunk-AVR3LVOQ.js.map → chunk-MQMRVBUL.js.map} +1 -1
  67. package/dist/{chunk-KPNNSUXM.js → chunk-O7AUE5GP.js} +5 -3
  68. package/dist/chunk-O7AUE5GP.js.map +1 -0
  69. package/dist/{chunk-6HEURMY3.js → chunk-OCXGG7UP.js} +5 -5
  70. package/dist/{chunk-6HEURMY3.js.map → chunk-OCXGG7UP.js.map} +1 -1
  71. package/dist/{chunk-V7XHE25E.js → chunk-ON7WFRYH.js} +3 -3
  72. package/dist/{chunk-V7XHE25E.js.map → chunk-ON7WFRYH.js.map} +1 -1
  73. package/dist/{chunk-FSMHI7DW.js → chunk-OXDWUKGP.js} +3 -3
  74. package/dist/chunk-OXDWUKGP.js.map +1 -0
  75. package/dist/{chunk-SJSYKUCL.js → chunk-Q335YODG.js} +3 -3
  76. package/dist/{chunk-SJSYKUCL.js.map → chunk-Q335YODG.js.map} +1 -1
  77. package/dist/{chunk-DDM2I5C6.js → chunk-R5OIL4I4.js} +3 -3
  78. package/dist/{chunk-DDM2I5C6.js.map → chunk-R5OIL4I4.js.map} +1 -1
  79. package/dist/{chunk-FYJHWYPM.js → chunk-S524YVMO.js} +3 -3
  80. package/dist/{chunk-FYJHWYPM.js.map → chunk-S524YVMO.js.map} +1 -1
  81. package/dist/{chunk-OWIFNJXZ.js → chunk-S7TVRVRU.js} +3 -3
  82. package/dist/chunk-S7TVRVRU.js.map +1 -0
  83. package/dist/{chunk-TNROOKX3.js → chunk-UDY3IDCY.js} +10 -2
  84. package/dist/chunk-UDY3IDCY.js.map +1 -0
  85. package/dist/{chunk-3WOGOTOV.js → chunk-UPYT2XM5.js} +7 -7
  86. package/dist/chunk-UPYT2XM5.js.map +1 -0
  87. package/dist/{chunk-YWA63YN3.js → chunk-VAVE4ZJF.js} +2 -2
  88. package/dist/chunk-VAVE4ZJF.js.map +1 -0
  89. package/dist/chunk-WKWLKGNI.js +643 -0
  90. package/dist/chunk-WKWLKGNI.js.map +1 -0
  91. package/dist/{chunk-Z3FL7LEK.js → chunk-X253YD45.js} +71 -6
  92. package/dist/chunk-X253YD45.js.map +1 -0
  93. package/dist/{chunk-6XY7QYVR.js → chunk-X3AXEE3S.js} +3 -3
  94. package/dist/{chunk-6XY7QYVR.js.map → chunk-X3AXEE3S.js.map} +1 -1
  95. package/dist/{chunk-R4UOT76L.js → chunk-XAIUZJOJ.js} +8 -8
  96. package/dist/chunk-XAIUZJOJ.js.map +1 -0
  97. package/dist/{chunk-ZO2EKJZM.js → chunk-XCZMJA2D.js} +7 -7
  98. package/dist/{chunk-ZO2EKJZM.js.map → chunk-XCZMJA2D.js.map} +1 -1
  99. package/dist/{chunk-XRMKL43Y.js → chunk-XOLV7G4S.js} +3 -3
  100. package/dist/{chunk-XRMKL43Y.js.map → chunk-XOLV7G4S.js.map} +1 -1
  101. package/dist/chunk-XYYOV5GW.js +186 -0
  102. package/dist/chunk-XYYOV5GW.js.map +1 -0
  103. package/dist/{chunk-4MQNDQ4O.js → chunk-YACIRNVP.js} +12 -4
  104. package/dist/chunk-YACIRNVP.js.map +1 -0
  105. package/dist/{chunk-JKYB5QAP.js → chunk-YDZBLZVZ.js} +3 -3
  106. package/dist/{chunk-JKYB5QAP.js.map → chunk-YDZBLZVZ.js.map} +1 -1
  107. package/dist/{chunk-5XQIH6WM.js → chunk-YM5YBDRM.js} +4 -4
  108. package/dist/{chunk-5XQIH6WM.js.map → chunk-YM5YBDRM.js.map} +1 -1
  109. package/dist/{chunk-AUCDXPWH.js → chunk-YQX7XZES.js} +4 -4
  110. package/dist/{chunk-AUCDXPWH.js.map → chunk-YQX7XZES.js.map} +1 -1
  111. package/dist/{chunk-CP2PEDG2.js → chunk-Z4KW5VW6.js} +3 -3
  112. package/dist/chunk-Z4KW5VW6.js.map +1 -0
  113. package/dist/{chunk-Y3BOERVB.js → chunk-ZEFK3AXP.js} +3 -3
  114. package/dist/{chunk-Y3BOERVB.js.map → chunk-ZEFK3AXP.js.map} +1 -1
  115. package/dist/{chunk-L3Z5FAJE.js → chunk-ZEYLSDSG.js} +3 -3
  116. package/dist/{chunk-L3Z5FAJE.js.map → chunk-ZEYLSDSG.js.map} +1 -1
  117. package/dist/components/advanced/Calendar/index.js +3 -3
  118. package/dist/components/advanced/Command/index.js +1 -1
  119. package/dist/components/advanced/EventCalendar/index.js +3 -3
  120. package/dist/components/advanced/FileDropzone/index.js +1 -1
  121. package/dist/components/advanced/FilterBuilder/index.js +3 -3
  122. package/dist/components/advanced/MarkdownEditor/index.js +2 -2
  123. package/dist/components/advanced/ReportBuilder/index.js +2 -2
  124. package/dist/components/advanced/RichTextEditor/index.js +2 -2
  125. package/dist/components/advanced/index.js +13 -13
  126. package/dist/components/data-display/AreaChart/index.js +1 -1
  127. package/dist/components/data-display/BarChart/index.js +1 -1
  128. package/dist/components/data-display/Carousel/index.js +3 -3
  129. package/dist/components/data-display/ChartCard/index.js +2 -2
  130. package/dist/components/data-display/DashboardFilterbar/index.js +5 -5
  131. package/dist/components/data-display/DataTable/FilterBuilder/index.js +3 -3
  132. package/dist/components/data-display/DataTable/index.js +6 -6
  133. package/dist/components/data-display/ImageGallery/index.js +6 -6
  134. package/dist/components/data-display/KPICard/index.js +3 -3
  135. package/dist/components/data-display/Lightbox/index.js +1 -1
  136. package/dist/components/data-display/LineChart/index.js +1 -1
  137. package/dist/components/data-display/List/index.js +2 -2
  138. package/dist/components/data-display/Table/index.js +1 -1
  139. package/dist/components/data-display/VirtualTable/index.js +2 -2
  140. package/dist/components/data-display/index.js +29 -29
  141. package/dist/components/feedback/Alert/index.js +1 -1
  142. package/dist/components/feedback/AlertDialog/index.js +3 -3
  143. package/dist/components/feedback/ConfirmModal/index.js +4 -4
  144. package/dist/components/feedback/Modal/index.js +1 -1
  145. package/dist/components/feedback/index.js +8 -8
  146. package/dist/components/forms/ColorPicker/index.js +1 -1
  147. package/dist/components/forms/DatePicker/index.js +4 -4
  148. package/dist/components/forms/DateRangePicker/index.js +4 -4
  149. package/dist/components/forms/IftaLabel/index.js +1 -1
  150. package/dist/components/forms/InputGroup/index.js +3 -3
  151. package/dist/components/forms/MultiSelect/index.js +2 -1
  152. package/dist/components/forms/RadioButton/index.js +1 -1
  153. package/dist/components/forms/Rating/index.js +1 -1
  154. package/dist/components/forms/Slider/index.js +1 -1
  155. package/dist/components/forms/TagsInput/index.js +2 -2
  156. package/dist/components/forms/ToggleGroup/index.js +1 -1
  157. package/dist/components/forms/index.js +19 -19
  158. package/dist/components/index.js +104 -104
  159. package/dist/components/layout/index.js +2 -2
  160. package/dist/components/navigation/AccountSwitch/index.js +3 -3
  161. package/dist/components/navigation/Drawer/index.js +1 -1
  162. package/dist/components/navigation/DropdownMenu/index.js +1 -1
  163. package/dist/components/navigation/Header/index.js +1 -1
  164. package/dist/components/navigation/MobileSidebar/index.js +3 -3
  165. package/dist/components/navigation/Pagination/index.js +3 -3
  166. package/dist/components/navigation/Sidebar/index.js +3 -3
  167. package/dist/components/navigation/UserProfileDropdown/index.js +1 -1
  168. package/dist/components/navigation/WorkspaceDropdown/index.js +1 -1
  169. package/dist/components/navigation/index.js +13 -13
  170. package/dist/components/primitives/AspectRatio/index.js +1 -1
  171. package/dist/components/primitives/Badge/index.js +1 -1
  172. package/dist/components/primitives/Button/index.js +2 -2
  173. package/dist/components/primitives/ConfirmButton/index.js +4 -4
  174. package/dist/components/primitives/ProgressBar/index.js +1 -1
  175. package/dist/components/primitives/SplitButton/index.js +2 -2
  176. package/dist/components/primitives/StatusIndicator/index.js +1 -1
  177. package/dist/components/primitives/Tag/index.js +1 -1
  178. package/dist/components/primitives/Toggle/index.js +1 -1
  179. package/dist/components/primitives/index.js +16 -16
  180. package/dist/components/workflow/ApprovalFlow/index.js +3 -3
  181. package/dist/components/workflow/CommentSystem/index.js +3 -3
  182. package/dist/components/workflow/Dashboard/index.js +3 -3
  183. package/dist/components/workflow/DashboardBuilder/index.js +3 -3
  184. package/dist/components/workflow/KanbanBoard/index.js +3 -3
  185. package/dist/components/workflow/ReportGenerator/index.js +3 -3
  186. package/dist/components/workflow/TaskStatus/index.js +2 -2
  187. package/dist/components/workflow/Wizard/index.js +3 -3
  188. package/dist/components/workflow/index.js +12 -12
  189. package/dist/index.d.ts +156 -50
  190. package/dist/index.js +104 -104
  191. package/dist/styles.css +23 -0
  192. package/package.json +2 -2
  193. package/dist/chunk-23BHD62H.js.map +0 -1
  194. package/dist/chunk-2UGDLAYC.js.map +0 -1
  195. package/dist/chunk-33JGPMUW.js.map +0 -1
  196. package/dist/chunk-3WOGOTOV.js.map +0 -1
  197. package/dist/chunk-4MQNDQ4O.js.map +0 -1
  198. package/dist/chunk-65YSTUD2.js.map +0 -1
  199. package/dist/chunk-CP2PEDG2.js.map +0 -1
  200. package/dist/chunk-FSMHI7DW.js.map +0 -1
  201. package/dist/chunk-GAP3OZR7.js +0 -223
  202. package/dist/chunk-GAP3OZR7.js.map +0 -1
  203. package/dist/chunk-HKXQLWGR.js.map +0 -1
  204. package/dist/chunk-IBVCSZCH.js.map +0 -1
  205. package/dist/chunk-ICAQYWCX.js +0 -153
  206. package/dist/chunk-ICAQYWCX.js.map +0 -1
  207. package/dist/chunk-IRKDMISK.js.map +0 -1
  208. package/dist/chunk-J62TFQHR.js.map +0 -1
  209. package/dist/chunk-KPNNSUXM.js.map +0 -1
  210. package/dist/chunk-KR3IVNQH.js.map +0 -1
  211. package/dist/chunk-OWIFNJXZ.js.map +0 -1
  212. package/dist/chunk-PLLJNHWU.js.map +0 -1
  213. package/dist/chunk-R4UOT76L.js.map +0 -1
  214. package/dist/chunk-SHS6EGWS.js +0 -226
  215. package/dist/chunk-SHS6EGWS.js.map +0 -1
  216. package/dist/chunk-TNROOKX3.js.map +0 -1
  217. package/dist/chunk-UFRMZ3M6.js.map +0 -1
  218. package/dist/chunk-VFALJSXB.js.map +0 -1
  219. package/dist/chunk-VPNFYQBL.js.map +0 -1
  220. package/dist/chunk-XD5LE64P.js +0 -311
  221. package/dist/chunk-XD5LE64P.js.map +0 -1
  222. package/dist/chunk-XV6NXXXP.js +0 -206
  223. package/dist/chunk-XV6NXXXP.js.map +0 -1
  224. package/dist/chunk-YWA63YN3.js.map +0 -1
  225. package/dist/chunk-Z3FL7LEK.js.map +0 -1
@@ -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-36XTKR3B.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-BMNCNBPA.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,6 +1,6 @@
1
1
  import { Select, SelectTrigger, SelectValue, SelectContent, SelectItem } from './chunk-WBE6VQOO.js';
2
2
  import { TextInput } from './chunk-PWCMCMDN.js';
3
- import { Button } from './chunk-ONQCNOLU.js';
3
+ import { Button } from './chunk-HDOR3SN3.js';
4
4
  import { cn } from './chunk-HRNDJU7D.js';
5
5
  import { XIcon, TrashIcon, PlusIcon } from 'lucide-react';
6
6
  import * as React from 'react';
@@ -924,5 +924,5 @@ function FilterBuilder({
924
924
  FilterBuilder.displayName = "FilterBuilder";
925
925
 
926
926
  export { FilterBuilder, FilterGroupComponent, FilterPreview, FilterRuleComponent, FilterToolbar, combinatorToggleVariants, emptyStateVariants, filterBuilderVariants, filterGroupHeaderVariants, filterGroupVariants, filterPreviewVariants, filterRuleVariants, filterToolbarVariants, isFilterGroup, isFilterRule, ruleFieldVariants, ruleOperatorVariants, ruleValueVariants, rulesContainerVariants };
927
- //# sourceMappingURL=chunk-AWYOWR5N.js.map
928
- //# sourceMappingURL=chunk-AWYOWR5N.js.map
927
+ //# sourceMappingURL=chunk-C5HSYDJC.js.map
928
+ //# sourceMappingURL=chunk-C5HSYDJC.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/advanced/FilterBuilder/FilterBuilder.types.ts","../src/components/advanced/FilterBuilder/FilterBuilder.variants.ts","../src/components/advanced/FilterBuilder/FilterBuilder.tsx"],"names":["rulesCount"],"mappings":"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","file":"chunk-AWYOWR5N.js","sourcesContent":["// FilterBuilder/FilterBuilder.types.ts\n\nimport type { filterBuilderVariants } from \"./FilterBuilder.variants\"\nimport type { VariantProps } from \"class-variance-authority\"\n\n// ============================================\n// OPERATOR TYPES\n// ============================================\n\n/**\n * Available operator types for filter rules\n */\nexport type OperatorType =\n | \"between\"\n | \"contains\"\n | \"ends_with\"\n | \"equals\"\n | \"greater_than\"\n | \"greater_than_or_equal\"\n | \"in\"\n | \"is_empty\"\n | \"is_not_empty\"\n | \"less_than\"\n | \"less_than_or_equal\"\n | \"not_equals\"\n | \"not_in\"\n | \"starts_with\"\n\n/**\n * Field types that determine available operators\n */\nexport type FieldType = \"boolean\" | \"date\" | \"number\" | \"select\" | \"string\"\n\n// ============================================\n// DATA STRUCTURES\n// ============================================\n\n/**\n * Option for select-type fields\n */\nexport interface FieldOption {\n /** Display label */\n label: string\n /** Option value */\n value: string\n}\n\n/**\n * Field definition for available filter fields\n */\nexport interface FieldDefinition {\n /** Display label */\n label: string\n /** Unique field identifier */\n name: string\n /** Override default operators for this field */\n operators?: OperatorType[]\n /** Options for select-type fields */\n options?: FieldOption[]\n /** Field data type */\n type: FieldType\n}\n\n/**\n * Individual filter rule\n */\nexport interface FilterRule {\n /** Field name to filter */\n field: string\n /** Unique rule identifier */\n id: string\n /** Operator to apply */\n operator: \"\" | OperatorType\n /** Filter value(s) */\n value: unknown\n}\n\n/**\n * Group of rules with logical combinator\n */\nexport interface FilterGroup {\n /** Logical combinator (and/or) */\n combinator: \"and\" | \"or\"\n /** Unique group identifier */\n id: string\n /** Rules and/or nested groups */\n rules: (FilterGroup | FilterRule)[]\n}\n\n// ============================================\n// EVENT PAYLOADS\n// ============================================\n\n/**\n * Event payload for filter changes\n */\nexport interface FilterBuilderEventPayload {\n /** The updated filter structure */\n filter: FilterGroup\n /** Timestamp of the event */\n timestamp: number\n}\n\n/**\n * Event payload for rule changes\n */\nexport interface FilterRuleEventPayload {\n /** Path to the rule in the filter structure */\n path: string[]\n /** The rule that changed */\n rule: FilterRule\n /** Timestamp of the event */\n timestamp: number\n}\n\n// ============================================\n// COMPONENT PROPS\n// ============================================\n\n/**\n * Props for the FilterBuilder root component\n */\nexport interface FilterBuilderProps\n extends Omit<React.ComponentProps<\"div\">, \"onChange\">,\n VariantProps<typeof filterBuilderVariants> {\n /** Additional CSS classes */\n className?: string\n /** Available fields for filtering */\n fields: FieldDefinition[]\n /** Maximum nesting depth for groups */\n maxDepth?: number\n /** Maximum number of rules allowed */\n maxRules?: number\n /** Callback when filters are applied */\n onApply?: (filter: FilterGroup) => void\n /** Callback when filter changes */\n onChange?: (filter: FilterGroup) => void\n /** Callback when filters are cleared */\n onClear?: () => void\n /** Show preview of the resulting query */\n showPreview?: boolean\n /** Current filter value (controlled) */\n value?: FilterGroup\n}\n\n/**\n * Props for FilterGroup component\n */\nexport interface FilterGroupProps {\n /** Current nesting depth */\n depth: number\n /** Available fields */\n fields: FieldDefinition[]\n /** The group data */\n group: FilterGroup\n /** Whether this is the root group */\n isRoot?: boolean\n /** Maximum nesting depth */\n maxDepth: number\n /** Maximum number of rules */\n maxRules: number\n /** Callback when group changes */\n onChange: (group: FilterGroup) => void\n /** Callback when group is removed */\n onRemove?: () => void\n /** Current total rules count */\n rulesCount: number\n}\n\n/**\n * Props for FilterRule component\n */\nexport interface FilterRuleProps {\n /** Available fields */\n fields: FieldDefinition[]\n /** Callback when rule changes */\n onChange: (rule: FilterRule) => void\n /** Callback when rule is removed */\n onRemove: () => void\n /** The rule data */\n rule: FilterRule\n}\n\n/**\n * Props for FilterToolbar component\n */\nexport interface FilterToolbarProps {\n /** Whether adding groups is disabled (max depth reached) */\n canAddGroup: boolean\n /** Whether adding rules is disabled (max reached) */\n canAddRule: boolean\n /** Whether there are rules to clear */\n hasRules: boolean\n /** Callback to add a new group */\n onAddGroup: () => void\n /** Callback to add a new rule */\n onAddRule: () => void\n /** Callback to apply filters */\n onApply?: () => void\n /** Callback to clear all rules */\n onClear?: () => void\n}\n\n/**\n * Props for FilterPreview component\n */\nexport interface FilterPreviewProps {\n /** Available fields (for label lookup) */\n fields: FieldDefinition[]\n /** The filter to preview */\n filter: FilterGroup\n}\n\n// ============================================\n// UTILITY TYPES\n// ============================================\n\n/**\n * Default operators by field type\n */\nexport type OperatorsByType = Record<FieldType, OperatorType[]>\n\n/**\n * Operator display info\n */\nexport interface OperatorInfo {\n /** Display label */\n label: string\n /** Operator value */\n value: OperatorType\n}\n\n/**\n * Check if an item is a FilterGroup\n */\nexport function isFilterGroup(\n item: FilterGroup | FilterRule\n): item is FilterGroup {\n return \"combinator\" in item && \"rules\" in item\n}\n\n/**\n * Check if an item is a FilterRule\n */\nexport function isFilterRule(\n item: FilterGroup | FilterRule\n): item is FilterRule {\n return \"field\" in item && \"operator\" in item\n}\n","// FilterBuilder/FilterBuilder.variants.ts\n\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\n// Common style constants\nconst ROUNDED_MD = \"rounded-md\"\n\n/**\n * FilterBuilder root container variants\n */\nexport const filterBuilderVariants = cva(\n [\n \"w-full\",\n \"rounded-lg\",\n \"border border-border\",\n \"bg-background\",\n ],\n {\n variants: {\n size: {\n sm: \"p-3 text-sm\",\n default: \"p-4 text-sm\",\n lg: \"p-6 text-base\",\n },\n },\n defaultVariants: {\n size: \"default\",\n },\n }\n)\n\n/**\n * FilterGroup container variants\n */\nexport const filterGroupVariants = cva(\n [\n \"relative\",\n ROUNDED_MD,\n \"border border-border\",\n \"bg-muted/30\",\n ],\n {\n variants: {\n size: {\n sm: \"p-2 gap-2\",\n default: \"p-4 gap-3\",\n lg: \"p-5 gap-4\",\n },\n isRoot: {\n true: \"border-0 bg-transparent p-0\",\n false: \"\",\n },\n },\n defaultVariants: {\n size: \"default\",\n isRoot: false,\n },\n }\n)\n\n/**\n * FilterGroup header (combinator toggle) variants\n */\nexport const filterGroupHeaderVariants = cva(\n [\n \"flex items-center\",\n \"font-medium\",\n ],\n {\n variants: {\n size: {\n sm: \"gap-1.5 text-xs mb-2\",\n default: \"gap-2 text-sm mb-3\",\n lg: \"gap-3 text-base mb-4\",\n },\n },\n defaultVariants: {\n size: \"default\",\n },\n }\n)\n\n/**\n * Combinator toggle button variants\n */\nexport const combinatorToggleVariants = cva(\n [\n \"inline-flex items-center justify-center\",\n ROUNDED_MD,\n \"font-semibold uppercase tracking-wide\",\n \"transition-colors duration-200\",\n \"cursor-pointer\",\n \"select-none\",\n ],\n {\n variants: {\n size: {\n sm: \"px-2 py-0.5 text-xs min-w-9\",\n default: \"px-2.5 py-1 text-xs min-w-11\",\n lg: \"px-3 py-1.5 text-sm min-w-14\",\n },\n active: {\n true: \"bg-primary text-primary-foreground\",\n false: \"bg-muted text-muted-foreground hover:bg-muted/80\",\n },\n },\n defaultVariants: {\n size: \"default\",\n active: false,\n },\n }\n)\n\n/**\n * FilterRule container variants\n */\nexport const filterRuleVariants = cva(\n [\n \"flex items-start\",\n ROUNDED_MD,\n \"bg-background\",\n \"border border-border\",\n \"transition-all duration-200\",\n \"focus-within:ring-2 focus-within:ring-ring focus-within:ring-offset-1\",\n ],\n {\n variants: {\n size: {\n sm: \"p-2 gap-1.5\",\n default: \"p-3 gap-2\",\n lg: \"p-4 gap-3\",\n },\n invalid: {\n true: \"border-destructive\",\n false: \"\",\n },\n },\n defaultVariants: {\n size: \"default\",\n invalid: false,\n },\n }\n)\n\n/**\n * Rule field select variants\n */\nexport const ruleFieldVariants = cva(\n [\n \"flex-shrink-0\",\n ],\n {\n variants: {\n size: {\n sm: \"w-32\",\n default: \"w-40\",\n lg: \"w-52\",\n },\n },\n defaultVariants: {\n size: \"default\",\n },\n }\n)\n\n/**\n * Rule operator select variants\n */\nexport const ruleOperatorVariants = cva(\n [\n \"flex-shrink-0\",\n ],\n {\n variants: {\n size: {\n sm: \"w-24\",\n default: \"w-36\",\n lg: \"w-44\",\n },\n },\n defaultVariants: {\n size: \"default\",\n },\n }\n)\n\n/**\n * Rule value input variants\n */\nexport const ruleValueVariants = cva(\n [\n \"flex-1 min-w-0\",\n ],\n {\n variants: {\n size: {\n sm: \"\",\n default: \"\",\n lg: \"\",\n },\n },\n defaultVariants: {\n size: \"default\",\n },\n }\n)\n\n/**\n * Rules container variants\n */\nexport const rulesContainerVariants = cva(\n [\n \"flex flex-col\",\n ],\n {\n variants: {\n size: {\n sm: \"gap-2\",\n default: \"gap-3\",\n lg: \"gap-4\",\n },\n },\n defaultVariants: {\n size: \"default\",\n },\n }\n)\n\n/**\n * FilterToolbar variants\n */\nexport const filterToolbarVariants = cva(\n [\n \"flex items-center justify-between\",\n \"pt-3 mt-3\",\n \"border-t border-border\",\n ],\n {\n variants: {\n size: {\n sm: \"gap-2\",\n default: \"gap-3\",\n lg: \"gap-4\",\n },\n },\n defaultVariants: {\n size: \"default\",\n },\n }\n)\n\n/**\n * FilterPreview variants\n */\nexport const filterPreviewVariants = cva(\n [\n ROUNDED_MD,\n \"bg-muted/50\",\n \"font-mono\",\n \"overflow-x-auto\",\n ],\n {\n variants: {\n size: {\n sm: \"p-2 text-xs mt-3\",\n default: \"p-3 text-xs mt-4\",\n lg: \"p-4 text-sm mt-5\",\n },\n },\n defaultVariants: {\n size: \"default\",\n },\n }\n)\n\n/**\n * Empty state variants\n */\nexport const emptyStateVariants = cva(\n [\n \"flex flex-col items-center justify-center\",\n \"text-muted-foreground\",\n \"border border-dashed border-border\",\n ROUNDED_MD,\n ],\n {\n variants: {\n size: {\n sm: \"py-4 px-3 text-xs gap-1\",\n default: \"py-6 px-4 text-sm gap-2\",\n lg: \"py-8 px-6 text-base gap-3\",\n },\n },\n defaultVariants: {\n size: \"default\",\n },\n }\n)\n\n// ============================================\n// VARIANT PROP TYPES\n// ============================================\n\nexport type FilterBuilderVariantProps = VariantProps<typeof filterBuilderVariants>\nexport type FilterGroupVariantProps = VariantProps<typeof filterGroupVariants>\nexport type FilterRuleVariantProps = VariantProps<typeof filterRuleVariants>\nexport type CombinatorToggleVariantProps = VariantProps<typeof combinatorToggleVariants>\n","// FilterBuilder/FilterBuilder.tsx\n\"use client\"\n\nimport type {\n FieldDefinition,\n FilterBuilderProps,\n FilterGroup,\n FilterGroupProps,\n FilterPreviewProps,\n FilterRule,\n FilterRuleProps,\n FilterToolbarProps,\n OperatorInfo,\n OperatorsByType,\n OperatorType,\n} from \"./FilterBuilder.types\"\n\nimport { PlusIcon, TrashIcon, XIcon } from \"lucide-react\"\nimport * as React from \"react\"\n\nimport { cn } from \"../../../lib/utils\"\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from \"../../forms/Select\"\nimport { TextInput } from \"../../forms/TextInput\"\nimport { Button } from \"../../primitives/Button\"\nimport { isFilterGroup } from \"./FilterBuilder.types\"\nimport {\n combinatorToggleVariants,\n emptyStateVariants,\n filterBuilderVariants,\n filterGroupHeaderVariants,\n filterGroupVariants,\n filterPreviewVariants,\n filterRuleVariants,\n filterToolbarVariants,\n ruleFieldVariants,\n ruleOperatorVariants,\n rulesContainerVariants,\n ruleValueVariants,\n} from \"./FilterBuilder.variants\"\n\n// ============================================\n// CONSTANTS\n// ============================================\n\n/**\n * Default operators available for each field type\n */\nconst DEFAULT_OPERATORS_BY_TYPE: OperatorsByType = {\n boolean: [\"equals\", \"not_equals\"],\n date: [\n \"equals\",\n \"not_equals\",\n \"greater_than\",\n \"less_than\",\n \"between\",\n ],\n number: [\n \"equals\",\n \"not_equals\",\n \"greater_than\",\n \"greater_than_or_equal\",\n \"less_than\",\n \"less_than_or_equal\",\n \"between\",\n ],\n select: [\"equals\", \"not_equals\", \"in\", \"not_in\"],\n string: [\n \"equals\",\n \"not_equals\",\n \"contains\",\n \"starts_with\",\n \"ends_with\",\n \"is_empty\",\n \"is_not_empty\",\n ],\n}\n\n/**\n * Operator display labels\n */\nconst OPERATOR_LABELS: Record<OperatorType, string> = {\n between: \"between\",\n contains: \"contains\",\n ends_with: \"ends with\",\n equals: \"equals\",\n greater_than: \"greater than\",\n greater_than_or_equal: \"greater than or equal\",\n in: \"is any of\",\n is_empty: \"is empty\",\n is_not_empty: \"is not empty\",\n less_than: \"less than\",\n less_than_or_equal: \"less than or equal\",\n not_equals: \"does not equal\",\n not_in: \"is none of\",\n starts_with: \"starts with\",\n}\n\n/**\n * Generate a unique ID for rules and groups\n */\nfunction generateId(): string {\n return Math.random().toString(36).slice(2, 11)\n}\n\n/**\n * Create an empty rule\n */\nfunction createEmptyRule(): FilterRule {\n return {\n field: \"\",\n id: generateId(),\n operator: \"\",\n value: \"\",\n }\n}\n\n/**\n * Create an empty group\n */\nfunction createEmptyGroup(): FilterGroup {\n return {\n combinator: \"and\",\n id: generateId(),\n rules: [],\n }\n}\n\n/**\n * Get operators for a field\n */\nfunction getOperatorsForField(\n field: FieldDefinition | undefined\n): OperatorInfo[] {\n if (!field) return []\n\n const operators = field.operators ?? DEFAULT_OPERATORS_BY_TYPE[field.type]\n return operators.map((op) => ({\n label: OPERATOR_LABELS[op],\n value: op,\n }))\n}\n\n/**\n * Count total rules in a filter group (including nested)\n */\nfunction countRules(group: FilterGroup): number {\n return group.rules.reduce((count, item) => {\n if (isFilterGroup(item)) {\n return count + countRules(item)\n }\n return count + 1\n }, 0)\n}\n\n/**\n * Get size for input components\n */\nfunction getInputSize(size: \"default\" | \"lg\" | \"sm\"): \"lg\" | \"md\" | \"sm\" {\n if (size === \"lg\") return \"lg\"\n if (size === \"sm\") return \"sm\"\n return \"md\"\n}\n\n// ============================================\n// CONTEXT\n// ============================================\n\ninterface FilterBuilderContextValue {\n fields: FieldDefinition[]\n size: \"default\" | \"lg\" | \"sm\"\n}\n\nconst FilterBuilderContext = React.createContext<FilterBuilderContextValue>({\n fields: [],\n size: \"default\",\n})\n\nfunction useFilterBuilderContext() {\n return React.use(FilterBuilderContext)\n}\n\n// ============================================\n// VALUE INPUT COMPONENT (extracted to reduce complexity)\n// ============================================\n\ninterface ValueInputProps {\n needsSecondValue: boolean\n onChange: (value: string) => void\n selectedField: FieldDefinition | undefined\n size: \"default\" | \"lg\" | \"sm\"\n value: unknown\n}\n\nfunction ValueInput({\n needsSecondValue,\n onChange,\n selectedField,\n size,\n value,\n}: ValueInputProps) {\n const inputSize = getInputSize(size)\n\n // Select field type\n if (selectedField?.type === \"select\" && selectedField.options) {\n return (\n <Select\n value={value as string}\n onValueChange={onChange}\n >\n <SelectTrigger\n aria-label=\"Select value\"\n size={inputSize}\n >\n <SelectValue placeholder=\"Select value\" />\n </SelectTrigger>\n <SelectContent>\n {selectedField.options.map((option) => (\n <SelectItem key={option.value} value={option.value}>\n {option.label}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n )\n }\n\n // Boolean field type\n if (selectedField?.type === \"boolean\") {\n return (\n <Select\n value={String(value)}\n onValueChange={onChange}\n >\n <SelectTrigger\n aria-label=\"Select value\"\n size={inputSize}\n >\n <SelectValue placeholder=\"Select value\" />\n </SelectTrigger>\n <SelectContent>\n <SelectItem value=\"true\">True</SelectItem>\n <SelectItem value=\"false\">False</SelectItem>\n </SelectContent>\n </Select>\n )\n }\n\n // Between operator (two inputs)\n if (needsSecondValue) {\n const rawArray = Array.isArray(value) ? value : [\"\", \"\"]\n const fromValue = String(rawArray[0] ?? \"\")\n const toValue = String(rawArray[1] ?? \"\")\n return (\n <div className=\"flex items-center gap-2\">\n <TextInput\n aria-label=\"From value\"\n placeholder=\"From\"\n size={inputSize}\n type={selectedField?.type === \"number\" ? \"number\" : \"text\"}\n value={fromValue}\n onChange={(e) =>\n { onChange(JSON.stringify([e.target.value, toValue])); }\n }\n />\n <span className=\"text-sm text-muted-foreground\">and</span>\n <TextInput\n aria-label=\"To value\"\n placeholder=\"To\"\n size={inputSize}\n type={selectedField?.type === \"number\" ? \"number\" : \"text\"}\n value={toValue}\n onChange={(e) =>\n { onChange(JSON.stringify([fromValue, e.target.value])); }\n }\n />\n </div>\n )\n }\n\n // Default text/number/date input\n const inputType =\n selectedField?.type === \"number\"\n ? \"number\"\n : selectedField?.type === \"date\"\n ? \"date\"\n : \"text\"\n\n return (\n <TextInput\n aria-label=\"Filter value\"\n placeholder=\"Enter value\"\n size={inputSize}\n type={inputType}\n value={value as string}\n onChange={(e) => { onChange(e.target.value); }}\n />\n )\n}\n\n// ============================================\n// FILTER RULE COMPONENT\n// ============================================\n\nfunction FilterRuleComponent({\n fields,\n onChange,\n onRemove,\n rule,\n}: FilterRuleProps) {\n const { size } = useFilterBuilderContext()\n\n const selectedField = fields.find((f) => f.name === rule.field)\n const operators = getOperatorsForField(selectedField)\n const isInvalid = Boolean(rule.field && !rule.operator)\n const inputSize = getInputSize(size)\n\n const handleFieldChange = (fieldName: string) => {\n const newField = fields.find((f) => f.name === fieldName)\n const newOperators = getOperatorsForField(newField)\n\n onChange({\n ...rule,\n field: fieldName,\n operator: newOperators[0]?.value ?? \"\",\n value: \"\",\n })\n }\n\n const handleOperatorChange = (operator: string) => {\n onChange({\n ...rule,\n operator: operator as OperatorType,\n value: [\"is_empty\", \"is_not_empty\"].includes(operator) ? \"\" : rule.value,\n })\n }\n\n const handleValueChange = (value: string) => {\n onChange({ ...rule, value })\n }\n\n const needsValue = rule.operator && ![\"is_empty\", \"is_not_empty\"].includes(rule.operator)\n const needsSecondValue = rule.operator === \"between\"\n\n return (\n <div\n aria-label={`Filter rule: ${selectedField?.label ?? \"Select field\"}`}\n className={cn(filterRuleVariants({ invalid: isInvalid, size }))}\n data-slot=\"filter-rule\"\n role=\"group\"\n >\n {/* Field Select */}\n <div className={cn(ruleFieldVariants({ size }))}>\n <Select\n value={rule.field}\n onValueChange={handleFieldChange}\n >\n <SelectTrigger\n aria-label=\"Select field\"\n size={inputSize}\n >\n <SelectValue placeholder=\"Select field\" />\n </SelectTrigger>\n <SelectContent>\n {fields.map((field) => (\n <SelectItem key={field.name} value={field.name}>\n {field.label}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </div>\n\n {/* Operator Select */}\n {rule.field && (\n <div className={cn(ruleOperatorVariants({ size }))}>\n <Select\n value={rule.operator}\n onValueChange={handleOperatorChange}\n >\n <SelectTrigger\n aria-label=\"Select operator\"\n size={inputSize}\n >\n <SelectValue placeholder=\"Operator\" />\n </SelectTrigger>\n <SelectContent>\n {operators.map((op) => (\n <SelectItem key={op.value} value={op.value}>\n {op.label}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </div>\n )}\n\n {/* Value Input */}\n {needsValue && (\n <div className={cn(ruleValueVariants({ size }))}>\n <ValueInput\n needsSecondValue={needsSecondValue}\n selectedField={selectedField}\n size={size}\n value={rule.value}\n onChange={handleValueChange}\n />\n </div>\n )}\n\n {/* Remove Button */}\n <Button\n aria-label=\"Remove rule\"\n className=\"flex-shrink-0 text-muted-foreground hover:text-destructive\"\n size=\"icon\"\n type=\"button\"\n variant=\"ghost\"\n onClick={onRemove}\n >\n <XIcon className=\"size-4\" />\n </Button>\n </div>\n )\n}\n\n// ============================================\n// FILTER GROUP COMPONENT\n// ============================================\n\nfunction FilterGroupComponent({\n depth,\n fields,\n group,\n isRoot = false,\n maxDepth,\n maxRules,\n onChange,\n onRemove,\n rulesCount,\n}: FilterGroupProps) {\n const { size } = useFilterBuilderContext()\n\n const handleCombinatorChange = (combinator: \"and\" | \"or\") => {\n onChange({ ...group, combinator })\n }\n\n const handleAddRule = () => {\n if (rulesCount >= maxRules) return\n onChange({ ...group, rules: [...group.rules, createEmptyRule()] })\n }\n\n const handleAddGroup = () => {\n if (depth >= maxDepth || rulesCount >= maxRules) return\n onChange({ ...group, rules: [...group.rules, createEmptyGroup()] })\n }\n\n const handleRuleChange = (index: number, updatedItem: FilterGroup | FilterRule) => {\n const newRules = [...group.rules]\n newRules[index] = updatedItem\n onChange({ ...group, rules: newRules })\n }\n\n const handleRemoveItem = (index: number) => {\n onChange({ ...group, rules: group.rules.filter((_, i) => i !== index) })\n }\n\n const canAddRule = rulesCount < maxRules\n const canAddGroup = depth < maxDepth && rulesCount < maxRules\n const buttonSize = size === \"lg\" ? \"default\" : \"sm\"\n\n return (\n <div\n aria-label={`Filter group with ${group.combinator.toUpperCase()} combinator`}\n className={cn(filterGroupVariants({ isRoot, size }))}\n data-slot=\"filter-group\"\n role=\"group\"\n >\n {/* Group Header - Combinator Toggle */}\n {!isRoot && (\n <div className={cn(filterGroupHeaderVariants({ size }))}>\n <div className=\"flex items-center gap-1\">\n <button\n className={cn(\n combinatorToggleVariants({\n active: group.combinator === \"and\",\n size,\n })\n )}\n aria-pressed={group.combinator === \"and\"}\n type=\"button\"\n onClick={() => { handleCombinatorChange(\"and\"); }}\n >\n AND\n </button>\n <button\n className={cn(\n combinatorToggleVariants({\n active: group.combinator === \"or\",\n size,\n })\n )}\n aria-pressed={group.combinator === \"or\"}\n type=\"button\"\n onClick={() => { handleCombinatorChange(\"or\"); }}\n >\n OR\n </button>\n </div>\n\n {onRemove && (\n <Button\n aria-label=\"Remove group\"\n className=\"ml-auto text-muted-foreground hover:text-destructive\"\n size=\"icon\"\n type=\"button\"\n variant=\"ghost\"\n onClick={onRemove}\n >\n <TrashIcon className=\"size-4\" />\n </Button>\n )}\n </div>\n )}\n\n {/* Rules Container */}\n <div className={cn(rulesContainerVariants({ size }))}>\n {group.rules.length === 0 ? (\n <div className={cn(emptyStateVariants({ size }))}>\n <span>No filters added</span>\n <span className=\"text-xs\">Click &quot;Add Rule&quot; to create a filter</span>\n </div>\n ) : (\n group.rules.map((item, index) => (\n <React.Fragment key={item.id}>\n {/* Combinator Label between rules (not for first item) */}\n {index > 0 && (\n <div className=\"flex items-center gap-2 pl-2\">\n <span className=\"text-xs font-medium uppercase text-muted-foreground\">\n {group.combinator}\n </span>\n <div className=\"h-px flex-1 bg-border\" />\n </div>\n )}\n\n {isFilterGroup(item) ? (\n <FilterGroupComponent\n depth={depth + 1}\n fields={fields}\n group={item}\n maxDepth={maxDepth}\n maxRules={maxRules}\n rulesCount={rulesCount}\n onChange={(updated) => { handleRuleChange(index, updated); }}\n onRemove={() => { handleRemoveItem(index); }}\n />\n ) : (\n <FilterRuleComponent\n fields={fields}\n rule={item}\n onChange={(updated) => { handleRuleChange(index, updated); }}\n onRemove={() => { handleRemoveItem(index); }}\n />\n )}\n </React.Fragment>\n ))\n )}\n </div>\n\n {/* Add Buttons */}\n <div className=\"mt-2 flex items-center gap-2\">\n <Button\n className=\"gap-1\"\n disabled={!canAddRule}\n size={buttonSize}\n type=\"button\"\n variant=\"outline\"\n onClick={handleAddRule}\n >\n <PlusIcon className=\"size-3\" />\n Add Rule\n </Button>\n\n {!isRoot && (\n <Button\n className=\"gap-1\"\n disabled={!canAddGroup}\n size={buttonSize}\n type=\"button\"\n variant=\"outline\"\n onClick={handleAddGroup}\n >\n <PlusIcon className=\"size-3\" />\n Add Group\n </Button>\n )}\n </div>\n </div>\n )\n}\n\n// ============================================\n// FILTER TOOLBAR COMPONENT\n// ============================================\n\nfunction FilterToolbar({\n canAddGroup,\n canAddRule,\n hasRules,\n onAddGroup,\n onAddRule,\n onApply,\n onClear,\n}: FilterToolbarProps) {\n const { size } = useFilterBuilderContext()\n const buttonSize = size === \"lg\" ? \"default\" : \"sm\"\n\n return (\n <div\n className={cn(filterToolbarVariants({ size }))}\n data-slot=\"filter-toolbar\"\n >\n <div className=\"flex items-center gap-2\">\n <Button\n className=\"gap-1\"\n disabled={!canAddRule}\n size={buttonSize}\n type=\"button\"\n variant=\"outline\"\n onClick={onAddRule}\n >\n <PlusIcon className=\"size-3\" />\n Add Rule\n </Button>\n\n <Button\n className=\"gap-1\"\n disabled={!canAddGroup}\n size={buttonSize}\n type=\"button\"\n variant=\"outline\"\n onClick={onAddGroup}\n >\n <PlusIcon className=\"size-3\" />\n Add Group\n </Button>\n </div>\n\n <div className=\"flex items-center gap-2\">\n {onClear && hasRules && (\n <Button\n size={buttonSize}\n type=\"button\"\n variant=\"ghost\"\n onClick={onClear}\n >\n Clear All\n </Button>\n )}\n\n {onApply && (\n <Button\n size={buttonSize}\n type=\"button\"\n variant=\"default\"\n onClick={onApply}\n >\n Apply Filters\n </Button>\n )}\n </div>\n </div>\n )\n}\n\n// ============================================\n// FILTER PREVIEW COMPONENT\n// ============================================\n\nfunction FilterPreview({ fields, filter }: FilterPreviewProps) {\n const { size } = useFilterBuilderContext()\n\n const getFieldLabel = (fieldName: string): string => {\n const field = fields.find((f) => f.name === fieldName)\n return field?.label ?? fieldName\n }\n\n const formatValue = (value: unknown): string => {\n if (Array.isArray(value)) {\n return value.join(\" and \")\n }\n return String(value)\n }\n\n const renderRule = (rule: FilterRule): string => {\n if (!rule.field || !rule.operator) return \"\"\n\n const fieldLabel = getFieldLabel(rule.field)\n // After the check above, rule.operator is guaranteed to be a valid OperatorType\n const operatorLabel = OPERATOR_LABELS[rule.operator]\n\n if ([\"is_empty\", \"is_not_empty\"].includes(rule.operator)) {\n return `${fieldLabel} ${operatorLabel}`\n }\n\n return `${fieldLabel} ${operatorLabel} \"${formatValue(rule.value)}\"`\n }\n\n const renderGroup = (group: FilterGroup): string => {\n const parts = group.rules\n .map((item) => {\n if (isFilterGroup(item)) {\n return `(${renderGroup(item)})`\n }\n return renderRule(item)\n })\n .filter(Boolean)\n\n return parts.join(` ${group.combinator.toUpperCase()} `)\n }\n\n const preview = renderGroup(filter)\n\n if (!preview) {\n return (\n <div\n className={cn(filterPreviewVariants({ size }), \"italic text-muted-foreground\")}\n data-slot=\"filter-preview\"\n >\n No filters defined\n </div>\n )\n }\n\n return (\n <div\n className={cn(filterPreviewVariants({ size }))}\n data-slot=\"filter-preview\"\n >\n <code>{preview}</code>\n </div>\n )\n}\n\n// ============================================\n// MAIN FILTER BUILDER COMPONENT\n// ============================================\n\n/**\n * FilterBuilder - Advanced visual query builder component\n *\n * Allows creating complex filters with multiple conditions,\n * logical operators (AND/OR), nested groups, and various field types.\n *\n * @example\n * ```tsx\n * const fields = [\n * { name: \"name\", label: \"Name\", type: \"string\" },\n * { name: \"age\", label: \"Age\", type: \"number\" },\n * { name: \"status\", label: \"Status\", type: \"select\", options: [\n * { value: \"active\", label: \"Active\" },\n * { value: \"inactive\", label: \"Inactive\" },\n * ]},\n * ]\n *\n * <FilterBuilder\n * fields={fields}\n * value={filter}\n * onChange={setFilter}\n * onApply={(f) => console.log(\"Apply:\", f)}\n * />\n * ```\n */\nfunction FilterBuilder({\n className,\n fields,\n maxDepth = 3,\n maxRules = 20,\n onApply,\n onChange,\n onClear,\n showPreview = false,\n size = \"default\",\n value,\n ...props\n}: FilterBuilderProps) {\n const filter = value ?? createEmptyGroup()\n\n const handleChange = (updatedFilter: FilterGroup) => {\n onChange?.(updatedFilter)\n }\n\n const handleAddRule = () => {\n const rulesCount = countRules(filter)\n if (rulesCount >= maxRules) return\n handleChange({ ...filter, rules: [...filter.rules, createEmptyRule()] })\n }\n\n const handleAddGroup = () => {\n const rulesCount = countRules(filter)\n if (rulesCount >= maxRules) return\n handleChange({ ...filter, rules: [...filter.rules, createEmptyGroup()] })\n }\n\n const handleClear = () => {\n handleChange(createEmptyGroup())\n onClear?.()\n }\n\n const handleApply = () => {\n onApply?.(filter)\n }\n\n const rulesCount = countRules(filter)\n const hasRules = rulesCount > 0\n const canAddRule = rulesCount < maxRules\n const canAddGroup = rulesCount < maxRules\n\n return (\n <FilterBuilderContext value={{ fields, size: size ?? \"default\" }}>\n <div\n aria-label=\"Filter builder\"\n className={cn(filterBuilderVariants({ size }), className)}\n data-slot=\"filter-builder\"\n role=\"region\"\n {...props}\n >\n {/* Main Filter Group */}\n <FilterGroupComponent\n isRoot\n depth={0}\n fields={fields}\n group={filter}\n maxDepth={maxDepth}\n maxRules={maxRules}\n rulesCount={rulesCount}\n onChange={handleChange}\n />\n\n {/* Toolbar */}\n <FilterToolbar\n canAddGroup={canAddGroup}\n canAddRule={canAddRule}\n hasRules={hasRules}\n onAddGroup={handleAddGroup}\n onAddRule={handleAddRule}\n onApply={onApply ? handleApply : undefined}\n onClear={onClear ? handleClear : undefined}\n />\n\n {/* Preview */}\n {showPreview && (\n <FilterPreview fields={fields} filter={filter} />\n )}\n </div>\n </FilterBuilderContext>\n )\n}\n\nFilterBuilder.displayName = \"FilterBuilder\"\n\n// ============================================\n// EXPORTS\n// ============================================\n\nexport {\n FilterBuilder,\n type FilterBuilderProps,\n FilterGroupComponent as FilterGroup,\n type FilterGroupProps,\n FilterPreview,\n type FilterPreviewProps,\n FilterRuleComponent as FilterRule,\n type FilterRuleProps,\n FilterToolbar,\n type FilterToolbarProps,\n}\n"]}
1
+ {"version":3,"sources":["../src/components/advanced/FilterBuilder/FilterBuilder.types.ts","../src/components/advanced/FilterBuilder/FilterBuilder.variants.ts","../src/components/advanced/FilterBuilder/FilterBuilder.tsx"],"names":["rulesCount"],"mappings":"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","file":"chunk-C5HSYDJC.js","sourcesContent":["// FilterBuilder/FilterBuilder.types.ts\n\nimport type { filterBuilderVariants } from \"./FilterBuilder.variants\"\nimport type { VariantProps } from \"class-variance-authority\"\n\n// ============================================\n// OPERATOR TYPES\n// ============================================\n\n/**\n * Available operator types for filter rules\n */\nexport type OperatorType =\n | \"between\"\n | \"contains\"\n | \"ends_with\"\n | \"equals\"\n | \"greater_than\"\n | \"greater_than_or_equal\"\n | \"in\"\n | \"is_empty\"\n | \"is_not_empty\"\n | \"less_than\"\n | \"less_than_or_equal\"\n | \"not_equals\"\n | \"not_in\"\n | \"starts_with\"\n\n/**\n * Field types that determine available operators\n */\nexport type FieldType = \"boolean\" | \"date\" | \"number\" | \"select\" | \"string\"\n\n// ============================================\n// DATA STRUCTURES\n// ============================================\n\n/**\n * Option for select-type fields\n */\nexport interface FieldOption {\n /** Display label */\n label: string\n /** Option value */\n value: string\n}\n\n/**\n * Field definition for available filter fields\n */\nexport interface FieldDefinition {\n /** Display label */\n label: string\n /** Unique field identifier */\n name: string\n /** Override default operators for this field */\n operators?: OperatorType[]\n /** Options for select-type fields */\n options?: FieldOption[]\n /** Field data type */\n type: FieldType\n}\n\n/**\n * Individual filter rule\n */\nexport interface FilterRule {\n /** Field name to filter */\n field: string\n /** Unique rule identifier */\n id: string\n /** Operator to apply */\n operator: \"\" | OperatorType\n /** Filter value(s) */\n value: unknown\n}\n\n/**\n * Group of rules with logical combinator\n */\nexport interface FilterGroup {\n /** Logical combinator (and/or) */\n combinator: \"and\" | \"or\"\n /** Unique group identifier */\n id: string\n /** Rules and/or nested groups */\n rules: (FilterGroup | FilterRule)[]\n}\n\n// ============================================\n// EVENT PAYLOADS\n// ============================================\n\n/**\n * Event payload for filter changes\n */\nexport interface FilterBuilderEventPayload {\n /** The updated filter structure */\n filter: FilterGroup\n /** Timestamp of the event */\n timestamp: number\n}\n\n/**\n * Event payload for rule changes\n */\nexport interface FilterRuleEventPayload {\n /** Path to the rule in the filter structure */\n path: string[]\n /** The rule that changed */\n rule: FilterRule\n /** Timestamp of the event */\n timestamp: number\n}\n\n// ============================================\n// COMPONENT PROPS\n// ============================================\n\n/**\n * Props for the FilterBuilder root component\n */\nexport interface FilterBuilderProps\n extends Omit<React.ComponentProps<\"div\">, \"onChange\">,\n VariantProps<typeof filterBuilderVariants> {\n /** Additional CSS classes */\n className?: string\n /** Available fields for filtering */\n fields: FieldDefinition[]\n /** Maximum nesting depth for groups */\n maxDepth?: number\n /** Maximum number of rules allowed */\n maxRules?: number\n /** Callback when filters are applied */\n onApply?: (filter: FilterGroup) => void\n /** Callback when filter changes */\n onChange?: (filter: FilterGroup) => void\n /** Callback when filters are cleared */\n onClear?: () => void\n /** Show preview of the resulting query */\n showPreview?: boolean\n /** Current filter value (controlled) */\n value?: FilterGroup\n}\n\n/**\n * Props for FilterGroup component\n */\nexport interface FilterGroupProps {\n /** Current nesting depth */\n depth: number\n /** Available fields */\n fields: FieldDefinition[]\n /** The group data */\n group: FilterGroup\n /** Whether this is the root group */\n isRoot?: boolean\n /** Maximum nesting depth */\n maxDepth: number\n /** Maximum number of rules */\n maxRules: number\n /** Callback when group changes */\n onChange: (group: FilterGroup) => void\n /** Callback when group is removed */\n onRemove?: () => void\n /** Current total rules count */\n rulesCount: number\n}\n\n/**\n * Props for FilterRule component\n */\nexport interface FilterRuleProps {\n /** Available fields */\n fields: FieldDefinition[]\n /** Callback when rule changes */\n onChange: (rule: FilterRule) => void\n /** Callback when rule is removed */\n onRemove: () => void\n /** The rule data */\n rule: FilterRule\n}\n\n/**\n * Props for FilterToolbar component\n */\nexport interface FilterToolbarProps {\n /** Whether adding groups is disabled (max depth reached) */\n canAddGroup: boolean\n /** Whether adding rules is disabled (max reached) */\n canAddRule: boolean\n /** Whether there are rules to clear */\n hasRules: boolean\n /** Callback to add a new group */\n onAddGroup: () => void\n /** Callback to add a new rule */\n onAddRule: () => void\n /** Callback to apply filters */\n onApply?: () => void\n /** Callback to clear all rules */\n onClear?: () => void\n}\n\n/**\n * Props for FilterPreview component\n */\nexport interface FilterPreviewProps {\n /** Available fields (for label lookup) */\n fields: FieldDefinition[]\n /** The filter to preview */\n filter: FilterGroup\n}\n\n// ============================================\n// UTILITY TYPES\n// ============================================\n\n/**\n * Default operators by field type\n */\nexport type OperatorsByType = Record<FieldType, OperatorType[]>\n\n/**\n * Operator display info\n */\nexport interface OperatorInfo {\n /** Display label */\n label: string\n /** Operator value */\n value: OperatorType\n}\n\n/**\n * Check if an item is a FilterGroup\n */\nexport function isFilterGroup(\n item: FilterGroup | FilterRule\n): item is FilterGroup {\n return \"combinator\" in item && \"rules\" in item\n}\n\n/**\n * Check if an item is a FilterRule\n */\nexport function isFilterRule(\n item: FilterGroup | FilterRule\n): item is FilterRule {\n return \"field\" in item && \"operator\" in item\n}\n","// FilterBuilder/FilterBuilder.variants.ts\n\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\n// Common style constants\nconst ROUNDED_MD = \"rounded-md\"\n\n/**\n * FilterBuilder root container variants\n */\nexport const filterBuilderVariants = cva(\n [\n \"w-full\",\n \"rounded-lg\",\n \"border border-border\",\n \"bg-background\",\n ],\n {\n variants: {\n size: {\n sm: \"p-3 text-sm\",\n default: \"p-4 text-sm\",\n lg: \"p-6 text-base\",\n },\n },\n defaultVariants: {\n size: \"default\",\n },\n }\n)\n\n/**\n * FilterGroup container variants\n */\nexport const filterGroupVariants = cva(\n [\n \"relative\",\n ROUNDED_MD,\n \"border border-border\",\n \"bg-muted/30\",\n ],\n {\n variants: {\n size: {\n sm: \"p-2 gap-2\",\n default: \"p-4 gap-3\",\n lg: \"p-5 gap-4\",\n },\n isRoot: {\n true: \"border-0 bg-transparent p-0\",\n false: \"\",\n },\n },\n defaultVariants: {\n size: \"default\",\n isRoot: false,\n },\n }\n)\n\n/**\n * FilterGroup header (combinator toggle) variants\n */\nexport const filterGroupHeaderVariants = cva(\n [\n \"flex items-center\",\n \"font-medium\",\n ],\n {\n variants: {\n size: {\n sm: \"gap-1.5 text-xs mb-2\",\n default: \"gap-2 text-sm mb-3\",\n lg: \"gap-3 text-base mb-4\",\n },\n },\n defaultVariants: {\n size: \"default\",\n },\n }\n)\n\n/**\n * Combinator toggle button variants\n */\nexport const combinatorToggleVariants = cva(\n [\n \"inline-flex items-center justify-center\",\n ROUNDED_MD,\n \"font-semibold uppercase tracking-wide\",\n \"transition-colors duration-200\",\n \"cursor-pointer\",\n \"select-none\",\n ],\n {\n variants: {\n size: {\n sm: \"px-2 py-0.5 text-xs min-w-9\",\n default: \"px-2.5 py-1 text-xs min-w-11\",\n lg: \"px-3 py-1.5 text-sm min-w-14\",\n },\n active: {\n true: \"bg-primary text-primary-foreground\",\n false: \"bg-muted text-muted-foreground hover:bg-muted/80\",\n },\n },\n defaultVariants: {\n size: \"default\",\n active: false,\n },\n }\n)\n\n/**\n * FilterRule container variants\n */\nexport const filterRuleVariants = cva(\n [\n \"flex items-start\",\n ROUNDED_MD,\n \"bg-background\",\n \"border border-border\",\n \"transition-all duration-200\",\n \"focus-within:ring-2 focus-within:ring-ring focus-within:ring-offset-1\",\n ],\n {\n variants: {\n size: {\n sm: \"p-2 gap-1.5\",\n default: \"p-3 gap-2\",\n lg: \"p-4 gap-3\",\n },\n invalid: {\n true: \"border-destructive\",\n false: \"\",\n },\n },\n defaultVariants: {\n size: \"default\",\n invalid: false,\n },\n }\n)\n\n/**\n * Rule field select variants\n */\nexport const ruleFieldVariants = cva(\n [\n \"flex-shrink-0\",\n ],\n {\n variants: {\n size: {\n sm: \"w-32\",\n default: \"w-40\",\n lg: \"w-52\",\n },\n },\n defaultVariants: {\n size: \"default\",\n },\n }\n)\n\n/**\n * Rule operator select variants\n */\nexport const ruleOperatorVariants = cva(\n [\n \"flex-shrink-0\",\n ],\n {\n variants: {\n size: {\n sm: \"w-24\",\n default: \"w-36\",\n lg: \"w-44\",\n },\n },\n defaultVariants: {\n size: \"default\",\n },\n }\n)\n\n/**\n * Rule value input variants\n */\nexport const ruleValueVariants = cva(\n [\n \"flex-1 min-w-0\",\n ],\n {\n variants: {\n size: {\n sm: \"\",\n default: \"\",\n lg: \"\",\n },\n },\n defaultVariants: {\n size: \"default\",\n },\n }\n)\n\n/**\n * Rules container variants\n */\nexport const rulesContainerVariants = cva(\n [\n \"flex flex-col\",\n ],\n {\n variants: {\n size: {\n sm: \"gap-2\",\n default: \"gap-3\",\n lg: \"gap-4\",\n },\n },\n defaultVariants: {\n size: \"default\",\n },\n }\n)\n\n/**\n * FilterToolbar variants\n */\nexport const filterToolbarVariants = cva(\n [\n \"flex items-center justify-between\",\n \"pt-3 mt-3\",\n \"border-t border-border\",\n ],\n {\n variants: {\n size: {\n sm: \"gap-2\",\n default: \"gap-3\",\n lg: \"gap-4\",\n },\n },\n defaultVariants: {\n size: \"default\",\n },\n }\n)\n\n/**\n * FilterPreview variants\n */\nexport const filterPreviewVariants = cva(\n [\n ROUNDED_MD,\n \"bg-muted/50\",\n \"font-mono\",\n \"overflow-x-auto\",\n ],\n {\n variants: {\n size: {\n sm: \"p-2 text-xs mt-3\",\n default: \"p-3 text-xs mt-4\",\n lg: \"p-4 text-sm mt-5\",\n },\n },\n defaultVariants: {\n size: \"default\",\n },\n }\n)\n\n/**\n * Empty state variants\n */\nexport const emptyStateVariants = cva(\n [\n \"flex flex-col items-center justify-center\",\n \"text-muted-foreground\",\n \"border border-dashed border-border\",\n ROUNDED_MD,\n ],\n {\n variants: {\n size: {\n sm: \"py-4 px-3 text-xs gap-1\",\n default: \"py-6 px-4 text-sm gap-2\",\n lg: \"py-8 px-6 text-base gap-3\",\n },\n },\n defaultVariants: {\n size: \"default\",\n },\n }\n)\n\n// ============================================\n// VARIANT PROP TYPES\n// ============================================\n\nexport type FilterBuilderVariantProps = VariantProps<typeof filterBuilderVariants>\nexport type FilterGroupVariantProps = VariantProps<typeof filterGroupVariants>\nexport type FilterRuleVariantProps = VariantProps<typeof filterRuleVariants>\nexport type CombinatorToggleVariantProps = VariantProps<typeof combinatorToggleVariants>\n","// FilterBuilder/FilterBuilder.tsx\n\"use client\"\n\nimport type {\n FieldDefinition,\n FilterBuilderProps,\n FilterGroup,\n FilterGroupProps,\n FilterPreviewProps,\n FilterRule,\n FilterRuleProps,\n FilterToolbarProps,\n OperatorInfo,\n OperatorsByType,\n OperatorType,\n} from \"./FilterBuilder.types\"\n\nimport { PlusIcon, TrashIcon, XIcon } from \"lucide-react\"\nimport * as React from \"react\"\n\nimport { cn } from \"../../../lib/utils\"\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from \"../../forms/Select\"\nimport { TextInput } from \"../../forms/TextInput\"\nimport { Button } from \"../../primitives/Button\"\nimport { isFilterGroup } from \"./FilterBuilder.types\"\nimport {\n combinatorToggleVariants,\n emptyStateVariants,\n filterBuilderVariants,\n filterGroupHeaderVariants,\n filterGroupVariants,\n filterPreviewVariants,\n filterRuleVariants,\n filterToolbarVariants,\n ruleFieldVariants,\n ruleOperatorVariants,\n rulesContainerVariants,\n ruleValueVariants,\n} from \"./FilterBuilder.variants\"\n\n// ============================================\n// CONSTANTS\n// ============================================\n\n/**\n * Default operators available for each field type\n */\nconst DEFAULT_OPERATORS_BY_TYPE: OperatorsByType = {\n boolean: [\"equals\", \"not_equals\"],\n date: [\n \"equals\",\n \"not_equals\",\n \"greater_than\",\n \"less_than\",\n \"between\",\n ],\n number: [\n \"equals\",\n \"not_equals\",\n \"greater_than\",\n \"greater_than_or_equal\",\n \"less_than\",\n \"less_than_or_equal\",\n \"between\",\n ],\n select: [\"equals\", \"not_equals\", \"in\", \"not_in\"],\n string: [\n \"equals\",\n \"not_equals\",\n \"contains\",\n \"starts_with\",\n \"ends_with\",\n \"is_empty\",\n \"is_not_empty\",\n ],\n}\n\n/**\n * Operator display labels\n */\nconst OPERATOR_LABELS: Record<OperatorType, string> = {\n between: \"between\",\n contains: \"contains\",\n ends_with: \"ends with\",\n equals: \"equals\",\n greater_than: \"greater than\",\n greater_than_or_equal: \"greater than or equal\",\n in: \"is any of\",\n is_empty: \"is empty\",\n is_not_empty: \"is not empty\",\n less_than: \"less than\",\n less_than_or_equal: \"less than or equal\",\n not_equals: \"does not equal\",\n not_in: \"is none of\",\n starts_with: \"starts with\",\n}\n\n/**\n * Generate a unique ID for rules and groups\n */\nfunction generateId(): string {\n return Math.random().toString(36).slice(2, 11)\n}\n\n/**\n * Create an empty rule\n */\nfunction createEmptyRule(): FilterRule {\n return {\n field: \"\",\n id: generateId(),\n operator: \"\",\n value: \"\",\n }\n}\n\n/**\n * Create an empty group\n */\nfunction createEmptyGroup(): FilterGroup {\n return {\n combinator: \"and\",\n id: generateId(),\n rules: [],\n }\n}\n\n/**\n * Get operators for a field\n */\nfunction getOperatorsForField(\n field: FieldDefinition | undefined\n): OperatorInfo[] {\n if (!field) return []\n\n const operators = field.operators ?? DEFAULT_OPERATORS_BY_TYPE[field.type]\n return operators.map((op) => ({\n label: OPERATOR_LABELS[op],\n value: op,\n }))\n}\n\n/**\n * Count total rules in a filter group (including nested)\n */\nfunction countRules(group: FilterGroup): number {\n return group.rules.reduce((count, item) => {\n if (isFilterGroup(item)) {\n return count + countRules(item)\n }\n return count + 1\n }, 0)\n}\n\n/**\n * Get size for input components\n */\nfunction getInputSize(size: \"default\" | \"lg\" | \"sm\"): \"lg\" | \"md\" | \"sm\" {\n if (size === \"lg\") return \"lg\"\n if (size === \"sm\") return \"sm\"\n return \"md\"\n}\n\n// ============================================\n// CONTEXT\n// ============================================\n\ninterface FilterBuilderContextValue {\n fields: FieldDefinition[]\n size: \"default\" | \"lg\" | \"sm\"\n}\n\nconst FilterBuilderContext = React.createContext<FilterBuilderContextValue>({\n fields: [],\n size: \"default\",\n})\n\nfunction useFilterBuilderContext() {\n return React.use(FilterBuilderContext)\n}\n\n// ============================================\n// VALUE INPUT COMPONENT (extracted to reduce complexity)\n// ============================================\n\ninterface ValueInputProps {\n needsSecondValue: boolean\n onChange: (value: string) => void\n selectedField: FieldDefinition | undefined\n size: \"default\" | \"lg\" | \"sm\"\n value: unknown\n}\n\nfunction ValueInput({\n needsSecondValue,\n onChange,\n selectedField,\n size,\n value,\n}: ValueInputProps) {\n const inputSize = getInputSize(size)\n\n // Select field type\n if (selectedField?.type === \"select\" && selectedField.options) {\n return (\n <Select\n value={value as string}\n onValueChange={onChange}\n >\n <SelectTrigger\n aria-label=\"Select value\"\n size={inputSize}\n >\n <SelectValue placeholder=\"Select value\" />\n </SelectTrigger>\n <SelectContent>\n {selectedField.options.map((option) => (\n <SelectItem key={option.value} value={option.value}>\n {option.label}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n )\n }\n\n // Boolean field type\n if (selectedField?.type === \"boolean\") {\n return (\n <Select\n value={String(value)}\n onValueChange={onChange}\n >\n <SelectTrigger\n aria-label=\"Select value\"\n size={inputSize}\n >\n <SelectValue placeholder=\"Select value\" />\n </SelectTrigger>\n <SelectContent>\n <SelectItem value=\"true\">True</SelectItem>\n <SelectItem value=\"false\">False</SelectItem>\n </SelectContent>\n </Select>\n )\n }\n\n // Between operator (two inputs)\n if (needsSecondValue) {\n const rawArray = Array.isArray(value) ? value : [\"\", \"\"]\n const fromValue = String(rawArray[0] ?? \"\")\n const toValue = String(rawArray[1] ?? \"\")\n return (\n <div className=\"flex items-center gap-2\">\n <TextInput\n aria-label=\"From value\"\n placeholder=\"From\"\n size={inputSize}\n type={selectedField?.type === \"number\" ? \"number\" : \"text\"}\n value={fromValue}\n onChange={(e) =>\n { onChange(JSON.stringify([e.target.value, toValue])); }\n }\n />\n <span className=\"text-sm text-muted-foreground\">and</span>\n <TextInput\n aria-label=\"To value\"\n placeholder=\"To\"\n size={inputSize}\n type={selectedField?.type === \"number\" ? \"number\" : \"text\"}\n value={toValue}\n onChange={(e) =>\n { onChange(JSON.stringify([fromValue, e.target.value])); }\n }\n />\n </div>\n )\n }\n\n // Default text/number/date input\n const inputType =\n selectedField?.type === \"number\"\n ? \"number\"\n : selectedField?.type === \"date\"\n ? \"date\"\n : \"text\"\n\n return (\n <TextInput\n aria-label=\"Filter value\"\n placeholder=\"Enter value\"\n size={inputSize}\n type={inputType}\n value={value as string}\n onChange={(e) => { onChange(e.target.value); }}\n />\n )\n}\n\n// ============================================\n// FILTER RULE COMPONENT\n// ============================================\n\nfunction FilterRuleComponent({\n fields,\n onChange,\n onRemove,\n rule,\n}: FilterRuleProps) {\n const { size } = useFilterBuilderContext()\n\n const selectedField = fields.find((f) => f.name === rule.field)\n const operators = getOperatorsForField(selectedField)\n const isInvalid = Boolean(rule.field && !rule.operator)\n const inputSize = getInputSize(size)\n\n const handleFieldChange = (fieldName: string) => {\n const newField = fields.find((f) => f.name === fieldName)\n const newOperators = getOperatorsForField(newField)\n\n onChange({\n ...rule,\n field: fieldName,\n operator: newOperators[0]?.value ?? \"\",\n value: \"\",\n })\n }\n\n const handleOperatorChange = (operator: string) => {\n onChange({\n ...rule,\n operator: operator as OperatorType,\n value: [\"is_empty\", \"is_not_empty\"].includes(operator) ? \"\" : rule.value,\n })\n }\n\n const handleValueChange = (value: string) => {\n onChange({ ...rule, value })\n }\n\n const needsValue = rule.operator && ![\"is_empty\", \"is_not_empty\"].includes(rule.operator)\n const needsSecondValue = rule.operator === \"between\"\n\n return (\n <div\n aria-label={`Filter rule: ${selectedField?.label ?? \"Select field\"}`}\n className={cn(filterRuleVariants({ invalid: isInvalid, size }))}\n data-slot=\"filter-rule\"\n role=\"group\"\n >\n {/* Field Select */}\n <div className={cn(ruleFieldVariants({ size }))}>\n <Select\n value={rule.field}\n onValueChange={handleFieldChange}\n >\n <SelectTrigger\n aria-label=\"Select field\"\n size={inputSize}\n >\n <SelectValue placeholder=\"Select field\" />\n </SelectTrigger>\n <SelectContent>\n {fields.map((field) => (\n <SelectItem key={field.name} value={field.name}>\n {field.label}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </div>\n\n {/* Operator Select */}\n {rule.field && (\n <div className={cn(ruleOperatorVariants({ size }))}>\n <Select\n value={rule.operator}\n onValueChange={handleOperatorChange}\n >\n <SelectTrigger\n aria-label=\"Select operator\"\n size={inputSize}\n >\n <SelectValue placeholder=\"Operator\" />\n </SelectTrigger>\n <SelectContent>\n {operators.map((op) => (\n <SelectItem key={op.value} value={op.value}>\n {op.label}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </div>\n )}\n\n {/* Value Input */}\n {needsValue && (\n <div className={cn(ruleValueVariants({ size }))}>\n <ValueInput\n needsSecondValue={needsSecondValue}\n selectedField={selectedField}\n size={size}\n value={rule.value}\n onChange={handleValueChange}\n />\n </div>\n )}\n\n {/* Remove Button */}\n <Button\n aria-label=\"Remove rule\"\n className=\"flex-shrink-0 text-muted-foreground hover:text-destructive\"\n size=\"icon\"\n type=\"button\"\n variant=\"ghost\"\n onClick={onRemove}\n >\n <XIcon className=\"size-4\" />\n </Button>\n </div>\n )\n}\n\n// ============================================\n// FILTER GROUP COMPONENT\n// ============================================\n\nfunction FilterGroupComponent({\n depth,\n fields,\n group,\n isRoot = false,\n maxDepth,\n maxRules,\n onChange,\n onRemove,\n rulesCount,\n}: FilterGroupProps) {\n const { size } = useFilterBuilderContext()\n\n const handleCombinatorChange = (combinator: \"and\" | \"or\") => {\n onChange({ ...group, combinator })\n }\n\n const handleAddRule = () => {\n if (rulesCount >= maxRules) return\n onChange({ ...group, rules: [...group.rules, createEmptyRule()] })\n }\n\n const handleAddGroup = () => {\n if (depth >= maxDepth || rulesCount >= maxRules) return\n onChange({ ...group, rules: [...group.rules, createEmptyGroup()] })\n }\n\n const handleRuleChange = (index: number, updatedItem: FilterGroup | FilterRule) => {\n const newRules = [...group.rules]\n newRules[index] = updatedItem\n onChange({ ...group, rules: newRules })\n }\n\n const handleRemoveItem = (index: number) => {\n onChange({ ...group, rules: group.rules.filter((_, i) => i !== index) })\n }\n\n const canAddRule = rulesCount < maxRules\n const canAddGroup = depth < maxDepth && rulesCount < maxRules\n const buttonSize = size === \"lg\" ? \"default\" : \"sm\"\n\n return (\n <div\n aria-label={`Filter group with ${group.combinator.toUpperCase()} combinator`}\n className={cn(filterGroupVariants({ isRoot, size }))}\n data-slot=\"filter-group\"\n role=\"group\"\n >\n {/* Group Header - Combinator Toggle */}\n {!isRoot && (\n <div className={cn(filterGroupHeaderVariants({ size }))}>\n <div className=\"flex items-center gap-1\">\n <button\n className={cn(\n combinatorToggleVariants({\n active: group.combinator === \"and\",\n size,\n })\n )}\n aria-pressed={group.combinator === \"and\"}\n type=\"button\"\n onClick={() => { handleCombinatorChange(\"and\"); }}\n >\n AND\n </button>\n <button\n className={cn(\n combinatorToggleVariants({\n active: group.combinator === \"or\",\n size,\n })\n )}\n aria-pressed={group.combinator === \"or\"}\n type=\"button\"\n onClick={() => { handleCombinatorChange(\"or\"); }}\n >\n OR\n </button>\n </div>\n\n {onRemove && (\n <Button\n aria-label=\"Remove group\"\n className=\"ml-auto text-muted-foreground hover:text-destructive\"\n size=\"icon\"\n type=\"button\"\n variant=\"ghost\"\n onClick={onRemove}\n >\n <TrashIcon className=\"size-4\" />\n </Button>\n )}\n </div>\n )}\n\n {/* Rules Container */}\n <div className={cn(rulesContainerVariants({ size }))}>\n {group.rules.length === 0 ? (\n <div className={cn(emptyStateVariants({ size }))}>\n <span>No filters added</span>\n <span className=\"text-xs\">Click &quot;Add Rule&quot; to create a filter</span>\n </div>\n ) : (\n group.rules.map((item, index) => (\n <React.Fragment key={item.id}>\n {/* Combinator Label between rules (not for first item) */}\n {index > 0 && (\n <div className=\"flex items-center gap-2 pl-2\">\n <span className=\"text-xs font-medium uppercase text-muted-foreground\">\n {group.combinator}\n </span>\n <div className=\"h-px flex-1 bg-border\" />\n </div>\n )}\n\n {isFilterGroup(item) ? (\n <FilterGroupComponent\n depth={depth + 1}\n fields={fields}\n group={item}\n maxDepth={maxDepth}\n maxRules={maxRules}\n rulesCount={rulesCount}\n onChange={(updated) => { handleRuleChange(index, updated); }}\n onRemove={() => { handleRemoveItem(index); }}\n />\n ) : (\n <FilterRuleComponent\n fields={fields}\n rule={item}\n onChange={(updated) => { handleRuleChange(index, updated); }}\n onRemove={() => { handleRemoveItem(index); }}\n />\n )}\n </React.Fragment>\n ))\n )}\n </div>\n\n {/* Add Buttons */}\n <div className=\"mt-2 flex items-center gap-2\">\n <Button\n className=\"gap-1\"\n disabled={!canAddRule}\n size={buttonSize}\n type=\"button\"\n variant=\"outline\"\n onClick={handleAddRule}\n >\n <PlusIcon className=\"size-3\" />\n Add Rule\n </Button>\n\n {!isRoot && (\n <Button\n className=\"gap-1\"\n disabled={!canAddGroup}\n size={buttonSize}\n type=\"button\"\n variant=\"outline\"\n onClick={handleAddGroup}\n >\n <PlusIcon className=\"size-3\" />\n Add Group\n </Button>\n )}\n </div>\n </div>\n )\n}\n\n// ============================================\n// FILTER TOOLBAR COMPONENT\n// ============================================\n\nfunction FilterToolbar({\n canAddGroup,\n canAddRule,\n hasRules,\n onAddGroup,\n onAddRule,\n onApply,\n onClear,\n}: FilterToolbarProps) {\n const { size } = useFilterBuilderContext()\n const buttonSize = size === \"lg\" ? \"default\" : \"sm\"\n\n return (\n <div\n className={cn(filterToolbarVariants({ size }))}\n data-slot=\"filter-toolbar\"\n >\n <div className=\"flex items-center gap-2\">\n <Button\n className=\"gap-1\"\n disabled={!canAddRule}\n size={buttonSize}\n type=\"button\"\n variant=\"outline\"\n onClick={onAddRule}\n >\n <PlusIcon className=\"size-3\" />\n Add Rule\n </Button>\n\n <Button\n className=\"gap-1\"\n disabled={!canAddGroup}\n size={buttonSize}\n type=\"button\"\n variant=\"outline\"\n onClick={onAddGroup}\n >\n <PlusIcon className=\"size-3\" />\n Add Group\n </Button>\n </div>\n\n <div className=\"flex items-center gap-2\">\n {onClear && hasRules && (\n <Button\n size={buttonSize}\n type=\"button\"\n variant=\"ghost\"\n onClick={onClear}\n >\n Clear All\n </Button>\n )}\n\n {onApply && (\n <Button\n size={buttonSize}\n type=\"button\"\n variant=\"default\"\n onClick={onApply}\n >\n Apply Filters\n </Button>\n )}\n </div>\n </div>\n )\n}\n\n// ============================================\n// FILTER PREVIEW COMPONENT\n// ============================================\n\nfunction FilterPreview({ fields, filter }: FilterPreviewProps) {\n const { size } = useFilterBuilderContext()\n\n const getFieldLabel = (fieldName: string): string => {\n const field = fields.find((f) => f.name === fieldName)\n return field?.label ?? fieldName\n }\n\n const formatValue = (value: unknown): string => {\n if (Array.isArray(value)) {\n return value.join(\" and \")\n }\n return String(value)\n }\n\n const renderRule = (rule: FilterRule): string => {\n if (!rule.field || !rule.operator) return \"\"\n\n const fieldLabel = getFieldLabel(rule.field)\n // After the check above, rule.operator is guaranteed to be a valid OperatorType\n const operatorLabel = OPERATOR_LABELS[rule.operator]\n\n if ([\"is_empty\", \"is_not_empty\"].includes(rule.operator)) {\n return `${fieldLabel} ${operatorLabel}`\n }\n\n return `${fieldLabel} ${operatorLabel} \"${formatValue(rule.value)}\"`\n }\n\n const renderGroup = (group: FilterGroup): string => {\n const parts = group.rules\n .map((item) => {\n if (isFilterGroup(item)) {\n return `(${renderGroup(item)})`\n }\n return renderRule(item)\n })\n .filter(Boolean)\n\n return parts.join(` ${group.combinator.toUpperCase()} `)\n }\n\n const preview = renderGroup(filter)\n\n if (!preview) {\n return (\n <div\n className={cn(filterPreviewVariants({ size }), \"italic text-muted-foreground\")}\n data-slot=\"filter-preview\"\n >\n No filters defined\n </div>\n )\n }\n\n return (\n <div\n className={cn(filterPreviewVariants({ size }))}\n data-slot=\"filter-preview\"\n >\n <code>{preview}</code>\n </div>\n )\n}\n\n// ============================================\n// MAIN FILTER BUILDER COMPONENT\n// ============================================\n\n/**\n * FilterBuilder - Advanced visual query builder component\n *\n * Allows creating complex filters with multiple conditions,\n * logical operators (AND/OR), nested groups, and various field types.\n *\n * @example\n * ```tsx\n * const fields = [\n * { name: \"name\", label: \"Name\", type: \"string\" },\n * { name: \"age\", label: \"Age\", type: \"number\" },\n * { name: \"status\", label: \"Status\", type: \"select\", options: [\n * { value: \"active\", label: \"Active\" },\n * { value: \"inactive\", label: \"Inactive\" },\n * ]},\n * ]\n *\n * <FilterBuilder\n * fields={fields}\n * value={filter}\n * onChange={setFilter}\n * onApply={(f) => console.log(\"Apply:\", f)}\n * />\n * ```\n */\nfunction FilterBuilder({\n className,\n fields,\n maxDepth = 3,\n maxRules = 20,\n onApply,\n onChange,\n onClear,\n showPreview = false,\n size = \"default\",\n value,\n ...props\n}: FilterBuilderProps) {\n const filter = value ?? createEmptyGroup()\n\n const handleChange = (updatedFilter: FilterGroup) => {\n onChange?.(updatedFilter)\n }\n\n const handleAddRule = () => {\n const rulesCount = countRules(filter)\n if (rulesCount >= maxRules) return\n handleChange({ ...filter, rules: [...filter.rules, createEmptyRule()] })\n }\n\n const handleAddGroup = () => {\n const rulesCount = countRules(filter)\n if (rulesCount >= maxRules) return\n handleChange({ ...filter, rules: [...filter.rules, createEmptyGroup()] })\n }\n\n const handleClear = () => {\n handleChange(createEmptyGroup())\n onClear?.()\n }\n\n const handleApply = () => {\n onApply?.(filter)\n }\n\n const rulesCount = countRules(filter)\n const hasRules = rulesCount > 0\n const canAddRule = rulesCount < maxRules\n const canAddGroup = rulesCount < maxRules\n\n return (\n <FilterBuilderContext value={{ fields, size: size ?? \"default\" }}>\n <div\n aria-label=\"Filter builder\"\n className={cn(filterBuilderVariants({ size }), className)}\n data-slot=\"filter-builder\"\n role=\"region\"\n {...props}\n >\n {/* Main Filter Group */}\n <FilterGroupComponent\n isRoot\n depth={0}\n fields={fields}\n group={filter}\n maxDepth={maxDepth}\n maxRules={maxRules}\n rulesCount={rulesCount}\n onChange={handleChange}\n />\n\n {/* Toolbar */}\n <FilterToolbar\n canAddGroup={canAddGroup}\n canAddRule={canAddRule}\n hasRules={hasRules}\n onAddGroup={handleAddGroup}\n onAddRule={handleAddRule}\n onApply={onApply ? handleApply : undefined}\n onClear={onClear ? handleClear : undefined}\n />\n\n {/* Preview */}\n {showPreview && (\n <FilterPreview fields={fields} filter={filter} />\n )}\n </div>\n </FilterBuilderContext>\n )\n}\n\nFilterBuilder.displayName = \"FilterBuilder\"\n\n// ============================================\n// EXPORTS\n// ============================================\n\nexport {\n FilterBuilder,\n type FilterBuilderProps,\n FilterGroupComponent as FilterGroup,\n type FilterGroupProps,\n FilterPreview,\n type FilterPreviewProps,\n FilterRuleComponent as FilterRule,\n type FilterRuleProps,\n FilterToolbar,\n type FilterToolbarProps,\n}\n"]}
@@ -29,7 +29,7 @@ var tagVariants = cva(
29
29
  false: ""
30
30
  },
31
31
  interactive: {
32
- true: "cursor-pointer hover:bg-muted/50",
32
+ true: "cursor-pointer hover:bg-[color:var(--tag-color-bg-hover)]",
33
33
  false: ""
34
34
  }
35
35
  },
@@ -369,5 +369,5 @@ function Tag({
369
369
  Tag.displayName = "Tag";
370
370
 
371
371
  export { Tag, TagGroup, tagCheckboxVariants, tagCountVariants, tagGroupVariants, tagVariants, useTagGroup };
372
- //# sourceMappingURL=chunk-VFALJSXB.js.map
373
- //# sourceMappingURL=chunk-VFALJSXB.js.map
372
+ //# sourceMappingURL=chunk-DCUFQJYP.js.map
373
+ //# sourceMappingURL=chunk-DCUFQJYP.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/primitives/Tag/Tag.variants.ts","../src/components/primitives/Tag/TagGroup.tsx","../src/components/primitives/Tag/Tag.tsx"],"names":["jsx","React2"],"mappings":"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","file":"chunk-DCUFQJYP.js","sourcesContent":["import { cva, type VariantProps } from \"class-variance-authority\"\n\n/**\n * Tag style variants using CVA\n *\n * @see https://cva.style/docs\n */\nexport const tagVariants = cva(\n // Base styles (always applied)\n [\n \"inline-flex items-center justify-center\",\n \"font-medium whitespace-nowrap shrink-0 gap-1.5\",\n \"rounded-[var(--tag-radius)] border bg-background text-foreground\",\n \"transition-colors duration-200\",\n \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2\",\n ],\n {\n variants: {\n size: {\n sm: \"h-[var(--tag-size-height-sm)] px-[var(--tag-size-padding-x-sm)] text-[length:var(--tag-size-text-sm)] [&_[data-slot='tag-checkbox']]:size-[var(--tag-size-checkbox-sm)]\",\n md: \"h-[var(--tag-size-height-md)] px-[var(--tag-size-padding-x-md)] text-[length:var(--tag-size-text-md)] [&_[data-slot='tag-checkbox']]:size-[var(--tag-size-checkbox-md)]\",\n lg: \"h-[var(--tag-size-height-lg)] px-[var(--tag-size-padding-x-lg)] text-[length:var(--tag-size-text-lg)] [&_[data-slot='tag-checkbox']]:size-[var(--tag-size-checkbox-lg)]\",\n },\n checked: {\n true: \"border-[color:var(--tag-color-border-checked)] bg-[color:var(--tag-color-bg-checked)]\",\n false: \"border-[color:var(--tag-color-border-default)] bg-[color:var(--tag-color-bg-default)]\",\n },\n disabled: {\n true: \"opacity-50 pointer-events-none\",\n false: \"\",\n },\n interactive: {\n true: \"cursor-pointer hover:bg-[color:var(--tag-color-bg-hover)]\",\n false: \"\",\n },\n },\n defaultVariants: {\n size: \"md\",\n checked: false,\n disabled: false,\n interactive: false,\n },\n }\n)\n\n/**\n * Tag count pill styles\n */\nexport const tagCountVariants = cva(\n [\n \"inline-flex items-center justify-center\",\n \"rounded-[var(--tag-count-radius)] bg-muted text-muted-foreground font-medium\",\n ],\n {\n variants: {\n size: {\n sm: \"h-[var(--tag-size-count-height-sm)] min-w-[var(--tag-size-count-min-width-sm)] px-1 text-[length:var(--tag-size-count-text-sm)]\",\n md: \"h-[var(--tag-size-count-height-md)] min-w-[var(--tag-size-count-min-width-md)] px-1.5 text-[length:var(--tag-size-count-text-md)]\",\n lg: \"h-[var(--tag-size-count-height-lg)] min-w-[var(--tag-size-count-min-width-lg)] px-1.5 text-[length:var(--tag-size-count-text-lg)]\",\n },\n },\n defaultVariants: {\n size: \"md\",\n },\n }\n)\n\n/**\n * Tag checkbox styles\n */\nexport const tagCheckboxVariants = cva(\n [\n \"inline-flex items-center justify-center shrink-0\",\n \"rounded border transition-colors\",\n ],\n {\n variants: {\n size: {\n sm: \"size-[var(--tag-size-checkbox-sm)]\",\n md: \"size-[var(--tag-size-checkbox-md)]\",\n lg: \"size-[var(--tag-size-checkbox-lg)]\",\n },\n checked: {\n true: \"bg-[color:var(--tag-checkbox-bg-checked)] border-[color:var(--tag-checkbox-border-checked)] text-[color:var(--tag-checkbox-text-checked)]\",\n false: \"border-[color:var(--tag-checkbox-border-default)] bg-[color:var(--tag-checkbox-bg-default)]\",\n },\n disabled: {\n true: \"opacity-50\",\n false: \"\",\n },\n },\n defaultVariants: {\n size: \"md\",\n checked: false,\n disabled: false,\n },\n }\n)\n\nexport type TagVariantProps = VariantProps<typeof tagVariants>\n\n/**\n * TagGroup layout variants\n */\nexport const tagGroupVariants = cva(\"inline-flex\", {\n variants: {\n /**\n * Layout mode for tags\n */\n layout: {\n /** Single line with scroll */\n inline: \"flex-nowrap overflow-x-auto\",\n /** Wrap to multiple lines */\n wrap: \"flex-wrap\",\n /** Vertical stack */\n stack: \"flex-col\",\n },\n /**\n * Gap between tags\n */\n gap: {\n none: \"gap-0\",\n xs: \"gap-1\",\n sm: \"gap-1.5\",\n md: \"gap-2\",\n lg: \"gap-3\",\n },\n /**\n * Alignment of tags\n */\n align: {\n start: \"items-start\",\n center: \"items-center\",\n end: \"items-end\",\n },\n },\n defaultVariants: {\n layout: \"wrap\",\n gap: \"sm\",\n align: \"center\",\n },\n})\n\nexport type TagGroupVariantProps = VariantProps<typeof tagGroupVariants>\n","\"use client\"\n\nimport type { TagGroupContextValue, TagGroupProps } from \"./Tag.types\"\n\nimport * as React from \"react\"\n\nimport { cn } from \"../../../lib/utils\"\nimport { tagGroupVariants } from \"./Tag.variants\"\n\n/**\n * Context for TagGroup to pass props to child Tags\n */\nconst TagGroupContext = React.createContext<null | TagGroupContextValue>(null)\n\n/**\n * Hook to access TagGroup context\n */\nexport function useTagGroup(): null | TagGroupContextValue {\n return React.use(TagGroupContext)\n}\n\n/**\n * TagGroup - Container for grouping multiple Tag components\n *\n * Provides layout control, gap spacing, and can pass size/disabled\n * props to all child Tags via context.\n *\n * @example\n * ```tsx\n * // Basic grouping with wrap layout\n * <TagGroup>\n * <Tag>React</Tag>\n * <Tag>TypeScript</Tag>\n * <Tag>Tailwind</Tag>\n * </TagGroup>\n *\n * // Inline scrollable\n * <TagGroup layout=\"inline\" gap=\"md\">\n * {tags.map(tag => <Tag key={tag}>{tag}</Tag>)}\n * </TagGroup>\n *\n * // With size inheritance\n * <TagGroup size=\"sm\">\n * <Tag checkbox>Option 1</Tag>\n * <Tag checkbox>Option 2</Tag>\n * </TagGroup>\n *\n * // Vertical stack\n * <TagGroup layout=\"stack\" align=\"start\">\n * <Tag>First</Tag>\n * <Tag>Second</Tag>\n * <Tag>Third</Tag>\n * </TagGroup>\n * ```\n */\nexport function TagGroup({\n children,\n className,\n layout,\n gap,\n align,\n size,\n disabled,\n ...props\n}: TagGroupProps) {\n // Memoize context value to prevent unnecessary re-renders\n const contextValue = React.useMemo<TagGroupContextValue>(\n () => ({\n size,\n disabled,\n }),\n [size, disabled]\n )\n\n return (\n <TagGroupContext value={contextValue}>\n <div\n className={cn(tagGroupVariants({ layout, gap, align }), className)}\n data-slot=\"tag-group\"\n role=\"group\"\n {...props}\n >\n {children}\n </div>\n </TagGroupContext>\n )\n}\n\nTagGroup.displayName = \"TagGroup\"\n","\"use client\"\n\nimport type { TagAvatarProps, TagProps } from \"./Tag.types\"\n\nimport { Check, X } from \"lucide-react\"\nimport * as React from \"react\"\n\nimport { cn } from \"../../../lib/utils\"\nimport { tagCheckboxVariants, tagCountVariants, tagVariants } from \"./Tag.variants\"\nimport { useTagGroup } from \"./TagGroup\"\n\n// Internal checkbox component\nfunction TagCheckbox({\n checked,\n disabled,\n size,\n}: {\n checked: boolean\n disabled?: boolean\n size: \"lg\" | \"md\" | \"sm\"\n}) {\n return (\n <span\n className={cn(tagCheckboxVariants({ size, checked, disabled }))}\n data-slot=\"tag-checkbox\"\n >\n {checked && <Check className=\"size-3\" strokeWidth={3} />}\n </span>\n )\n}\n\n// Internal count pill component\nfunction TagCount({ count, size }: { count: number; size: \"lg\" | \"md\" | \"sm\" }) {\n return (\n <span className={cn(tagCountVariants({ size }))} data-slot=\"tag-count\">\n {count > 999 ? \"999+\" : count}\n </span>\n )\n}\n\n// Dismiss button size mapping (Figma: sm=10px, md=12px, lg=14px icons)\nconst dismissSizeMap = {\n sm: { button: \"size-3.5\", icon: \"size-2.5\" }, // 14px button, 10px icon\n md: { button: \"size-4\", icon: \"size-3\" }, // 16px button, 12px icon\n lg: { button: \"size-4.5\", icon: \"size-3.5\" }, // 18px button, 14px icon\n}\n\n// Internal dismiss button component\nfunction TagDismiss({\n onClick,\n disabled,\n size = \"md\",\n}: {\n disabled?: boolean\n onClick: () => void\n size?: \"lg\" | \"md\" | \"sm\"\n}) {\n const handleClick = (e: React.MouseEvent) => {\n e.stopPropagation()\n if (!disabled) {\n onClick()\n }\n }\n\n const handleKeyDown = (e: React.KeyboardEvent) => {\n if ((e.key === \"Enter\" || e.key === \" \") && !disabled) {\n e.preventDefault()\n e.stopPropagation()\n onClick()\n }\n }\n\n const sizeClasses = dismissSizeMap[size]\n\n return (\n <button\n className={cn(\n sizeClasses.button,\n \"-mr-0.5 rounded-sm inline-flex items-center justify-center shrink-0\",\n \"text-muted-foreground hover:text-foreground hover:bg-muted\",\n \"transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring\",\n disabled && \"pointer-events-none\"\n )}\n aria-label=\"Remove tag\"\n data-slot=\"tag-dismiss\"\n disabled={disabled}\n tabIndex={-1}\n type=\"button\"\n onClick={handleClick}\n onKeyDown={handleKeyDown}\n >\n <X className={sizeClasses.icon} />\n </button>\n )\n}\n\n// Internal avatar component\nfunction TagAvatar({ src, fallback, alt }: TagAvatarProps) {\n const [imageError, setImageError] = React.useState(false)\n\n const initials = fallback\n .split(\" \")\n .map((word) => word[0])\n .join(\"\")\n .toUpperCase()\n .slice(0, 2)\n\n return (\n <span\n className=\"size-4 -ml-0.5 rounded-full shrink-0 inline-flex items-center justify-center overflow-hidden bg-muted text-3xs font-medium\"\n data-slot=\"tag-avatar\"\n >\n {src && !imageError ? (\n <img\n alt={alt ?? fallback}\n className=\"size-full object-cover\"\n src={src}\n onError={() => {\n setImageError(true)\n }}\n />\n ) : (\n <span aria-label={alt ?? fallback}>{initials}</span>\n )}\n </span>\n )\n}\n\n// Internal dot component\nfunction TagDot() {\n return (\n <span\n className=\"size-1.5 rounded-full shrink-0 bg-[color:var(--tag-color-dot)]\"\n data-slot=\"tag-dot\"\n />\n )\n}\n\n// Internal country flag component\nfunction TagCountry({ code }: { code: string }) {\n const countryToFlag = (countryCode: string) => {\n // eslint-disable-next-line unicorn/prefer-spread -- Array.from handles Unicode correctly for country codes\n const codePoints = Array.from(countryCode.toUpperCase()).map(\n (char) => 127397 + char.charCodeAt(0)\n )\n return String.fromCodePoint(...codePoints)\n }\n\n return (\n <span\n aria-label={`Flag of ${code}`}\n className=\"text-base -ml-0.5 shrink-0 leading-none\"\n data-slot=\"tag-country\"\n role=\"img\"\n >\n {countryToFlag(code)}\n </span>\n )\n}\n\n/**\n * Tag - Interactive selectable/filterable component\n *\n * Used for filtering, categorization, and selection with optional\n * checkbox, count, avatar, country flag, and dismiss functionality.\n *\n * @example\n * ```tsx\n * // Basic tag\n * <Tag>Label</Tag>\n *\n * // With checkbox\n * <Tag checkbox checked={selected} onCheckedChange={setSelected}>\n * React\n * </Tag>\n *\n * // With count and dismiss\n * <Tag count={5} onDismiss={() => {}}>\n * Notifications\n * </Tag>\n * ```\n */\nexport function Tag({\n children,\n className,\n size: sizeProp,\n checkbox,\n checked: controlledChecked,\n defaultChecked = false,\n onCheckedChange,\n dot,\n icon,\n avatar,\n country,\n count,\n onDismiss,\n disabled: disabledProp,\n onClick,\n onKeyDown,\n ...props\n}: TagProps) {\n // Get context from TagGroup (if present)\n const groupContext = useTagGroup()\n\n // Merge with context values\n const size = sizeProp ?? groupContext?.size ?? \"md\"\n const disabled = disabledProp ?? groupContext?.disabled\n\n // Uncontrolled state for checkbox\n const [internalChecked, setInternalChecked] = React.useState(defaultChecked)\n\n // Use controlled or uncontrolled checked value\n const isChecked = controlledChecked ?? internalChecked\n const isInteractive = Boolean(checkbox) || Boolean(onClick)\n\n // Handle checkbox toggle\n const handleToggle = () => {\n if (disabled) return\n\n const newChecked = !isChecked\n setInternalChecked(newChecked)\n onCheckedChange?.(newChecked)\n }\n\n // Handle click\n const handleClick = (e: React.MouseEvent<HTMLSpanElement>) => {\n if (disabled) return\n\n if (checkbox) {\n handleToggle()\n }\n\n onClick?.(e)\n }\n\n // Handle keyboard\n const handleKeyDown = (e: React.KeyboardEvent<HTMLSpanElement>) => {\n if (disabled) return\n\n // Toggle on Space/Enter for checkbox\n if (checkbox && (e.key === \" \" || e.key === \"Enter\")) {\n e.preventDefault()\n handleToggle()\n }\n\n // Dismiss on Delete/Backspace\n if (onDismiss && (e.key === \"Delete\" || e.key === \"Backspace\")) {\n e.preventDefault()\n onDismiss()\n }\n\n onKeyDown?.(e)\n }\n\n // Render leading content (checkbox, avatar, country, icon, or dot)\n const renderLeading = () => {\n if (checkbox) {\n return <TagCheckbox checked={isChecked} disabled={disabled} size={size} />\n }\n if (avatar) return <TagAvatar {...avatar} />\n if (country) return <TagCountry code={country} />\n if (icon) return <span className=\"shrink-0 [&_svg]:size-3.5\" data-slot=\"tag-icon\">{icon}</span>\n if (dot) return <TagDot />\n return null\n }\n\n // Render trailing content (count, dismiss)\n const renderTrailing = () => {\n return (\n <>\n {count !== undefined && <TagCount count={count} size={size} />}\n {onDismiss && <TagDismiss disabled={disabled} size={size} onClick={onDismiss} />}\n </>\n )\n }\n\n return (\n <span\n className={cn(\n tagVariants({\n size,\n checked: isChecked,\n disabled,\n interactive: isInteractive,\n }),\n className\n )}\n aria-checked={checkbox ? isChecked : undefined}\n aria-disabled={disabled}\n data-slot=\"tag\"\n role={checkbox ? \"checkbox\" : undefined}\n tabIndex={isInteractive && !disabled ? 0 : undefined}\n onClick={handleClick}\n onKeyDown={handleKeyDown}\n {...props}\n >\n {renderLeading()}\n <span data-slot=\"tag-content\">{children}</span>\n {renderTrailing()}\n </span>\n )\n}\n\nTag.displayName = \"Tag\"\n"]}
@@ -1,4 +1,4 @@
1
- import { DropdownMenu, DropdownMenuTrigger, DropdownMenuContent, DropdownMenuItem } from './chunk-FSMHI7DW.js';
1
+ import { DropdownMenu, DropdownMenuTrigger, DropdownMenuContent, DropdownMenuItem } from './chunk-OXDWUKGP.js';
2
2
  import { cn } from './chunk-HRNDJU7D.js';
3
3
  import { EyeIcon, ClockIcon, CheckIcon, AlertCircleIcon, ArchiveIcon, ChevronDownIcon } from 'lucide-react';
4
4
  import { useId, useState, useMemo } from 'react';
@@ -282,5 +282,5 @@ function TaskStatus({
282
282
  }
283
283
 
284
284
  export { ALL_STATUSES, DEFAULT_STATUS_CONFIGS, TaskStatus, taskStatusColorVariants, taskStatusIconVariants, taskStatusLabelVariants, taskStatusMenuItemVariants, taskStatusTriggerVariants, taskStatusVariants };
285
- //# sourceMappingURL=chunk-LATTRPLQ.js.map
286
- //# sourceMappingURL=chunk-LATTRPLQ.js.map
285
+ //# sourceMappingURL=chunk-E2TI5V67.js.map
286
+ //# sourceMappingURL=chunk-E2TI5V67.js.map