@flikk/ui 1.0.0-beta.1 → 1.0.0-beta.10

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 (512) hide show
  1. package/dist/components/ai/ApprovalCard/ApprovalCard.js +2 -2
  2. package/dist/components/ai/ApprovalCard/ApprovalCard.types.d.ts +2 -2
  3. package/dist/components/ai/CodeBlock/CodeBlock.theme.js +2 -2
  4. package/dist/components/ai/PromptInput/PromptInput.animations.d.ts +25 -0
  5. package/dist/components/ai/PromptInput/PromptInput.animations.js +61 -0
  6. package/dist/components/ai/PromptInput/PromptInput.js +143 -28
  7. package/dist/components/ai/PromptInput/PromptInput.theme.js +6 -1
  8. package/dist/components/ai/PromptInput/PromptInput.types.d.ts +68 -0
  9. package/dist/components/ai/PromptInput/VoiceRecorder.d.ts +10 -0
  10. package/dist/components/ai/PromptInput/VoiceRecorder.js +181 -0
  11. package/dist/components/ai/PromptInput/VoiceRecorder.types.d.ts +17 -0
  12. package/dist/components/ai/PromptInput/index.d.ts +1 -0
  13. package/dist/components/ai/PromptSuggestions/PromptSuggestion.theme.js +1 -1
  14. package/dist/components/ai/StreamingResponse/MarkdownRenderer.d.ts +5 -2
  15. package/dist/components/ai/StreamingResponse/MarkdownRenderer.js +51 -27
  16. package/dist/components/ai/StreamingResponse/StreamingCursor.d.ts +4 -5
  17. package/dist/components/ai/StreamingResponse/StreamingCursor.js +5 -12
  18. package/dist/components/ai/StreamingResponse/StreamingResponse.animations.d.ts +7 -0
  19. package/dist/components/ai/StreamingResponse/StreamingResponse.animations.js +20 -1
  20. package/dist/components/ai/StreamingResponse/StreamingResponse.js +2 -2
  21. package/dist/components/ai/StreamingResponse/StreamingResponse.theme.js +4 -4
  22. package/dist/components/ai/StreamingResponse/StreamingResponse.types.d.ts +2 -0
  23. package/dist/components/ai/StreamingResponse/WordAnimationContext.d.ts +27 -0
  24. package/dist/components/ai/StreamingResponse/WordAnimationContext.js +134 -0
  25. package/dist/components/ai/StreamingResponse/index.d.ts +3 -1
  26. package/dist/components/ai/ThinkingIndicator/ThinkingIndicator.theme.js +2 -2
  27. package/dist/components/ai/TokenCounter/TokenCounter.theme.js +6 -6
  28. package/dist/components/ai/index.js +1 -0
  29. package/dist/components/charts/ActivityRings/ActivityRings.js +1 -1
  30. package/dist/components/charts/ActivityRings/ActivityRings.theme.js +2 -2
  31. package/dist/components/charts/BarChart/BarChart.js +3 -3
  32. package/dist/components/charts/ChartContainer.js +1 -1
  33. package/dist/components/charts/ComboChart/ComboChart.js +2 -2
  34. package/dist/components/charts/DonutChart/DonutChart.theme.js +1 -1
  35. package/dist/components/charts/DonutChart/DonutChart.types.d.ts +1 -2
  36. package/dist/components/charts/DonutChart/MultiSegmentDonutChart.js +1 -1
  37. package/dist/components/charts/DonutChart/MultiSegmentDonutChart.theme.js +1 -1
  38. package/dist/components/charts/DonutChart/MultiSegmentDonutChart.types.d.ts +1 -2
  39. package/dist/components/charts/FunnelChart/FunnelChart.js +7 -7
  40. package/dist/components/charts/Heatmap/Heatmap.theme.js +1 -1
  41. package/dist/components/charts/Heatmap/HeatmapCell.js +1 -1
  42. package/dist/components/charts/Heatmap/HeatmapLegend.js +1 -1
  43. package/dist/components/charts/RadarChart/RadarChart.theme.js +2 -2
  44. package/dist/components/charts/ScatterPlot/ScatterPlot.js +1 -1
  45. package/dist/components/charts/ScatterPlot/ScatterPlot.theme.js +2 -2
  46. package/dist/components/charts/StackedBarChart/StackedBarChart.js +2 -2
  47. package/dist/components/charts/shared/ChartErrorBoundary/ChartErrorBoundary.js +1 -1
  48. package/dist/components/charts/shared/ChartLegend/ChartLegendContent.js +1 -1
  49. package/dist/components/charts/shared/ChartText/ChartText.js +1 -1
  50. package/dist/components/charts/shared/ChartText/ChartText.theme.js +1 -1
  51. package/dist/components/charts/shared/ChartTooltip/ChartTooltip.theme.js +4 -4
  52. package/dist/components/core/Accordion/Accordion.theme.js +2 -2
  53. package/dist/components/core/Alert/Alert.js +3 -2
  54. package/dist/components/core/Alert/Alert.theme.js +4 -8
  55. package/dist/components/core/Alert/Alert.types.d.ts +4 -3
  56. package/dist/components/core/AlertDialog/AlertDialog.d.ts +1 -1
  57. package/dist/components/core/AlertDialog/AlertDialog.js +2 -2
  58. package/dist/components/core/AlertDialog/AlertDialog.types.d.ts +2 -2
  59. package/dist/components/core/Avatar/Avatar.theme.js +5 -5
  60. package/dist/components/core/AvatarGroup/AvatarGroup.theme.js +1 -1
  61. package/dist/components/core/Badge/Badge.d.ts +1 -1
  62. package/dist/components/core/Badge/Badge.js +11 -9
  63. package/dist/components/core/Badge/Badge.theme.js +24 -20
  64. package/dist/components/core/Badge/Badge.types.d.ts +10 -5
  65. package/dist/components/core/Breadcrumbs/Breadcrumbs.js +1 -1
  66. package/dist/components/core/Button/Button.d.ts +1 -1
  67. package/dist/components/core/Button/Button.theme.js +46 -41
  68. package/dist/components/core/Button/Button.types.d.ts +3 -3
  69. package/dist/components/core/ButtonGroup/ButtonGroup.theme.js +1 -1
  70. package/dist/components/core/Calendar/Calendar.js +1 -1
  71. package/dist/components/core/Calendar/Calendar.theme.js +9 -9
  72. package/dist/components/core/Calendar/CalendarMini/CalendarMini.js +1 -1
  73. package/dist/components/core/Card/Card.d.ts +2 -2
  74. package/dist/components/core/Card/Card.js +6 -7
  75. package/dist/components/core/Card/Card.theme.js +6 -6
  76. package/dist/components/core/Card/Card.types.d.ts +5 -20
  77. package/dist/components/core/Card/CardSubtitle.d.ts +3 -0
  78. package/dist/components/core/Card/CardSubtitle.js +11 -0
  79. package/dist/components/core/Card/index.d.ts +2 -2
  80. package/dist/components/core/CommandPalette/CommandItem.d.ts +1 -1
  81. package/dist/components/core/CommandPalette/CommandItem.js +2 -2
  82. package/dist/components/core/CommandPalette/CommandPalette.js +2 -2
  83. package/dist/components/core/CommandPalette/CommandPalette.theme.js +6 -6
  84. package/dist/components/core/CommandPalette/CommandPalette.types.d.ts +2 -2
  85. package/dist/components/core/ContextMenu/ContextMenu.theme.js +3 -3
  86. package/dist/components/core/ContextMenu/ContextMenu.types.d.ts +1 -1
  87. package/dist/components/core/ContextMenu/ContextMenuItem.js +3 -3
  88. package/dist/components/core/Drawer/Drawer.d.ts +13 -1
  89. package/dist/components/core/Drawer/Drawer.js +23 -10
  90. package/dist/components/core/Drawer/Drawer.theme.js +2 -2
  91. package/dist/components/core/Drawer/Drawer.types.d.ts +21 -4
  92. package/dist/components/core/Drawer/DrawerHeader.d.ts +5 -0
  93. package/dist/components/core/Drawer/DrawerHeader.js +14 -0
  94. package/dist/components/core/Drawer/DrawerSubtitle.d.ts +5 -0
  95. package/dist/components/core/Drawer/DrawerSubtitle.js +11 -0
  96. package/dist/components/core/Drawer/DrawerTitle.d.ts +5 -0
  97. package/dist/components/core/Drawer/DrawerTitle.js +11 -0
  98. package/dist/components/core/Drawer/index.d.ts +1 -1
  99. package/dist/components/core/Dropdown/Dropdown.theme.js +1 -1
  100. package/dist/components/core/Dropdown/Dropdown.types.d.ts +4 -4
  101. package/dist/components/core/Dropdown/DropdownItem.js +2 -2
  102. package/dist/components/core/Dropdown/DropdownMenu.js +1 -0
  103. package/dist/components/core/Empty/Empty.js +2 -2
  104. package/dist/components/core/Empty/Empty.theme.d.ts +1 -1
  105. package/dist/components/core/Empty/Empty.theme.js +3 -3
  106. package/dist/components/core/Empty/Empty.types.d.ts +2 -2
  107. package/dist/components/core/Kbd/Kbd.theme.js +3 -3
  108. package/dist/components/core/Link/Link.d.ts +1 -1
  109. package/dist/components/core/Link/Link.types.d.ts +2 -2
  110. package/dist/components/core/Loader/Loader.theme.js +1 -1
  111. package/dist/components/core/MenuItem/MenuItem.js +2 -2
  112. package/dist/components/core/MenuItem/MenuItem.theme.d.ts +1 -2
  113. package/dist/components/core/MenuItem/MenuItem.theme.js +9 -11
  114. package/dist/components/core/MenuItem/MenuItem.types.d.ts +1 -1
  115. package/dist/components/core/Message/Message.d.ts +3 -2
  116. package/dist/components/core/Message/Message.js +30 -24
  117. package/dist/components/core/Message/Message.theme.d.ts +1 -1
  118. package/dist/components/core/Message/Message.theme.js +22 -24
  119. package/dist/components/core/Message/Message.types.d.ts +0 -7
  120. package/dist/components/core/Message/MessageList.animations.d.ts +6 -0
  121. package/dist/components/core/Message/MessageList.animations.js +32 -0
  122. package/dist/components/core/Message/MessageList.d.ts +5 -0
  123. package/dist/components/core/Message/MessageList.js +78 -0
  124. package/dist/components/core/Message/MessageList.theme.d.ts +2 -0
  125. package/dist/components/core/Message/MessageList.theme.js +6 -0
  126. package/dist/components/core/Message/MessageList.types.d.ts +32 -0
  127. package/dist/components/core/Message/index.d.ts +2 -0
  128. package/dist/components/core/Modal/Modal.d.ts +2 -2
  129. package/dist/components/core/Modal/Modal.js +5 -5
  130. package/dist/components/core/Modal/Modal.theme.js +6 -6
  131. package/dist/components/core/Modal/Modal.types.d.ts +4 -4
  132. package/dist/components/core/Modal/ModalSubtitle.d.ts +5 -0
  133. package/dist/components/core/Modal/ModalSubtitle.js +11 -0
  134. package/dist/components/core/ModalStack/ModalStack.animations.js +3 -3
  135. package/dist/components/core/ModalStack/ModalStackModal.js +3 -3
  136. package/dist/components/core/NavItem/NavItem.js +1 -1
  137. package/dist/components/core/NavItem/NavItem.theme.js +1 -1
  138. package/dist/components/core/OfflineIndicator/OfflineIndicator.theme.js +3 -3
  139. package/dist/components/core/PageHeading/PageHeading.d.ts +8 -0
  140. package/dist/components/core/PageHeading/PageHeading.js +28 -0
  141. package/dist/components/core/PageHeading/PageHeading.theme.d.ts +2 -0
  142. package/dist/components/core/PageHeading/PageHeading.theme.js +11 -0
  143. package/dist/components/core/PageHeading/PageHeading.types.d.ts +55 -0
  144. package/dist/components/core/PageHeading/PageHeadingActions.d.ts +3 -0
  145. package/dist/components/core/PageHeading/PageHeadingActions.js +11 -0
  146. package/dist/components/core/PageHeading/PageHeadingBackButton.d.ts +3 -0
  147. package/dist/components/core/PageHeading/PageHeadingBackButton.js +12 -0
  148. package/dist/components/core/PageHeading/PageHeadingIcon.d.ts +3 -0
  149. package/dist/components/core/PageHeading/PageHeadingIcon.js +11 -0
  150. package/dist/components/core/PageHeading/PageHeadingSubtitle.d.ts +3 -0
  151. package/dist/components/core/PageHeading/PageHeadingSubtitle.js +11 -0
  152. package/dist/components/core/PageHeading/PageHeadingTitle.d.ts +3 -0
  153. package/dist/components/core/PageHeading/PageHeadingTitle.js +11 -0
  154. package/dist/components/core/PageHeading/index.d.ts +2 -0
  155. package/dist/components/core/Pagination/Pagination.theme.js +2 -2
  156. package/dist/components/core/Pill/Pill.theme.js +3 -3
  157. package/dist/components/core/Popover/Popover.theme.js +1 -1
  158. package/dist/components/core/Popover/Popover.types.d.ts +6 -0
  159. package/dist/components/core/Popover/PopoverContent.js +8 -2
  160. package/dist/components/core/Progress/Progress.theme.js +10 -7
  161. package/dist/components/core/Progress/Progress.types.d.ts +2 -1
  162. package/dist/components/core/Segmented/Segmented.theme.js +5 -5
  163. package/dist/components/core/Sidebar/Sidebar.js +1 -0
  164. package/dist/components/core/Sidebar/SidebarNavGroup.js +1 -1
  165. package/dist/components/core/SocialIcon/SocialIcon.d.ts +3 -0
  166. package/dist/components/core/SocialIcon/SocialIcon.js +30 -0
  167. package/dist/components/core/SocialIcon/SocialIcon.theme.d.ts +2 -0
  168. package/dist/components/core/SocialIcon/SocialIcon.theme.js +12 -0
  169. package/dist/components/core/SocialIcon/SocialIcon.types.d.ts +18 -0
  170. package/dist/components/core/SocialIcon/index.d.ts +2 -0
  171. package/dist/components/core/SocialIcon/platforms.d.ts +17 -0
  172. package/dist/components/core/SocialIcon/platforms.js +234 -0
  173. package/dist/components/core/Spinner/Spinner.theme.js +3 -5
  174. package/dist/components/core/Spinner/Spinner.types.d.ts +2 -1
  175. package/dist/components/core/Tabs/Tabs.theme.js +2 -2
  176. package/dist/components/core/Tag/Tag.d.ts +2 -2
  177. package/dist/components/core/Tag/Tag.js +21 -4
  178. package/dist/components/core/Tag/Tag.theme.js +12 -4
  179. package/dist/components/core/Tag/Tag.types.d.ts +24 -1
  180. package/dist/components/core/Toast/Toast.js +4 -4
  181. package/dist/components/core/Toast/Toast.theme.js +4 -4
  182. package/dist/components/core/Toast/Toast.types.d.ts +9 -9
  183. package/dist/components/core/Toast/useToast.js +6 -6
  184. package/dist/components/core/Tooltip/Tooltip.theme.js +1 -1
  185. package/dist/components/core/Tree/Tree.theme.js +1 -1
  186. package/dist/components/core/index.d.ts +2 -7
  187. package/dist/components/core/index.js +9 -19
  188. package/dist/components/data-display/DescriptionList/DescriptionList.theme.js +8 -0
  189. package/dist/components/{core → data-display}/Feed/Feed.js +3 -3
  190. package/dist/components/{core → data-display}/Feed/Feed.theme.js +2 -2
  191. package/dist/components/data-display/GanttChart/GanttChart.animations.d.ts +4 -0
  192. package/dist/components/data-display/GanttChart/GanttChart.animations.js +21 -0
  193. package/dist/components/data-display/GanttChart/GanttChart.d.ts +8 -0
  194. package/dist/components/data-display/GanttChart/GanttChart.js +170 -0
  195. package/dist/components/data-display/GanttChart/GanttChart.theme.d.ts +2 -0
  196. package/dist/components/data-display/GanttChart/GanttChart.theme.js +23 -0
  197. package/dist/components/data-display/GanttChart/GanttChart.types.d.ts +162 -0
  198. package/dist/components/data-display/GanttChart/GanttChart.types.js +9 -0
  199. package/dist/components/data-display/GanttChart/GanttChart.utils.d.ts +80 -0
  200. package/dist/components/data-display/GanttChart/GanttChart.utils.js +274 -0
  201. package/dist/components/data-display/GanttChart/GanttChartPanel.d.ts +9 -0
  202. package/dist/components/data-display/GanttChart/GanttChartPanel.js +82 -0
  203. package/dist/components/data-display/GanttChart/GanttDependencyArrows.d.ts +2 -0
  204. package/dist/components/data-display/GanttChart/GanttDependencyArrows.js +35 -0
  205. package/dist/components/data-display/GanttChart/GanttGroupBar.d.ts +8 -0
  206. package/dist/components/data-display/GanttChart/GanttGroupBar.js +26 -0
  207. package/dist/components/data-display/GanttChart/GanttMilestone.d.ts +9 -0
  208. package/dist/components/data-display/GanttChart/GanttMilestone.js +44 -0
  209. package/dist/components/data-display/GanttChart/GanttProgressCircle.d.ts +9 -0
  210. package/dist/components/data-display/GanttChart/GanttProgressCircle.js +11 -0
  211. package/dist/components/data-display/GanttChart/GanttSplitter.d.ts +2 -0
  212. package/dist/components/data-display/GanttChart/GanttSplitter.js +39 -0
  213. package/dist/components/data-display/GanttChart/GanttTableGroupRow.d.ts +7 -0
  214. package/dist/components/data-display/GanttChart/GanttTableGroupRow.js +23 -0
  215. package/dist/components/data-display/GanttChart/GanttTableHeader.d.ts +2 -0
  216. package/dist/components/data-display/GanttChart/GanttTableHeader.js +13 -0
  217. package/dist/components/data-display/GanttChart/GanttTablePanel.d.ts +6 -0
  218. package/dist/components/data-display/GanttChart/GanttTablePanel.js +20 -0
  219. package/dist/components/data-display/GanttChart/GanttTableTaskRow.d.ts +8 -0
  220. package/dist/components/data-display/GanttChart/GanttTableTaskRow.js +30 -0
  221. package/dist/components/data-display/GanttChart/GanttTaskBar.d.ts +9 -0
  222. package/dist/components/data-display/GanttChart/GanttTaskBar.js +206 -0
  223. package/dist/components/data-display/GanttChart/GanttTaskContextMenu.d.ts +8 -0
  224. package/dist/components/data-display/GanttChart/GanttTaskContextMenu.js +17 -0
  225. package/dist/components/data-display/GanttChart/GanttTimelineGrid.d.ts +7 -0
  226. package/dist/components/data-display/GanttChart/GanttTimelineGrid.js +33 -0
  227. package/dist/components/data-display/GanttChart/GanttTimelineHeader.d.ts +8 -0
  228. package/dist/components/data-display/GanttChart/GanttTimelineHeader.js +43 -0
  229. package/dist/components/data-display/GanttChart/GanttToolbar.d.ts +2 -0
  230. package/dist/components/data-display/GanttChart/GanttToolbar.js +28 -0
  231. package/dist/components/data-display/GanttChart/hooks/useGanttDates.d.ts +12 -0
  232. package/dist/components/data-display/GanttChart/hooks/useGanttDates.js +25 -0
  233. package/dist/components/data-display/GanttChart/hooks/useGanttDrag.d.ts +25 -0
  234. package/dist/components/data-display/GanttChart/hooks/useGanttDrag.js +144 -0
  235. package/dist/components/data-display/GanttChart/hooks/useGanttLayout.d.ts +2 -0
  236. package/dist/components/data-display/GanttChart/hooks/useGanttLayout.js +33 -0
  237. package/dist/components/data-display/GanttChart/hooks/useGanttScrollSync.d.ts +6 -0
  238. package/dist/components/data-display/GanttChart/hooks/useGanttScrollSync.js +32 -0
  239. package/dist/components/data-display/GanttChart/index.d.ts +3 -0
  240. package/dist/components/{core → data-display}/KPI/KPI.js +10 -8
  241. package/dist/components/{core → data-display}/KPI/KPI.theme.js +12 -12
  242. package/dist/components/{core → data-display}/KPI/KPI.types.d.ts +6 -5
  243. package/dist/components/{core → data-display}/KPI/index.d.ts +1 -0
  244. package/dist/components/{core → data-display}/Metric/Metric.js +4 -7
  245. package/dist/components/{core → data-display}/Metric/Metric.theme.js +17 -13
  246. package/dist/components/{core → data-display}/Metric/Metric.types.d.ts +8 -7
  247. package/dist/components/{core → data-display}/Table/Table.theme.js +4 -4
  248. package/dist/components/{core → data-display}/Table/TableActions.js +8 -8
  249. package/dist/components/{core → data-display}/Table/TableActionsMenu.js +1 -1
  250. package/dist/components/{core → data-display}/Table/TableColumnManager.js +5 -5
  251. package/dist/components/{core → data-display}/Table/TableFilter.js +6 -6
  252. package/dist/components/{core → data-display}/Table/TableHeader.js +1 -1
  253. package/dist/components/data-display/Table/TablePagination.js +25 -0
  254. package/dist/components/{core → data-display}/Table/TableRow.js +1 -1
  255. package/dist/components/{core → data-display}/Table/TableSelectionHeader.js +2 -2
  256. package/dist/components/{core → data-display}/Timeline/Timeline.theme.js +2 -2
  257. package/dist/components/data-display/index.d.ts +7 -0
  258. package/dist/components/data-display/index.js +20 -0
  259. package/dist/components/effects/3d/index.d.ts +6 -0
  260. package/dist/components/effects/3d/index.js +3 -0
  261. package/dist/components/effects/Aurora/Aurora.d.ts +24 -0
  262. package/dist/components/effects/Aurora/Aurora.js +119 -0
  263. package/dist/components/effects/Aurora/Aurora.types.d.ts +15 -0
  264. package/dist/components/effects/Aurora/index.d.ts +2 -0
  265. package/dist/components/effects/CustomCursor/CustomCursor.d.ts +2 -2
  266. package/dist/components/effects/CustomCursor/CustomCursor.js +1 -1
  267. package/dist/components/effects/CustomCursor/CustomCursor.theme.js +3 -1
  268. package/dist/components/effects/CustomCursor/CustomCursor.types.d.ts +5 -4
  269. package/dist/components/effects/DotPattern/DotPattern.d.ts +18 -0
  270. package/dist/components/effects/DotPattern/DotPattern.js +65 -0
  271. package/dist/components/effects/DotPattern/DotPattern.types.d.ts +47 -0
  272. package/dist/components/effects/DotPattern/index.d.ts +2 -0
  273. package/dist/components/effects/GridPattern/GridPattern.d.ts +18 -0
  274. package/dist/components/effects/GridPattern/GridPattern.js +64 -0
  275. package/dist/components/effects/GridPattern/GridPattern.types.d.ts +47 -0
  276. package/dist/components/effects/GridPattern/index.d.ts +2 -0
  277. package/dist/components/effects/MagneticElement/MagneticElement.d.ts +30 -0
  278. package/dist/components/effects/MagneticElement/MagneticElement.js +110 -0
  279. package/dist/components/effects/MagneticElement/MagneticElement.types.d.ts +44 -0
  280. package/dist/components/effects/MagneticElement/index.d.ts +2 -0
  281. package/dist/components/effects/MorphingText/MorphingText.d.ts +17 -0
  282. package/dist/components/effects/MorphingText/MorphingText.js +91 -0
  283. package/dist/components/effects/MorphingText/MorphingText.types.d.ts +18 -0
  284. package/dist/components/effects/MorphingText/index.d.ts +2 -0
  285. package/dist/components/effects/NoiseOverlay/NoiseOverlay.d.ts +28 -0
  286. package/dist/components/effects/NoiseOverlay/NoiseOverlay.js +61 -0
  287. package/dist/components/effects/NoiseOverlay/NoiseOverlay.types.d.ts +35 -0
  288. package/dist/components/effects/NoiseOverlay/index.d.ts +2 -0
  289. package/dist/components/effects/ParallaxSection/ParallaxSection.d.ts +26 -0
  290. package/dist/components/effects/ParallaxSection/ParallaxSection.js +71 -0
  291. package/dist/components/effects/ParallaxSection/ParallaxSection.types.d.ts +11 -0
  292. package/dist/components/effects/ParallaxSection/index.d.ts +2 -0
  293. package/dist/components/effects/Particles/Particles.d.ts +22 -0
  294. package/dist/components/effects/Particles/Particles.js +33 -0
  295. package/dist/components/effects/Particles/Particles.scene.d.ts +3 -0
  296. package/dist/components/effects/Particles/Particles.scene.js +284 -0
  297. package/dist/components/effects/Particles/Particles.types.d.ts +65 -0
  298. package/dist/components/effects/Particles/index.d.ts +2 -0
  299. package/dist/components/effects/ProgressiveBlur/ProgressiveBlur.d.ts +3 -0
  300. package/dist/components/effects/ProgressiveBlur/ProgressiveBlur.js +75 -0
  301. package/dist/components/effects/ProgressiveBlur/ProgressiveBlur.theme.d.ts +7 -0
  302. package/dist/components/effects/ProgressiveBlur/ProgressiveBlur.theme.js +12 -0
  303. package/dist/components/effects/ProgressiveBlur/ProgressiveBlur.types.d.ts +47 -0
  304. package/dist/components/effects/ProgressiveBlur/index.d.ts +2 -0
  305. package/dist/components/effects/ScrollReveal/ScrollReveal.d.ts +29 -0
  306. package/dist/components/effects/ScrollReveal/ScrollReveal.js +121 -0
  307. package/dist/components/effects/ScrollReveal/ScrollReveal.types.d.ts +25 -0
  308. package/dist/components/effects/ScrollReveal/index.d.ts +2 -0
  309. package/dist/components/effects/Spotlight/Spotlight.d.ts +36 -0
  310. package/dist/components/effects/Spotlight/Spotlight.js +112 -0
  311. package/dist/components/effects/Spotlight/Spotlight.types.d.ts +29 -0
  312. package/dist/components/effects/Spotlight/index.d.ts +2 -0
  313. package/dist/components/effects/StickyScroll/StickyScroll.d.ts +30 -0
  314. package/dist/components/effects/StickyScroll/StickyScroll.js +128 -0
  315. package/dist/components/effects/StickyScroll/StickyScroll.types.d.ts +19 -0
  316. package/dist/components/effects/StickyScroll/index.d.ts +2 -0
  317. package/dist/components/effects/index.d.ts +22 -4
  318. package/dist/components/effects/index.js +11 -2
  319. package/dist/components/forms/Checkbox/Checkbox.d.ts +3 -4
  320. package/dist/components/forms/Checkbox/Checkbox.js +36 -12
  321. package/dist/components/forms/Checkbox/Checkbox.theme.js +9 -5
  322. package/dist/components/forms/Checkbox/Checkbox.types.d.ts +28 -2
  323. package/dist/components/forms/Checkbox/CheckboxContext.d.ts +14 -0
  324. package/dist/components/forms/Checkbox/CheckboxContext.js +12 -0
  325. package/dist/components/forms/Checkbox/CheckboxGroup.d.ts +3 -0
  326. package/dist/components/forms/Checkbox/CheckboxGroup.js +40 -0
  327. package/dist/components/forms/Checkbox/index.d.ts +1 -1
  328. package/dist/components/forms/ColorPicker/ColorPicker.js +1 -1
  329. package/dist/components/forms/ColorPicker/ColorPicker.theme.js +3 -3
  330. package/dist/components/forms/ColorPicker/ColorPickerInput.js +7 -7
  331. package/dist/components/forms/CronInput/CronInput.d.ts +3 -0
  332. package/dist/components/forms/CronInput/CronInput.js +107 -0
  333. package/dist/components/forms/CronInput/CronInput.theme.d.ts +6 -0
  334. package/dist/components/forms/CronInput/CronInput.theme.js +84 -0
  335. package/dist/components/forms/CronInput/CronInput.types.d.ts +98 -0
  336. package/dist/components/forms/CronInput/CronInput.utils.d.ts +67 -0
  337. package/dist/components/forms/CronInput/CronInput.utils.js +505 -0
  338. package/dist/components/forms/CronInput/index.d.ts +4 -0
  339. package/dist/components/forms/DatePicker/DatePicker.theme.js +3 -3
  340. package/dist/components/forms/DatePicker/DatePickerContent.js +1 -1
  341. package/dist/components/forms/FileUpload/FileUpload.js +2 -2
  342. package/dist/components/forms/FileUpload/FileUpload.theme.js +4 -4
  343. package/dist/components/forms/FormLabel/FormLabel.theme.js +1 -1
  344. package/dist/components/forms/Input/Input.theme.js +1 -1
  345. package/dist/components/forms/InputCounter/InputCounter.d.ts +1 -1
  346. package/dist/components/forms/InputCounter/InputCounter.theme.js +1 -1
  347. package/dist/components/forms/InputCounter/InputCounter.types.d.ts +3 -2
  348. package/dist/components/forms/InputOTP/InputOTP.theme.js +2 -2
  349. package/dist/components/forms/InputTag/InputTag.js +1 -1
  350. package/dist/components/forms/Mention/Mention.d.ts +3 -0
  351. package/dist/components/forms/Mention/Mention.js +607 -0
  352. package/dist/components/forms/Mention/Mention.theme.d.ts +6 -0
  353. package/dist/components/forms/Mention/Mention.theme.js +55 -0
  354. package/dist/components/forms/Mention/Mention.types.d.ts +151 -0
  355. package/dist/components/forms/Mention/Mention.utils.d.ts +42 -0
  356. package/dist/components/forms/Mention/Mention.utils.js +285 -0
  357. package/dist/components/forms/Mention/index.d.ts +3 -0
  358. package/dist/components/forms/Radio/Radio.d.ts +3 -4
  359. package/dist/components/forms/Radio/Radio.js +25 -12
  360. package/dist/components/forms/Radio/Radio.theme.js +34 -5
  361. package/dist/components/forms/Radio/Radio.types.d.ts +30 -4
  362. package/dist/components/forms/Radio/RadioContext.d.ts +14 -0
  363. package/dist/components/forms/Radio/RadioContext.js +12 -0
  364. package/dist/components/forms/Radio/RadioGroup.d.ts +3 -0
  365. package/dist/components/forms/Radio/RadioGroup.js +36 -0
  366. package/dist/components/forms/Radio/index.d.ts +1 -1
  367. package/dist/components/forms/RichTextEditor/RichTextEditor.js +2 -2
  368. package/dist/components/forms/RichTextEditor/RichTextEditor.theme.js +1 -1
  369. package/dist/components/forms/Select/Select.theme.js +1 -1
  370. package/dist/components/forms/SelectableCard/SelectableCard.animations.d.ts +2 -0
  371. package/dist/components/forms/SelectableCard/SelectableCard.animations.js +9 -0
  372. package/dist/components/forms/SelectableCard/SelectableCard.d.ts +5 -0
  373. package/dist/components/forms/SelectableCard/SelectableCard.js +58 -0
  374. package/dist/components/forms/SelectableCard/SelectableCard.theme.d.ts +2 -0
  375. package/dist/components/forms/SelectableCard/SelectableCard.theme.js +38 -0
  376. package/dist/components/forms/SelectableCard/SelectableCard.types.d.ts +33 -0
  377. package/dist/components/forms/SelectableCard/SelectableCardContext.d.ts +3 -0
  378. package/dist/components/forms/SelectableCard/SelectableCardContext.js +12 -0
  379. package/dist/components/forms/SelectableCard/SelectableCardGroup.d.ts +3 -0
  380. package/dist/components/forms/SelectableCard/SelectableCardGroup.js +37 -0
  381. package/dist/components/forms/SelectableCard/index.d.ts +3 -0
  382. package/dist/components/forms/Signature/Signature.theme.js +1 -1
  383. package/dist/components/forms/Slider/Slider.theme.js +3 -3
  384. package/dist/components/forms/Switch/Switch.theme.js +1 -1
  385. package/dist/components/forms/TimePicker/TimePicker.theme.js +2 -2
  386. package/dist/components/forms/TransferList/TransferList.animations.d.ts +10 -0
  387. package/dist/components/forms/TransferList/TransferList.animations.js +32 -0
  388. package/dist/components/forms/TransferList/TransferList.d.ts +28 -0
  389. package/dist/components/forms/TransferList/TransferList.js +199 -0
  390. package/dist/components/forms/TransferList/TransferList.theme.d.ts +6 -0
  391. package/dist/components/forms/TransferList/TransferList.theme.js +60 -0
  392. package/dist/components/forms/TransferList/TransferList.types.d.ts +101 -0
  393. package/dist/components/forms/TransferList/index.d.ts +3 -0
  394. package/dist/components/forms/forms.theme.js +6 -6
  395. package/dist/components/forms/index.d.ts +15 -2
  396. package/dist/components/forms/index.js +9 -0
  397. package/dist/components/layout/FormLayout/FormLayout.d.ts +8 -0
  398. package/dist/components/layout/FormLayout/FormLayout.js +22 -0
  399. package/dist/components/layout/FormLayout/FormLayout.theme.d.ts +2 -0
  400. package/dist/components/layout/FormLayout/FormLayout.theme.js +16 -0
  401. package/dist/components/layout/FormLayout/FormLayout.types.d.ts +61 -0
  402. package/dist/components/layout/FormLayout/FormLayoutBody.d.ts +3 -0
  403. package/dist/components/layout/FormLayout/FormLayoutBody.js +13 -0
  404. package/dist/components/layout/FormLayout/FormLayoutFooter.d.ts +3 -0
  405. package/dist/components/layout/FormLayout/FormLayoutFooter.js +12 -0
  406. package/dist/components/layout/FormLayout/FormLayoutHeader.d.ts +3 -0
  407. package/dist/components/layout/FormLayout/FormLayoutHeader.js +12 -0
  408. package/dist/components/layout/FormLayout/FormLayoutSection.d.ts +3 -0
  409. package/dist/components/layout/FormLayout/FormLayoutSection.js +12 -0
  410. package/dist/components/layout/FormLayout/index.d.ts +3 -0
  411. package/dist/components/layout/PageLayout/PageLayout.d.ts +7 -0
  412. package/dist/components/layout/PageLayout/PageLayout.js +33 -0
  413. package/dist/components/layout/PageLayout/PageLayout.theme.d.ts +2 -0
  414. package/dist/components/layout/PageLayout/PageLayout.theme.js +10 -0
  415. package/dist/components/layout/PageLayout/PageLayout.types.d.ts +39 -0
  416. package/dist/components/layout/PageLayout/PageLayoutContent.d.ts +3 -0
  417. package/dist/components/layout/PageLayout/PageLayoutContent.js +12 -0
  418. package/dist/components/layout/PageLayout/PageLayoutHeader.d.ts +3 -0
  419. package/dist/components/layout/PageLayout/PageLayoutHeader.js +12 -0
  420. package/dist/components/layout/PageLayout/PageLayoutSidebar.d.ts +3 -0
  421. package/dist/components/layout/PageLayout/PageLayoutSidebar.js +12 -0
  422. package/dist/components/layout/PageLayout/index.d.ts +3 -0
  423. package/dist/components/layout/index.d.ts +2 -0
  424. package/dist/hooks/useSelectPortal.d.ts +4 -2
  425. package/dist/hooks/useSelectPortal.js +139 -51
  426. package/dist/index.d.ts +2 -0
  427. package/dist/index.js +53 -21
  428. package/dist/styles.css +1 -1
  429. package/dist/utils/colorUtils.d.ts +23 -0
  430. package/dist/utils/colorUtils.js +45 -0
  431. package/dist/utils/dateUtils.d.ts +30 -0
  432. package/dist/utils/dateUtils.js +58 -1
  433. package/dist/utils/index.d.ts +2 -1
  434. package/package.json +38 -26
  435. package/src/global.scss +673 -0
  436. package/src/styles/theme.css +378 -0
  437. package/src/theme-plugin.css +11 -0
  438. package/dist/components/core/Card/CardDescription.d.ts +0 -3
  439. package/dist/components/core/Card/CardDescription.js +0 -11
  440. package/dist/components/core/DescriptionList/DescriptionList.theme.js +0 -8
  441. package/dist/components/core/Modal/ModalDescription.d.ts +0 -5
  442. package/dist/components/core/Modal/ModalDescription.js +0 -11
  443. package/dist/components/core/ProgressiveBlur/ProgressiveBlur.d.ts +0 -34
  444. package/dist/components/core/ProgressiveBlur/ProgressiveBlur.js +0 -218
  445. package/dist/components/core/ProgressiveBlur/ProgressiveBlur.theme.d.ts +0 -9
  446. package/dist/components/core/ProgressiveBlur/ProgressiveBlur.types.d.ts +0 -48
  447. package/dist/components/core/ProgressiveBlur/index.d.ts +0 -2
  448. package/dist/components/core/Table/TablePagination.js +0 -25
  449. /package/dist/components/{core → data-display}/DescriptionList/DescriptionList.d.ts +0 -0
  450. /package/dist/components/{core → data-display}/DescriptionList/DescriptionList.js +0 -0
  451. /package/dist/components/{core → data-display}/DescriptionList/DescriptionList.theme.d.ts +0 -0
  452. /package/dist/components/{core → data-display}/DescriptionList/DescriptionList.types.d.ts +0 -0
  453. /package/dist/components/{core → data-display}/DescriptionList/index.d.ts +0 -0
  454. /package/dist/components/{core → data-display}/Feed/Feed.d.ts +0 -0
  455. /package/dist/components/{core → data-display}/Feed/Feed.theme.d.ts +0 -0
  456. /package/dist/components/{core → data-display}/Feed/Feed.types.d.ts +0 -0
  457. /package/dist/components/{core → data-display}/Feed/index.d.ts +0 -0
  458. /package/dist/components/{core → data-display}/KPI/KPI.d.ts +0 -0
  459. /package/dist/components/{core → data-display}/KPI/KPI.theme.d.ts +0 -0
  460. /package/dist/components/{core → data-display}/Metric/Metric.d.ts +0 -0
  461. /package/dist/components/{core → data-display}/Metric/Metric.theme.d.ts +0 -0
  462. /package/dist/components/{core → data-display}/Metric/index.d.ts +0 -0
  463. /package/dist/components/{core → data-display}/Table/Table.animations.d.ts +0 -0
  464. /package/dist/components/{core → data-display}/Table/Table.animations.js +0 -0
  465. /package/dist/components/{core → data-display}/Table/Table.d.ts +0 -0
  466. /package/dist/components/{core → data-display}/Table/Table.filterUtils.d.ts +0 -0
  467. /package/dist/components/{core → data-display}/Table/Table.filterUtils.js +0 -0
  468. /package/dist/components/{core → data-display}/Table/Table.js +0 -0
  469. /package/dist/components/{core → data-display}/Table/Table.theme.d.ts +0 -0
  470. /package/dist/components/{core → data-display}/Table/Table.types.d.ts +0 -0
  471. /package/dist/components/{core → data-display}/Table/Table.utils.d.ts +0 -0
  472. /package/dist/components/{core → data-display}/Table/Table.utils.js +0 -0
  473. /package/dist/components/{core → data-display}/Table/TableActions.d.ts +0 -0
  474. /package/dist/components/{core → data-display}/Table/TableActionsMenu.d.ts +0 -0
  475. /package/dist/components/{core → data-display}/Table/TableBody.d.ts +0 -0
  476. /package/dist/components/{core → data-display}/Table/TableBody.js +0 -0
  477. /package/dist/components/{core → data-display}/Table/TableCell.d.ts +0 -0
  478. /package/dist/components/{core → data-display}/Table/TableCell.js +0 -0
  479. /package/dist/components/{core → data-display}/Table/TableColumnManager.d.ts +0 -0
  480. /package/dist/components/{core → data-display}/Table/TableDeclarative.d.ts +0 -0
  481. /package/dist/components/{core → data-display}/Table/TableDeclarative.js +0 -0
  482. /package/dist/components/{core → data-display}/Table/TableFilter.d.ts +0 -0
  483. /package/dist/components/{core → data-display}/Table/TableHeader.d.ts +0 -0
  484. /package/dist/components/{core → data-display}/Table/TablePagination.d.ts +0 -0
  485. /package/dist/components/{core → data-display}/Table/TableRow.d.ts +0 -0
  486. /package/dist/components/{core → data-display}/Table/TableSelectionHeader.d.ts +0 -0
  487. /package/dist/components/{core → data-display}/Table/hooks/index.d.ts +0 -0
  488. /package/dist/components/{core → data-display}/Table/hooks/useTableColumns.d.ts +0 -0
  489. /package/dist/components/{core → data-display}/Table/hooks/useTableColumns.js +0 -0
  490. /package/dist/components/{core → data-display}/Table/hooks/useTableExpansion.d.ts +0 -0
  491. /package/dist/components/{core → data-display}/Table/hooks/useTableExpansion.js +0 -0
  492. /package/dist/components/{core → data-display}/Table/hooks/useTableFilter.d.ts +0 -0
  493. /package/dist/components/{core → data-display}/Table/hooks/useTableFilter.js +0 -0
  494. /package/dist/components/{core → data-display}/Table/hooks/useTablePagination.d.ts +0 -0
  495. /package/dist/components/{core → data-display}/Table/hooks/useTablePagination.js +0 -0
  496. /package/dist/components/{core → data-display}/Table/hooks/useTableSelection.d.ts +0 -0
  497. /package/dist/components/{core → data-display}/Table/hooks/useTableSelection.js +0 -0
  498. /package/dist/components/{core → data-display}/Table/index.d.ts +0 -0
  499. /package/dist/components/{core → data-display}/Table/index.js +0 -0
  500. /package/dist/components/{core → data-display}/Timeline/Timeline.animations.d.ts +0 -0
  501. /package/dist/components/{core → data-display}/Timeline/Timeline.animations.js +0 -0
  502. /package/dist/components/{core → data-display}/Timeline/Timeline.d.ts +0 -0
  503. /package/dist/components/{core → data-display}/Timeline/Timeline.js +0 -0
  504. /package/dist/components/{core → data-display}/Timeline/Timeline.theme.d.ts +0 -0
  505. /package/dist/components/{core → data-display}/Timeline/Timeline.types.d.ts +0 -0
  506. /package/dist/components/{core → data-display}/Timeline/TimelineContent.d.ts +0 -0
  507. /package/dist/components/{core → data-display}/Timeline/TimelineContent.js +0 -0
  508. /package/dist/components/{core → data-display}/Timeline/TimelineItem.d.ts +0 -0
  509. /package/dist/components/{core → data-display}/Timeline/TimelineItem.js +0 -0
  510. /package/dist/components/{core → data-display}/Timeline/TimelineMarker.d.ts +0 -0
  511. /package/dist/components/{core → data-display}/Timeline/TimelineMarker.js +0 -0
  512. /package/dist/components/{core → data-display}/Timeline/index.d.ts +0 -0
@@ -0,0 +1,199 @@
1
+ import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
2
+ import React__default, { useState, useMemo, useCallback } from 'react';
3
+ import { useReducedMotion, AnimatePresence, motion } from 'motion/react';
4
+ import { ChevronDoubleRightIcon, ChevronRightIcon, ChevronLeftIcon, ChevronDoubleLeftIcon, MagnifyingGlassIcon } from '@heroicons/react/24/outline';
5
+ import { cn } from '../../../utils/cn.js';
6
+ import { transferListTheme } from './TransferList.theme.js';
7
+ import { getItemVariants } from './TransferList.animations.js';
8
+
9
+ /**
10
+ * TransferList is a dual-list picker for moving items between a source
11
+ * (available) list and a target (selected) list. Commonly used in
12
+ * admin/permissions interfaces for assigning roles, features, or users.
13
+ *
14
+ * Supports controlled (value + onChange) and uncontrolled (defaultValue)
15
+ * patterns, optional search filtering, multi-select with checkboxes,
16
+ * custom item renderers, disabled items, and animated transitions.
17
+ *
18
+ * @example
19
+ * ```tsx
20
+ * <TransferList
21
+ * items={[
22
+ * { id: '1', label: 'Read' },
23
+ * { id: '2', label: 'Write' },
24
+ * { id: '3', label: 'Delete' },
25
+ * ]}
26
+ * value={selectedPermissions}
27
+ * onChange={setSelectedPermissions}
28
+ * sourceTitle="Available Permissions"
29
+ * targetTitle="Assigned Permissions"
30
+ * searchable
31
+ * />
32
+ * ```
33
+ */
34
+ const TransferList = React__default.forwardRef(({ items, value: controlledValue, defaultValue = [], onChange, sourceTitle = "Available", targetTitle = "Selected", searchable = false, size = "md", renderItem, className, ...restProps }, ref) => {
35
+ const shouldReduceMotion = useReducedMotion();
36
+ const itemVariants = getItemVariants(shouldReduceMotion);
37
+ // Controlled vs uncontrolled state for target IDs
38
+ const isControlled = controlledValue !== undefined;
39
+ const [internalValue, setInternalValue] = useState(defaultValue);
40
+ const targetIds = isControlled ? controlledValue : internalValue;
41
+ // Selection state for checkboxes in each list
42
+ const [sourceSelected, setSourceSelected] = useState(new Set());
43
+ const [targetSelected, setTargetSelected] = useState(new Set());
44
+ // Search/filter state
45
+ const [sourceSearch, setSourceSearch] = useState("");
46
+ const [targetSearch, setTargetSearch] = useState("");
47
+ const theme = transferListTheme;
48
+ const sizeStyles = theme.sizes[size];
49
+ // Build a lookup map for items by ID
50
+ const itemMap = useMemo(() => {
51
+ const map = new Map();
52
+ for (const item of items) {
53
+ map.set(item.id, item);
54
+ }
55
+ return map;
56
+ }, [items]);
57
+ // Derive target IDs set for fast lookup
58
+ const targetIdSet = useMemo(() => new Set(targetIds), [targetIds]);
59
+ // Split items into source and target lists
60
+ const sourceItems = useMemo(() => items.filter((item) => !targetIdSet.has(item.id)), [items, targetIdSet]);
61
+ const targetItems = useMemo(() => targetIds
62
+ .map((id) => itemMap.get(id))
63
+ .filter((item) => item !== undefined), [targetIds, itemMap]);
64
+ // Filter items by search query
65
+ const filteredSourceItems = useMemo(() => {
66
+ if (!sourceSearch.trim())
67
+ return sourceItems;
68
+ const query = sourceSearch.toLowerCase();
69
+ return sourceItems.filter((item) => item.label.toLowerCase().includes(query));
70
+ }, [sourceItems, sourceSearch]);
71
+ const filteredTargetItems = useMemo(() => {
72
+ if (!targetSearch.trim())
73
+ return targetItems;
74
+ const query = targetSearch.toLowerCase();
75
+ return targetItems.filter((item) => item.label.toLowerCase().includes(query));
76
+ }, [targetItems, targetSearch]);
77
+ // Update the target list value
78
+ const updateValue = useCallback((newTargetIds) => {
79
+ if (!isControlled) {
80
+ setInternalValue(newTargetIds);
81
+ }
82
+ onChange === null || onChange === void 0 ? void 0 : onChange(newTargetIds);
83
+ }, [isControlled, onChange]);
84
+ // Transfer selected source items to target
85
+ const handleMoveToTarget = useCallback(() => {
86
+ const idsToMove = Array.from(sourceSelected).filter((id) => {
87
+ const item = itemMap.get(id);
88
+ return item && !item.disabled;
89
+ });
90
+ if (idsToMove.length === 0)
91
+ return;
92
+ const newTargetIds = [...targetIds, ...idsToMove];
93
+ updateValue(newTargetIds);
94
+ setSourceSelected(new Set());
95
+ }, [sourceSelected, targetIds, updateValue, itemMap]);
96
+ // Transfer selected target items back to source
97
+ const handleMoveToSource = useCallback(() => {
98
+ const idsToMove = new Set(Array.from(targetSelected).filter((id) => {
99
+ const item = itemMap.get(id);
100
+ return item && !item.disabled;
101
+ }));
102
+ if (idsToMove.size === 0)
103
+ return;
104
+ const newTargetIds = targetIds.filter((id) => !idsToMove.has(id));
105
+ updateValue(newTargetIds);
106
+ setTargetSelected(new Set());
107
+ }, [targetSelected, targetIds, updateValue, itemMap]);
108
+ // Move all non-disabled source items to target
109
+ const handleMoveAllToTarget = useCallback(() => {
110
+ const nonDisabledSourceIds = sourceItems
111
+ .filter((item) => !item.disabled)
112
+ .map((item) => item.id);
113
+ if (nonDisabledSourceIds.length === 0)
114
+ return;
115
+ const newTargetIds = [...targetIds, ...nonDisabledSourceIds];
116
+ updateValue(newTargetIds);
117
+ setSourceSelected(new Set());
118
+ }, [sourceItems, targetIds, updateValue]);
119
+ // Move all non-disabled target items back to source
120
+ const handleMoveAllToSource = useCallback(() => {
121
+ const disabledTargetIds = targetItems
122
+ .filter((item) => item.disabled)
123
+ .map((item) => item.id);
124
+ updateValue(disabledTargetIds);
125
+ setTargetSelected(new Set());
126
+ }, [targetItems, updateValue]);
127
+ // Toggle an individual item's selection
128
+ const toggleSelection = useCallback((id, selected, setSelected) => {
129
+ const item = itemMap.get(id);
130
+ if (item === null || item === void 0 ? void 0 : item.disabled)
131
+ return;
132
+ const next = new Set(selected);
133
+ if (next.has(id)) {
134
+ next.delete(id);
135
+ }
136
+ else {
137
+ next.add(id);
138
+ }
139
+ setSelected(next);
140
+ }, [itemMap]);
141
+ // Toggle select-all for a given list
142
+ const toggleSelectAll = useCallback((listItems, selected, setSelected) => {
143
+ const selectableItems = listItems.filter((item) => !item.disabled);
144
+ const allSelected = selectableItems.every((item) => selected.has(item.id));
145
+ if (allSelected) {
146
+ setSelected(new Set());
147
+ }
148
+ else {
149
+ setSelected(new Set(selectableItems.map((item) => item.id)));
150
+ }
151
+ }, []);
152
+ // Compute select-all checkbox states
153
+ const sourceSelectableItems = filteredSourceItems.filter((i) => !i.disabled);
154
+ const targetSelectableItems = filteredTargetItems.filter((i) => !i.disabled);
155
+ const sourceAllSelected = sourceSelectableItems.length > 0 &&
156
+ sourceSelectableItems.every((item) => sourceSelected.has(item.id));
157
+ const sourceIndeterminate = !sourceAllSelected &&
158
+ sourceSelectableItems.some((item) => sourceSelected.has(item.id));
159
+ const targetAllSelected = targetSelectableItems.length > 0 &&
160
+ targetSelectableItems.every((item) => targetSelected.has(item.id));
161
+ const targetIndeterminate = !targetAllSelected &&
162
+ targetSelectableItems.some((item) => targetSelected.has(item.id));
163
+ // Icon size classes per size variant
164
+ const iconSize = size === "sm" ? "w-3.5 h-3.5" : size === "lg" ? "w-5 h-5" : "w-4 h-4";
165
+ const searchIconSize = size === "sm" ? "w-3.5 h-3.5" : size === "lg" ? "w-5 h-5" : "w-4 h-4";
166
+ const searchIconPosition = size === "sm" ? "left-2" : size === "lg" ? "left-3" : "left-2.5";
167
+ // Checkbox size
168
+ const checkboxSize = size === "sm" ? "w-3.5 h-3.5" : size === "lg" ? "w-5 h-5" : "w-4 h-4";
169
+ // Render a single list panel
170
+ const renderPanel = (title, listItems, filteredItems, selected, setSelected, search, setSearch, allSelected, indeterminate, panelAriaLabel) => {
171
+ const selectableCount = filteredItems.filter((i) => !i.disabled).length;
172
+ const selectedCount = Array.from(selected).filter((id) => filteredItems.some((item) => item.id === id)).length;
173
+ return (jsxs("div", { className: cn(theme.panelStyle, sizeStyles.panel), role: "listbox", "aria-label": panelAriaLabel, "aria-multiselectable": "true", children: [jsxs("div", { className: theme.headerStyle, children: [jsxs("div", { className: "flex items-center gap-2", children: [jsx("input", { type: "checkbox", checked: allSelected, ref: (el) => {
174
+ if (el)
175
+ el.indeterminate = indeterminate;
176
+ }, onChange: () => toggleSelectAll(filteredItems, selected, setSelected), disabled: selectableCount === 0, className: cn(checkboxSize, "rounded-[calc(var(--radius-base)*0.5)] border-2 border-[var(--color-border)] accent-[var(--color-primary)] cursor-pointer disabled:cursor-not-allowed disabled:opacity-50"), "aria-label": `Select all ${title}` }), jsx("span", { className: cn(theme.titleStyle, size === "sm" ? "text-sm" : "text-base"), children: title })] }), jsxs("span", { className: cn(theme.countStyle, size === "sm" ? "text-sm" : "text-sm"), children: [selectedCount > 0 ? `${selectedCount}/` : "", listItems.length] })] }), searchable && (jsxs("div", { className: theme.searchWrapperStyle, children: [jsx(MagnifyingGlassIcon, { className: cn(searchIconSize, "absolute text-[var(--color-text-placeholder)] pointer-events-none", searchIconPosition) }), jsx("input", { type: "text", value: search, onChange: (e) => setSearch(e.target.value), placeholder: "Search...", className: cn(theme.searchInputStyle, sizeStyles.searchInput), "aria-label": `Search ${title}` })] })), jsxs("div", { className: theme.listStyle, children: [jsx(AnimatePresence, { mode: "popLayout", initial: false, children: filteredItems.map((item) => {
177
+ const isSelected = selected.has(item.id);
178
+ const isDisabled = item.disabled === true;
179
+ const itemContent = (jsxs(Fragment, { children: [jsx("input", { type: "checkbox", checked: isSelected, onChange: () => toggleSelection(item.id, selected, setSelected), disabled: isDisabled, className: cn(checkboxSize, "rounded-[calc(var(--radius-base)*0.5)] border-2 border-[var(--color-border)] accent-[var(--color-primary)] cursor-pointer flex-shrink-0", isDisabled && "cursor-not-allowed"), tabIndex: -1, "aria-hidden": "true" }), jsx("span", { className: "truncate flex-1", children: renderItem ? renderItem(item) : item.label })] }));
180
+ const itemProps = {
181
+ key: item.id,
182
+ role: "option",
183
+ "aria-selected": isSelected,
184
+ "aria-disabled": isDisabled,
185
+ "data-selected": isSelected ? "true" : "false",
186
+ onClick: () => toggleSelection(item.id, selected, setSelected),
187
+ className: cn(theme.itemStyle, sizeStyles.item, isDisabled && theme.itemDisabledStyle),
188
+ };
189
+ if (itemVariants) {
190
+ return (jsx(motion.div, { ...itemProps, layout: true, variants: itemVariants, initial: "initial", animate: "animate", exit: "exit", children: itemContent }));
191
+ }
192
+ return jsx("div", { ...itemProps, children: itemContent });
193
+ }) }), filteredItems.length === 0 && (jsx("div", { className: cn("flex items-center justify-center text-[var(--color-text-muted)]", size === "sm" ? "py-4 text-sm" : size === "lg" ? "py-8 text-base" : "py-6 text-sm"), children: search.trim() ? "No matches found" : "No items" }))] })] }));
194
+ };
195
+ return (jsxs("div", { ref: ref, className: cn(theme.baseStyle, className), ...restProps, children: [renderPanel(sourceTitle, sourceItems, filteredSourceItems, sourceSelected, setSourceSelected, sourceSearch, setSourceSearch, sourceAllSelected, sourceIndeterminate, sourceTitle), jsxs("div", { className: theme.actionsStyle, children: [jsx("button", { type: "button", onClick: handleMoveAllToTarget, disabled: sourceItems.filter((i) => !i.disabled).length === 0, className: cn(theme.buttonStyle, sizeStyles.button), "aria-label": "Move all to target", children: jsx(ChevronDoubleRightIcon, { className: iconSize }) }), jsx("button", { type: "button", onClick: handleMoveToTarget, disabled: sourceSelected.size === 0, className: cn(theme.buttonStyle, sizeStyles.button), "aria-label": "Move selected to target", children: jsx(ChevronRightIcon, { className: iconSize }) }), jsx("button", { type: "button", onClick: handleMoveToSource, disabled: targetSelected.size === 0, className: cn(theme.buttonStyle, sizeStyles.button), "aria-label": "Move selected to source", children: jsx(ChevronLeftIcon, { className: iconSize }) }), jsx("button", { type: "button", onClick: handleMoveAllToSource, disabled: targetItems.filter((i) => !i.disabled).length === 0, className: cn(theme.buttonStyle, sizeStyles.button), "aria-label": "Move all to source", children: jsx(ChevronDoubleLeftIcon, { className: iconSize }) })] }), renderPanel(targetTitle, targetItems, filteredTargetItems, targetSelected, setTargetSelected, targetSearch, setTargetSearch, targetAllSelected, targetIndeterminate, targetTitle)] }));
196
+ });
197
+ TransferList.displayName = "TransferList";
198
+
199
+ export { TransferList };
@@ -0,0 +1,6 @@
1
+ import { TransferListTheme } from "./TransferList.types";
2
+ /**
3
+ * Default theme configuration for the TransferList component.
4
+ * Uses CSS variables from global.scss for consistent theming.
5
+ */
6
+ export declare const transferListTheme: TransferListTheme;
@@ -0,0 +1,60 @@
1
+ /**
2
+ * Default theme configuration for the TransferList component.
3
+ * Uses CSS variables from global.scss for consistent theming.
4
+ */
5
+ const transferListTheme = {
6
+ // Root container - horizontal layout with centered actions
7
+ baseStyle: "flex items-stretch gap-0",
8
+ // Individual list panel
9
+ panelStyle: "flex flex-col border border-[var(--color-border)] rounded-[var(--form-radius)] bg-[var(--color-surface)] overflow-hidden",
10
+ // Panel header with title and count
11
+ headerStyle: "flex items-center justify-between px-3 py-2 border-b border-[var(--color-border)] bg-[var(--color-background-secondary)]",
12
+ // Title text
13
+ titleStyle: "font-medium text-[var(--color-text-primary)]",
14
+ // Item count badge
15
+ countStyle: "text-[var(--color-text-muted)] tabular-nums",
16
+ // Search input wrapper
17
+ searchWrapperStyle: "relative flex items-center border-b border-[var(--color-border)]",
18
+ // Search input
19
+ searchInputStyle: "w-full bg-transparent text-[var(--color-text-primary)] placeholder:text-[var(--color-text-placeholder)] focus:outline-none",
20
+ // Scrollable list container
21
+ listStyle: "flex-1 overflow-y-auto",
22
+ // Individual item row
23
+ itemStyle: "flex items-center gap-2 cursor-pointer transition-colors duration-150 " +
24
+ "hover:bg-[var(--color-background-secondary)] " +
25
+ "data-[selected=true]:bg-[var(--color-primary-50)]",
26
+ // Disabled item overlay
27
+ itemDisabledStyle: "opacity-50 cursor-not-allowed hover:bg-transparent",
28
+ // Actions column with transfer buttons
29
+ actionsStyle: "flex flex-col items-center justify-center gap-1 px-2",
30
+ // Transfer button
31
+ buttonStyle: "inline-flex items-center justify-center rounded-[var(--form-radius)] border border-[var(--color-border)] " +
32
+ "bg-[var(--color-surface)] text-[var(--color-text-secondary)] " +
33
+ "transition-all duration-150 " +
34
+ "hover:bg-[var(--color-background-secondary)] hover:text-[var(--color-text-primary)] hover:border-[var(--color-border-secondary)] " +
35
+ "focus:outline-none focus-visible:ring-2 focus-visible:ring-[var(--color-primary)] focus-visible:ring-offset-1 " +
36
+ "disabled:opacity-40 disabled:cursor-not-allowed disabled:hover:bg-[var(--color-surface)] disabled:hover:text-[var(--color-text-secondary)] disabled:hover:border-[var(--color-border)]",
37
+ // Size variants
38
+ sizes: {
39
+ sm: {
40
+ panel: "w-56 h-64",
41
+ item: "px-2 py-1 text-sm gap-1.5",
42
+ button: "p-1",
43
+ searchInput: "px-2 py-1.5 text-sm pl-7",
44
+ },
45
+ md: {
46
+ panel: "w-72 h-80",
47
+ item: "px-3 py-1.5 text-base gap-2",
48
+ button: "p-1.5",
49
+ searchInput: "px-3 py-2 text-base pl-8",
50
+ },
51
+ lg: {
52
+ panel: "w-80 h-96",
53
+ item: "px-3 py-2 text-lg gap-2.5",
54
+ button: "p-2",
55
+ searchInput: "px-3 py-2.5 text-lg pl-9",
56
+ },
57
+ },
58
+ };
59
+
60
+ export { transferListTheme };
@@ -0,0 +1,101 @@
1
+ import React from "react";
2
+ /**
3
+ * Size variants for the TransferList component
4
+ */
5
+ export type TransferListSize = "sm" | "md" | "lg";
6
+ /**
7
+ * Individual item in the TransferList
8
+ */
9
+ export interface TransferListItem {
10
+ /** Unique identifier for the item */
11
+ id: string;
12
+ /** Display label for the item */
13
+ label: string;
14
+ /** Whether the item is disabled and cannot be transferred */
15
+ disabled?: boolean;
16
+ /** Allow custom data to be attached to the item */
17
+ [key: string]: unknown;
18
+ }
19
+ /**
20
+ * TransferList component props
21
+ *
22
+ * Supports both controlled (value + onChange) and uncontrolled (defaultValue) patterns.
23
+ *
24
+ * @example
25
+ * ```tsx
26
+ * // Controlled
27
+ * <TransferList
28
+ * items={items}
29
+ * value={selectedIds}
30
+ * onChange={setSelectedIds}
31
+ * sourceTitle="Available"
32
+ * targetTitle="Selected"
33
+ * />
34
+ *
35
+ * // Uncontrolled
36
+ * <TransferList
37
+ * items={items}
38
+ * defaultValue={['item-1', 'item-2']}
39
+ * sourceTitle="Available"
40
+ * targetTitle="Selected"
41
+ * />
42
+ * ```
43
+ */
44
+ export interface TransferListProps extends Omit<React.HTMLAttributes<HTMLDivElement>, "onChange" | "defaultValue"> {
45
+ /** All available items for both lists */
46
+ items: TransferListItem[];
47
+ /** IDs of items currently in the target list (controlled mode) */
48
+ value?: string[];
49
+ /** Default IDs of items in the target list (uncontrolled mode) */
50
+ defaultValue?: string[];
51
+ /** Callback when target list changes */
52
+ onChange?: (targetIds: string[]) => void;
53
+ /** Title displayed above the source list */
54
+ sourceTitle?: string;
55
+ /** Title displayed above the target list */
56
+ targetTitle?: string;
57
+ /** Whether to show search/filter inputs for each list */
58
+ searchable?: boolean;
59
+ /** Size variant affecting padding and text size */
60
+ size?: TransferListSize;
61
+ /** Custom renderer for each item in both lists */
62
+ renderItem?: (item: TransferListItem) => React.ReactNode;
63
+ /** Additional className for the root container */
64
+ className?: string;
65
+ }
66
+ /**
67
+ * Theme configuration for the TransferList component
68
+ */
69
+ export interface TransferListTheme {
70
+ /** Root container style */
71
+ baseStyle: string;
72
+ /** Individual list panel style */
73
+ panelStyle: string;
74
+ /** Panel header (title + count) style */
75
+ headerStyle: string;
76
+ /** Title text style */
77
+ titleStyle: string;
78
+ /** Item count badge style */
79
+ countStyle: string;
80
+ /** Search input wrapper style */
81
+ searchWrapperStyle: string;
82
+ /** Search input style */
83
+ searchInputStyle: string;
84
+ /** Scrollable list container style */
85
+ listStyle: string;
86
+ /** Individual item row style */
87
+ itemStyle: string;
88
+ /** Disabled item style */
89
+ itemDisabledStyle: string;
90
+ /** Actions column (transfer buttons) style */
91
+ actionsStyle: string;
92
+ /** Transfer button style */
93
+ buttonStyle: string;
94
+ /** Size variants */
95
+ sizes: Record<TransferListSize, {
96
+ panel: string;
97
+ item: string;
98
+ button: string;
99
+ searchInput: string;
100
+ }>;
101
+ }
@@ -0,0 +1,3 @@
1
+ export { TransferList } from "./TransferList";
2
+ export type { TransferListProps, TransferListItem, TransferListSize, TransferListTheme, } from "./TransferList.types";
3
+ export { transferListTheme } from "./TransferList.theme";
@@ -15,7 +15,7 @@ const formsBaseTheme = {
15
15
  "dark:bg-[var(--color-neutral-900)] dark:outline-[var(--color-neutral-700)] " +
16
16
  "dark:focus-within:outline-[var(--color-primary-500)] dark:focus-within:ring-[var(--color-primary-500)]/20",
17
17
  // Common base input/control style
18
- controlBaseStyle: "w-full bg-transparent text-sm text-[var(--color-text-primary)] " +
18
+ controlBaseStyle: "w-full bg-transparent text-base text-[var(--color-text-primary)] " +
19
19
  "placeholder:text-[var(--color-text-placeholder)] focus:outline-none " +
20
20
  // Dark mode
21
21
  "dark:text-[var(--color-text-primary)] dark:placeholder:text-[var(--color-neutral-500)]",
@@ -23,19 +23,19 @@ const formsBaseTheme = {
23
23
  // These tokens can be composed together or used individually for maximum flexibility
24
24
  sizes: {
25
25
  sm: {
26
- text: "text-sm",
26
+ text: "text-base",
27
27
  padding: "py-[var(--form-py-sm)] px-[var(--form-px-sm)]",
28
28
  height: "h-[var(--form-min-h-sm)]",
29
29
  textareaHeight: "min-h-[calc(var(--form-min-h-sm)*2)]",
30
30
  },
31
31
  md: {
32
- text: "text-sm",
32
+ text: "text-base",
33
33
  padding: "py-[var(--form-py-md)] px-[var(--form-px-md)]",
34
34
  height: "h-[var(--form-min-h-md)]",
35
35
  textareaHeight: "min-h-[calc(var(--form-min-h-md)*2)]",
36
36
  },
37
37
  lg: {
38
- text: "text-base",
38
+ text: "text-lg",
39
39
  padding: "py-[var(--form-py-lg)] px-[var(--form-px-lg)]",
40
40
  height: "h-[var(--form-min-h-lg)]",
41
41
  textareaHeight: "min-h-[calc(var(--form-min-h-lg)*2)]",
@@ -72,7 +72,7 @@ const formsBaseTheme = {
72
72
  invalid: "",
73
73
  },
74
74
  // Common helper text style with state variations
75
- helperText: "text-xs text-gray-500 mt-1.5 [.state-disabled_&]:text-gray-400 [.state-invalid_&]:text-[var(--color-danger-500)] " +
75
+ helperText: "text-sm text-gray-500 mt-1.5 [.state-disabled_&]:text-gray-400 [.state-invalid_&]:text-[var(--color-danger-500)] " +
76
76
  "dark:text-[var(--color-neutral-400)] dark:[.state-invalid_&]:text-[var(--color-danger-400)]",
77
77
  // Common icon styles
78
78
  iconStyles: {
@@ -89,7 +89,7 @@ const formsBaseTheme = {
89
89
  dropdownStyles: {
90
90
  // Container for dropdown panel
91
91
  container: "fixed z-[1000] max-h-[var(--select-content-available-height,20rem)] overflow-auto overscroll-contain " +
92
- "rounded-[var(--form-radius)] bg-white/90 backdrop-blur-md text-sm border border-[var(--color-border)] " +
92
+ "rounded-[var(--form-radius)] bg-white/90 backdrop-blur-md text-base border border-[var(--color-border)] " +
93
93
  "shadow-real-lg ring-1 ring-[var(--color-border)] focus:outline-none " +
94
94
  "dark:bg-[var(--color-neutral-900)]/90 dark:ring-[var(--color-neutral-700)]",
95
95
  // Base option style
@@ -11,10 +11,10 @@ export { FormLabel } from "./FormLabel";
11
11
  export type { FormLabelProps, FormLabelState, FormLabelTheme, } from "./FormLabel";
12
12
  export { formLabelTheme } from "./FormLabel";
13
13
  export { Radio } from "./Radio";
14
- export type { RadioProps, RadioSize, RadioState } from "./Radio";
14
+ export type { RadioProps, RadioSize, RadioState, RadioGroupProps, RadioGroupOrientation, } from "./Radio";
15
15
  export { radioTheme } from "./Radio";
16
16
  export { Checkbox } from "./Checkbox";
17
- export type { CheckboxProps, CheckboxSize, CheckboxState } from "./Checkbox";
17
+ export type { CheckboxProps, CheckboxSize, CheckboxState, CheckboxGroupProps, CheckboxGroupOrientation, } from "./Checkbox";
18
18
  export { checkboxTheme } from "./Checkbox";
19
19
  export { Switch } from "./Switch";
20
20
  export type { SwitchProps, SwitchThemeOverrides } from "./Switch";
@@ -60,3 +60,16 @@ export { Combobox } from "./Combobox";
60
60
  export type { ComboboxProps, ComboboxOption, ComboboxSize, ComboboxState, ComboboxTheme, ComboboxThemeOverrides, } from "./Combobox";
61
61
  export { comboboxTheme } from "./Combobox";
62
62
  export * from "./ColorPicker";
63
+ export { SelectableCard } from "./SelectableCard";
64
+ export type { SelectableCardProps, SelectableCardGroupProps, SelectableCardType, SelectableCardIndicator, SelectableCardTheme, } from "./SelectableCard";
65
+ export { selectableCardTheme } from "./SelectableCard";
66
+ export { TransferList } from "./TransferList";
67
+ export type { TransferListProps, TransferListItem, TransferListSize, TransferListTheme, } from "./TransferList";
68
+ export { transferListTheme } from "./TransferList";
69
+ export { Mention } from "./Mention";
70
+ export type { MentionProps, MentionSuggestion, MentionTrigger, MentionSize, MentionTheme, MentionThemeOverrides, } from "./Mention";
71
+ export { mentionTheme } from "./Mention";
72
+ export { CronInput } from "./CronInput";
73
+ export type { CronInputProps, CronInputSize, CronInputMode, CronInputTheme, CronInputThemeOverrides, CronFields, CronPreset, } from "./CronInput";
74
+ export { cronInputTheme } from "./CronInput";
75
+ export { parseCron, fieldsToCron, validateCron, cronToDescription, getNextRuns, formatNextRun, CRON_PRESETS, } from "./CronInput";
@@ -58,6 +58,15 @@ export { ColorPickerFormatSelector } from './ColorPicker/ColorPickerFormatSelect
58
58
  export { ColorPickerEyeDropper } from './ColorPicker/ColorPickerEyeDropper.js';
59
59
  export { ColorPickerPresets } from './ColorPicker/ColorPickerPresets.js';
60
60
  export { formatHex, formatHsl, formatRgb, hexToRgb, hslToRgb, hsvToRgb, parseColor, rgbToHex, rgbToHsl, rgbToHsv, validateHex, validateRgb } from './ColorPicker/colorUtils.js';
61
+ export { SelectableCard } from './SelectableCard/SelectableCard.js';
62
+ export { selectableCardTheme } from './SelectableCard/SelectableCard.theme.js';
63
+ export { TransferList } from './TransferList/TransferList.js';
64
+ export { transferListTheme } from './TransferList/TransferList.theme.js';
65
+ export { Mention } from './Mention/Mention.js';
66
+ export { mentionTheme } from './Mention/Mention.theme.js';
67
+ export { CronInput } from './CronInput/CronInput.js';
68
+ export { cronInputTheme } from './CronInput/CronInput.theme.js';
69
+ export { CRON_PRESETS, cronToDescription, fieldsToCron, formatNextRun, getNextRuns, parseCron, validateCron } from './CronInput/CronInput.utils.js';
61
70
  export { DatePickerContent } from './DatePicker/DatePickerContent.js';
62
71
  export { DatePickerPresets } from './DatePicker/DatePickerPresets.js';
63
72
  export { DatePickerTrigger } from './DatePicker/DatePickerTrigger.js';
@@ -0,0 +1,8 @@
1
+ import React from "react";
2
+ import type { FormLayoutProps } from "./FormLayout.types";
3
+ export declare const FormLayout: React.ForwardRefExoticComponent<FormLayoutProps & React.RefAttributes<HTMLDivElement>> & {
4
+ Header: React.ForwardRefExoticComponent<import("./FormLayout.types").FormLayoutHeaderProps & React.RefAttributes<HTMLDivElement>>;
5
+ Body: React.ForwardRefExoticComponent<import("./FormLayout.types").FormLayoutBodyProps & React.RefAttributes<HTMLDivElement>>;
6
+ Section: React.ForwardRefExoticComponent<import("./FormLayout.types").FormLayoutSectionProps & React.RefAttributes<HTMLElement>>;
7
+ Footer: React.ForwardRefExoticComponent<import("./FormLayout.types").FormLayoutFooterProps & React.RefAttributes<HTMLDivElement>>;
8
+ };
@@ -0,0 +1,22 @@
1
+ import { jsx } from 'react/jsx-runtime';
2
+ import React__default from 'react';
3
+ import { cn } from '../../../utils/cn.js';
4
+ import { formLayoutTheme } from './FormLayout.theme.js';
5
+ import { FormLayoutHeader } from './FormLayoutHeader.js';
6
+ import { FormLayoutBody } from './FormLayoutBody.js';
7
+ import { FormLayoutSection } from './FormLayoutSection.js';
8
+ import { FormLayoutFooter } from './FormLayoutFooter.js';
9
+
10
+ const FormLayoutRoot = React__default.forwardRef(({ className, theme: customTheme, children, ...props }, ref) => {
11
+ const theme = { ...formLayoutTheme, ...customTheme };
12
+ return (jsx("div", { ref: ref, className: cn(theme.root, className), ...props, children: children }));
13
+ });
14
+ FormLayoutRoot.displayName = "FormLayout";
15
+ const FormLayout = Object.assign(FormLayoutRoot, {
16
+ Header: FormLayoutHeader,
17
+ Body: FormLayoutBody,
18
+ Section: FormLayoutSection,
19
+ Footer: FormLayoutFooter,
20
+ });
21
+
22
+ export { FormLayout };
@@ -0,0 +1,2 @@
1
+ import type { FormLayoutTheme } from "./FormLayout.types";
2
+ export declare const formLayoutTheme: FormLayoutTheme;
@@ -0,0 +1,16 @@
1
+ const formLayoutTheme = {
2
+ root: "flex flex-col gap-6",
3
+ header: "border-b border-[var(--color-border)] pb-6",
4
+ headerTitle: "text-lg font-semibold text-[var(--color-text-primary)]",
5
+ headerSubtitle: "text-lg text-[var(--color-text-muted)]",
6
+ body: "flex flex-col gap-6",
7
+ section: "grid grid-cols-1 md:grid-cols-6 gap-6 md:gap-10",
8
+ sectionSidebar: "col-span-full md:col-span-2",
9
+ sectionTitle: "text-lg font-semibold text-[var(--color-text-primary)]",
10
+ sectionDescription: "text-base text-[var(--color-text-muted)] mt-1",
11
+ sectionAction: "mt-4",
12
+ sectionContent: "col-span-full md:col-span-4 grid grid-cols-1 sm:grid-cols-2 gap-4",
13
+ footer: "flex flex-col-reverse sm:flex-row sm:justify-between items-center gap-3 border-t border-[var(--color-border)] pt-3",
14
+ };
15
+
16
+ export { formLayoutTheme };
@@ -0,0 +1,61 @@
1
+ import React from "react";
2
+ export interface FormLayoutTheme {
3
+ root: string;
4
+ header: string;
5
+ headerTitle: string;
6
+ headerSubtitle: string;
7
+ body: string;
8
+ section: string;
9
+ sectionSidebar: string;
10
+ sectionTitle: string;
11
+ sectionDescription: string;
12
+ sectionAction: string;
13
+ sectionContent: string;
14
+ footer: string;
15
+ }
16
+ export interface FormLayoutThemeOverrides {
17
+ root?: string;
18
+ header?: string;
19
+ headerTitle?: string;
20
+ headerSubtitle?: string;
21
+ body?: string;
22
+ section?: string;
23
+ sectionSidebar?: string;
24
+ sectionTitle?: string;
25
+ sectionDescription?: string;
26
+ sectionAction?: string;
27
+ sectionContent?: string;
28
+ footer?: string;
29
+ }
30
+ export interface FormLayoutProps extends React.HTMLAttributes<HTMLDivElement> {
31
+ /** Theme overrides for the root container. */
32
+ theme?: FormLayoutThemeOverrides;
33
+ }
34
+ export interface FormLayoutHeaderProps extends React.HTMLAttributes<HTMLDivElement> {
35
+ /** Header title text. */
36
+ title: string;
37
+ /** Optional subtitle displayed below the title. */
38
+ subtitle?: string;
39
+ /** Optional action element rendered on the right side of the header. */
40
+ action?: React.ReactNode;
41
+ /** Theme overrides for the header. */
42
+ theme?: FormLayoutThemeOverrides;
43
+ }
44
+ export interface FormLayoutBodyProps extends React.HTMLAttributes<HTMLDivElement> {
45
+ }
46
+ export interface FormLayoutSectionProps extends React.HTMLAttributes<HTMLElement> {
47
+ /** Section title text. */
48
+ title: string;
49
+ /** Optional description displayed below the title. */
50
+ description?: string;
51
+ /** Optional action element rendered below the description. */
52
+ action?: React.ReactNode;
53
+ /** Additional className applied to the content area. */
54
+ contentClassName?: string;
55
+ /** Theme overrides for the section. */
56
+ theme?: FormLayoutThemeOverrides;
57
+ }
58
+ export interface FormLayoutFooterProps extends React.HTMLAttributes<HTMLDivElement> {
59
+ /** Theme overrides for the footer. */
60
+ theme?: FormLayoutThemeOverrides;
61
+ }
@@ -0,0 +1,3 @@
1
+ import React from "react";
2
+ import type { FormLayoutBodyProps } from "./FormLayout.types";
3
+ export declare const FormLayoutBody: React.ForwardRefExoticComponent<FormLayoutBodyProps & React.RefAttributes<HTMLDivElement>>;
@@ -0,0 +1,13 @@
1
+ import { jsx, jsxs } from 'react/jsx-runtime';
2
+ import React__default from 'react';
3
+ import { cn } from '../../../utils/cn.js';
4
+ import { formLayoutTheme } from './FormLayout.theme.js';
5
+ import { Separator } from '../../core/Separator/Separator.js';
6
+
7
+ const FormLayoutBody = React__default.forwardRef(({ className, children, ...props }, ref) => {
8
+ const childArray = React__default.Children.toArray(children).filter(Boolean);
9
+ return (jsx("div", { ref: ref, className: cn(formLayoutTheme.body, className), ...props, children: childArray.map((child, index) => (jsxs(React__default.Fragment, { children: [child, index < childArray.length - 1 && jsx(Separator, {})] }, index))) }));
10
+ });
11
+ FormLayoutBody.displayName = "FormLayout.Body";
12
+
13
+ export { FormLayoutBody };
@@ -0,0 +1,3 @@
1
+ import React from "react";
2
+ import type { FormLayoutFooterProps } from "./FormLayout.types";
3
+ export declare const FormLayoutFooter: React.ForwardRefExoticComponent<FormLayoutFooterProps & React.RefAttributes<HTMLDivElement>>;
@@ -0,0 +1,12 @@
1
+ import { jsx } from 'react/jsx-runtime';
2
+ import React__default from 'react';
3
+ import { cn } from '../../../utils/cn.js';
4
+ import { formLayoutTheme } from './FormLayout.theme.js';
5
+
6
+ const FormLayoutFooter = React__default.forwardRef(({ className, theme: customTheme, children, ...props }, ref) => {
7
+ const theme = { ...formLayoutTheme, ...customTheme };
8
+ return (jsx("div", { ref: ref, className: cn(theme.footer, className), ...props, children: children }));
9
+ });
10
+ FormLayoutFooter.displayName = "FormLayout.Footer";
11
+
12
+ export { FormLayoutFooter };
@@ -0,0 +1,3 @@
1
+ import React from "react";
2
+ import type { FormLayoutHeaderProps } from "./FormLayout.types";
3
+ export declare const FormLayoutHeader: React.ForwardRefExoticComponent<FormLayoutHeaderProps & React.RefAttributes<HTMLDivElement>>;