@etus/ui 0.4.0-beta.3 → 0.4.0-beta.5

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 (170) hide show
  1. package/dist/chunk-2HM5Z2YP.js +834 -0
  2. package/dist/chunk-2HM5Z2YP.js.map +1 -0
  3. package/dist/{chunk-LMTNDUIP.js → chunk-2Y7PQ6ZL.js} +4 -4
  4. package/dist/{chunk-LMTNDUIP.js.map → chunk-2Y7PQ6ZL.js.map} +1 -1
  5. package/dist/{chunk-SAKW2OKH.js → chunk-32IJQOUV.js} +15 -26
  6. package/dist/chunk-32IJQOUV.js.map +1 -0
  7. package/dist/{chunk-CXHA5D3I.js → chunk-33JGPMUW.js} +4 -4
  8. package/dist/{chunk-CXHA5D3I.js.map → chunk-33JGPMUW.js.map} +1 -1
  9. package/dist/{chunk-JLVL76SW.js → chunk-36XTKR3B.js} +4 -4
  10. package/dist/{chunk-JLVL76SW.js.map → chunk-36XTKR3B.js.map} +1 -1
  11. package/dist/{chunk-CUWQUGGB.js → chunk-4GQN76L7.js} +3 -3
  12. package/dist/{chunk-CUWQUGGB.js.map → chunk-4GQN76L7.js.map} +1 -1
  13. package/dist/{chunk-7BAL24EU.js → chunk-5XQIH6WM.js} +4 -4
  14. package/dist/{chunk-7BAL24EU.js.map → chunk-5XQIH6WM.js.map} +1 -1
  15. package/dist/chunk-5ZWFIDO2.js +3 -0
  16. package/dist/{chunk-NNOGFX66.js.map → chunk-5ZWFIDO2.js.map} +1 -1
  17. package/dist/{chunk-43SINRHH.js → chunk-AUCDXPWH.js} +5 -5
  18. package/dist/{chunk-43SINRHH.js.map → chunk-AUCDXPWH.js.map} +1 -1
  19. package/dist/{chunk-4HRQX2IA.js → chunk-AWYOWR5N.js} +3 -3
  20. package/dist/{chunk-4HRQX2IA.js.map → chunk-AWYOWR5N.js.map} +1 -1
  21. package/dist/{chunk-YTGYSNFR.js → chunk-B4ETIQOO.js} +4 -4
  22. package/dist/{chunk-YTGYSNFR.js.map → chunk-B4ETIQOO.js.map} +1 -1
  23. package/dist/{chunk-D5DM6GZB.js → chunk-D6TH3EGA.js} +12 -12
  24. package/dist/chunk-D6TH3EGA.js.map +1 -0
  25. package/dist/{chunk-ZJVZ3LQS.js → chunk-DDM2I5C6.js} +3 -3
  26. package/dist/{chunk-ZJVZ3LQS.js.map → chunk-DDM2I5C6.js.map} +1 -1
  27. package/dist/{chunk-3JIXCWJO.js → chunk-DDR24GOP.js} +3 -3
  28. package/dist/{chunk-3JIXCWJO.js.map → chunk-DDR24GOP.js.map} +1 -1
  29. package/dist/{chunk-GBTVAO4V.js → chunk-EGYWK2XX.js} +3 -3
  30. package/dist/{chunk-GBTVAO4V.js.map → chunk-EGYWK2XX.js.map} +1 -1
  31. package/dist/{chunk-CCUCWL6M.js → chunk-HT5XM6XK.js} +12 -7
  32. package/dist/chunk-HT5XM6XK.js.map +1 -0
  33. package/dist/{chunk-KNH7JW6E.js → chunk-IBVCSZCH.js} +3 -3
  34. package/dist/{chunk-KNH7JW6E.js.map → chunk-IBVCSZCH.js.map} +1 -1
  35. package/dist/{chunk-GLEKBJLR.js → chunk-ILAV2AZ4.js} +3 -3
  36. package/dist/{chunk-GLEKBJLR.js.map → chunk-ILAV2AZ4.js.map} +1 -1
  37. package/dist/{chunk-MDQFZEIC.js → chunk-J62TFQHR.js} +6 -6
  38. package/dist/chunk-J62TFQHR.js.map +1 -0
  39. package/dist/{chunk-AWWBBMMY.js → chunk-JKYB5QAP.js} +5 -5
  40. package/dist/{chunk-AWWBBMMY.js.map → chunk-JKYB5QAP.js.map} +1 -1
  41. package/dist/{chunk-UKC3Q6OA.js → chunk-JMZ4CO6R.js} +3 -3
  42. package/dist/{chunk-UKC3Q6OA.js.map → chunk-JMZ4CO6R.js.map} +1 -1
  43. package/dist/{chunk-VJITPUUS.js → chunk-JONTKXGK.js} +26 -24
  44. package/dist/chunk-JONTKXGK.js.map +1 -0
  45. package/dist/{chunk-POZNQWZE.js → chunk-KC6CHPT3.js} +4 -4
  46. package/dist/{chunk-POZNQWZE.js.map → chunk-KC6CHPT3.js.map} +1 -1
  47. package/dist/{chunk-4J6DHPYY.js → chunk-KPNNSUXM.js} +3 -3
  48. package/dist/{chunk-4J6DHPYY.js.map → chunk-KPNNSUXM.js.map} +1 -1
  49. package/dist/{chunk-RPV77BCQ.js → chunk-ONQCNOLU.js} +4 -9
  50. package/dist/chunk-ONQCNOLU.js.map +1 -0
  51. package/dist/{chunk-QSY52N3A.js → chunk-OWOVCGUZ.js} +3 -3
  52. package/dist/{chunk-QSY52N3A.js.map → chunk-OWOVCGUZ.js.map} +1 -1
  53. package/dist/{chunk-QWRHPNBY.js → chunk-QIETN4UU.js} +4 -4
  54. package/dist/{chunk-QWRHPNBY.js.map → chunk-QIETN4UU.js.map} +1 -1
  55. package/dist/{chunk-NWFRMVI2.js → chunk-QZWKXUZP.js} +3 -3
  56. package/dist/{chunk-NWFRMVI2.js.map → chunk-QZWKXUZP.js.map} +1 -1
  57. package/dist/{chunk-7QDWREVG.js → chunk-R4UOT76L.js} +3 -3
  58. package/dist/{chunk-7QDWREVG.js.map → chunk-R4UOT76L.js.map} +1 -1
  59. package/dist/{chunk-HIEOL77G.js → chunk-RVUO7SDG.js} +4 -4
  60. package/dist/{chunk-HIEOL77G.js.map → chunk-RVUO7SDG.js.map} +1 -1
  61. package/dist/{chunk-XPVKJIWY.js → chunk-SCGKQ5RE.js} +3 -3
  62. package/dist/{chunk-XPVKJIWY.js.map → chunk-SCGKQ5RE.js.map} +1 -1
  63. package/dist/{chunk-UCGT2IR4.js → chunk-SJSYKUCL.js} +3 -3
  64. package/dist/{chunk-UCGT2IR4.js.map → chunk-SJSYKUCL.js.map} +1 -1
  65. package/dist/{chunk-KOTCWE7V.js → chunk-TNROOKX3.js} +11 -4
  66. package/dist/chunk-TNROOKX3.js.map +1 -0
  67. package/dist/{chunk-PGTCXLGY.js → chunk-U6EOAIPK.js} +3 -3
  68. package/dist/chunk-U6EOAIPK.js.map +1 -0
  69. package/dist/{chunk-KXSJSLPJ.js → chunk-V7XHE25E.js} +4 -4
  70. package/dist/{chunk-KXSJSLPJ.js.map → chunk-V7XHE25E.js.map} +1 -1
  71. package/dist/{chunk-5ZKKXLPF.js → chunk-VPNFYQBL.js} +10 -15
  72. package/dist/chunk-VPNFYQBL.js.map +1 -0
  73. package/dist/{chunk-FUCQNVJL.js → chunk-XLTSCY22.js} +10 -7
  74. package/dist/chunk-XLTSCY22.js.map +1 -0
  75. package/dist/{chunk-K3J7YLL4.js → chunk-XOGMDABS.js} +5 -6
  76. package/dist/chunk-XOGMDABS.js.map +1 -0
  77. package/dist/{chunk-53RWD44Z.js → chunk-XRMKL43Y.js} +3 -3
  78. package/dist/{chunk-53RWD44Z.js.map → chunk-XRMKL43Y.js.map} +1 -1
  79. package/dist/{chunk-DZALMUQD.js → chunk-Y3BOERVB.js} +3 -3
  80. package/dist/{chunk-DZALMUQD.js.map → chunk-Y3BOERVB.js.map} +1 -1
  81. package/dist/{chunk-AV5YQ2Z4.js → chunk-Y7UFBSAD.js} +3 -3
  82. package/dist/{chunk-AV5YQ2Z4.js.map → chunk-Y7UFBSAD.js.map} +1 -1
  83. package/dist/{chunk-HNYBLROK.js → chunk-YP2ATSXP.js} +11 -28
  84. package/dist/chunk-YP2ATSXP.js.map +1 -0
  85. package/dist/{chunk-75QBUI2P.js → chunk-ZO2EKJZM.js} +16 -8
  86. package/dist/chunk-ZO2EKJZM.js.map +1 -0
  87. package/dist/{chunk-VOCA4KZB.js → chunk-ZS2WS5NJ.js} +4 -4
  88. package/dist/{chunk-VOCA4KZB.js.map → chunk-ZS2WS5NJ.js.map} +1 -1
  89. package/dist/components/advanced/Calendar/index.js +3 -3
  90. package/dist/components/advanced/EventCalendar/index.js +3 -3
  91. package/dist/components/advanced/FilterBuilder/index.js +3 -3
  92. package/dist/components/advanced/ReportBuilder/index.js +11 -0
  93. package/dist/components/advanced/ReportBuilder/index.js.map +1 -0
  94. package/dist/components/advanced/index.js +14 -10
  95. package/dist/components/data-display/Callout/index.js +1 -1
  96. package/dist/components/data-display/Carousel/index.js +3 -3
  97. package/dist/components/data-display/ChartCard/index.js +2 -2
  98. package/dist/components/data-display/DashboardFilterbar/index.js +5 -5
  99. package/dist/components/data-display/DataTable/FilterBuilder/index.js +3 -3
  100. package/dist/components/data-display/DataTable/index.js +5 -5
  101. package/dist/components/data-display/KPICard/index.js +3 -2
  102. package/dist/components/data-display/List/index.js +3 -3
  103. package/dist/components/data-display/SingleStat/index.js +1 -1
  104. package/dist/components/data-display/VirtualTable/index.js +2 -2
  105. package/dist/components/data-display/index.js +29 -29
  106. package/dist/components/feedback/AlertDialog/index.js +3 -3
  107. package/dist/components/feedback/ConfirmModal/index.js +4 -4
  108. package/dist/components/feedback/Notification/index.js +2 -2
  109. package/dist/components/feedback/index.js +8 -8
  110. package/dist/components/forms/DatePicker/index.js +4 -4
  111. package/dist/components/forms/DateRangePicker/index.js +4 -4
  112. package/dist/components/forms/Field/index.js +2 -2
  113. package/dist/components/forms/Form/index.js +2 -2
  114. package/dist/components/forms/InputGroup/index.js +4 -4
  115. package/dist/components/forms/InputOTPField/index.js +3 -3
  116. package/dist/components/forms/NativeSelect/index.js +1 -1
  117. package/dist/components/forms/TagsInput/index.js +2 -2
  118. package/dist/components/forms/Textarea/index.js +1 -1
  119. package/dist/components/forms/TextareaField/index.js +4 -4
  120. package/dist/components/forms/index.js +26 -26
  121. package/dist/components/index.js +105 -104
  122. package/dist/components/layout/index.js +3 -3
  123. package/dist/components/navigation/AccountSwitch/index.js +3 -3
  124. package/dist/components/navigation/Header/index.js +1 -1
  125. package/dist/components/navigation/MobileSidebar/index.js +2 -2
  126. package/dist/components/navigation/Pagination/index.js +3 -3
  127. package/dist/components/navigation/Sidebar/index.js +4 -4
  128. package/dist/components/navigation/index.js +10 -10
  129. package/dist/components/primitives/Avatar/index.js +1 -1
  130. package/dist/components/primitives/Badge/index.js +1 -1
  131. package/dist/components/primitives/Button/index.js +2 -2
  132. package/dist/components/primitives/ConfirmButton/index.js +4 -4
  133. package/dist/components/primitives/Label/index.js +1 -1
  134. package/dist/components/primitives/SplitButton/index.js +1 -1
  135. package/dist/components/primitives/index.js +17 -17
  136. package/dist/components/workflow/ApprovalFlow/index.js +4 -4
  137. package/dist/components/workflow/CommentSystem/index.js +5 -5
  138. package/dist/components/workflow/Dashboard/index.js +3 -3
  139. package/dist/components/workflow/DashboardBuilder/index.js +4 -4
  140. package/dist/components/workflow/KanbanBoard/index.js +4 -4
  141. package/dist/components/workflow/ReportGenerator/index.js +4 -4
  142. package/dist/components/workflow/Wizard/index.js +3 -3
  143. package/dist/components/workflow/index.js +15 -15
  144. package/dist/fonts/inter-OFL.txt +92 -0
  145. package/dist/fonts/inter-latin-400-normal.woff2 +0 -0
  146. package/dist/fonts/inter-latin-500-normal.woff2 +0 -0
  147. package/dist/fonts/inter-latin-600-normal.woff2 +0 -0
  148. package/dist/fonts/inter-latin-700-normal.woff2 +0 -0
  149. package/dist/fonts/jetbrains-mono-OFL.txt +93 -0
  150. package/dist/fonts/jetbrains-mono-latin-400-normal.woff2 +0 -0
  151. package/dist/fonts/jetbrains-mono-latin-500-normal.woff2 +0 -0
  152. package/dist/fonts/jetbrains-mono-latin-700-normal.woff2 +0 -0
  153. package/dist/index.d.ts +132 -33
  154. package/dist/index.js +105 -104
  155. package/dist/styles.css +291 -13
  156. package/package.json +2 -2
  157. package/dist/chunk-5ZKKXLPF.js.map +0 -1
  158. package/dist/chunk-75QBUI2P.js.map +0 -1
  159. package/dist/chunk-CCUCWL6M.js.map +0 -1
  160. package/dist/chunk-D5DM6GZB.js.map +0 -1
  161. package/dist/chunk-FUCQNVJL.js.map +0 -1
  162. package/dist/chunk-HNYBLROK.js.map +0 -1
  163. package/dist/chunk-K3J7YLL4.js.map +0 -1
  164. package/dist/chunk-KOTCWE7V.js.map +0 -1
  165. package/dist/chunk-MDQFZEIC.js.map +0 -1
  166. package/dist/chunk-NNOGFX66.js +0 -3
  167. package/dist/chunk-PGTCXLGY.js.map +0 -1
  168. package/dist/chunk-RPV77BCQ.js.map +0 -1
  169. package/dist/chunk-SAKW2OKH.js.map +0 -1
  170. package/dist/chunk-VJITPUUS.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/workflow/KanbanBoard/KanbanBoard.variants.ts","../src/components/workflow/KanbanBoard/KanbanBoard.tsx"],"names":["activeItem"],"mappings":"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","file":"chunk-43SINRHH.js","sourcesContent":["import { cva } from \"class-variance-authority\"\n\n/* eslint-disable sonarjs/no-duplicate-string -- CVA variants require repeated class patterns */\n\n/**\n * Board container variants\n */\nexport const kanbanBoardVariants = cva(\n [\n \"flex\",\n \"w-full\",\n \"min-w-0\",\n \"gap-4\",\n \"p-4\",\n \"bg-muted/30\",\n \"rounded-lg\",\n \"overflow-x-auto\",\n ],\n {\n defaultVariants: {\n layout: \"horizontal\",\n variant: \"default\",\n },\n variants: {\n layout: {\n horizontal: \"flex-row\",\n vertical: \"flex-col\",\n },\n variant: {\n collapsed: \"\",\n compact: \"[&_[data-slot=kanban-card]]:p-2 [&_[data-slot=kanban-column]]:w-60\",\n default: \"\",\n swimlanes: \"flex-col gap-6\",\n },\n },\n }\n)\n\n/**\n * Column container variants\n */\nexport const kanbanColumnVariants = cva(\n [\n \"flex\",\n \"flex-col\",\n \"gap-2\",\n \"rounded-lg\",\n \"bg-muted/50\",\n \"min-h-52\",\n ],\n {\n defaultVariants: {\n isCollapsed: false,\n isOver: false,\n },\n variants: {\n isCollapsed: {\n false: \"w-72\",\n true: \"w-12\",\n },\n isOver: {\n false: \"\",\n true: \"ring-2 ring-primary/50 bg-primary/5\",\n },\n },\n }\n)\n\n/**\n * Column header variants\n */\nexport const kanbanColumnHeaderVariants = cva(\n [\n \"flex\",\n \"items-center\",\n \"justify-between\",\n \"gap-2\",\n \"p-3\",\n \"bg-card\",\n \"rounded-t-lg\",\n \"border-b\",\n ],\n {\n defaultVariants: {\n wipStatus: \"normal\",\n },\n variants: {\n wipStatus: {\n exceeded: \"[&_[data-slot=wip-indicator]]:text-destructive\",\n normal: \"\",\n warning: \"[&_[data-slot=wip-indicator]]:text-warning\",\n },\n },\n }\n)\n\n/**\n * Column content (cards area) variants\n */\nexport const kanbanColumnContentVariants = cva(\n [\n \"flex\",\n \"flex-col\",\n \"flex-1\",\n \"gap-2\",\n \"p-2\",\n \"min-h-24\",\n ],\n {\n defaultVariants: {},\n variants: {},\n }\n)\n\n/**\n * Kanban card variants\n */\nexport const kanbanCardVariants = cva(\n [\n \"group\",\n \"flex\",\n \"flex-col\",\n \"gap-2\",\n \"p-3\",\n \"bg-card\",\n \"rounded-md\",\n \"border\",\n \"shadow-sm\",\n \"cursor-pointer\",\n \"transition-all\",\n \"duration-200\",\n \"hover:shadow-md\",\n \"hover:border-primary/30\",\n ],\n {\n defaultVariants: {\n isDragging: false,\n priority: null,\n },\n variants: {\n isDragging: {\n false: \"\",\n true: \"opacity-50 ring-2 ring-primary shadow-lg\",\n },\n priority: {\n high: \"border-l-4 border-l-orange-500\",\n low: \"border-l-4 border-l-gray-400\",\n medium: \"border-l-4 border-l-yellow-500\",\n null: \"\",\n urgent: \"border-l-4 border-l-destructive\",\n },\n },\n }\n)\n\n/**\n * Card title variants\n */\nexport const kanbanCardTitleVariants = cva(\n [\n \"text-sm\",\n \"font-medium\",\n \"text-foreground\",\n \"line-clamp-2\",\n ],\n {\n defaultVariants: {},\n variants: {},\n }\n)\n\n/**\n * Card description variants\n */\nexport const kanbanCardDescriptionVariants = cva(\n [\n \"text-xs\",\n \"text-muted-foreground\",\n \"line-clamp-2\",\n ],\n {\n defaultVariants: {},\n variants: {},\n }\n)\n\n/**\n * Card metadata row variants\n */\nexport const kanbanCardMetaVariants = cva(\n [\n \"flex\",\n \"flex-wrap\",\n \"items-center\",\n \"gap-2\",\n \"text-xs\",\n \"text-muted-foreground\",\n ],\n {\n defaultVariants: {},\n variants: {},\n }\n)\n\n/**\n * Label badge variants\n */\nexport const kanbanLabelVariants = cva(\n [\n \"inline-flex\",\n \"items-center\",\n \"px-1.5\",\n \"py-0.5\",\n \"rounded-sm\",\n \"text-xs\",\n \"font-medium\",\n ],\n {\n defaultVariants: {},\n variants: {},\n }\n)\n\n/**\n * Drop indicator variants\n */\nexport const kanbanDropIndicatorVariants = cva(\n [\n \"h-1\",\n \"rounded-full\",\n \"bg-primary/20\",\n \"border\",\n \"border-primary\",\n \"transition-opacity\",\n ],\n {\n defaultVariants: {\n isVisible: false,\n },\n variants: {\n isVisible: {\n false: \"opacity-0\",\n true: \"opacity-100\",\n },\n },\n }\n)\n\n/**\n * Add button variants\n */\nexport const kanbanAddButtonVariants = cva(\n [\n \"flex\",\n \"items-center\",\n \"justify-center\",\n \"gap-1\",\n \"w-full\",\n \"p-2\",\n \"text-sm\",\n \"text-muted-foreground\",\n \"rounded-md\",\n \"border\",\n \"border-dashed\",\n \"hover:bg-muted/50\",\n \"hover:text-foreground\",\n \"transition-colors\",\n ],\n {\n defaultVariants: {},\n variants: {},\n }\n)\n\n/**\n * Swimlane header variants\n */\nexport const kanbanSwimlaneVariants = cva(\n [\n \"flex\",\n \"flex-col\",\n \"gap-2\",\n \"p-3\",\n \"rounded-lg\",\n \"bg-muted/20\",\n ],\n {\n defaultVariants: {},\n variants: {},\n }\n)\n\n/**\n * Search input variants\n */\nexport const kanbanSearchVariants = cva(\n [\n \"flex\",\n \"items-center\",\n \"gap-2\",\n \"px-3\",\n \"py-2\",\n \"bg-background\",\n \"border\",\n \"rounded-md\",\n \"focus-within:ring-2\",\n \"focus-within:ring-primary/50\",\n ],\n {\n defaultVariants: {},\n variants: {},\n }\n)\n","import type {\n KanbanBoardProps,\n KanbanCardProps,\n KanbanColumn,\n KanbanColumnProps,\n KanbanItem,\n} from \"./KanbanBoard.types\"\nimport type { DragEndEvent, DragOverEvent, DragStartEvent, UniqueIdentifier } from \"@dnd-kit/core\"\nimport type { KeyboardEvent } from \"react\"\n\nimport { horizontalListSortingStrategy, SortableContext, verticalListSortingStrategy } from \"@dnd-kit/sortable\"\nimport {\n Calendar,\n ChevronDown,\n ChevronRight,\n GripVertical,\n MessageSquare,\n Paperclip,\n Plus,\n Search,\n} from \"lucide-react\"\nimport { useId, useMemo, useState } from \"react\"\n\nimport { cn } from \"../../../lib/utils\"\nimport {\n DndContext,\n DragHandle,\n DragOverlay,\n Droppable,\n SortableItem,\n} from \"../../advanced/DragAndDrop\"\nimport { Avatar, AvatarFallback, AvatarImage } from \"../../primitives/Avatar\"\nimport { Badge } from \"../../primitives/Badge\"\nimport { Button } from \"../../primitives/Button\"\nimport {\n kanbanAddButtonVariants,\n kanbanBoardVariants,\n kanbanCardDescriptionVariants,\n kanbanCardMetaVariants,\n kanbanCardTitleVariants,\n kanbanCardVariants,\n kanbanColumnContentVariants,\n kanbanColumnHeaderVariants,\n kanbanColumnVariants,\n kanbanLabelVariants,\n kanbanSearchVariants,\n} from \"./KanbanBoard.variants\"\n\n// ============================================\n// HELPER FUNCTIONS\n// ============================================\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 * Format date for display\n */\nfunction formatDueDate(date: Date): string {\n const now = new Date()\n const diff = date.getTime() - now.getTime()\n const days = Math.ceil(diff / (1000 * 60 * 60 * 24))\n\n if (days < 0) return \"Overdue\"\n if (days === 0) return \"Today\"\n if (days === 1) return \"Tomorrow\"\n if (days <= 7) return `${String(days)} days`\n return date.toLocaleDateString()\n}\n\n/**\n * Get WIP status for column\n */\nfunction getWipStatus(\n itemCount: number,\n wipLimit?: number\n): \"exceeded\" | \"normal\" | \"warning\" {\n if (!wipLimit) return \"normal\"\n if (itemCount >= wipLimit) return \"exceeded\"\n if (itemCount >= wipLimit - 1) return \"warning\"\n return \"normal\"\n}\n\n// ============================================\n// KANBAN CARD\n// ============================================\n\n/**\n * KanbanCard displays an individual task item\n */\n// eslint-disable-next-line sonarjs/cognitive-complexity -- Complexity inherent to rendering multiple optional card elements\nfunction KanbanCard({\n className,\n isDragging = false,\n item,\n onClick,\n onDelete: _onDelete,\n}: KanbanCardProps) {\n const cardId = useId()\n const hasMeta = Boolean(\n item.assignees?.length ??\n item.labels?.length ??\n item.dueDate ??\n item.comments ??\n item.attachments ??\n item.subtasks\n )\n\n const handleClick = () => {\n onClick?.({ item })\n }\n\n const handleKeyDown = (event: KeyboardEvent<HTMLDivElement>) => {\n if (event.key === \"Enter\" || event.key === \" \") {\n event.preventDefault()\n handleClick()\n }\n }\n\n return (\n <div\n aria-describedby={item.description ? `${cardId}-desc` : undefined}\n aria-label={item.title}\n className={cn(kanbanCardVariants({ isDragging, priority: item.priority ?? null }), className)}\n data-slot=\"kanban-card\"\n role=\"listitem\"\n tabIndex={0}\n onClick={handleClick}\n onKeyDown={handleKeyDown}\n >\n {/* Labels */}\n {item.labels && item.labels.length > 0 ? (\n <div className=\"flex flex-wrap gap-1\" data-slot=\"kanban-card-labels\">\n {item.labels.slice(0, 3).map((label) => (\n <span\n key={label.id}\n className={kanbanLabelVariants()}\n style={{ backgroundColor: `${label.color}20`, color: label.color }}\n >\n {label.name}\n </span>\n ))}\n {item.labels.length > 3 ? (\n <span className=\"text-xs text-muted-foreground\">\n +{item.labels.length - 3}\n </span>\n ) : null}\n </div>\n ) : null}\n\n {/* Title */}\n <div className={kanbanCardTitleVariants()} data-slot=\"kanban-card-title\">\n {item.title}\n </div>\n\n {/* Description */}\n {item.description ? (\n <div\n className={kanbanCardDescriptionVariants()}\n data-slot=\"kanban-card-description\"\n id={`${cardId}-desc`}\n >\n {item.description}\n </div>\n ) : null}\n\n {/* Metadata row */}\n {hasMeta ? (\n <div className={kanbanCardMetaVariants()} data-slot=\"kanban-card-meta\">\n {/* Due date */}\n {item.dueDate ? (\n <span\n className={cn(\n \"flex items-center gap-1\",\n new Date(item.dueDate) < new Date() && \"text-destructive\"\n )}\n title={`Due: ${item.dueDate.toLocaleDateString()}`}\n >\n <Calendar className=\"h-3 w-3\" />\n {formatDueDate(new Date(item.dueDate))}\n </span>\n ) : null}\n\n {/* Subtasks */}\n {item.subtasks ? (\n <span className=\"flex items-center gap-1\" title=\"Subtasks progress\">\n {item.subtasks.completed}/{item.subtasks.total}\n </span>\n ) : null}\n\n {/* Comments */}\n {item.comments ? (\n <span className=\"flex items-center gap-1\" title={`${String(item.comments)} comments`}>\n <MessageSquare className=\"h-3 w-3\" />\n {item.comments}\n </span>\n ) : null}\n\n {/* Attachments */}\n {item.attachments ? (\n <span className=\"flex items-center gap-1\" title={`${String(item.attachments)} attachments`}>\n <Paperclip className=\"h-3 w-3\" />\n {item.attachments}\n </span>\n ) : null}\n\n {/* Spacer */}\n <div className=\"flex-1\" />\n\n {/* Assignees */}\n {item.assignees && item.assignees.length > 0 ? (\n <div className=\"flex -space-x-1\" data-slot=\"kanban-card-assignees\">\n {item.assignees.slice(0, 3).map((user) => (\n <Avatar\n key={user.id}\n className=\"h-5 w-5 border-2 border-background\"\n title={user.name}\n >\n {user.avatar ? (\n <AvatarImage alt={user.name} src={user.avatar} />\n ) : null}\n <AvatarFallback className=\"text-xs\">\n {getInitials(user.name)}\n </AvatarFallback>\n </Avatar>\n ))}\n {item.assignees.length > 3 ? (\n <span className=\"flex h-5 w-5 items-center justify-center rounded-full bg-muted text-xs border-2 border-background\">\n +{item.assignees.length - 3}\n </span>\n ) : null}\n </div>\n ) : null}\n </div>\n ) : null}\n </div>\n )\n}\n\n// ============================================\n// KANBAN COLUMN\n// ============================================\n\n/**\n * KanbanColumn displays a single column with its items\n */\nfunction KanbanColumn({\n allowAddItem = true,\n className,\n column,\n isOver = false,\n items,\n onItemAdd,\n onItemClick,\n onItemDelete,\n onToggleCollapse,\n showColumnCount = true,\n showWipLimits = true,\n}: KanbanColumnProps) {\n const columnId = useId()\n const wipStatus = getWipStatus(items.length, column.wipLimit)\n const isCollapsed = column.isCollapsed ?? false\n\n const handleAddItem = () => {\n onItemAdd?.({ columnId: column.id })\n }\n\n const handleKeyDown = (event: KeyboardEvent<HTMLDivElement>) => {\n if (event.key === \"ArrowDown\" || event.key === \"ArrowUp\") {\n const target = event.currentTarget\n const cards = [...target.querySelectorAll('[data-slot=\"kanban-card\"]')] as HTMLElement[]\n const focused = document.activeElement as HTMLElement\n const currentIndex = cards.indexOf(focused)\n\n if (currentIndex === -1) {\n cards[0]?.focus()\n return\n }\n\n const nextIndex = event.key === \"ArrowDown\"\n ? Math.min(currentIndex + 1, cards.length - 1)\n : Math.max(currentIndex - 1, 0)\n\n const nextElement = cards[nextIndex]\n nextElement?.focus()\n event.preventDefault()\n }\n }\n\n // Collapsed column view\n if (isCollapsed) {\n return (\n <div\n data-collapsed\n className={cn(kanbanColumnVariants({ isCollapsed: true, isOver: false }), className)}\n data-slot=\"kanban-column\"\n >\n <Button\n aria-expanded={false}\n aria-label={`Expand ${column.title}`}\n className=\"h-full w-full flex flex-col items-center justify-start pt-3 gap-2\"\n variant=\"ghost\"\n onClick={onToggleCollapse}\n >\n <ChevronRight className=\"h-4 w-4\" />\n <span\n className=\"text-sm font-semibold writing-mode-vertical\"\n style={{ writingMode: \"vertical-rl\" }}\n >\n {column.title}\n </span>\n {showColumnCount ? (\n <Badge className=\"mt-2\" color=\"muted\" type=\"pill-color\">\n {items.length}\n </Badge>\n ) : null}\n </Button>\n </div>\n )\n }\n\n return (\n <Droppable data={{ type: \"column\", column }} id={column.id}>\n {({ isOver: droppableIsOver }) => (\n <div\n className={cn(\n kanbanColumnVariants({ isCollapsed: false, isOver: isOver || droppableIsOver }),\n className\n )}\n aria-label={`${column.title} column`}\n data-slot=\"kanban-column\"\n role=\"list\"\n onKeyDown={handleKeyDown}\n >\n {/* Column Header */}\n <div\n className={kanbanColumnHeaderVariants({ wipStatus })}\n data-slot=\"kanban-column-header\"\n >\n <div className=\"flex items-center gap-2\">\n {column.color ? (\n <div\n className=\"h-3 w-3 rounded-full\"\n style={{ backgroundColor: column.color }}\n />\n ) : null}\n <span className=\"text-sm font-semibold\">{column.title}</span>\n {showColumnCount ? (\n <Badge color=\"muted\" data-slot=\"column-count\" type=\"pill-color\">\n {items.length}\n </Badge>\n ) : null}\n {showWipLimits && column.wipLimit ? (\n <span\n className=\"text-xs\"\n data-slot=\"wip-indicator\"\n title={`WIP Limit: ${String(column.wipLimit)}`}\n >\n /{column.wipLimit}\n </span>\n ) : null}\n </div>\n {onToggleCollapse ? (\n <Button\n aria-expanded={true}\n aria-label={`Collapse ${column.title}`}\n className=\"h-6 w-6 p-0\"\n size=\"sm\"\n variant=\"ghost\"\n onClick={onToggleCollapse}\n >\n <ChevronDown className=\"h-4 w-4\" />\n </Button>\n ) : null}\n </div>\n\n {/* Cards */}\n <SortableContext\n items={items.map((i) => i.id)}\n strategy={verticalListSortingStrategy}\n >\n <div\n aria-labelledby={columnId}\n className={kanbanColumnContentVariants()}\n data-slot=\"kanban-column-content\"\n >\n {items.map((item) => (\n <SortableItem\n key={item.id}\n data={{ type: \"item\", item, columnId: column.id }}\n id={item.id}\n >\n {({ isDragging }) => (\n <div className=\"relative\">\n <DragHandle\n aria-label={`Drag ${item.title}`}\n className=\"absolute left-1 top-1/2 -translate-y-1/2 opacity-0 group-hover:opacity-100 transition-opacity cursor-grab active:cursor-grabbing h-6 w-6 flex items-center justify-center\"\n >\n <GripVertical className=\"h-4 w-4 text-muted-foreground\" />\n </DragHandle>\n <KanbanCard\n isDragging={isDragging}\n item={item}\n onClick={onItemClick}\n onDelete={onItemDelete}\n />\n </div>\n )}\n </SortableItem>\n ))}\n\n {/* Add card button */}\n {allowAddItem ? (\n <button\n aria-label={`Add item to ${column.title}`}\n className={kanbanAddButtonVariants()}\n type=\"button\"\n onClick={handleAddItem}\n >\n <Plus className=\"h-4 w-4\" />\n Add card\n </button>\n ) : null}\n </div>\n </SortableContext>\n </div>\n )}\n </Droppable>\n )\n}\n\n// ============================================\n// KANBAN BOARD\n// ============================================\n\n/**\n * KanbanBoard component for visual task management.\n *\n * Organizes items into columns representing workflow stages with drag-and-drop\n * support for moving items between columns.\n *\n * @example\n * ```tsx\n * const columns = [\n * { id: 'todo', title: 'To Do' },\n * { id: 'doing', title: 'In Progress', wipLimit: 3 },\n * { id: 'done', title: 'Done' },\n * ]\n *\n * const items = [\n * { id: '1', title: 'Task 1', columnId: 'todo', order: 0 },\n * { id: '2', title: 'Task 2', columnId: 'doing', order: 0 },\n * ]\n *\n * <KanbanBoard\n * columns={columns}\n * items={items}\n * onItemMove={({ itemId, fromColumn, toColumn }) => {\n * console.log(`Moved ${itemId} from ${fromColumn} to ${toColumn}`)\n * }}\n * />\n * ```\n */\nfunction KanbanBoard({\n allowAddColumn = false,\n allowAddItem = true,\n allowColumnReorder = false,\n className,\n columns,\n columnWidth = 288,\n filterBy,\n groupBy,\n items,\n onColumnAdd,\n onColumnDelete: _onColumnDelete,\n onColumnReorder: _onColumnReorder,\n onColumnUpdate: _onColumnUpdate,\n onItemAdd,\n onItemClick,\n onItemDelete,\n onItemMove,\n onItemUpdate: _onItemUpdate,\n searchable = false,\n showColumnCount = true,\n showWipLimits = true,\n variant = \"default\",\n layout = \"horizontal\",\n ...props\n}: KanbanBoardProps) {\n const _boardId = useId()\n const [searchQuery, setSearchQuery] = useState(\"\")\n const [activeId, setActiveId] = useState<null | UniqueIdentifier>(null)\n const [collapsedColumns, setCollapsedColumns] = useState<Set<string>>(() => new Set())\n\n // Filter items based on search and filters\n const filteredItems = useMemo(() => {\n let result = [...items]\n\n // Apply search filter\n if (searchQuery) {\n const query = searchQuery.toLowerCase()\n result = result.filter(\n (item) =>\n item.title.toLowerCase().includes(query) ||\n item.description?.toLowerCase().includes(query)\n )\n }\n\n // Apply filter config\n if (filterBy) {\n if (filterBy.priority?.length) {\n result = result.filter((item) =>\n item.priority && filterBy.priority?.includes(item.priority)\n )\n }\n if (filterBy.assignees?.length) {\n result = result.filter((item) =>\n item.assignees?.some((a) => filterBy.assignees?.includes(a.id))\n )\n }\n if (filterBy.labels?.length) {\n result = result.filter((item) =>\n item.labels?.some((l) => filterBy.labels?.includes(l.id))\n )\n }\n if (filterBy.dueDate) {\n result = result.filter((item) => {\n if (!item.dueDate) return false\n const date = new Date(item.dueDate)\n if (filterBy.dueDate?.from && date < filterBy.dueDate.from) return false\n if (filterBy.dueDate?.to && date > filterBy.dueDate.to) return false\n return true\n })\n }\n }\n\n return result\n }, [items, searchQuery, filterBy])\n\n // Get items for a specific column\n const getColumnItems = (columnId: string) => {\n return filteredItems\n .filter((item) => item.columnId === columnId)\n .sort((a, b) => a.order - b.order)\n }\n\n // Get the active item being dragged\n const activeItem = useMemo(() => {\n if (!activeId) return null\n return items.find((item) => item.id === activeId) ?? null\n }, [activeId, items])\n\n // Toggle column collapse\n const handleToggleCollapse = (columnId: string) => {\n setCollapsedColumns((prev) => {\n const next = new Set(prev)\n if (next.has(columnId)) {\n next.delete(columnId)\n } else {\n next.add(columnId)\n }\n return next\n })\n }\n\n // Drag handlers\n const handleDragStart = (event: DragStartEvent) => {\n setActiveId(event.active.id)\n }\n\n const handleDragOver = (_event: DragOverEvent) => {\n // Could implement preview of drop here\n }\n\n const handleDragEnd = (event: DragEndEvent) => {\n const { active, over } = event\n setActiveId(null)\n\n if (!over) return\n\n const activeData = active.data.current as undefined | { columnId?: string; item?: KanbanItem; type?: string }\n const overData = over.data.current as undefined | { column?: KanbanColumn; columnId?: string; item?: KanbanItem; type?: string }\n\n if (activeData?.type !== \"item\") return\n\n const activeItem = activeData.item\n if (!activeItem) return\n\n let toColumn: string\n let index = 0\n\n if (overData?.type === \"column\") {\n // Dropped on column\n toColumn = overData.column?.id ?? \"\"\n index = getColumnItems(toColumn).length\n } else if (overData?.type === \"item\") {\n // Dropped on item\n toColumn = overData.item?.columnId ?? \"\"\n const targetItems = getColumnItems(toColumn)\n const overItem = overData.item\n index = overItem ? targetItems.findIndex((i) => i.id === overItem.id) : 0\n } else {\n return\n }\n\n if (activeItem.columnId !== toColumn || active.id !== over.id) {\n onItemMove?.({\n fromColumn: activeItem.columnId,\n index,\n itemId: activeItem.id,\n toColumn,\n })\n }\n }\n\n const handleDragCancel = () => {\n setActiveId(null)\n }\n\n // Prepare columns with collapse state\n const columnsWithState = columns.map((col) => ({\n ...col,\n isCollapsed: collapsedColumns.has(col.id) || col.isCollapsed,\n }))\n\n // Group items by swimlane if groupBy is specified\n const swimlanes = useMemo(() => {\n if (!groupBy || variant !== \"swimlanes\") return null\n\n const groups = new Map<string, KanbanItem[]>()\n for (const item of filteredItems) {\n const key = (item.customFields?.[groupBy] as string | undefined) ?? \"Ungrouped\"\n const group = groups.get(key) ?? []\n group.push(item)\n groups.set(key, group)\n }\n return groups\n }, [filteredItems, groupBy, variant])\n\n // Column width style\n const widthValue = typeof columnWidth === \"number\" ? `${String(columnWidth)}px` : columnWidth\n const columnStyle = {\n minWidth: widthValue,\n width: widthValue,\n }\n\n return (\n <div\n aria-label=\"Kanban board\"\n className=\"flex flex-col gap-4\"\n data-slot=\"kanban-board-wrapper\"\n role=\"region\"\n {...props}\n >\n {/* Search bar */}\n {searchable ? (\n <div className={kanbanSearchVariants()} data-slot=\"kanban-search\">\n <Search className=\"h-4 w-4 text-muted-foreground\" />\n <input\n aria-label=\"Search items\"\n className=\"flex-1 bg-transparent text-sm outline-none placeholder:text-muted-foreground\"\n placeholder=\"Search items...\"\n type=\"text\"\n value={searchQuery}\n onChange={(e) => { setSearchQuery(e.target.value); }}\n />\n </div>\n ) : null}\n\n {/* Board */}\n <DndContext\n className={cn(kanbanBoardVariants({ layout, variant }), className)}\n onDragCancel={handleDragCancel}\n onDragEnd={handleDragEnd}\n onDragOver={handleDragOver}\n onDragStart={handleDragStart}\n >\n {variant === \"swimlanes\" && swimlanes ? (\n // Swimlanes layout\n <div className=\"flex flex-col gap-6\" data-slot=\"kanban-swimlanes\">\n {[...swimlanes.entries()].map(([lane, _laneItems]) => (\n <div key={lane} className=\"flex flex-col gap-2\">\n <div className=\"text-sm font-semibold text-muted-foreground\">\n {lane}\n </div>\n <div className=\"flex gap-4 overflow-x-auto\">\n <SortableContext\n disabled={!allowColumnReorder}\n items={columnsWithState.map((c) => c.id)}\n strategy={horizontalListSortingStrategy}\n >\n {columnsWithState.map((column) => (\n <div key={column.id} style={columnStyle}>\n <KanbanColumn\n items={getColumnItems(column.id).filter(\n (item) => ((item.customFields?.[groupBy ?? \"\"] as string | undefined) ?? \"Ungrouped\") === lane\n )}\n allowAddItem={allowAddItem}\n column={column}\n showColumnCount={showColumnCount}\n showWipLimits={showWipLimits}\n onItemAdd={onItemAdd}\n onItemClick={onItemClick}\n onItemDelete={onItemDelete}\n onToggleCollapse={() => { handleToggleCollapse(column.id); }}\n />\n </div>\n ))}\n </SortableContext>\n </div>\n </div>\n ))}\n </div>\n ) : (\n // Standard layout\n <SortableContext\n disabled={!allowColumnReorder}\n items={columnsWithState.map((c) => c.id)}\n strategy={horizontalListSortingStrategy}\n >\n {columnsWithState.map((column) => (\n <div key={column.id} style={column.isCollapsed ? undefined : columnStyle}>\n <KanbanColumn\n allowAddItem={allowAddItem}\n column={column}\n items={getColumnItems(column.id)}\n showColumnCount={showColumnCount}\n showWipLimits={showWipLimits}\n onItemAdd={onItemAdd}\n onItemClick={onItemClick}\n onItemDelete={onItemDelete}\n onToggleCollapse={() => { handleToggleCollapse(column.id); }}\n />\n </div>\n ))}\n\n {/* Add column button */}\n {allowAddColumn ? (\n <button\n className={cn(\n kanbanAddButtonVariants(),\n \"min-w-52 h-52 flex-col\"\n )}\n aria-label=\"Add column\"\n type=\"button\"\n onClick={onColumnAdd}\n >\n <Plus className=\"h-6 w-6\" />\n Add column\n </button>\n ) : null}\n </SortableContext>\n )}\n\n {/* Drag overlay */}\n <DragOverlay>\n {activeItem ? (\n <div\n className=\"opacity-90 rotate-3\"\n style={columnStyle}\n >\n <KanbanCard isDragging item={activeItem} />\n </div>\n ) : null}\n </DragOverlay>\n </DndContext>\n </div>\n )\n}\n\n// ============================================\n// EXPORTS\n// ============================================\n\nexport {\n KanbanBoard,\n kanbanBoardVariants,\n KanbanCard,\n kanbanCardVariants,\n kanbanColumnVariants,\n}\n\nexport type {\n ItemAddPayload,\n ItemClickPayload,\n ItemDeletePayload,\n ItemMovePayload,\n KanbanBoardProps,\n KanbanCardProps,\n KanbanColumn,\n KanbanColumnProps,\n KanbanFilterConfig,\n KanbanItem,\n KanbanLabel,\n KanbanSubtasks,\n KanbanUser,\n} from \"./KanbanBoard.types\"\n"]}
1
+ {"version":3,"sources":["../src/components/workflow/KanbanBoard/KanbanBoard.variants.ts","../src/components/workflow/KanbanBoard/KanbanBoard.tsx"],"names":["activeItem"],"mappings":";;;;;;;;;;;AAOO,IAAM,mBAAA,GAAsB,GAAA;AAAA,EACjC;AAAA,IACE,MAAA;AAAA,IACA,QAAA;AAAA,IACA,SAAA;AAAA,IACA,OAAA;AAAA,IACA,KAAA;AAAA,IACA,aAAA;AAAA,IACA,YAAA;AAAA,IACA;AAAA,GACF;AAAA,EACA;AAAA,IACE,eAAA,EAAiB;AAAA,MACf,MAAA,EAAQ,YAAA;AAAA,MACR,OAAA,EAAS;AAAA,KACX;AAAA,IACA,QAAA,EAAU;AAAA,MACR,MAAA,EAAQ;AAAA,QACN,UAAA,EAAY,UAAA;AAAA,QACZ,QAAA,EAAU;AAAA,OACZ;AAAA,MACA,OAAA,EAAS;AAAA,QACP,SAAA,EAAW,EAAA;AAAA,QACX,OAAA,EAAS,oEAAA;AAAA,QACT,OAAA,EAAS,EAAA;AAAA,QACT,SAAA,EAAW;AAAA;AACb;AACF;AAEJ;AAKO,IAAM,oBAAA,GAAuB,GAAA;AAAA,EAClC;AAAA,IACE,MAAA;AAAA,IACA,UAAA;AAAA,IACA,OAAA;AAAA,IACA,YAAA;AAAA,IACA,aAAA;AAAA,IACA;AAAA,GACF;AAAA,EACA;AAAA,IACE,eAAA,EAAiB;AAAA,MACf,WAAA,EAAa,KAAA;AAAA,MACb,MAAA,EAAQ;AAAA,KACV;AAAA,IACA,QAAA,EAAU;AAAA,MACR,WAAA,EAAa;AAAA,QACX,KAAA,EAAO,MAAA;AAAA,QACP,IAAA,EAAM;AAAA,OACR;AAAA,MACA,MAAA,EAAQ;AAAA,QACN,KAAA,EAAO,EAAA;AAAA,QACP,IAAA,EAAM;AAAA;AACR;AACF;AAEJ;AAKO,IAAM,0BAAA,GAA6B,GAAA;AAAA,EACxC;AAAA,IACE,MAAA;AAAA,IACA,cAAA;AAAA,IACA,iBAAA;AAAA,IACA,OAAA;AAAA,IACA,KAAA;AAAA,IACA,SAAA;AAAA,IACA,cAAA;AAAA,IACA;AAAA,GACF;AAAA,EACA;AAAA,IACE,eAAA,EAAiB;AAAA,MACf,SAAA,EAAW;AAAA,KACb;AAAA,IACA,QAAA,EAAU;AAAA,MACR,SAAA,EAAW;AAAA,QACT,QAAA,EAAU,gDAAA;AAAA,QACV,MAAA,EAAQ,EAAA;AAAA,QACR,OAAA,EAAS;AAAA;AACX;AACF;AAEJ;AAKO,IAAM,2BAAA,GAA8B,GAAA;AAAA,EACzC;AAAA,IACE,MAAA;AAAA,IACA,UAAA;AAAA,IACA,QAAA;AAAA,IACA,OAAA;AAAA,IACA,KAAA;AAAA,IACA;AAAA,GACF;AAAA,EACA;AAAA,IACE,iBAAiB,EAAC;AAAA,IAClB,UAAU;AAAC;AAEf;AAKO,IAAM,kBAAA,GAAqB,GAAA;AAAA,EAChC;AAAA,IACE,OAAA;AAAA,IACA,MAAA;AAAA,IACA,UAAA;AAAA,IACA,OAAA;AAAA,IACA,KAAA;AAAA,IACA,SAAA;AAAA,IACA,YAAA;AAAA,IACA,QAAA;AAAA,IACA,WAAA;AAAA,IACA,gBAAA;AAAA,IACA,gBAAA;AAAA,IACA,cAAA;AAAA,IACA,iBAAA;AAAA,IACA;AAAA,GACF;AAAA,EACA;AAAA,IACE,eAAA,EAAiB;AAAA,MACf,UAAA,EAAY,KAAA;AAAA,MACZ,QAAA,EAAU;AAAA,KACZ;AAAA,IACA,QAAA,EAAU;AAAA,MACR,UAAA,EAAY;AAAA,QACV,KAAA,EAAO,EAAA;AAAA,QACP,IAAA,EAAM;AAAA,OACR;AAAA,MACA,QAAA,EAAU;AAAA,QACR,IAAA,EAAM,gCAAA;AAAA,QACN,GAAA,EAAK,8BAAA;AAAA,QACL,MAAA,EAAQ,gCAAA;AAAA,QACR,IAAA,EAAM,EAAA;AAAA,QACN,MAAA,EAAQ;AAAA;AACV;AACF;AAEJ;AAKO,IAAM,uBAAA,GAA0B,GAAA;AAAA,EACrC;AAAA,IACE,SAAA;AAAA,IACA,aAAA;AAAA,IACA,iBAAA;AAAA,IACA;AAAA,GACF;AAAA,EACA;AAAA,IACE,iBAAiB,EAAC;AAAA,IAClB,UAAU;AAAC;AAEf;AAKO,IAAM,6BAAA,GAAgC,GAAA;AAAA,EAC3C;AAAA,IACE,SAAA;AAAA,IACA,uBAAA;AAAA,IACA;AAAA,GACF;AAAA,EACA;AAAA,IACE,iBAAiB,EAAC;AAAA,IAClB,UAAU;AAAC;AAEf;AAKO,IAAM,sBAAA,GAAyB,GAAA;AAAA,EACpC;AAAA,IACE,MAAA;AAAA,IACA,WAAA;AAAA,IACA,cAAA;AAAA,IACA,OAAA;AAAA,IACA,SAAA;AAAA,IACA;AAAA,GACF;AAAA,EACA;AAAA,IACE,iBAAiB,EAAC;AAAA,IAClB,UAAU;AAAC;AAEf;AAKO,IAAM,mBAAA,GAAsB,GAAA;AAAA,EACjC;AAAA,IACE,aAAA;AAAA,IACA,cAAA;AAAA,IACA,QAAA;AAAA,IACA,QAAA;AAAA,IACA,YAAA;AAAA,IACA,SAAA;AAAA,IACA;AAAA,GACF;AAAA,EACA;AAAA,IACE,iBAAiB,EAAC;AAAA,IAClB,UAAU;AAAC;AAEf;AAKO,IAAM,2BAAA,GAA8B,GAAA;AAAA,EACzC;AAAA,IACE,KAAA;AAAA,IACA,cAAA;AAAA,IACA,eAAA;AAAA,IACA,QAAA;AAAA,IACA,gBAAA;AAAA,IACA;AAAA,GACF;AAAA,EACA;AAAA,IACE,eAAA,EAAiB;AAAA,MACf,SAAA,EAAW;AAAA,KACb;AAAA,IACA,QAAA,EAAU;AAAA,MACR,SAAA,EAAW;AAAA,QACT,KAAA,EAAO,WAAA;AAAA,QACP,IAAA,EAAM;AAAA;AACR;AACF;AAEJ;AAKO,IAAM,uBAAA,GAA0B,GAAA;AAAA,EACrC;AAAA,IACE,MAAA;AAAA,IACA,cAAA;AAAA,IACA,gBAAA;AAAA,IACA,OAAA;AAAA,IACA,QAAA;AAAA,IACA,KAAA;AAAA,IACA,SAAA;AAAA,IACA,uBAAA;AAAA,IACA,YAAA;AAAA,IACA,QAAA;AAAA,IACA,eAAA;AAAA,IACA,mBAAA;AAAA,IACA,uBAAA;AAAA,IACA;AAAA,GACF;AAAA,EACA;AAAA,IACE,iBAAiB,EAAC;AAAA,IAClB,UAAU;AAAC;AAEf;AAKO,IAAM,sBAAA,GAAyB,GAAA;AAAA,EACpC;AAAA,IACE,MAAA;AAAA,IACA,UAAA;AAAA,IACA,OAAA;AAAA,IACA,KAAA;AAAA,IACA,YAAA;AAAA,IACA;AAAA,GACF;AAAA,EACA;AAAA,IACE,iBAAiB,EAAC;AAAA,IAClB,UAAU;AAAC;AAEf;AAKO,IAAM,oBAAA,GAAuB,GAAA;AAAA,EAClC;AAAA,IACE,MAAA;AAAA,IACA,cAAA;AAAA,IACA,OAAA;AAAA,IACA,MAAA;AAAA,IACA,MAAA;AAAA,IACA,eAAA;AAAA,IACA,QAAA;AAAA,IACA,YAAA;AAAA,IACA,qBAAA;AAAA,IACA;AAAA,GACF;AAAA,EACA;AAAA,IACE,iBAAiB,EAAC;AAAA,IAClB,UAAU;AAAC;AAEf;ACjQA,SAAS,YAAY,IAAA,EAAsB;AACzC,EAAA,OAAO,KACJ,KAAA,CAAM,GAAG,EACT,GAAA,CAAI,CAAC,SAAS,IAAA,CAAK,CAAC,CAAC,CAAA,CACrB,KAAK,EAAE,CAAA,CACP,aAAY,CACZ,KAAA,CAAM,GAAG,CAAC,CAAA;AACf;AAKA,SAAS,cAAc,IAAA,EAAoB;AACzC,EAAA,MAAM,GAAA,uBAAU,IAAA,EAAK;AACrB,EAAA,MAAM,IAAA,GAAO,IAAA,CAAK,OAAA,EAAQ,GAAI,IAAI,OAAA,EAAQ;AAC1C,EAAA,MAAM,OAAO,IAAA,CAAK,IAAA,CAAK,QAAQ,GAAA,GAAO,EAAA,GAAK,KAAK,EAAA,CAAG,CAAA;AAEnD,EAAA,IAAI,IAAA,GAAO,GAAG,OAAO,SAAA;AACrB,EAAA,IAAI,IAAA,KAAS,GAAG,OAAO,OAAA;AACvB,EAAA,IAAI,IAAA,KAAS,GAAG,OAAO,UAAA;AACvB,EAAA,IAAI,QAAQ,CAAA,EAAG,OAAO,CAAA,EAAG,MAAA,CAAO,IAAI,CAAC,CAAA,KAAA,CAAA;AACrC,EAAA,OAAO,KAAK,kBAAA,EAAmB;AACjC;AAKA,SAAS,YAAA,CACP,WACA,QAAA,EACmC;AACnC,EAAA,IAAI,CAAC,UAAU,OAAO,QAAA;AACtB,EAAA,IAAI,SAAA,IAAa,UAAU,OAAO,UAAA;AAClC,EAAA,IAAI,SAAA,IAAa,QAAA,GAAW,CAAA,EAAG,OAAO,SAAA;AACtC,EAAA,OAAO,QAAA;AACT;AAUA,SAAS,UAAA,CAAW;AAAA,EAClB,SAAA;AAAA,EACA,UAAA,GAAa,KAAA;AAAA,EACb,IAAA;AAAA,EACA,OAAA;AAAA,EACA,QAAA,EAAU;AACZ,CAAA,EAAoB;AAClB,EAAA,MAAM,SAAS,KAAA,EAAM;AACrB,EAAA,MAAM,OAAA,GAAU,OAAA;AAAA,IACd,IAAA,CAAK,SAAA,EAAW,MAAA,IAChB,IAAA,CAAK,MAAA,EAAQ,MAAA,IACb,IAAA,CAAK,OAAA,IACL,IAAA,CAAK,QAAA,IACL,IAAA,CAAK,WAAA,IACL,IAAA,CAAK;AAAA,GACP;AAEA,EAAA,MAAM,cAAc,MAAM;AACxB,IAAA,OAAA,GAAU,EAAE,MAAM,CAAA;AAAA,EACpB,CAAA;AAEA,EAAA,MAAM,aAAA,GAAgB,CAAC,KAAA,KAAyC;AAC9D,IAAA,IAAI,KAAA,CAAM,GAAA,KAAQ,OAAA,IAAW,KAAA,CAAM,QAAQ,GAAA,EAAK;AAC9C,MAAA,KAAA,CAAM,cAAA,EAAe;AACrB,MAAA,WAAA,EAAY;AAAA,IACd;AAAA,EACF,CAAA;AAEA,EAAA,uBACE,IAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,kBAAA,EAAkB,IAAA,CAAK,WAAA,GAAc,CAAA,EAAG,MAAM,CAAA,KAAA,CAAA,GAAU,MAAA;AAAA,MACxD,cAAY,IAAA,CAAK,KAAA;AAAA,MACjB,SAAA,EAAW,EAAA,CAAG,kBAAA,CAAmB,EAAE,UAAA,EAAY,QAAA,EAAU,IAAA,CAAK,QAAA,IAAY,IAAA,EAAM,CAAA,EAAG,SAAS,CAAA;AAAA,MAC5F,WAAA,EAAU,aAAA;AAAA,MACV,IAAA,EAAK,UAAA;AAAA,MACL,QAAA,EAAU,CAAA;AAAA,MACV,OAAA,EAAS,WAAA;AAAA,MACT,SAAA,EAAW,aAAA;AAAA,MAGV,QAAA,EAAA;AAAA,QAAA,IAAA,CAAK,MAAA,IAAU,IAAA,CAAK,MAAA,CAAO,MAAA,GAAS,CAAA,wBAClC,KAAA,EAAA,EAAI,SAAA,EAAU,sBAAA,EAAuB,WAAA,EAAU,oBAAA,EAC7C,QAAA,EAAA;AAAA,UAAA,IAAA,CAAK,OAAO,KAAA,CAAM,CAAA,EAAG,CAAC,CAAA,CAAE,GAAA,CAAI,CAAC,KAAA,qBAC5B,GAAA;AAAA,YAAC,MAAA;AAAA,YAAA;AAAA,cAEC,WAAW,mBAAA,EAAoB;AAAA,cAC/B,KAAA,EAAO,EAAE,eAAA,EAAiB,CAAA,EAAG,MAAM,KAAK,CAAA,EAAA,CAAA,EAAM,KAAA,EAAO,KAAA,CAAM,KAAA,EAAM;AAAA,cAEhE,QAAA,EAAA,KAAA,CAAM;AAAA,aAAA;AAAA,YAJF,KAAA,CAAM;AAAA,WAMd,CAAA;AAAA,UACA,KAAK,MAAA,CAAO,MAAA,GAAS,oBACpB,IAAA,CAAC,MAAA,EAAA,EAAK,WAAU,+BAAA,EAAgC,QAAA,EAAA;AAAA,YAAA,GAAA;AAAA,YAC5C,IAAA,CAAK,OAAO,MAAA,GAAS;AAAA,WAAA,EACzB,CAAA,GACE;AAAA,SAAA,EACN,CAAA,GACE,IAAA;AAAA,wBAGJ,GAAA,CAAC,SAAI,SAAA,EAAW,uBAAA,IAA2B,WAAA,EAAU,mBAAA,EAClD,eAAK,KAAA,EACR,CAAA;AAAA,QAGC,KAAK,WAAA,mBACJ,GAAA;AAAA,UAAC,KAAA;AAAA,UAAA;AAAA,YACC,WAAW,6BAAA,EAA8B;AAAA,YACzC,WAAA,EAAU,yBAAA;AAAA,YACV,EAAA,EAAI,GAAG,MAAM,CAAA,KAAA,CAAA;AAAA,YAEZ,QAAA,EAAA,IAAA,CAAK;AAAA;AAAA,SACR,GACE,IAAA;AAAA,QAGH,0BACC,IAAA,CAAC,KAAA,EAAA,EAAI,WAAW,sBAAA,EAAuB,EAAG,aAAU,kBAAA,EAEjD,QAAA,EAAA;AAAA,UAAA,IAAA,CAAK,OAAA,mBACJ,IAAA;AAAA,YAAC,MAAA;AAAA,YAAA;AAAA,cACC,SAAA,EAAW,EAAA;AAAA,gBACT,yBAAA;AAAA,gBACA,IAAI,IAAA,CAAK,IAAA,CAAK,OAAO,CAAA,mBAAI,IAAI,MAAK,IAAK;AAAA,eACzC;AAAA,cACA,KAAA,EAAO,CAAA,KAAA,EAAQ,IAAA,CAAK,OAAA,CAAQ,oBAAoB,CAAA,CAAA;AAAA,cAEhD,QAAA,EAAA;AAAA,gCAAA,GAAA,CAAC,QAAA,EAAA,EAAS,WAAU,SAAA,EAAU,CAAA;AAAA,gBAC7B,aAAA,CAAc,IAAI,IAAA,CAAK,IAAA,CAAK,OAAO,CAAC;AAAA;AAAA;AAAA,WACvC,GACE,IAAA;AAAA,UAGH,KAAK,QAAA,mBACJ,IAAA,CAAC,UAAK,SAAA,EAAU,yBAAA,EAA0B,OAAM,mBAAA,EAC7C,QAAA,EAAA;AAAA,YAAA,IAAA,CAAK,QAAA,CAAS,SAAA;AAAA,YAAU,GAAA;AAAA,YAAE,KAAK,QAAA,CAAS;AAAA,WAAA,EAC3C,CAAA,GACE,IAAA;AAAA,UAGH,IAAA,CAAK,QAAA,mBACJ,IAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,yBAAA,EAA0B,KAAA,EAAO,CAAA,EAAG,MAAA,CAAO,IAAA,CAAK,QAAQ,CAAC,CAAA,SAAA,CAAA,EACvE,QAAA,EAAA;AAAA,4BAAA,GAAA,CAAC,aAAA,EAAA,EAAc,WAAU,SAAA,EAAU,CAAA;AAAA,YAClC,IAAA,CAAK;AAAA,WAAA,EACR,CAAA,GACE,IAAA;AAAA,UAGH,IAAA,CAAK,WAAA,mBACJ,IAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,yBAAA,EAA0B,KAAA,EAAO,CAAA,EAAG,MAAA,CAAO,IAAA,CAAK,WAAW,CAAC,CAAA,YAAA,CAAA,EAC1E,QAAA,EAAA;AAAA,4BAAA,GAAA,CAAC,SAAA,EAAA,EAAU,WAAU,SAAA,EAAU,CAAA;AAAA,YAC9B,IAAA,CAAK;AAAA,WAAA,EACR,CAAA,GACE,IAAA;AAAA,0BAGJ,GAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,QAAA,EAAS,CAAA;AAAA,UAGvB,IAAA,CAAK,SAAA,IAAa,IAAA,CAAK,SAAA,CAAU,MAAA,GAAS,CAAA,mBACzC,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,iBAAA,EAAkB,WAAA,EAAU,uBAAA,EACxC,QAAA,EAAA;AAAA,YAAA,IAAA,CAAK,UAAU,KAAA,CAAM,CAAA,EAAG,CAAC,CAAA,CAAE,GAAA,CAAI,CAAC,IAAA,qBAC/B,IAAA;AAAA,cAAC,MAAA;AAAA,cAAA;AAAA,gBAEC,SAAA,EAAU,oCAAA;AAAA,gBACV,OAAO,IAAA,CAAK,IAAA;AAAA,gBAEX,QAAA,EAAA;AAAA,kBAAA,IAAA,CAAK,MAAA,uBACH,WAAA,EAAA,EAAY,GAAA,EAAK,KAAK,IAAA,EAAM,GAAA,EAAK,IAAA,CAAK,MAAA,EAAQ,CAAA,GAC7C,IAAA;AAAA,sCACH,cAAA,EAAA,EAAe,SAAA,EAAU,WACvB,QAAA,EAAA,WAAA,CAAY,IAAA,CAAK,IAAI,CAAA,EACxB;AAAA;AAAA,eAAA;AAAA,cATK,IAAA,CAAK;AAAA,aAWb,CAAA;AAAA,YACA,KAAK,SAAA,CAAU,MAAA,GAAS,oBACvB,IAAA,CAAC,MAAA,EAAA,EAAK,WAAU,mGAAA,EAAoG,QAAA,EAAA;AAAA,cAAA,GAAA;AAAA,cAChH,IAAA,CAAK,UAAU,MAAA,GAAS;AAAA,aAAA,EAC5B,CAAA,GACE;AAAA,WAAA,EACN,CAAA,GACE;AAAA,SAAA,EACN,CAAA,GACE;AAAA;AAAA;AAAA,GACN;AAEJ;AASA,SAAS,YAAA,CAAa;AAAA,EACpB,YAAA,GAAe,IAAA;AAAA,EACf,SAAA;AAAA,EACA,MAAA;AAAA,EACA,MAAA,GAAS,KAAA;AAAA,EACT,KAAA;AAAA,EACA,SAAA;AAAA,EACA,WAAA;AAAA,EACA,YAAA;AAAA,EACA,gBAAA;AAAA,EACA,eAAA,GAAkB,IAAA;AAAA,EAClB,aAAA,GAAgB;AAClB,CAAA,EAAsB;AACpB,EAAA,MAAM,WAAW,KAAA,EAAM;AACvB,EAAA,MAAM,SAAA,GAAY,YAAA,CAAa,KAAA,CAAM,MAAA,EAAQ,OAAO,QAAQ,CAAA;AAC5D,EAAA,MAAM,WAAA,GAAc,OAAO,WAAA,IAAe,KAAA;AAE1C,EAAA,MAAM,gBAAgB,MAAM;AAC1B,IAAA,SAAA,GAAY,EAAE,QAAA,EAAU,MAAA,CAAO,EAAA,EAAI,CAAA;AAAA,EACrC,CAAA;AAEA,EAAA,MAAM,aAAA,GAAgB,CAAC,KAAA,KAAyC;AAC9D,IAAA,IAAI,KAAA,CAAM,GAAA,KAAQ,WAAA,IAAe,KAAA,CAAM,QAAQ,SAAA,EAAW;AACxD,MAAA,MAAM,SAAS,KAAA,CAAM,aAAA;AACrB,MAAA,MAAM,QAAQ,CAAC,GAAG,MAAA,CAAO,gBAAA,CAAiB,2BAA2B,CAAC,CAAA;AACtE,MAAA,MAAM,UAAU,QAAA,CAAS,aAAA;AACzB,MAAA,MAAM,YAAA,GAAe,KAAA,CAAM,OAAA,CAAQ,OAAO,CAAA;AAE1C,MAAA,IAAI,iBAAiB,EAAA,EAAI;AACvB,QAAA,KAAA,CAAM,CAAC,GAAG,KAAA,EAAM;AAChB,QAAA;AAAA,MACF;AAEA,MAAA,MAAM,YAAY,KAAA,CAAM,GAAA,KAAQ,WAAA,GAC5B,IAAA,CAAK,IAAI,YAAA,GAAe,CAAA,EAAG,KAAA,CAAM,MAAA,GAAS,CAAC,CAAA,GAC3C,IAAA,CAAK,GAAA,CAAI,YAAA,GAAe,GAAG,CAAC,CAAA;AAEhC,MAAA,MAAM,WAAA,GAAc,MAAM,SAAS,CAAA;AACnC,MAAA,WAAA,EAAa,KAAA,EAAM;AACnB,MAAA,KAAA,CAAM,cAAA,EAAe;AAAA,IACvB;AAAA,EACF,CAAA;AAGA,EAAA,IAAI,WAAA,EAAa;AACf,IAAA,uBACE,GAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,gBAAA,EAAc,IAAA;AAAA,QACd,SAAA,EAAW,EAAA,CAAG,oBAAA,CAAqB,EAAE,WAAA,EAAa,MAAM,MAAA,EAAQ,KAAA,EAAO,CAAA,EAAG,SAAS,CAAA;AAAA,QACnF,WAAA,EAAU,eAAA;AAAA,QAEV,QAAA,kBAAA,IAAA;AAAA,UAAC,MAAA;AAAA,UAAA;AAAA,YACC,eAAA,EAAe,KAAA;AAAA,YACf,YAAA,EAAY,CAAA,OAAA,EAAU,MAAA,CAAO,KAAK,CAAA,CAAA;AAAA,YAClC,SAAA,EAAU,mEAAA;AAAA,YACV,OAAA,EAAQ,OAAA;AAAA,YACR,OAAA,EAAS,gBAAA;AAAA,YAET,QAAA,EAAA;AAAA,8BAAA,GAAA,CAAC,YAAA,EAAA,EAAa,WAAU,SAAA,EAAU,CAAA;AAAA,8BAClC,GAAA;AAAA,gBAAC,MAAA;AAAA,gBAAA;AAAA,kBACC,SAAA,EAAU,6CAAA;AAAA,kBACV,KAAA,EAAO,EAAE,WAAA,EAAa,aAAA,EAAc;AAAA,kBAEnC,QAAA,EAAA,MAAA,CAAO;AAAA;AAAA,eACV;AAAA,cACC,eAAA,mBACC,GAAA,CAAC,KAAA,EAAA,EAAM,SAAA,EAAU,MAAA,EAAO,KAAA,EAAM,OAAA,EAAQ,IAAA,EAAK,YAAA,EACxC,QAAA,EAAA,KAAA,CAAM,MAAA,EACT,CAAA,GACE;AAAA;AAAA;AAAA;AACN;AAAA,KACF;AAAA,EAEJ;AAEA,EAAA,uBACE,GAAA,CAAC,SAAA,EAAA,EAAU,IAAA,EAAM,EAAE,MAAM,QAAA,EAAU,MAAA,EAAO,EAAG,EAAA,EAAI,OAAO,EAAA,EACrD,QAAA,EAAA,CAAC,EAAE,MAAA,EAAQ,iBAAgB,qBAC1B,IAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAW,EAAA;AAAA,QACT,qBAAqB,EAAE,WAAA,EAAa,OAAO,MAAA,EAAQ,MAAA,IAAU,iBAAiB,CAAA;AAAA,QAC9E;AAAA,OACF;AAAA,MACA,YAAA,EAAY,CAAA,EAAG,MAAA,CAAO,KAAK,CAAA,OAAA,CAAA;AAAA,MAC3B,WAAA,EAAU,eAAA;AAAA,MACV,IAAA,EAAK,MAAA;AAAA,MACL,SAAA,EAAW,aAAA;AAAA,MAGX,QAAA,EAAA;AAAA,wBAAA,IAAA;AAAA,UAAC,KAAA;AAAA,UAAA;AAAA,YACC,SAAA,EAAW,0BAAA,CAA2B,EAAE,SAAA,EAAW,CAAA;AAAA,YACnD,WAAA,EAAU,sBAAA;AAAA,YAEV,QAAA,EAAA;AAAA,8BAAA,IAAA,CAAC,KAAA,EAAA,EAAI,WAAU,yBAAA,EACZ,QAAA,EAAA;AAAA,gBAAA,MAAA,CAAO,KAAA,mBACN,GAAA;AAAA,kBAAC,KAAA;AAAA,kBAAA;AAAA,oBACC,SAAA,EAAU,sBAAA;AAAA,oBACV,KAAA,EAAO,EAAE,eAAA,EAAiB,MAAA,CAAO,KAAA;AAAM;AAAA,iBACzC,GACE,IAAA;AAAA,gCACJ,GAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,uBAAA,EAAyB,iBAAO,KAAA,EAAM,CAAA;AAAA,gBACrD,eAAA,mBACC,GAAA,CAAC,KAAA,EAAA,EAAM,KAAA,EAAM,OAAA,EAAQ,WAAA,EAAU,cAAA,EAAe,IAAA,EAAK,YAAA,EAChD,QAAA,EAAA,KAAA,CAAM,MAAA,EACT,CAAA,GACE,IAAA;AAAA,gBACH,aAAA,IAAiB,OAAO,QAAA,mBACvB,IAAA;AAAA,kBAAC,MAAA;AAAA,kBAAA;AAAA,oBACC,SAAA,EAAU,SAAA;AAAA,oBACV,WAAA,EAAU,eAAA;AAAA,oBACV,KAAA,EAAO,CAAA,WAAA,EAAc,MAAA,CAAO,MAAA,CAAO,QAAQ,CAAC,CAAA,CAAA;AAAA,oBAC7C,QAAA,EAAA;AAAA,sBAAA,GAAA;AAAA,sBACG,MAAA,CAAO;AAAA;AAAA;AAAA,iBACX,GACE;AAAA,eAAA,EACN,CAAA;AAAA,cACC,gBAAA,mBACC,GAAA;AAAA,gBAAC,MAAA;AAAA,gBAAA;AAAA,kBACC,eAAA,EAAe,IAAA;AAAA,kBACf,YAAA,EAAY,CAAA,SAAA,EAAY,MAAA,CAAO,KAAK,CAAA,CAAA;AAAA,kBACpC,SAAA,EAAU,aAAA;AAAA,kBACV,IAAA,EAAK,IAAA;AAAA,kBACL,OAAA,EAAQ,OAAA;AAAA,kBACR,OAAA,EAAS,gBAAA;AAAA,kBAET,QAAA,kBAAA,GAAA,CAAC,WAAA,EAAA,EAAY,SAAA,EAAU,SAAA,EAAU;AAAA;AAAA,eACnC,GACE;AAAA;AAAA;AAAA,SACN;AAAA,wBAGA,GAAA;AAAA,UAAC,eAAA;AAAA,UAAA;AAAA,YACC,OAAO,KAAA,CAAM,GAAA,CAAI,CAAC,CAAA,KAAM,EAAE,EAAE,CAAA;AAAA,YAC5B,QAAA,EAAU,2BAAA;AAAA,YAEV,QAAA,kBAAA,IAAA;AAAA,cAAC,KAAA;AAAA,cAAA;AAAA,gBACC,iBAAA,EAAiB,QAAA;AAAA,gBACjB,WAAW,2BAAA,EAA4B;AAAA,gBACvC,WAAA,EAAU,uBAAA;AAAA,gBAET,QAAA,EAAA;AAAA,kBAAA,KAAA,CAAM,GAAA,CAAI,CAAC,IAAA,qBACV,GAAA;AAAA,oBAAC,YAAA;AAAA,oBAAA;AAAA,sBAEC,MAAM,EAAE,IAAA,EAAM,QAAQ,IAAA,EAAM,QAAA,EAAU,OAAO,EAAA,EAAG;AAAA,sBAChD,IAAI,IAAA,CAAK,EAAA;AAAA,sBAER,WAAC,EAAE,UAAA,uBACF,IAAA,CAAC,KAAA,EAAA,EAAI,WAAU,UAAA,EACb,QAAA,EAAA;AAAA,wCAAA,GAAA;AAAA,0BAAC,UAAA;AAAA,0BAAA;AAAA,4BACC,YAAA,EAAY,CAAA,KAAA,EAAQ,IAAA,CAAK,KAAK,CAAA,CAAA;AAAA,4BAC9B,SAAA,EAAU,2KAAA;AAAA,4BAEV,QAAA,kBAAA,GAAA,CAAC,YAAA,EAAA,EAAa,SAAA,EAAU,+BAAA,EAAgC;AAAA;AAAA,yBAC1D;AAAA,wCACA,GAAA;AAAA,0BAAC,UAAA;AAAA,0BAAA;AAAA,4BACC,UAAA;AAAA,4BACA,IAAA;AAAA,4BACA,OAAA,EAAS,WAAA;AAAA,4BACT,QAAA,EAAU;AAAA;AAAA;AACZ,uBAAA,EACF;AAAA,qBAAA;AAAA,oBAlBG,IAAA,CAAK;AAAA,mBAqBb,CAAA;AAAA,kBAGA,YAAA,mBACC,IAAA;AAAA,oBAAC,QAAA;AAAA,oBAAA;AAAA,sBACC,YAAA,EAAY,CAAA,YAAA,EAAe,MAAA,CAAO,KAAK,CAAA,CAAA;AAAA,sBACvC,WAAW,uBAAA,EAAwB;AAAA,sBACnC,IAAA,EAAK,QAAA;AAAA,sBACL,OAAA,EAAS,aAAA;AAAA,sBAET,QAAA,EAAA;AAAA,wCAAA,GAAA,CAAC,IAAA,EAAA,EAAK,WAAU,SAAA,EAAU,CAAA;AAAA,wBAAE;AAAA;AAAA;AAAA,mBAE9B,GACE;AAAA;AAAA;AAAA;AACN;AAAA;AACF;AAAA;AAAA,GACF,EAEJ,CAAA;AAEJ;AAkCA,SAAS,WAAA,CAAY;AAAA,EACnB,cAAA,GAAiB,KAAA;AAAA,EACjB,YAAA,GAAe,IAAA;AAAA,EACf,kBAAA,GAAqB,KAAA;AAAA,EACrB,SAAA;AAAA,EACA,OAAA;AAAA,EACA,WAAA,GAAc,GAAA;AAAA,EACd,QAAA;AAAA,EACA,OAAA;AAAA,EACA,KAAA;AAAA,EACA,WAAA;AAAA,EACA,cAAA,EAAgB,eAAA;AAAA,EAChB,eAAA,EAAiB,gBAAA;AAAA,EACjB,cAAA,EAAgB,eAAA;AAAA,EAChB,SAAA;AAAA,EACA,WAAA;AAAA,EACA,YAAA;AAAA,EACA,UAAA;AAAA,EACA,YAAA,EAAc,aAAA;AAAA,EACd,UAAA,GAAa,KAAA;AAAA,EACb,eAAA,GAAkB,IAAA;AAAA,EAClB,aAAA,GAAgB,IAAA;AAAA,EAChB,OAAA,GAAU,SAAA;AAAA,EACV,MAAA,GAAS,YAAA;AAAA,EACT,GAAG;AACL,CAAA,EAAqB;AACnB,EAAiB,KAAA;AACjB,EAAA,MAAM,CAAC,WAAA,EAAa,cAAc,CAAA,GAAI,SAAS,EAAE,CAAA;AACjD,EAAA,MAAM,CAAC,QAAA,EAAU,WAAW,CAAA,GAAI,SAAkC,IAAI,CAAA;AACtE,EAAA,MAAM,CAAC,kBAAkB,mBAAmB,CAAA,GAAI,SAAsB,sBAAM,IAAI,KAAK,CAAA;AAGrF,EAAA,MAAM,aAAA,GAAgB,QAAQ,MAAM;AAClC,IAAA,IAAI,MAAA,GAAS,CAAC,GAAG,KAAK,CAAA;AAGtB,IAAA,IAAI,WAAA,EAAa;AACf,MAAA,MAAM,KAAA,GAAQ,YAAY,WAAA,EAAY;AACtC,MAAA,MAAA,GAAS,MAAA,CAAO,MAAA;AAAA,QACd,CAAC,IAAA,KACC,IAAA,CAAK,KAAA,CAAM,aAAY,CAAE,QAAA,CAAS,KAAK,CAAA,IACvC,IAAA,CAAK,WAAA,EAAa,WAAA,EAAY,CAAE,SAAS,KAAK;AAAA,OAClD;AAAA,IACF;AAGA,IAAA,IAAI,QAAA,EAAU;AACZ,MAAA,IAAI,QAAA,CAAS,UAAU,MAAA,EAAQ;AAC7B,QAAA,MAAA,GAAS,MAAA,CAAO,MAAA;AAAA,UAAO,CAAC,SACtB,IAAA,CAAK,QAAA,IAAY,SAAS,QAAA,EAAU,QAAA,CAAS,KAAK,QAAQ;AAAA,SAC5D;AAAA,MACF;AACA,MAAA,IAAI,QAAA,CAAS,WAAW,MAAA,EAAQ;AAC9B,QAAA,MAAA,GAAS,MAAA,CAAO,MAAA;AAAA,UAAO,CAAC,IAAA,KACtB,IAAA,CAAK,SAAA,EAAW,IAAA,CAAK,CAAC,CAAA,KAAM,QAAA,CAAS,SAAA,EAAW,QAAA,CAAS,CAAA,CAAE,EAAE,CAAC;AAAA,SAChE;AAAA,MACF;AACA,MAAA,IAAI,QAAA,CAAS,QAAQ,MAAA,EAAQ;AAC3B,QAAA,MAAA,GAAS,MAAA,CAAO,MAAA;AAAA,UAAO,CAAC,IAAA,KACtB,IAAA,CAAK,MAAA,EAAQ,IAAA,CAAK,CAAC,CAAA,KAAM,QAAA,CAAS,MAAA,EAAQ,QAAA,CAAS,CAAA,CAAE,EAAE,CAAC;AAAA,SAC1D;AAAA,MACF;AACA,MAAA,IAAI,SAAS,OAAA,EAAS;AACpB,QAAA,MAAA,GAAS,MAAA,CAAO,MAAA,CAAO,CAAC,IAAA,KAAS;AAC/B,UAAA,IAAI,CAAC,IAAA,CAAK,OAAA,EAAS,OAAO,KAAA;AAC1B,UAAA,MAAM,IAAA,GAAO,IAAI,IAAA,CAAK,IAAA,CAAK,OAAO,CAAA;AAClC,UAAA,IAAI,SAAS,OAAA,EAAS,IAAA,IAAQ,OAAO,QAAA,CAAS,OAAA,CAAQ,MAAM,OAAO,KAAA;AACnE,UAAA,IAAI,SAAS,OAAA,EAAS,EAAA,IAAM,OAAO,QAAA,CAAS,OAAA,CAAQ,IAAI,OAAO,KAAA;AAC/D,UAAA,OAAO,IAAA;AAAA,QACT,CAAC,CAAA;AAAA,MACH;AAAA,IACF;AAEA,IAAA,OAAO,MAAA;AAAA,EACT,CAAA,EAAG,CAAC,KAAA,EAAO,WAAA,EAAa,QAAQ,CAAC,CAAA;AAGjC,EAAA,MAAM,cAAA,GAAiB,CAAC,QAAA,KAAqB;AAC3C,IAAA,OAAO,aAAA,CACJ,MAAA,CAAO,CAAC,IAAA,KAAS,KAAK,QAAA,KAAa,QAAQ,CAAA,CAC3C,IAAA,CAAK,CAAC,CAAA,EAAG,CAAA,KAAM,CAAA,CAAE,KAAA,GAAQ,EAAE,KAAK,CAAA;AAAA,EACrC,CAAA;AAGA,EAAA,MAAM,UAAA,GAAa,QAAQ,MAAM;AAC/B,IAAA,IAAI,CAAC,UAAU,OAAO,IAAA;AACtB,IAAA,OAAO,MAAM,IAAA,CAAK,CAAC,SAAS,IAAA,CAAK,EAAA,KAAO,QAAQ,CAAA,IAAK,IAAA;AAAA,EACvD,CAAA,EAAG,CAAC,QAAA,EAAU,KAAK,CAAC,CAAA;AAGpB,EAAA,MAAM,oBAAA,GAAuB,CAAC,QAAA,KAAqB;AACjD,IAAA,mBAAA,CAAoB,CAAC,IAAA,KAAS;AAC5B,MAAA,MAAM,IAAA,GAAO,IAAI,GAAA,CAAI,IAAI,CAAA;AACzB,MAAA,IAAI,IAAA,CAAK,GAAA,CAAI,QAAQ,CAAA,EAAG;AACtB,QAAA,IAAA,CAAK,OAAO,QAAQ,CAAA;AAAA,MACtB,CAAA,MAAO;AACL,QAAA,IAAA,CAAK,IAAI,QAAQ,CAAA;AAAA,MACnB;AACA,MAAA,OAAO,IAAA;AAAA,IACT,CAAC,CAAA;AAAA,EACH,CAAA;AAGA,EAAA,MAAM,eAAA,GAAkB,CAAC,KAAA,KAA0B;AACjD,IAAA,WAAA,CAAY,KAAA,CAAM,OAAO,EAAE,CAAA;AAAA,EAC7B,CAAA;AAEA,EAAA,MAAM,cAAA,GAAiB,CAAC,MAAA,KAA0B;AAAA,EAElD,CAAA;AAEA,EAAA,MAAM,aAAA,GAAgB,CAAC,KAAA,KAAwB;AAC7C,IAAA,MAAM,EAAE,MAAA,EAAQ,IAAA,EAAK,GAAI,KAAA;AACzB,IAAA,WAAA,CAAY,IAAI,CAAA;AAEhB,IAAA,IAAI,CAAC,IAAA,EAAM;AAEX,IAAA,MAAM,UAAA,GAAa,OAAO,IAAA,CAAK,OAAA;AAC/B,IAAA,MAAM,QAAA,GAAW,KAAK,IAAA,CAAK,OAAA;AAE3B,IAAA,IAAI,UAAA,EAAY,SAAS,MAAA,EAAQ;AAEjC,IAAA,MAAMA,cAAa,UAAA,CAAW,IAAA;AAC9B,IAAA,IAAI,CAACA,WAAAA,EAAY;AAEjB,IAAA,IAAI,QAAA;AACJ,IAAA,IAAI,KAAA,GAAQ,CAAA;AAEZ,IAAA,IAAI,QAAA,EAAU,SAAS,QAAA,EAAU;AAE/B,MAAA,QAAA,GAAW,QAAA,CAAS,QAAQ,EAAA,IAAM,EAAA;AAClC,MAAA,KAAA,GAAQ,cAAA,CAAe,QAAQ,CAAA,CAAE,MAAA;AAAA,IACnC,CAAA,MAAA,IAAW,QAAA,EAAU,IAAA,KAAS,MAAA,EAAQ;AAEpC,MAAA,QAAA,GAAW,QAAA,CAAS,MAAM,QAAA,IAAY,EAAA;AACtC,MAAA,MAAM,WAAA,GAAc,eAAe,QAAQ,CAAA;AAC3C,MAAA,MAAM,WAAW,QAAA,CAAS,IAAA;AAC1B,MAAA,KAAA,GAAQ,QAAA,GAAW,YAAY,SAAA,CAAU,CAAC,MAAM,CAAA,CAAE,EAAA,KAAO,QAAA,CAAS,EAAE,CAAA,GAAI,CAAA;AAAA,IAC1E,CAAA,MAAO;AACL,MAAA;AAAA,IACF;AAEA,IAAA,IAAIA,YAAW,QAAA,KAAa,QAAA,IAAY,MAAA,CAAO,EAAA,KAAO,KAAK,EAAA,EAAI;AAC7D,MAAA,UAAA,GAAa;AAAA,QACX,YAAYA,WAAAA,CAAW,QAAA;AAAA,QACvB,KAAA;AAAA,QACA,QAAQA,WAAAA,CAAW,EAAA;AAAA,QACnB;AAAA,OACD,CAAA;AAAA,IACH;AAAA,EACF,CAAA;AAEA,EAAA,MAAM,mBAAmB,MAAM;AAC7B,IAAA,WAAA,CAAY,IAAI,CAAA;AAAA,EAClB,CAAA;AAGA,EAAA,MAAM,gBAAA,GAAmB,OAAA,CAAQ,GAAA,CAAI,CAAC,GAAA,MAAS;AAAA,IAC7C,GAAG,GAAA;AAAA,IACH,aAAa,gBAAA,CAAiB,GAAA,CAAI,GAAA,CAAI,EAAE,KAAK,GAAA,CAAI;AAAA,GACnD,CAAE,CAAA;AAGF,EAAA,MAAM,SAAA,GAAY,QAAQ,MAAM;AAC9B,IAAA,IAAI,CAAC,OAAA,IAAW,OAAA,KAAY,WAAA,EAAa,OAAO,IAAA;AAEhD,IAAA,MAAM,MAAA,uBAAa,GAAA,EAA0B;AAC7C,IAAA,KAAA,MAAW,QAAQ,aAAA,EAAe;AAChC,MAAA,MAAM,GAAA,GAAO,IAAA,CAAK,YAAA,GAAe,OAAO,CAAA,IAA4B,WAAA;AACpE,MAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,GAAA,CAAI,GAAG,KAAK,EAAC;AAClC,MAAA,KAAA,CAAM,KAAK,IAAI,CAAA;AACf,MAAA,MAAA,CAAO,GAAA,CAAI,KAAK,KAAK,CAAA;AAAA,IACvB;AACA,IAAA,OAAO,MAAA;AAAA,EACT,CAAA,EAAG,CAAC,aAAA,EAAe,OAAA,EAAS,OAAO,CAAC,CAAA;AAGpC,EAAA,MAAM,UAAA,GAAa,OAAO,WAAA,KAAgB,QAAA,GAAW,GAAG,MAAA,CAAO,WAAW,CAAC,CAAA,EAAA,CAAA,GAAO,WAAA;AAClF,EAAA,MAAM,WAAA,GAAc;AAAA,IAClB,QAAA,EAAU,UAAA;AAAA,IACV,KAAA,EAAO;AAAA,GACT;AAEA,EAAA,uBACE,IAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,YAAA,EAAW,cAAA;AAAA,MACX,SAAA,EAAU,qBAAA;AAAA,MACV,WAAA,EAAU,sBAAA;AAAA,MACV,IAAA,EAAK,QAAA;AAAA,MACJ,GAAG,KAAA;AAAA,MAGH,QAAA,EAAA;AAAA,QAAA,UAAA,wBACE,KAAA,EAAA,EAAI,SAAA,EAAW,oBAAA,EAAqB,EAAG,aAAU,eAAA,EAChD,QAAA,EAAA;AAAA,0BAAA,GAAA,CAAC,MAAA,EAAA,EAAO,WAAU,+BAAA,EAAgC,CAAA;AAAA,0BAClD,GAAA;AAAA,YAAC,OAAA;AAAA,YAAA;AAAA,cACC,YAAA,EAAW,cAAA;AAAA,cACX,SAAA,EAAU,8EAAA;AAAA,cACV,WAAA,EAAY,iBAAA;AAAA,cACZ,IAAA,EAAK,MAAA;AAAA,cACL,KAAA,EAAO,WAAA;AAAA,cACP,QAAA,EAAU,CAAC,CAAA,KAAM;AAAE,gBAAA,cAAA,CAAe,CAAA,CAAE,OAAO,KAAK,CAAA;AAAA,cAAG;AAAA;AAAA;AACrD,SAAA,EACF,CAAA,GACE,IAAA;AAAA,wBAGJ,IAAA;AAAA,UAAC,UAAA;AAAA,UAAA;AAAA,YACC,SAAA,EAAW,GAAG,mBAAA,CAAoB,EAAE,QAAQ,OAAA,EAAS,GAAG,SAAS,CAAA;AAAA,YACjE,YAAA,EAAc,gBAAA;AAAA,YACd,SAAA,EAAW,aAAA;AAAA,YACX,UAAA,EAAY,cAAA;AAAA,YACZ,WAAA,EAAa,eAAA;AAAA,YAEZ,QAAA,EAAA;AAAA,cAAA,OAAA,KAAY,WAAA,IAAe,SAAA;AAAA;AAAA,gCAE1B,GAAA,CAAC,SAAI,SAAA,EAAU,qBAAA,EAAsB,aAAU,kBAAA,EAC5C,QAAA,EAAA,CAAC,GAAG,SAAA,CAAU,OAAA,EAAS,CAAA,CAAE,GAAA,CAAI,CAAC,CAAC,IAAA,EAAM,UAAU,CAAA,qBAC9C,IAAA,CAAC,KAAA,EAAA,EAAe,SAAA,EAAU,qBAAA,EACxB,QAAA,EAAA;AAAA,kCAAA,GAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,6CAAA,EACZ,QAAA,EAAA,IAAA,EACH,CAAA;AAAA,kCACA,GAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,4BAAA,EACb,QAAA,kBAAA,GAAA;AAAA,oBAAC,eAAA;AAAA,oBAAA;AAAA,sBACC,UAAU,CAAC,kBAAA;AAAA,sBACX,OAAO,gBAAA,CAAiB,GAAA,CAAI,CAAC,CAAA,KAAM,EAAE,EAAE,CAAA;AAAA,sBACvC,QAAA,EAAU,6BAAA;AAAA,sBAET,2BAAiB,GAAA,CAAI,CAAC,2BACrB,GAAA,CAAC,KAAA,EAAA,EAAoB,OAAO,WAAA,EAC1B,QAAA,kBAAA,GAAA;AAAA,wBAAC,YAAA;AAAA,wBAAA;AAAA,0BACC,KAAA,EAAO,cAAA,CAAe,MAAA,CAAO,EAAE,CAAA,CAAE,MAAA;AAAA,4BAC/B,CAAC,IAAA,KAAA,CAAW,IAAA,CAAK,eAAe,OAAA,IAAW,EAAE,KAA4B,WAAA,MAAiB;AAAA,2BAC5F;AAAA,0BACA,YAAA;AAAA,0BACA,MAAA;AAAA,0BACA,eAAA;AAAA,0BACA,aAAA;AAAA,0BACA,SAAA;AAAA,0BACA,WAAA;AAAA,0BACA,YAAA;AAAA,0BACA,kBAAkB,MAAM;AAAE,4BAAA,oBAAA,CAAqB,OAAO,EAAE,CAAA;AAAA,0BAAG;AAAA;AAAA,uBAC7D,EAAA,EAbQ,MAAA,CAAO,EAcjB,CACD;AAAA;AAAA,mBACH,EACF;AAAA,iBAAA,EAAA,EA5BQ,IA6BV,CACD,CAAA,EACH;AAAA;AAAA;AAAA,gCAGA,IAAA;AAAA,kBAAC,eAAA;AAAA,kBAAA;AAAA,oBACC,UAAU,CAAC,kBAAA;AAAA,oBACX,OAAO,gBAAA,CAAiB,GAAA,CAAI,CAAC,CAAA,KAAM,EAAE,EAAE,CAAA;AAAA,oBACvC,QAAA,EAAU,6BAAA;AAAA,oBAET,QAAA,EAAA;AAAA,sBAAA,gBAAA,CAAiB,GAAA,CAAI,CAAC,MAAA,qBACrB,GAAA,CAAC,SAAoB,KAAA,EAAO,MAAA,CAAO,WAAA,GAAc,MAAA,GAAY,WAAA,EAC3D,QAAA,kBAAA,GAAA;AAAA,wBAAC,YAAA;AAAA,wBAAA;AAAA,0BACC,YAAA;AAAA,0BACA,MAAA;AAAA,0BACA,KAAA,EAAO,cAAA,CAAe,MAAA,CAAO,EAAE,CAAA;AAAA,0BAC/B,eAAA;AAAA,0BACA,aAAA;AAAA,0BACA,SAAA;AAAA,0BACA,WAAA;AAAA,0BACA,YAAA;AAAA,0BACA,kBAAkB,MAAM;AAAE,4BAAA,oBAAA,CAAqB,OAAO,EAAE,CAAA;AAAA,0BAAG;AAAA;AAAA,uBAC7D,EAAA,EAXQ,MAAA,CAAO,EAYjB,CACD,CAAA;AAAA,sBAGA,cAAA,mBACC,IAAA;AAAA,wBAAC,QAAA;AAAA,wBAAA;AAAA,0BACC,SAAA,EAAW,EAAA;AAAA,4BACT,uBAAA,EAAwB;AAAA,4BACxB;AAAA,2BACF;AAAA,0BACA,YAAA,EAAW,YAAA;AAAA,0BACX,IAAA,EAAK,QAAA;AAAA,0BACL,OAAA,EAAS,WAAA;AAAA,0BAET,QAAA,EAAA;AAAA,4CAAA,GAAA,CAAC,IAAA,EAAA,EAAK,WAAU,SAAA,EAAU,CAAA;AAAA,4BAAE;AAAA;AAAA;AAAA,uBAE9B,GACE;AAAA;AAAA;AAAA;AACN,eAAA;AAAA,8BAIF,GAAA,CAAC,eACE,QAAA,EAAA,UAAA,mBACC,GAAA;AAAA,gBAAC,KAAA;AAAA,gBAAA;AAAA,kBACC,SAAA,EAAU,qBAAA;AAAA,kBACV,KAAA,EAAO,WAAA;AAAA,kBAEP,QAAA,kBAAA,GAAA,CAAC,UAAA,EAAA,EAAW,UAAA,EAAU,IAAA,EAAC,MAAM,UAAA,EAAY;AAAA;AAAA,kBAEzC,IAAA,EACN;AAAA;AAAA;AAAA;AACF;AAAA;AAAA,GACF;AAEJ","file":"chunk-AUCDXPWH.js","sourcesContent":["import { cva } from \"class-variance-authority\"\n\n/* eslint-disable sonarjs/no-duplicate-string -- CVA variants require repeated class patterns */\n\n/**\n * Board container variants\n */\nexport const kanbanBoardVariants = cva(\n [\n \"flex\",\n \"w-full\",\n \"min-w-0\",\n \"gap-4\",\n \"p-4\",\n \"bg-muted/30\",\n \"rounded-lg\",\n \"overflow-x-auto\",\n ],\n {\n defaultVariants: {\n layout: \"horizontal\",\n variant: \"default\",\n },\n variants: {\n layout: {\n horizontal: \"flex-row\",\n vertical: \"flex-col\",\n },\n variant: {\n collapsed: \"\",\n compact: \"[&_[data-slot=kanban-card]]:p-2 [&_[data-slot=kanban-column]]:w-60\",\n default: \"\",\n swimlanes: \"flex-col gap-6\",\n },\n },\n }\n)\n\n/**\n * Column container variants\n */\nexport const kanbanColumnVariants = cva(\n [\n \"flex\",\n \"flex-col\",\n \"gap-2\",\n \"rounded-lg\",\n \"bg-muted/50\",\n \"min-h-52\",\n ],\n {\n defaultVariants: {\n isCollapsed: false,\n isOver: false,\n },\n variants: {\n isCollapsed: {\n false: \"w-72\",\n true: \"w-12\",\n },\n isOver: {\n false: \"\",\n true: \"ring-2 ring-primary/50 bg-primary/5\",\n },\n },\n }\n)\n\n/**\n * Column header variants\n */\nexport const kanbanColumnHeaderVariants = cva(\n [\n \"flex\",\n \"items-center\",\n \"justify-between\",\n \"gap-2\",\n \"p-3\",\n \"bg-card\",\n \"rounded-t-lg\",\n \"border-b\",\n ],\n {\n defaultVariants: {\n wipStatus: \"normal\",\n },\n variants: {\n wipStatus: {\n exceeded: \"[&_[data-slot=wip-indicator]]:text-destructive\",\n normal: \"\",\n warning: \"[&_[data-slot=wip-indicator]]:text-warning\",\n },\n },\n }\n)\n\n/**\n * Column content (cards area) variants\n */\nexport const kanbanColumnContentVariants = cva(\n [\n \"flex\",\n \"flex-col\",\n \"flex-1\",\n \"gap-2\",\n \"p-2\",\n \"min-h-24\",\n ],\n {\n defaultVariants: {},\n variants: {},\n }\n)\n\n/**\n * Kanban card variants\n */\nexport const kanbanCardVariants = cva(\n [\n \"group\",\n \"flex\",\n \"flex-col\",\n \"gap-2\",\n \"p-3\",\n \"bg-card\",\n \"rounded-md\",\n \"border\",\n \"shadow-sm\",\n \"cursor-pointer\",\n \"transition-all\",\n \"duration-200\",\n \"hover:shadow-md\",\n \"hover:border-primary/30\",\n ],\n {\n defaultVariants: {\n isDragging: false,\n priority: null,\n },\n variants: {\n isDragging: {\n false: \"\",\n true: \"opacity-50 ring-2 ring-primary shadow-lg\",\n },\n priority: {\n high: \"border-l-4 border-l-orange-500\",\n low: \"border-l-4 border-l-gray-400\",\n medium: \"border-l-4 border-l-yellow-500\",\n null: \"\",\n urgent: \"border-l-4 border-l-destructive\",\n },\n },\n }\n)\n\n/**\n * Card title variants\n */\nexport const kanbanCardTitleVariants = cva(\n [\n \"text-sm\",\n \"font-medium\",\n \"text-foreground\",\n \"line-clamp-2\",\n ],\n {\n defaultVariants: {},\n variants: {},\n }\n)\n\n/**\n * Card description variants\n */\nexport const kanbanCardDescriptionVariants = cva(\n [\n \"text-xs\",\n \"text-muted-foreground\",\n \"line-clamp-2\",\n ],\n {\n defaultVariants: {},\n variants: {},\n }\n)\n\n/**\n * Card metadata row variants\n */\nexport const kanbanCardMetaVariants = cva(\n [\n \"flex\",\n \"flex-wrap\",\n \"items-center\",\n \"gap-2\",\n \"text-xs\",\n \"text-muted-foreground\",\n ],\n {\n defaultVariants: {},\n variants: {},\n }\n)\n\n/**\n * Label badge variants\n */\nexport const kanbanLabelVariants = cva(\n [\n \"inline-flex\",\n \"items-center\",\n \"px-1.5\",\n \"py-0.5\",\n \"rounded-sm\",\n \"text-xs\",\n \"font-medium\",\n ],\n {\n defaultVariants: {},\n variants: {},\n }\n)\n\n/**\n * Drop indicator variants\n */\nexport const kanbanDropIndicatorVariants = cva(\n [\n \"h-1\",\n \"rounded-full\",\n \"bg-primary/20\",\n \"border\",\n \"border-primary\",\n \"transition-opacity\",\n ],\n {\n defaultVariants: {\n isVisible: false,\n },\n variants: {\n isVisible: {\n false: \"opacity-0\",\n true: \"opacity-100\",\n },\n },\n }\n)\n\n/**\n * Add button variants\n */\nexport const kanbanAddButtonVariants = cva(\n [\n \"flex\",\n \"items-center\",\n \"justify-center\",\n \"gap-1\",\n \"w-full\",\n \"p-2\",\n \"text-sm\",\n \"text-muted-foreground\",\n \"rounded-md\",\n \"border\",\n \"border-dashed\",\n \"hover:bg-muted/50\",\n \"hover:text-foreground\",\n \"transition-colors\",\n ],\n {\n defaultVariants: {},\n variants: {},\n }\n)\n\n/**\n * Swimlane header variants\n */\nexport const kanbanSwimlaneVariants = cva(\n [\n \"flex\",\n \"flex-col\",\n \"gap-2\",\n \"p-3\",\n \"rounded-lg\",\n \"bg-muted/20\",\n ],\n {\n defaultVariants: {},\n variants: {},\n }\n)\n\n/**\n * Search input variants\n */\nexport const kanbanSearchVariants = cva(\n [\n \"flex\",\n \"items-center\",\n \"gap-2\",\n \"px-3\",\n \"py-2\",\n \"bg-background\",\n \"border\",\n \"rounded-md\",\n \"focus-within:ring-2\",\n \"focus-within:ring-primary/50\",\n ],\n {\n defaultVariants: {},\n variants: {},\n }\n)\n","import type {\n KanbanBoardProps,\n KanbanCardProps,\n KanbanColumn,\n KanbanColumnProps,\n KanbanItem,\n} from \"./KanbanBoard.types\"\nimport type { DragEndEvent, DragOverEvent, DragStartEvent, UniqueIdentifier } from \"@dnd-kit/core\"\nimport type { KeyboardEvent } from \"react\"\n\nimport { horizontalListSortingStrategy, SortableContext, verticalListSortingStrategy } from \"@dnd-kit/sortable\"\nimport {\n Calendar,\n ChevronDown,\n ChevronRight,\n GripVertical,\n MessageSquare,\n Paperclip,\n Plus,\n Search,\n} from \"lucide-react\"\nimport { useId, useMemo, useState } from \"react\"\n\nimport { cn } from \"../../../lib/utils\"\nimport {\n DndContext,\n DragHandle,\n DragOverlay,\n Droppable,\n SortableItem,\n} from \"../../advanced/DragAndDrop\"\nimport { Avatar, AvatarFallback, AvatarImage } from \"../../primitives/Avatar\"\nimport { Badge } from \"../../primitives/Badge\"\nimport { Button } from \"../../primitives/Button\"\nimport {\n kanbanAddButtonVariants,\n kanbanBoardVariants,\n kanbanCardDescriptionVariants,\n kanbanCardMetaVariants,\n kanbanCardTitleVariants,\n kanbanCardVariants,\n kanbanColumnContentVariants,\n kanbanColumnHeaderVariants,\n kanbanColumnVariants,\n kanbanLabelVariants,\n kanbanSearchVariants,\n} from \"./KanbanBoard.variants\"\n\n// ============================================\n// HELPER FUNCTIONS\n// ============================================\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 * Format date for display\n */\nfunction formatDueDate(date: Date): string {\n const now = new Date()\n const diff = date.getTime() - now.getTime()\n const days = Math.ceil(diff / (1000 * 60 * 60 * 24))\n\n if (days < 0) return \"Overdue\"\n if (days === 0) return \"Today\"\n if (days === 1) return \"Tomorrow\"\n if (days <= 7) return `${String(days)} days`\n return date.toLocaleDateString()\n}\n\n/**\n * Get WIP status for column\n */\nfunction getWipStatus(\n itemCount: number,\n wipLimit?: number\n): \"exceeded\" | \"normal\" | \"warning\" {\n if (!wipLimit) return \"normal\"\n if (itemCount >= wipLimit) return \"exceeded\"\n if (itemCount >= wipLimit - 1) return \"warning\"\n return \"normal\"\n}\n\n// ============================================\n// KANBAN CARD\n// ============================================\n\n/**\n * KanbanCard displays an individual task item\n */\n// eslint-disable-next-line sonarjs/cognitive-complexity -- Complexity inherent to rendering multiple optional card elements\nfunction KanbanCard({\n className,\n isDragging = false,\n item,\n onClick,\n onDelete: _onDelete,\n}: KanbanCardProps) {\n const cardId = useId()\n const hasMeta = Boolean(\n item.assignees?.length ??\n item.labels?.length ??\n item.dueDate ??\n item.comments ??\n item.attachments ??\n item.subtasks\n )\n\n const handleClick = () => {\n onClick?.({ item })\n }\n\n const handleKeyDown = (event: KeyboardEvent<HTMLDivElement>) => {\n if (event.key === \"Enter\" || event.key === \" \") {\n event.preventDefault()\n handleClick()\n }\n }\n\n return (\n <div\n aria-describedby={item.description ? `${cardId}-desc` : undefined}\n aria-label={item.title}\n className={cn(kanbanCardVariants({ isDragging, priority: item.priority ?? null }), className)}\n data-slot=\"kanban-card\"\n role=\"listitem\"\n tabIndex={0}\n onClick={handleClick}\n onKeyDown={handleKeyDown}\n >\n {/* Labels */}\n {item.labels && item.labels.length > 0 ? (\n <div className=\"flex flex-wrap gap-1\" data-slot=\"kanban-card-labels\">\n {item.labels.slice(0, 3).map((label) => (\n <span\n key={label.id}\n className={kanbanLabelVariants()}\n style={{ backgroundColor: `${label.color}20`, color: label.color }}\n >\n {label.name}\n </span>\n ))}\n {item.labels.length > 3 ? (\n <span className=\"text-xs text-muted-foreground\">\n +{item.labels.length - 3}\n </span>\n ) : null}\n </div>\n ) : null}\n\n {/* Title */}\n <div className={kanbanCardTitleVariants()} data-slot=\"kanban-card-title\">\n {item.title}\n </div>\n\n {/* Description */}\n {item.description ? (\n <div\n className={kanbanCardDescriptionVariants()}\n data-slot=\"kanban-card-description\"\n id={`${cardId}-desc`}\n >\n {item.description}\n </div>\n ) : null}\n\n {/* Metadata row */}\n {hasMeta ? (\n <div className={kanbanCardMetaVariants()} data-slot=\"kanban-card-meta\">\n {/* Due date */}\n {item.dueDate ? (\n <span\n className={cn(\n \"flex items-center gap-1\",\n new Date(item.dueDate) < new Date() && \"text-destructive\"\n )}\n title={`Due: ${item.dueDate.toLocaleDateString()}`}\n >\n <Calendar className=\"h-3 w-3\" />\n {formatDueDate(new Date(item.dueDate))}\n </span>\n ) : null}\n\n {/* Subtasks */}\n {item.subtasks ? (\n <span className=\"flex items-center gap-1\" title=\"Subtasks progress\">\n {item.subtasks.completed}/{item.subtasks.total}\n </span>\n ) : null}\n\n {/* Comments */}\n {item.comments ? (\n <span className=\"flex items-center gap-1\" title={`${String(item.comments)} comments`}>\n <MessageSquare className=\"h-3 w-3\" />\n {item.comments}\n </span>\n ) : null}\n\n {/* Attachments */}\n {item.attachments ? (\n <span className=\"flex items-center gap-1\" title={`${String(item.attachments)} attachments`}>\n <Paperclip className=\"h-3 w-3\" />\n {item.attachments}\n </span>\n ) : null}\n\n {/* Spacer */}\n <div className=\"flex-1\" />\n\n {/* Assignees */}\n {item.assignees && item.assignees.length > 0 ? (\n <div className=\"flex -space-x-1\" data-slot=\"kanban-card-assignees\">\n {item.assignees.slice(0, 3).map((user) => (\n <Avatar\n key={user.id}\n className=\"h-5 w-5 border-2 border-background\"\n title={user.name}\n >\n {user.avatar ? (\n <AvatarImage alt={user.name} src={user.avatar} />\n ) : null}\n <AvatarFallback className=\"text-xs\">\n {getInitials(user.name)}\n </AvatarFallback>\n </Avatar>\n ))}\n {item.assignees.length > 3 ? (\n <span className=\"flex h-5 w-5 items-center justify-center rounded-full bg-muted text-xs border-2 border-background\">\n +{item.assignees.length - 3}\n </span>\n ) : null}\n </div>\n ) : null}\n </div>\n ) : null}\n </div>\n )\n}\n\n// ============================================\n// KANBAN COLUMN\n// ============================================\n\n/**\n * KanbanColumn displays a single column with its items\n */\nfunction KanbanColumn({\n allowAddItem = true,\n className,\n column,\n isOver = false,\n items,\n onItemAdd,\n onItemClick,\n onItemDelete,\n onToggleCollapse,\n showColumnCount = true,\n showWipLimits = true,\n}: KanbanColumnProps) {\n const columnId = useId()\n const wipStatus = getWipStatus(items.length, column.wipLimit)\n const isCollapsed = column.isCollapsed ?? false\n\n const handleAddItem = () => {\n onItemAdd?.({ columnId: column.id })\n }\n\n const handleKeyDown = (event: KeyboardEvent<HTMLDivElement>) => {\n if (event.key === \"ArrowDown\" || event.key === \"ArrowUp\") {\n const target = event.currentTarget\n const cards = [...target.querySelectorAll('[data-slot=\"kanban-card\"]')] as HTMLElement[]\n const focused = document.activeElement as HTMLElement\n const currentIndex = cards.indexOf(focused)\n\n if (currentIndex === -1) {\n cards[0]?.focus()\n return\n }\n\n const nextIndex = event.key === \"ArrowDown\"\n ? Math.min(currentIndex + 1, cards.length - 1)\n : Math.max(currentIndex - 1, 0)\n\n const nextElement = cards[nextIndex]\n nextElement?.focus()\n event.preventDefault()\n }\n }\n\n // Collapsed column view\n if (isCollapsed) {\n return (\n <div\n data-collapsed\n className={cn(kanbanColumnVariants({ isCollapsed: true, isOver: false }), className)}\n data-slot=\"kanban-column\"\n >\n <Button\n aria-expanded={false}\n aria-label={`Expand ${column.title}`}\n className=\"h-full w-full flex flex-col items-center justify-start pt-3 gap-2\"\n variant=\"ghost\"\n onClick={onToggleCollapse}\n >\n <ChevronRight className=\"h-4 w-4\" />\n <span\n className=\"text-sm font-semibold writing-mode-vertical\"\n style={{ writingMode: \"vertical-rl\" }}\n >\n {column.title}\n </span>\n {showColumnCount ? (\n <Badge className=\"mt-2\" color=\"muted\" type=\"pill-color\">\n {items.length}\n </Badge>\n ) : null}\n </Button>\n </div>\n )\n }\n\n return (\n <Droppable data={{ type: \"column\", column }} id={column.id}>\n {({ isOver: droppableIsOver }) => (\n <div\n className={cn(\n kanbanColumnVariants({ isCollapsed: false, isOver: isOver || droppableIsOver }),\n className\n )}\n aria-label={`${column.title} column`}\n data-slot=\"kanban-column\"\n role=\"list\"\n onKeyDown={handleKeyDown}\n >\n {/* Column Header */}\n <div\n className={kanbanColumnHeaderVariants({ wipStatus })}\n data-slot=\"kanban-column-header\"\n >\n <div className=\"flex items-center gap-2\">\n {column.color ? (\n <div\n className=\"h-3 w-3 rounded-full\"\n style={{ backgroundColor: column.color }}\n />\n ) : null}\n <span className=\"text-sm font-semibold\">{column.title}</span>\n {showColumnCount ? (\n <Badge color=\"muted\" data-slot=\"column-count\" type=\"pill-color\">\n {items.length}\n </Badge>\n ) : null}\n {showWipLimits && column.wipLimit ? (\n <span\n className=\"text-xs\"\n data-slot=\"wip-indicator\"\n title={`WIP Limit: ${String(column.wipLimit)}`}\n >\n /{column.wipLimit}\n </span>\n ) : null}\n </div>\n {onToggleCollapse ? (\n <Button\n aria-expanded={true}\n aria-label={`Collapse ${column.title}`}\n className=\"h-6 w-6 p-0\"\n size=\"sm\"\n variant=\"ghost\"\n onClick={onToggleCollapse}\n >\n <ChevronDown className=\"h-4 w-4\" />\n </Button>\n ) : null}\n </div>\n\n {/* Cards */}\n <SortableContext\n items={items.map((i) => i.id)}\n strategy={verticalListSortingStrategy}\n >\n <div\n aria-labelledby={columnId}\n className={kanbanColumnContentVariants()}\n data-slot=\"kanban-column-content\"\n >\n {items.map((item) => (\n <SortableItem\n key={item.id}\n data={{ type: \"item\", item, columnId: column.id }}\n id={item.id}\n >\n {({ isDragging }) => (\n <div className=\"relative\">\n <DragHandle\n aria-label={`Drag ${item.title}`}\n className=\"absolute left-1 top-1/2 -translate-y-1/2 opacity-0 group-hover:opacity-100 transition-opacity cursor-grab active:cursor-grabbing h-6 w-6 flex items-center justify-center\"\n >\n <GripVertical className=\"h-4 w-4 text-muted-foreground\" />\n </DragHandle>\n <KanbanCard\n isDragging={isDragging}\n item={item}\n onClick={onItemClick}\n onDelete={onItemDelete}\n />\n </div>\n )}\n </SortableItem>\n ))}\n\n {/* Add card button */}\n {allowAddItem ? (\n <button\n aria-label={`Add item to ${column.title}`}\n className={kanbanAddButtonVariants()}\n type=\"button\"\n onClick={handleAddItem}\n >\n <Plus className=\"h-4 w-4\" />\n Add card\n </button>\n ) : null}\n </div>\n </SortableContext>\n </div>\n )}\n </Droppable>\n )\n}\n\n// ============================================\n// KANBAN BOARD\n// ============================================\n\n/**\n * KanbanBoard component for visual task management.\n *\n * Organizes items into columns representing workflow stages with drag-and-drop\n * support for moving items between columns.\n *\n * @example\n * ```tsx\n * const columns = [\n * { id: 'todo', title: 'To Do' },\n * { id: 'doing', title: 'In Progress', wipLimit: 3 },\n * { id: 'done', title: 'Done' },\n * ]\n *\n * const items = [\n * { id: '1', title: 'Task 1', columnId: 'todo', order: 0 },\n * { id: '2', title: 'Task 2', columnId: 'doing', order: 0 },\n * ]\n *\n * <KanbanBoard\n * columns={columns}\n * items={items}\n * onItemMove={({ itemId, fromColumn, toColumn }) => {\n * console.log(`Moved ${itemId} from ${fromColumn} to ${toColumn}`)\n * }}\n * />\n * ```\n */\nfunction KanbanBoard({\n allowAddColumn = false,\n allowAddItem = true,\n allowColumnReorder = false,\n className,\n columns,\n columnWidth = 288,\n filterBy,\n groupBy,\n items,\n onColumnAdd,\n onColumnDelete: _onColumnDelete,\n onColumnReorder: _onColumnReorder,\n onColumnUpdate: _onColumnUpdate,\n onItemAdd,\n onItemClick,\n onItemDelete,\n onItemMove,\n onItemUpdate: _onItemUpdate,\n searchable = false,\n showColumnCount = true,\n showWipLimits = true,\n variant = \"default\",\n layout = \"horizontal\",\n ...props\n}: KanbanBoardProps) {\n const _boardId = useId()\n const [searchQuery, setSearchQuery] = useState(\"\")\n const [activeId, setActiveId] = useState<null | UniqueIdentifier>(null)\n const [collapsedColumns, setCollapsedColumns] = useState<Set<string>>(() => new Set())\n\n // Filter items based on search and filters\n const filteredItems = useMemo(() => {\n let result = [...items]\n\n // Apply search filter\n if (searchQuery) {\n const query = searchQuery.toLowerCase()\n result = result.filter(\n (item) =>\n item.title.toLowerCase().includes(query) ||\n item.description?.toLowerCase().includes(query)\n )\n }\n\n // Apply filter config\n if (filterBy) {\n if (filterBy.priority?.length) {\n result = result.filter((item) =>\n item.priority && filterBy.priority?.includes(item.priority)\n )\n }\n if (filterBy.assignees?.length) {\n result = result.filter((item) =>\n item.assignees?.some((a) => filterBy.assignees?.includes(a.id))\n )\n }\n if (filterBy.labels?.length) {\n result = result.filter((item) =>\n item.labels?.some((l) => filterBy.labels?.includes(l.id))\n )\n }\n if (filterBy.dueDate) {\n result = result.filter((item) => {\n if (!item.dueDate) return false\n const date = new Date(item.dueDate)\n if (filterBy.dueDate?.from && date < filterBy.dueDate.from) return false\n if (filterBy.dueDate?.to && date > filterBy.dueDate.to) return false\n return true\n })\n }\n }\n\n return result\n }, [items, searchQuery, filterBy])\n\n // Get items for a specific column\n const getColumnItems = (columnId: string) => {\n return filteredItems\n .filter((item) => item.columnId === columnId)\n .sort((a, b) => a.order - b.order)\n }\n\n // Get the active item being dragged\n const activeItem = useMemo(() => {\n if (!activeId) return null\n return items.find((item) => item.id === activeId) ?? null\n }, [activeId, items])\n\n // Toggle column collapse\n const handleToggleCollapse = (columnId: string) => {\n setCollapsedColumns((prev) => {\n const next = new Set(prev)\n if (next.has(columnId)) {\n next.delete(columnId)\n } else {\n next.add(columnId)\n }\n return next\n })\n }\n\n // Drag handlers\n const handleDragStart = (event: DragStartEvent) => {\n setActiveId(event.active.id)\n }\n\n const handleDragOver = (_event: DragOverEvent) => {\n // Could implement preview of drop here\n }\n\n const handleDragEnd = (event: DragEndEvent) => {\n const { active, over } = event\n setActiveId(null)\n\n if (!over) return\n\n const activeData = active.data.current as undefined | { columnId?: string; item?: KanbanItem; type?: string }\n const overData = over.data.current as undefined | { column?: KanbanColumn; columnId?: string; item?: KanbanItem; type?: string }\n\n if (activeData?.type !== \"item\") return\n\n const activeItem = activeData.item\n if (!activeItem) return\n\n let toColumn: string\n let index = 0\n\n if (overData?.type === \"column\") {\n // Dropped on column\n toColumn = overData.column?.id ?? \"\"\n index = getColumnItems(toColumn).length\n } else if (overData?.type === \"item\") {\n // Dropped on item\n toColumn = overData.item?.columnId ?? \"\"\n const targetItems = getColumnItems(toColumn)\n const overItem = overData.item\n index = overItem ? targetItems.findIndex((i) => i.id === overItem.id) : 0\n } else {\n return\n }\n\n if (activeItem.columnId !== toColumn || active.id !== over.id) {\n onItemMove?.({\n fromColumn: activeItem.columnId,\n index,\n itemId: activeItem.id,\n toColumn,\n })\n }\n }\n\n const handleDragCancel = () => {\n setActiveId(null)\n }\n\n // Prepare columns with collapse state\n const columnsWithState = columns.map((col) => ({\n ...col,\n isCollapsed: collapsedColumns.has(col.id) || col.isCollapsed,\n }))\n\n // Group items by swimlane if groupBy is specified\n const swimlanes = useMemo(() => {\n if (!groupBy || variant !== \"swimlanes\") return null\n\n const groups = new Map<string, KanbanItem[]>()\n for (const item of filteredItems) {\n const key = (item.customFields?.[groupBy] as string | undefined) ?? \"Ungrouped\"\n const group = groups.get(key) ?? []\n group.push(item)\n groups.set(key, group)\n }\n return groups\n }, [filteredItems, groupBy, variant])\n\n // Column width style\n const widthValue = typeof columnWidth === \"number\" ? `${String(columnWidth)}px` : columnWidth\n const columnStyle = {\n minWidth: widthValue,\n width: widthValue,\n }\n\n return (\n <div\n aria-label=\"Kanban board\"\n className=\"flex flex-col gap-4\"\n data-slot=\"kanban-board-wrapper\"\n role=\"region\"\n {...props}\n >\n {/* Search bar */}\n {searchable ? (\n <div className={kanbanSearchVariants()} data-slot=\"kanban-search\">\n <Search className=\"h-4 w-4 text-muted-foreground\" />\n <input\n aria-label=\"Search items\"\n className=\"flex-1 bg-transparent text-sm outline-none placeholder:text-muted-foreground\"\n placeholder=\"Search items...\"\n type=\"text\"\n value={searchQuery}\n onChange={(e) => { setSearchQuery(e.target.value); }}\n />\n </div>\n ) : null}\n\n {/* Board */}\n <DndContext\n className={cn(kanbanBoardVariants({ layout, variant }), className)}\n onDragCancel={handleDragCancel}\n onDragEnd={handleDragEnd}\n onDragOver={handleDragOver}\n onDragStart={handleDragStart}\n >\n {variant === \"swimlanes\" && swimlanes ? (\n // Swimlanes layout\n <div className=\"flex flex-col gap-6\" data-slot=\"kanban-swimlanes\">\n {[...swimlanes.entries()].map(([lane, _laneItems]) => (\n <div key={lane} className=\"flex flex-col gap-2\">\n <div className=\"text-sm font-semibold text-muted-foreground\">\n {lane}\n </div>\n <div className=\"flex gap-4 overflow-x-auto\">\n <SortableContext\n disabled={!allowColumnReorder}\n items={columnsWithState.map((c) => c.id)}\n strategy={horizontalListSortingStrategy}\n >\n {columnsWithState.map((column) => (\n <div key={column.id} style={columnStyle}>\n <KanbanColumn\n items={getColumnItems(column.id).filter(\n (item) => ((item.customFields?.[groupBy ?? \"\"] as string | undefined) ?? \"Ungrouped\") === lane\n )}\n allowAddItem={allowAddItem}\n column={column}\n showColumnCount={showColumnCount}\n showWipLimits={showWipLimits}\n onItemAdd={onItemAdd}\n onItemClick={onItemClick}\n onItemDelete={onItemDelete}\n onToggleCollapse={() => { handleToggleCollapse(column.id); }}\n />\n </div>\n ))}\n </SortableContext>\n </div>\n </div>\n ))}\n </div>\n ) : (\n // Standard layout\n <SortableContext\n disabled={!allowColumnReorder}\n items={columnsWithState.map((c) => c.id)}\n strategy={horizontalListSortingStrategy}\n >\n {columnsWithState.map((column) => (\n <div key={column.id} style={column.isCollapsed ? undefined : columnStyle}>\n <KanbanColumn\n allowAddItem={allowAddItem}\n column={column}\n items={getColumnItems(column.id)}\n showColumnCount={showColumnCount}\n showWipLimits={showWipLimits}\n onItemAdd={onItemAdd}\n onItemClick={onItemClick}\n onItemDelete={onItemDelete}\n onToggleCollapse={() => { handleToggleCollapse(column.id); }}\n />\n </div>\n ))}\n\n {/* Add column button */}\n {allowAddColumn ? (\n <button\n className={cn(\n kanbanAddButtonVariants(),\n \"min-w-52 h-52 flex-col\"\n )}\n aria-label=\"Add column\"\n type=\"button\"\n onClick={onColumnAdd}\n >\n <Plus className=\"h-6 w-6\" />\n Add column\n </button>\n ) : null}\n </SortableContext>\n )}\n\n {/* Drag overlay */}\n <DragOverlay>\n {activeItem ? (\n <div\n className=\"opacity-90 rotate-3\"\n style={columnStyle}\n >\n <KanbanCard isDragging item={activeItem} />\n </div>\n ) : null}\n </DragOverlay>\n </DndContext>\n </div>\n )\n}\n\n// ============================================\n// EXPORTS\n// ============================================\n\nexport {\n KanbanBoard,\n kanbanBoardVariants,\n KanbanCard,\n kanbanCardVariants,\n kanbanColumnVariants,\n}\n\nexport type {\n ItemAddPayload,\n ItemClickPayload,\n ItemDeletePayload,\n ItemMovePayload,\n KanbanBoardProps,\n KanbanCardProps,\n KanbanColumn,\n KanbanColumnProps,\n KanbanFilterConfig,\n KanbanItem,\n KanbanLabel,\n KanbanSubtasks,\n KanbanUser,\n} from \"./KanbanBoard.types\"\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-RPV77BCQ.js';
3
+ import { Button } from './chunk-ONQCNOLU.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-4HRQX2IA.js.map
928
- //# sourceMappingURL=chunk-4HRQX2IA.js.map
927
+ //# sourceMappingURL=chunk-AWYOWR5N.js.map
928
+ //# sourceMappingURL=chunk-AWYOWR5N.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-4HRQX2IA.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-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"]}