@flikk/ui 1.0.0-beta.26 → 1.0.0-beta.29

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 (418) hide show
  1. package/dist/bg/1.webp +0 -0
  2. package/dist/bg/10.webp +0 -0
  3. package/dist/bg/11.webp +0 -0
  4. package/dist/bg/12.webp +0 -0
  5. package/dist/bg/13.webp +0 -0
  6. package/dist/bg/14.webp +0 -0
  7. package/dist/bg/15.webp +0 -0
  8. package/dist/bg/16.webp +0 -0
  9. package/dist/bg/17.webp +0 -0
  10. package/dist/bg/18.webp +0 -0
  11. package/dist/bg/19.webp +0 -0
  12. package/dist/bg/2.webp +0 -0
  13. package/dist/bg/20.webp +0 -0
  14. package/dist/bg/21.webp +0 -0
  15. package/dist/bg/22.webp +0 -0
  16. package/dist/bg/3.webp +0 -0
  17. package/dist/bg/4.webp +0 -0
  18. package/dist/bg/5.webp +0 -0
  19. package/dist/bg/6.webp +0 -0
  20. package/dist/bg/7.webp +0 -0
  21. package/dist/bg/8.webp +0 -0
  22. package/dist/bg/9.webp +0 -0
  23. package/dist/components/ai/CodeBlock/CodeBlock.theme.js +1 -1
  24. package/dist/components/ai/PromptInput/PromptInput.js +7 -140
  25. package/dist/components/ai/PromptInput/VoiceRecorder.js +0 -85
  26. package/dist/components/ai/TokenCounter/TokenCounter.theme.js +1 -1
  27. package/dist/components/canvas/Background.d.ts +19 -0
  28. package/dist/components/canvas/Background.js +23 -0
  29. package/dist/components/canvas/BaseNode.d.ts +15 -0
  30. package/dist/components/canvas/BaseNode.js +20 -0
  31. package/dist/components/canvas/CanvasToolbar.d.ts +34 -0
  32. package/dist/components/canvas/CanvasToolbar.js +34 -0
  33. package/dist/components/canvas/Edge.d.ts +35 -0
  34. package/dist/components/canvas/Edge.js +97 -0
  35. package/dist/components/canvas/EdgeLayer.d.ts +18 -0
  36. package/dist/components/canvas/EdgeLayer.js +111 -0
  37. package/dist/components/canvas/Handle.d.ts +11 -0
  38. package/dist/components/canvas/Handle.js +63 -0
  39. package/dist/components/canvas/MiniMap.d.ts +22 -0
  40. package/dist/components/canvas/MiniMap.js +105 -0
  41. package/dist/components/canvas/NodeCanvas.d.ts +10 -0
  42. package/dist/components/canvas/NodeCanvas.js +477 -0
  43. package/dist/components/canvas/NodeCanvas.theme.d.ts +7 -0
  44. package/dist/components/canvas/NodeCanvas.theme.js +9 -0
  45. package/dist/components/canvas/NodeCanvas.types.d.ts +187 -0
  46. package/dist/components/canvas/NodeControls.d.ts +25 -0
  47. package/dist/components/canvas/NodeControls.js +40 -0
  48. package/dist/components/canvas/NodeRenderer.d.ts +19 -0
  49. package/dist/components/canvas/NodeRenderer.js +117 -0
  50. package/dist/components/canvas/changes.d.ts +11 -0
  51. package/dist/components/canvas/changes.js +76 -0
  52. package/dist/components/canvas/context/CanvasContext.d.ts +32 -0
  53. package/dist/components/canvas/context/CanvasContext.js +14 -0
  54. package/dist/components/canvas/context/ConnectionContext.d.ts +33 -0
  55. package/dist/components/canvas/context/ConnectionContext.js +13 -0
  56. package/dist/components/canvas/context/HandleRegistry.d.ts +24 -0
  57. package/dist/components/canvas/context/HandleRegistry.js +15 -0
  58. package/dist/components/canvas/context/InteractionContext.d.ts +18 -0
  59. package/dist/components/canvas/context/InteractionContext.js +14 -0
  60. package/dist/components/canvas/context/NodeIdContext.d.ts +3 -0
  61. package/dist/components/canvas/context/NodeIdContext.js +15 -0
  62. package/dist/components/canvas/hooks/useConnection.d.ts +17 -0
  63. package/dist/components/canvas/hooks/useConnection.js +29 -0
  64. package/dist/components/canvas/hooks/useMarquee.d.ts +25 -0
  65. package/dist/components/canvas/hooks/useMarquee.js +91 -0
  66. package/dist/components/canvas/hooks/useNodeDrag.d.ts +23 -0
  67. package/dist/components/canvas/hooks/useNodeDrag.js +110 -0
  68. package/dist/components/canvas/hooks/usePanZoom.d.ts +30 -0
  69. package/dist/components/canvas/hooks/usePanZoom.js +189 -0
  70. package/dist/components/canvas/hooks/useViewport.d.ts +21 -0
  71. package/dist/components/canvas/hooks/useViewport.js +35 -0
  72. package/dist/components/canvas/index.d.ts +14 -0
  73. package/dist/components/canvas/index.js +12 -0
  74. package/dist/components/canvas/layout.d.ts +22 -0
  75. package/dist/components/canvas/layout.js +67 -0
  76. package/dist/components/canvas/utils.d.ts +4 -0
  77. package/dist/components/canvas/utils.js +16 -0
  78. package/dist/components/charts/AreaChart/AreaChart.js +136 -101
  79. package/dist/components/charts/AreaChart/AreaChart.types.d.ts +5 -5
  80. package/dist/components/charts/AreaChart/AreaChart.types.js +1 -0
  81. package/dist/components/charts/BarChart/BarChart.js +207 -143
  82. package/dist/components/charts/BarChart/BarChart.types.d.ts +4 -4
  83. package/dist/components/charts/BarChart/BarChart.types.js +1 -0
  84. package/dist/components/charts/ComboChart/ComboChart.types.d.ts +2 -2
  85. package/dist/components/charts/LineChart/LineChart.js +88 -72
  86. package/dist/components/charts/LineChart/LineChart.types.d.ts +3 -3
  87. package/dist/components/charts/RadarChart/RadarChart.js +1 -1
  88. package/dist/components/charts/RadarChart/RadarChart.theme.js +5 -2
  89. package/dist/components/charts/ScatterPlot/ScatterPlot.js +62 -72
  90. package/dist/components/charts/ScatterPlot/ScatterPlot.theme.js +10 -1
  91. package/dist/components/charts/ScatterPlot/ScatterPlot.types.d.ts +3 -9
  92. package/dist/components/charts/StackedBarChart/StackedBarChart.js +33 -33
  93. package/dist/components/charts/StackedBarChart/StackedBarChart.types.d.ts +2 -2
  94. package/dist/components/charts/hooks/index.d.ts +2 -0
  95. package/dist/components/charts/hooks/useChartDimensions.d.ts +29 -0
  96. package/dist/components/charts/hooks/useChartDimensions.js +42 -0
  97. package/dist/components/charts/shared/ChartTooltip/ChartTooltip.theme.js +1 -1
  98. package/dist/components/charts/types/chart.types.d.ts +11 -2
  99. package/dist/components/charts/types/chart.types.js +10 -3
  100. package/dist/components/core/Avatar/Avatar.js +5 -1
  101. package/dist/components/core/AvatarGroup/AvatarGroup.js +5 -1
  102. package/dist/components/core/AvatarGroup/AvatarGroup.theme.js +4 -2
  103. package/dist/components/core/Badge/Badge.js +1 -1
  104. package/dist/components/core/Badge/Badge.theme.js +16 -15
  105. package/dist/components/core/Button/Button.js +1 -1
  106. package/dist/components/core/Button/Button.theme.js +3 -3
  107. package/dist/components/core/Calendar/Calendar.theme.js +1 -1
  108. package/dist/components/core/Card/Card.js +7 -3
  109. package/dist/components/core/Card/Card.theme.js +3 -3
  110. package/dist/components/core/Card/Card.types.d.ts +27 -2
  111. package/dist/components/core/CommandPalette/CommandItem.js +4 -5
  112. package/dist/components/core/CommandPalette/CommandPalette.js +1 -1
  113. package/dist/components/core/CommandPalette/CommandPalette.theme.js +11 -13
  114. package/dist/components/core/CommandPalette/CommandPalette.types.d.ts +0 -2
  115. package/dist/components/core/ContextMenu/ContextMenu.theme.js +14 -15
  116. package/dist/components/core/ContextMenu/ContextMenuItem.js +1 -1
  117. package/dist/components/core/ContextMenu/ContextMenuSubTrigger.js +1 -1
  118. package/dist/components/core/DotSeparator/DotSeparator.d.ts +3 -0
  119. package/dist/components/core/DotSeparator/DotSeparator.js +19 -0
  120. package/dist/components/core/DotSeparator/DotSeparator.theme.d.ts +2 -0
  121. package/dist/components/core/DotSeparator/DotSeparator.theme.js +10 -0
  122. package/dist/components/core/DotSeparator/DotSeparator.types.d.ts +25 -0
  123. package/dist/components/core/DotSeparator/index.d.ts +3 -0
  124. package/dist/components/core/Dropdown/Dropdown.theme.js +5 -6
  125. package/dist/components/core/Dropdown/DropdownItem.js +1 -1
  126. package/dist/components/core/Dropdown/DropdownMenu.js +58 -30
  127. package/dist/components/core/HeroCard/HeroCard.d.ts +5 -0
  128. package/dist/components/core/HeroCard/HeroCard.js +99 -0
  129. package/dist/components/core/HeroCard/HeroCard.theme.d.ts +3 -0
  130. package/dist/components/core/HeroCard/HeroCard.theme.js +8 -0
  131. package/dist/components/core/HeroCard/HeroCard.types.d.ts +70 -0
  132. package/dist/components/core/HeroCard/index.d.ts +4 -0
  133. package/dist/components/core/Kbd/Kbd.theme.js +1 -1
  134. package/dist/components/core/MenuItem/MenuItem.js +5 -2
  135. package/dist/components/core/MenuItem/MenuItem.theme.d.ts +6 -0
  136. package/dist/components/core/MenuItem/MenuItem.theme.js +19 -16
  137. package/dist/components/core/MenuItem/MenuItem.types.d.ts +2 -0
  138. package/dist/components/core/Modal/Modal.d.ts +1 -1
  139. package/dist/components/core/Modal/Modal.js +2 -7
  140. package/dist/components/core/Modal/Modal.theme.js +4 -8
  141. package/dist/components/core/Modal/Modal.types.d.ts +0 -10
  142. package/dist/components/core/Modal/index.d.ts +1 -1
  143. package/dist/components/core/ModalStack/ModalStack.d.ts +1 -1
  144. package/dist/components/core/ModalStack/ModalStack.types.d.ts +1 -2
  145. package/dist/components/core/ModalStack/ModalStackModal.d.ts +1 -1
  146. package/dist/components/core/ModalStack/ModalStackModal.js +2 -7
  147. package/dist/components/core/NavItem/NavItem.js +20 -4
  148. package/dist/components/core/NavItem/NavItem.theme.js +13 -2
  149. package/dist/components/core/PageHeading/PageHeading.theme.js +2 -2
  150. package/dist/components/core/Popover/Popover.theme.js +1 -1
  151. package/dist/components/core/Popover/Popover.types.d.ts +6 -2
  152. package/dist/components/core/Popover/PopoverBody.js +10 -3
  153. package/dist/components/core/ScrollArea/ScrollArea.js +242 -4
  154. package/dist/components/core/ScrollArea/ScrollArea.types.d.ts +12 -1
  155. package/dist/components/core/ScrollArea/smooth/SmoothScrollEngine.d.ts +4 -0
  156. package/dist/components/core/ScrollArea/smooth/SmoothScrollEngine.js +23 -0
  157. package/dist/components/core/ScrollArea/smooth/useSmoothScroll.js +4 -0
  158. package/dist/components/core/ScrollArea/smooth/useSmoothScroll.types.d.ts +5 -0
  159. package/dist/components/core/Segmented/Segmented.theme.js +2 -2
  160. package/dist/components/core/Sidebar/Sidebar.d.ts +2 -0
  161. package/dist/components/core/Sidebar/Sidebar.js +15 -7
  162. package/dist/components/core/Sidebar/Sidebar.types.d.ts +92 -4
  163. package/dist/components/core/Sidebar/SidebarCard.d.ts +25 -0
  164. package/dist/components/core/Sidebar/SidebarCard.js +68 -0
  165. package/dist/components/core/Sidebar/SidebarCard.theme.d.ts +8 -0
  166. package/dist/components/core/Sidebar/SidebarCard.theme.js +18 -0
  167. package/dist/components/core/Sidebar/SidebarContent.js +5 -1
  168. package/dist/components/core/Sidebar/SidebarContext.js +1 -1
  169. package/dist/components/core/Sidebar/SidebarHeader.js +10 -2
  170. package/dist/components/core/Sidebar/SidebarLogo.js +38 -3
  171. package/dist/components/core/Sidebar/SidebarSearch.d.ts +22 -0
  172. package/dist/components/core/Sidebar/SidebarSearch.js +135 -0
  173. package/dist/components/core/Sidebar/SidebarToggle.js +1 -1
  174. package/dist/components/core/Sidebar/SidebarUserProfile.js +2 -2
  175. package/dist/components/core/Sidebar/index.d.ts +3 -1
  176. package/dist/components/core/Tag/Tag.js +29 -5
  177. package/dist/components/core/Tag/Tag.theme.js +13 -8
  178. package/dist/components/core/Tag/Tag.types.d.ts +7 -0
  179. package/dist/components/core/Tooltip/Tooltip.js +1 -1
  180. package/dist/components/core/Tooltip/Tooltip.theme.js +1 -2
  181. package/dist/components/core/index.d.ts +2 -0
  182. package/dist/components/core/index.js +6 -0
  183. package/dist/components/data-display/DescriptionList/DescriptionList.js +23 -7
  184. package/dist/components/data-display/DescriptionList/DescriptionList.theme.js +10 -3
  185. package/dist/components/data-display/DescriptionList/DescriptionList.types.d.ts +49 -10
  186. package/dist/components/data-display/DescriptionList/index.d.ts +1 -1
  187. package/dist/components/data-display/Feed/Feed.js +28 -5
  188. package/dist/components/data-display/Feed/Feed.theme.js +1 -1
  189. package/dist/components/data-display/Feed/Feed.types.d.ts +32 -1
  190. package/dist/components/data-display/Feed/index.d.ts +1 -1
  191. package/dist/components/data-display/GanttChart/GanttChart.d.ts +1 -1
  192. package/dist/components/data-display/GanttChart/GanttChart.js +31 -4
  193. package/dist/components/data-display/GanttChart/GanttChart.theme.js +19 -17
  194. package/dist/components/data-display/GanttChart/GanttChart.types.d.ts +19 -0
  195. package/dist/components/data-display/GanttChart/GanttChart.utils.js +1 -1
  196. package/dist/components/data-display/GanttChart/GanttChartPanel.d.ts +1 -1
  197. package/dist/components/data-display/GanttChart/GanttChartPanel.js +3 -3
  198. package/dist/components/data-display/GanttChart/GanttDependencyArrows.js +7 -4
  199. package/dist/components/data-display/GanttChart/GanttMilestone.js +5 -5
  200. package/dist/components/data-display/GanttChart/GanttTablePanel.js +1 -1
  201. package/dist/components/data-display/GanttChart/GanttTableTaskRow.js +2 -2
  202. package/dist/components/data-display/GanttChart/GanttTaskBar.js +37 -16
  203. package/dist/components/data-display/GanttChart/GanttTimelineGrid.js +2 -1
  204. package/dist/components/data-display/GanttChart/GanttTimelineHeader.js +35 -11
  205. package/dist/components/data-display/GanttChart/GanttToolbar.js +2 -2
  206. package/dist/components/data-display/GanttChart/hooks/useGanttDrag.js +3 -2
  207. package/dist/components/data-display/GanttChart/index.d.ts +1 -1
  208. package/dist/components/data-display/Metric/Metric.js +8 -8
  209. package/dist/components/data-display/Metric/Metric.theme.d.ts +3 -2
  210. package/dist/components/data-display/Metric/Metric.theme.js +50 -68
  211. package/dist/components/data-display/Metric/Metric.types.d.ts +19 -21
  212. package/dist/components/data-display/Table/Table.js +2 -2
  213. package/dist/components/data-display/Table/Table.theme.js +27 -9
  214. package/dist/components/data-display/Table/Table.types.d.ts +8 -0
  215. package/dist/components/data-display/Table/TableBody.js +2 -2
  216. package/dist/components/data-display/Table/TableCell.js +1 -1
  217. package/dist/components/data-display/Table/TableRow.d.ts +1 -1
  218. package/dist/components/data-display/Table/TableRow.js +9 -2
  219. package/dist/components/data-display/Timeline/Timeline.js +27 -5
  220. package/dist/components/data-display/Timeline/Timeline.theme.d.ts +10 -2
  221. package/dist/components/data-display/Timeline/Timeline.theme.js +14 -8
  222. package/dist/components/data-display/Timeline/Timeline.types.d.ts +48 -16
  223. package/dist/components/data-display/Timeline/Timeline.utils.d.ts +6 -0
  224. package/dist/components/data-display/Timeline/Timeline.utils.js +11 -0
  225. package/dist/components/data-display/Timeline/TimelineItem.js +13 -20
  226. package/dist/components/data-display/Timeline/TimelineMarker.js +10 -8
  227. package/dist/components/data-display/Timeline/index.d.ts +2 -2
  228. package/dist/components/effects/3d/index.d.ts +0 -2
  229. package/dist/components/effects/3d/index.js +0 -1
  230. package/dist/components/effects/Aurora/Aurora.d.ts +6 -17
  231. package/dist/components/effects/Aurora/Aurora.js +297 -131
  232. package/dist/components/effects/Aurora/Aurora.types.d.ts +6 -0
  233. package/dist/components/effects/DotPattern/DotPattern.js +1 -1
  234. package/dist/components/effects/Overlay/Overlay.theme.js +1 -2
  235. package/dist/components/effects/Preloader/Preloader.animations.d.ts +23 -0
  236. package/dist/components/effects/Preloader/Preloader.animations.js +150 -0
  237. package/dist/components/effects/Preloader/Preloader.d.ts +3 -0
  238. package/dist/components/effects/Preloader/Preloader.js +119 -0
  239. package/dist/components/effects/Preloader/Preloader.types.d.ts +63 -0
  240. package/dist/components/effects/Preloader/index.d.ts +2 -0
  241. package/dist/components/effects/ProgressiveBlur/ProgressiveBlur.js +25 -14
  242. package/dist/components/effects/ProgressiveBlur/ProgressiveBlur.types.d.ts +2 -0
  243. package/dist/components/effects/TiltCard/TiltCard.d.ts +12 -0
  244. package/dist/components/effects/TiltCard/TiltCard.glow.d.ts +28 -0
  245. package/dist/components/effects/TiltCard/TiltCard.glow.js +114 -0
  246. package/dist/components/effects/TiltCard/TiltCard.js +177 -0
  247. package/dist/components/effects/{SpotlightBorder/SpotlightBorder.shaders.d.ts → TiltCard/TiltCard.shaders.d.ts} +1 -1
  248. package/dist/components/effects/{SpotlightBorder/SpotlightBorder.shaders.js → TiltCard/TiltCard.shaders.js} +1 -1
  249. package/dist/components/effects/TiltCard/TiltCard.types.d.ts +88 -0
  250. package/dist/components/effects/TiltCard/index.d.ts +2 -0
  251. package/dist/components/effects/index.d.ts +4 -12
  252. package/dist/components/effects/index.js +2 -6
  253. package/dist/components/forms/Checkbox/Checkbox.js +7 -1
  254. package/dist/components/forms/Combobox/Combobox.js +1 -1
  255. package/dist/components/forms/Combobox/Combobox.theme.js +2 -4
  256. package/dist/components/forms/DatePicker/DatePicker.theme.js +11 -18
  257. package/dist/components/forms/DatePicker/DatePickerTrigger.js +1 -1
  258. package/dist/components/forms/DateRangePicker/DateRangePicker.theme.js +6 -13
  259. package/dist/components/forms/DateRangePicker/DateRangePickerTrigger.js +1 -1
  260. package/dist/components/forms/FileUpload/FileUpload.animations.d.ts +29 -0
  261. package/dist/components/forms/FileUpload/FileUpload.animations.js +19 -0
  262. package/dist/components/forms/FileUpload/FileUpload.js +85 -134
  263. package/dist/components/forms/FileUpload/FileUpload.theme.d.ts +2 -10
  264. package/dist/components/forms/FileUpload/FileUpload.theme.js +16 -30
  265. package/dist/components/forms/FileUpload/FileUpload.types.d.ts +26 -10
  266. package/dist/components/forms/FormLabel/FormLabel.theme.js +1 -1
  267. package/dist/components/forms/Input/Input.theme.js +13 -10
  268. package/dist/components/forms/InputCounter/InputCounter.theme.js +1 -1
  269. package/dist/components/forms/Mention/Mention.js +152 -57
  270. package/dist/components/forms/Mention/Mention.theme.js +16 -23
  271. package/dist/components/forms/Mention/Mention.types.d.ts +12 -12
  272. package/dist/components/forms/Mention/Mention.utils.js +32 -4
  273. package/dist/components/forms/RichTextEditor/RichTextEditor.js +3 -3
  274. package/dist/components/forms/RichTextEditor/RichTextEditor.theme.js +5 -5
  275. package/dist/components/forms/Select/Select.js +2 -2
  276. package/dist/components/forms/Select/Select.theme.js +3 -3
  277. package/dist/components/forms/Slider/Slider.theme.js +1 -1
  278. package/dist/components/forms/Switch/Switch.js +27 -15
  279. package/dist/components/forms/Switch/Switch.theme.d.ts +36 -6
  280. package/dist/components/forms/Switch/Switch.theme.js +33 -4
  281. package/dist/components/forms/Switch/Switch.types.d.ts +12 -2
  282. package/dist/components/forms/TimePicker/TimePicker.theme.js +1 -2
  283. package/dist/components/forms/TimePicker/TimePickerContent.js +1 -87
  284. package/dist/components/forms/TimePicker/TimePickerTrigger.js +1 -1
  285. package/dist/components/forms/forms.theme.js +21 -16
  286. package/dist/components/forms/index.d.ts +0 -4
  287. package/dist/components/forms/index.js +0 -89
  288. package/dist/components/generative/GenerativeView.d.ts +21 -0
  289. package/dist/components/generative/GenerativeView.js +116 -0
  290. package/dist/components/generative/actions.d.ts +26 -0
  291. package/dist/components/generative/actions.js +51 -0
  292. package/dist/components/generative/index.d.ts +11 -0
  293. package/dist/components/generative/index.js +9 -0
  294. package/dist/components/generative/registry.d.ts +43 -0
  295. package/dist/components/generative/registry.js +114 -0
  296. package/dist/components/generative/resolvers.d.ts +35 -0
  297. package/dist/components/generative/resolvers.js +93 -0
  298. package/dist/components/generative/schema.generated.d.ts +2 -0
  299. package/dist/components/generative/schema.generated.js +1639 -0
  300. package/dist/components/generative/schemaTypes.d.ts +30 -0
  301. package/dist/components/generative/streaming.d.ts +39 -0
  302. package/dist/components/generative/streaming.js +283 -0
  303. package/dist/components/generative/tools.d.ts +21 -0
  304. package/dist/components/generative/tools.js +54 -0
  305. package/dist/components/generative/types.d.ts +41 -0
  306. package/dist/components/generative/useGenerativeStream.d.ts +37 -0
  307. package/dist/components/generative/useGenerativeStream.js +36 -0
  308. package/dist/components/generative/validate.d.ts +24 -0
  309. package/dist/components/generative/validate.js +259 -0
  310. package/dist/components/layout/AppShell/AppShell.d.ts +10 -0
  311. package/dist/components/layout/AppShell/AppShell.js +84 -0
  312. package/dist/components/layout/AppShell/AppShell.theme.d.ts +3 -0
  313. package/dist/components/layout/AppShell/AppShell.theme.js +42 -0
  314. package/dist/components/layout/AppShell/AppShell.types.d.ts +127 -0
  315. package/dist/components/layout/AppShell/AppShellContext.d.ts +14 -0
  316. package/dist/components/layout/AppShell/AppShellContext.js +19 -0
  317. package/dist/components/layout/AppShell/AppShellFooter.d.ts +3 -0
  318. package/dist/components/layout/AppShell/AppShellFooter.js +12 -0
  319. package/dist/components/layout/AppShell/AppShellHeader.d.ts +3 -0
  320. package/dist/components/layout/AppShell/AppShellHeader.js +12 -0
  321. package/dist/components/layout/AppShell/AppShellMain.d.ts +3 -0
  322. package/dist/components/layout/AppShell/AppShellMain.js +19 -0
  323. package/dist/components/layout/AppShell/AppShellRightPanel.d.ts +3 -0
  324. package/dist/components/layout/AppShell/AppShellRightPanel.js +16 -0
  325. package/dist/components/layout/AppShell/AppShellSidebar.d.ts +3 -0
  326. package/dist/components/layout/AppShell/AppShellSidebar.js +16 -0
  327. package/dist/components/layout/AppShell/AppShellTopbar.d.ts +3 -0
  328. package/dist/components/layout/AppShell/AppShellTopbar.js +12 -0
  329. package/dist/components/layout/AppShell/index.d.ts +3 -0
  330. package/dist/components/layout/FormLayout/FormLayout.js +1 -87
  331. package/dist/components/layout/Grid/Grid.d.ts +3 -0
  332. package/dist/components/layout/Grid/Grid.js +50 -0
  333. package/dist/components/layout/Grid/Grid.theme.d.ts +2 -0
  334. package/dist/components/layout/Grid/Grid.theme.js +35 -0
  335. package/dist/components/layout/Grid/Grid.types.d.ts +57 -0
  336. package/dist/components/layout/Grid/index.d.ts +3 -0
  337. package/dist/components/layout/Section/Section.d.ts +3 -0
  338. package/dist/components/layout/Section/Section.js +18 -0
  339. package/dist/components/layout/Section/Section.theme.d.ts +2 -0
  340. package/dist/components/layout/Section/Section.theme.js +10 -0
  341. package/dist/components/layout/Section/Section.types.d.ts +34 -0
  342. package/dist/components/layout/Section/index.d.ts +3 -0
  343. package/dist/components/layout/Stack/Stack.d.ts +3 -0
  344. package/dist/components/layout/Stack/Stack.js +19 -0
  345. package/dist/components/layout/Stack/Stack.theme.d.ts +2 -0
  346. package/dist/components/layout/Stack/Stack.theme.js +10 -0
  347. package/dist/components/layout/Stack/Stack.types.d.ts +39 -0
  348. package/dist/components/layout/Stack/index.d.ts +3 -0
  349. package/dist/components/layout/index.d.ts +4 -0
  350. package/dist/components/layout/index.js +8 -0
  351. package/dist/generative.schema.json +1637 -0
  352. package/dist/hooks/useSelectPortal.d.ts +10 -2
  353. package/dist/hooks/useSelectPortal.js +45 -24
  354. package/dist/index.js +180 -174
  355. package/dist/registry.json +10205 -0
  356. package/dist/styles.css +1 -1
  357. package/dist/tools.json +1731 -0
  358. package/dist/utils/dateUtils.js +11 -1
  359. package/package.json +19 -4
  360. package/src/global.scss +82 -109
  361. package/src/styles/theme.css +707 -474
  362. package/dist/bg/1.jpg +0 -0
  363. package/dist/bg/10.jpg +0 -0
  364. package/dist/bg/11.jpg +0 -0
  365. package/dist/bg/14.jpg +0 -0
  366. package/dist/bg/15.jpg +0 -0
  367. package/dist/bg/16.jpg +0 -0
  368. package/dist/bg/17.jpg +0 -0
  369. package/dist/bg/18.jpg +0 -0
  370. package/dist/bg/19.jpg +0 -0
  371. package/dist/bg/2.jpg +0 -0
  372. package/dist/bg/20.jpg +0 -0
  373. package/dist/bg/21.jpg +0 -0
  374. package/dist/bg/22.jpg +0 -0
  375. package/dist/bg/23.jpg +0 -0
  376. package/dist/bg/24.jpg +0 -0
  377. package/dist/bg/3.jpg +0 -0
  378. package/dist/bg/4.jpg +0 -0
  379. package/dist/bg/5.jpg +0 -0
  380. package/dist/bg/6.jpg +0 -0
  381. package/dist/bg/7.jpg +0 -0
  382. package/dist/bg/8.jpg +0 -0
  383. package/dist/bg/9.jpg +0 -0
  384. package/dist/components/effects/MorphingText/MorphingText.d.ts +0 -17
  385. package/dist/components/effects/MorphingText/MorphingText.js +0 -125
  386. package/dist/components/effects/MorphingText/MorphingText.types.d.ts +0 -18
  387. package/dist/components/effects/MorphingText/index.d.ts +0 -2
  388. package/dist/components/effects/PageTransition/PageTransition.animations.d.ts +0 -8
  389. package/dist/components/effects/PageTransition/PageTransition.animations.js +0 -53
  390. package/dist/components/effects/PageTransition/PageTransition.d.ts +0 -3
  391. package/dist/components/effects/PageTransition/PageTransition.js +0 -82
  392. package/dist/components/effects/PageTransition/PageTransition.types.d.ts +0 -15
  393. package/dist/components/effects/PageTransition/index.d.ts +0 -2
  394. package/dist/components/effects/ParallaxSection/ParallaxSection.d.ts +0 -26
  395. package/dist/components/effects/ParallaxSection/ParallaxSection.js +0 -71
  396. package/dist/components/effects/ParallaxSection/ParallaxSection.types.d.ts +0 -11
  397. package/dist/components/effects/ParallaxSection/index.d.ts +0 -2
  398. package/dist/components/effects/Spotlight/Spotlight.d.ts +0 -36
  399. package/dist/components/effects/Spotlight/Spotlight.js +0 -112
  400. package/dist/components/effects/Spotlight/Spotlight.types.d.ts +0 -29
  401. package/dist/components/effects/Spotlight/index.d.ts +0 -2
  402. package/dist/components/effects/SpotlightBorder/SpotlightBorder.d.ts +0 -18
  403. package/dist/components/effects/SpotlightBorder/SpotlightBorder.js +0 -213
  404. package/dist/components/effects/SpotlightBorder/SpotlightBorder.types.d.ts +0 -61
  405. package/dist/components/effects/SpotlightBorder/index.d.ts +0 -2
  406. package/dist/components/effects/StickyScroll/StickyScroll.d.ts +0 -30
  407. package/dist/components/effects/StickyScroll/StickyScroll.js +0 -128
  408. package/dist/components/effects/StickyScroll/StickyScroll.types.d.ts +0 -19
  409. package/dist/components/effects/StickyScroll/index.d.ts +0 -2
  410. package/dist/components/forms/CronInput/CronInput.d.ts +0 -3
  411. package/dist/components/forms/CronInput/CronInput.js +0 -113
  412. package/dist/components/forms/CronInput/CronInput.theme.d.ts +0 -6
  413. package/dist/components/forms/CronInput/CronInput.theme.js +0 -84
  414. package/dist/components/forms/CronInput/CronInput.types.d.ts +0 -109
  415. package/dist/components/forms/CronInput/CronInput.utils.d.ts +0 -67
  416. package/dist/components/forms/CronInput/CronInput.utils.js +0 -505
  417. package/dist/components/forms/CronInput/index.d.ts +0 -4
  418. /package/dist/components/effects/{SpotlightBorder/SpotlightBorder.types.js → TiltCard/TiltCard.types.js} +0 -0
@@ -5,12 +5,14 @@ import { cn } from '../../../utils/cn.js';
5
5
  import { useTooltipPosition } from '../hooks/useTooltipPosition.js';
6
6
  import { useChartAccessibility } from '../hooks/useChartAccessibility.js';
7
7
  import { useChartValidation } from '../hooks/useChartValidation.js';
8
+ import { useChartDimensions } from '../hooks/useChartDimensions.js';
8
9
  import { ChartErrorBoundary } from '../shared/ChartErrorBoundary/ChartErrorBoundary.js';
9
10
  import { XAxis } from '../shared/ChartAxis/XAxis.js';
10
11
  import { YAxis } from '../shared/ChartAxis/YAxis.js';
11
12
  import { HorizontalGrid } from '../shared/ChartGrid/HorizontalGrid.js';
12
13
  import { ChartTooltip } from '../shared/ChartTooltip/ChartTooltip.js';
13
14
  import { STACKED_BAR_CHART_DEFAULTS } from './StackedBarChart.types.js';
15
+ import { X_AXIS_MARGIN } from '../types/chart.types.js';
14
16
  import { ExclamationTriangleIcon } from '@heroicons/react/20/solid';
15
17
 
16
18
  // Pure helper functions moved to module level to avoid recreation per render
@@ -45,7 +47,7 @@ stackOffset = STACKED_BAR_CHART_DEFAULTS.stackOffset,
45
47
  // Animation props
46
48
  showAnimation = STACKED_BAR_CHART_DEFAULTS.showAnimation,
47
49
  // Base props
48
- className, title, description, enableKeyboardNavigation = STACKED_BAR_CHART_DEFAULTS.enableKeyboardNavigation, showValidationWarnings = process.env.NODE_ENV === "development", children, ...props }) => {
50
+ className, title, description, enableKeyboardNavigation = STACKED_BAR_CHART_DEFAULTS.enableKeyboardNavigation, showValidationWarnings = process.env.NODE_ENV === "development", width, height, children, ...props }) => {
49
51
  var _a;
50
52
  // Animation state
51
53
  const shouldReduceMotion = useReducedMotion();
@@ -73,7 +75,19 @@ className, title, description, enableKeyboardNavigation = STACKED_BAR_CHART_DEFA
73
75
  return (jsx("div", { className: cn("chart-container flex items-center justify-center text-[var(--color-text-muted)]", className), role: "img", "aria-label": "Empty stacked bar chart", ...props, children: jsx("span", { children: "No data available" }) }));
74
76
  }
75
77
  // Color palette using CSS variables
76
- const getSeriesFillColor = (index) => {
78
+ const getSeriesFillColor = (index, key) => {
79
+ var _a;
80
+ if (key && config && ((_a = config[key]) === null || _a === void 0 ? void 0 : _a.color)) {
81
+ const customColor = config[key].color;
82
+ if (!customColor.startsWith("var(") &&
83
+ !customColor.startsWith("#") &&
84
+ !customColor.startsWith("rgb") &&
85
+ !customColor.startsWith("hsl") &&
86
+ customColor.includes("-")) {
87
+ return `var(--color-${customColor})`;
88
+ }
89
+ return customColor;
90
+ }
77
91
  const colorVars = [
78
92
  "var(--color-primary)",
79
93
  "var(--color-primary-400)",
@@ -85,7 +99,9 @@ className, title, description, enableKeyboardNavigation = STACKED_BAR_CHART_DEFA
85
99
  return colorVars[index % colorVars.length];
86
100
  };
87
101
  const containerRef = useRef(null);
88
- const [dimensions, setDimensions] = useState({ width: 600, height: 400 });
102
+ // `measured` gates bar mount so motion captures geometry in the real
103
+ // coordinate space, not the 600×400 fallback (cold-load below-baseline bug).
104
+ const { dimensions, measured } = useChartDimensions(containerRef);
89
105
  const [hoveredCategory, setHoveredCategory] = useState(null);
90
106
  const isMobile = typeof window !== "undefined" &&
91
107
  ("ontouchstart" in window || navigator.maxTouchPoints > 0);
@@ -101,31 +117,11 @@ className, title, description, enableKeyboardNavigation = STACKED_BAR_CHART_DEFA
101
117
  description,
102
118
  enableKeyboardNavigation,
103
119
  });
104
- // Measure container dimensions
105
- useEffect(() => {
106
- const updateDimensions = () => {
107
- if (containerRef.current) {
108
- const { width, height } = containerRef.current.getBoundingClientRect();
109
- setDimensions({
110
- width: width || 600,
111
- height: height || 400,
112
- });
113
- }
114
- };
115
- updateDimensions();
116
- const resizeObserver = new ResizeObserver(updateDimensions);
117
- if (containerRef.current) {
118
- resizeObserver.observe(containerRef.current);
119
- }
120
- return () => {
121
- resizeObserver.disconnect();
122
- };
123
- }, []);
124
120
  // Calculate dimensions
125
121
  const margin = useMemo(() => ({
126
122
  top: 15,
127
123
  right: showYAxis ? 20 : 0,
128
- bottom: showXAxis ? 20 : 0,
124
+ bottom: showXAxis ? X_AXIS_MARGIN : 0,
129
125
  left: showYAxis ? 60 : 0,
130
126
  }), [showYAxis, showXAxis]);
131
127
  const innerWidth = Math.max(0, dimensions.width - margin.left - margin.right);
@@ -190,7 +186,7 @@ className, title, description, enableKeyboardNavigation = STACKED_BAR_CHART_DEFA
190
186
  const isFocused = isKeyboardMode && focusedElementIndex === categoryIndex;
191
187
  const range = maxValue - minValue;
192
188
  return (jsx("g", { children: dataKeys.map((key, keyIndex) => {
193
- var _a, _b;
189
+ var _a;
194
190
  const stackData = (_a = getStackedValues[key]) === null || _a === void 0 ? void 0 : _a[categoryIndex];
195
191
  if (!stackData)
196
192
  return null;
@@ -218,7 +214,7 @@ className, title, description, enableKeyboardNavigation = STACKED_BAR_CHART_DEFA
218
214
  const pathD = isTopSegment
219
215
  ? createRoundedTopBarPath(x, barY, barWidth, barHeight, barRadius)
220
216
  : createRectPath(x, barY, barWidth, barHeight);
221
- const fillColor = ((_b = config[key]) === null || _b === void 0 ? void 0 : _b.color) || getSeriesFillColor(keyIndex);
217
+ const fillColor = getSeriesFillColor(keyIndex, key);
222
218
  const delay = categoryIndex * BAR_STAGGER;
223
219
  return (jsx(motion.path, { d: pathD, initial: showAnimation && !shouldReduceMotion
224
220
  ? { scaleY: 0, opacity: 0 }
@@ -242,7 +238,7 @@ className, title, description, enableKeyboardNavigation = STACKED_BAR_CHART_DEFA
242
238
  setHoveredCategory(categoryIndex);
243
239
  // Create tooltip content with all series
244
240
  const series = dataKeys.map((dataKey, idx) => {
245
- var _a, _b;
241
+ var _a;
246
242
  const rawValue = item[dataKey];
247
243
  const value = typeof rawValue === "number" && isFinite(rawValue)
248
244
  ? rawValue
@@ -251,7 +247,7 @@ className, title, description, enableKeyboardNavigation = STACKED_BAR_CHART_DEFA
251
247
  key: dataKey,
252
248
  label: ((_a = config[dataKey]) === null || _a === void 0 ? void 0 : _a.label) || dataKey,
253
249
  value,
254
- color: ((_b = config[dataKey]) === null || _b === void 0 ? void 0 : _b.color) || getSeriesFillColor(idx),
250
+ color: getSeriesFillColor(idx, dataKey),
255
251
  };
256
252
  });
257
253
  // Calculate total
@@ -282,16 +278,20 @@ className, title, description, enableKeyboardNavigation = STACKED_BAR_CHART_DEFA
282
278
  } }, key));
283
279
  }) }, categoryIndex));
284
280
  };
285
- return (jsx(ChartErrorBoundary, { className: className, showErrorDetails: process.env.NODE_ENV === "development", children: jsxs("div", { ref: containerRef, className: cn("chart-container w-full h-full", className), ...chartAccessibilityProps, onMouseEnter: handleMouseInteraction, onMouseMove: handleMouseInteraction, ...props, children: [descriptionProps && jsx("div", { ...descriptionProps }), showValidationWarnings && hasWarnings && (jsxs("div", { className: "absolute top-2 left-2 right-2 z-10 p-2 bg-[var(--color-warning-50)] border border-[var(--color-warning-200)] rounded text-sm text-[var(--color-warning)] shadow-sm", children: [jsx("strong", { children: "Chart Warnings:" }), jsx("ul", { className: "mt-1", children: validation.warnings.map((warning, index) => (jsxs("li", { children: ["\u2022 ", warning.message] }, index))) })] })), jsxs("svg", { width: "100%", height: "100%", viewBox: `0 0 ${dimensions.width} ${dimensions.height}`, children: [jsx(HorizontalGrid, { show: showGrid, x: margin.left, y: margin.top, width: innerWidth, height: innerHeight, lineCount: 5 }), jsx(YAxis, { show: showYAxis, min: minValue, max: maxValue, x: margin.left, y: margin.top, height: innerHeight, showGrid: false, gridWidth: innerWidth, tickFormatter: (value) => {
281
+ return (jsx(ChartErrorBoundary, { className: className, showErrorDetails: process.env.NODE_ENV === "development", children: jsxs("div", { ref: containerRef, className: cn("chart-container w-full h-full", className), style: {
282
+ width: width !== undefined ? (typeof width === "number" ? `${width}px` : width) : undefined,
283
+ height: height !== undefined ? (typeof height === "number" ? `${height}px` : height) : undefined,
284
+ }, ...chartAccessibilityProps, onMouseEnter: handleMouseInteraction, onMouseMove: handleMouseInteraction, ...props, children: [descriptionProps && jsx("div", { ...descriptionProps }), showValidationWarnings && hasWarnings && (jsxs("div", { className: "absolute top-2 left-2 right-2 z-10 p-2 bg-[var(--color-warning-50)] border border-[var(--color-warning-200)] rounded text-sm text-[var(--color-warning)] shadow-sm", children: [jsx("strong", { children: "Chart Warnings:" }), jsx("ul", { className: "mt-1", children: validation.warnings.map((warning, index) => (jsxs("li", { children: ["\u2022 ", warning.message] }, index))) })] })), jsxs("svg", { width: "100%", height: "100%", viewBox: `0 0 ${dimensions.width} ${dimensions.height}`, children: [jsx(HorizontalGrid, { show: showGrid, x: margin.left, y: margin.top, width: innerWidth, height: innerHeight, lineCount: 5 }), jsx(YAxis, { show: showYAxis, min: minValue, max: maxValue, x: margin.left, y: margin.top, height: innerHeight, showGrid: false, gridWidth: innerWidth, tickFormatter: (value) => {
286
285
  if (stackOffset === "expand")
287
286
  return `${value}%`;
288
287
  if (Math.abs(value) >= 1000)
289
288
  return `${(value / 1000).toFixed(0)}k`;
290
289
  return value.toString();
291
- } }), jsx("g", { className: "chart-bars", children: sanitizedData.map((item, index) => {
292
- const x = margin.left + index * (barWidth + categoryGap);
293
- return renderStackedBar(item, index, x);
294
- }) }), jsx(XAxis, { show: showXAxis, data: sanitizedData, x: margin.left, y: margin.top + innerHeight, width: innerWidth, categoryWidth: barWidth, categoryGap: categoryGap })] }), jsx(ChartTooltip, { tooltipRef: tooltipRef, content: tooltipData === null || tooltipData === void 0 ? void 0 : tooltipData.content, active: !!tooltipData, position: tooltipData
290
+ } }), jsx("g", { className: "chart-bars", children: measured &&
291
+ sanitizedData.map((item, index) => {
292
+ const x = margin.left + index * (barWidth + categoryGap);
293
+ return renderStackedBar(item, index, x);
294
+ }) }), jsx(XAxis, { show: showXAxis, data: sanitizedData, x: margin.left, y: margin.top + innerHeight, width: innerWidth, categoryWidth: barWidth, categoryGap: categoryGap })] }), jsx(ChartTooltip, { tooltipRef: tooltipRef, content: tooltipData === null || tooltipData === void 0 ? void 0 : tooltipData.content, active: !!tooltipData, position: tooltipData
295
295
  ? { x: tooltipData.x, y: tooltipData.y }
296
296
  : { x: 0, y: 0 } }), children] }) }));
297
297
  };
@@ -18,7 +18,7 @@ export declare const STACKED_BAR_CHART_DEFAULTS: {
18
18
  readonly showGrid: true;
19
19
  readonly showXAxis: true;
20
20
  readonly showYAxis: true;
21
- readonly dotRadius: 4;
21
+ readonly dotRadius: 3;
22
22
  readonly cellRadius: 4;
23
23
  readonly radius: 20;
24
24
  readonly strokeWidth: 2;
@@ -26,7 +26,7 @@ export declare const STACKED_BAR_CHART_DEFAULTS: {
26
26
  readonly curveType: import("..").CurveType;
27
27
  readonly fillOpacity: 0.3;
28
28
  readonly showStroke: true;
29
- readonly showDots: true;
29
+ readonly showDots: false;
30
30
  readonly stacked: false;
31
31
  readonly variant: import("..").ChartVariant;
32
32
  readonly enableKeyboardNavigation: true;
@@ -4,3 +4,5 @@ export { useTooltipPosition } from './useTooltipPosition';
4
4
  export { useChartValidation, useChartDataValidation, useChartValidationProduction } from './useChartValidation';
5
5
  export { useChartScales } from './useChartScales';
6
6
  export type { UseChartScalesOptions, UseChartScalesReturn, ChartScales } from './useChartScales';
7
+ export { useChartDimensions } from './useChartDimensions';
8
+ export type { ChartDimensions, UseChartDimensionsReturn } from './useChartDimensions';
@@ -0,0 +1,29 @@
1
+ export interface ChartDimensions {
2
+ width: number;
3
+ height: number;
4
+ }
5
+ export interface UseChartDimensionsReturn {
6
+ /** Current container size. Starts at the fallback, corrected on measurement. */
7
+ dimensions: ChartDimensions;
8
+ /**
9
+ * `true` once the container has been measured with real (>0) width AND height.
10
+ *
11
+ * 🔴 Gate mount-animated SVG geometry (scaleY bars, scale-in dots, clip-sweep
12
+ * reveals) on this flag. Charts seed `dimensions` with a 600×400 fallback and
13
+ * only learn their true size after the ResizeObserver fires. `motion` elements
14
+ * capture their initial geometry and transform-origin at mount, so if they
15
+ * mount in the fallback coordinate space the entrance animation plays from the
16
+ * wrong place (e.g. bars rising from below the x-axis on cold load). Mounting
17
+ * the animated layer only when `measured` guarantees motion captures geometry
18
+ * in the final coordinate space. The measurement runs in a layout effect, so
19
+ * the corrected size lands synchronously before paint — no fallback frame is
20
+ * ever shown.
21
+ */
22
+ measured: boolean;
23
+ }
24
+ /**
25
+ * Measures a chart's container element and reports a `measured` flag once a real
26
+ * size is known. Replaces the per-chart inline ResizeObserver block so every
27
+ * Cartesian chart shares one correct implementation (see `measured` docs above).
28
+ */
29
+ export declare function useChartDimensions(containerRef: React.RefObject<HTMLElement | HTMLDivElement | null>, fallback?: ChartDimensions): UseChartDimensionsReturn;
@@ -0,0 +1,42 @@
1
+ import { useState, useEffect, useLayoutEffect } from 'react';
2
+
3
+ // SSR-safe layout effect — charts only render meaningfully on the client, but
4
+ // guarding avoids React's useLayoutEffect-on-server warning.
5
+ const useIsomorphicLayoutEffect = typeof window === "undefined" ? useEffect : useLayoutEffect;
6
+ const FALLBACK = { width: 600, height: 400 };
7
+ /**
8
+ * Measures a chart's container element and reports a `measured` flag once a real
9
+ * size is known. Replaces the per-chart inline ResizeObserver block so every
10
+ * Cartesian chart shares one correct implementation (see `measured` docs above).
11
+ */
12
+ function useChartDimensions(containerRef, fallback = FALLBACK) {
13
+ const [dimensions, setDimensions] = useState(fallback);
14
+ const [measured, setMeasured] = useState(false);
15
+ useIsomorphicLayoutEffect(() => {
16
+ const updateDimensions = () => {
17
+ if (containerRef.current) {
18
+ const { width, height } = containerRef.current.getBoundingClientRect();
19
+ setDimensions({
20
+ width: width || fallback.width,
21
+ height: height || fallback.height,
22
+ });
23
+ if (width > 0 && height > 0) {
24
+ setMeasured(true);
25
+ }
26
+ }
27
+ };
28
+ updateDimensions();
29
+ const resizeObserver = new ResizeObserver(updateDimensions);
30
+ if (containerRef.current) {
31
+ resizeObserver.observe(containerRef.current);
32
+ }
33
+ return () => {
34
+ resizeObserver.disconnect();
35
+ };
36
+ // fallback is read inside but is a stable default; ref identity is constant.
37
+ // eslint-disable-next-line react-hooks/exhaustive-deps
38
+ }, [containerRef]);
39
+ return { dimensions, measured };
40
+ }
41
+
42
+ export { useChartDimensions };
@@ -4,7 +4,7 @@
4
4
  * Follows the established theming pattern with CSS variables
5
5
  */
6
6
  const chartTooltipTheme = {
7
- baseStyle: "fixed z-50 text-[var(--color-text-primary)] rounded-[var(--tooltip-radius)] px-3 py-2 shadow-lg pointer-events-none glass-effect",
7
+ baseStyle: "fixed z-[99] text-[var(--color-text-primary)] rounded-[var(--tooltip-radius)] px-3 py-2 shadow-real-lg pointer-events-none bg-[var(--color-surface-overlay)]/60 backdrop-blur-lg outline outline-[var(--color-border)]",
8
8
  contentStyle: "whitespace-nowrap text-sm",
9
9
  multiSeriesContainerStyle: "text-left",
10
10
  categoryStyle: "text-xs font-semibold mb-1 text-[var(--color-text-primary)]",
@@ -37,12 +37,19 @@ export interface ChartThemeOverrides {
37
37
  colors: string[];
38
38
  }>>;
39
39
  }
40
+ /**
41
+ * Shared bottom margin (px) reserved for the X-axis across all Cartesian charts
42
+ * (Area/Line/Bar/StackedBar). A single source of truth so their plot baselines
43
+ * always align when placed side by side. Sized to fit one row of axis labels
44
+ * (XAxis tickLength 6 + tickPadding 12 + label height).
45
+ */
46
+ export declare const X_AXIS_MARGIN = 28;
40
47
  export declare const CHART_DEFAULTS: {
41
48
  readonly showGrid: true;
42
49
  readonly showXAxis: true;
43
50
  readonly showYAxis: true;
44
51
  readonly barRadius: 32;
45
- readonly dotRadius: 4;
52
+ readonly dotRadius: 3;
46
53
  readonly cellRadius: 4;
47
54
  readonly radius: 20;
48
55
  readonly strokeWidth: 2;
@@ -52,7 +59,7 @@ export declare const CHART_DEFAULTS: {
52
59
  readonly curveType: CurveType;
53
60
  readonly fillOpacity: 0.3;
54
61
  readonly showStroke: true;
55
- readonly showDots: true;
62
+ readonly showDots: false;
56
63
  readonly orientation: "vertical" | "horizontal";
57
64
  readonly stacked: false;
58
65
  readonly variant: ChartVariant;
@@ -63,6 +70,8 @@ export interface BaseChartProps {
63
70
  config: ChartConfig;
64
71
  className?: string;
65
72
  children?: ReactNode;
73
+ width?: string | number;
74
+ height?: string | number;
66
75
  title?: string;
67
76
  description?: string;
68
77
  enableKeyboardNavigation?: boolean;
@@ -1,3 +1,10 @@
1
+ /**
2
+ * Shared bottom margin (px) reserved for the X-axis across all Cartesian charts
3
+ * (Area/Line/Bar/StackedBar). A single source of truth so their plot baselines
4
+ * always align when placed side by side. Sized to fit one row of axis labels
5
+ * (XAxis tickLength 6 + tickPadding 12 + label height).
6
+ */
7
+ const X_AXIS_MARGIN = 28;
1
8
  // Standardized Chart Defaults
2
9
  const CHART_DEFAULTS = {
3
10
  // Display options
@@ -6,7 +13,7 @@ const CHART_DEFAULTS = {
6
13
  showYAxis: true,
7
14
  // Visual properties
8
15
  barRadius: 32, // For bar corners (rounded top)
9
- dotRadius: 4, // For line/area dot markers
16
+ dotRadius: 3, // For line/area dot markers
10
17
  cellRadius: 4, // For heatmap cells
11
18
  radius: 20, // @deprecated Use barRadius, dotRadius, or cellRadius instead
12
19
  strokeWidth: 2,
@@ -17,7 +24,7 @@ const CHART_DEFAULTS = {
17
24
  curveType: 'monotone',
18
25
  fillOpacity: 0.3,
19
26
  showStroke: true,
20
- showDots: true,
27
+ showDots: false,
21
28
  // Bar specific
22
29
  orientation: 'vertical',
23
30
  // Layout
@@ -28,4 +35,4 @@ const CHART_DEFAULTS = {
28
35
  enableKeyboardNavigation: true,
29
36
  };
30
37
 
31
- export { CHART_DEFAULTS };
38
+ export { CHART_DEFAULTS, X_AXIS_MARGIN };
@@ -94,7 +94,11 @@ const Avatar = React__default.forwardRef(({ src, name, size = "md", status = "no
94
94
  const avatarWithTooltip = showTooltip && resolvedName ? (jsx(Tooltip, { content: resolvedName, placement: "top", children: avatarCircle })) : (avatarCircle);
95
95
  // If no text section, render just the avatar
96
96
  if (!hasTextSection) {
97
- return (jsx("div", { ref: ref, role: ariaRole === "presentation" ? "presentation" : undefined, "aria-label": ariaRole === "presentation" ? undefined : accessibilityLabel, "data-size": size, "data-status": status, "data-error": imageError ? "true" : "false", ...props, children: avatarWithTooltip }));
97
+ return (jsx("div", { ref: ref,
98
+ // inline-flex so the inline-flex circle is a flex child, not inline-level
99
+ // content — a plain block wrapper leaves a ~5px baseline descender below
100
+ // the circle, inflating the box and misaligning AvatarGroup's overflow chip.
101
+ className: "inline-flex", role: ariaRole === "presentation" ? "presentation" : undefined, "aria-label": ariaRole === "presentation" ? undefined : accessibilityLabel, "data-size": size, "data-status": status, "data-error": imageError ? "true" : "false", ...props, children: avatarWithTooltip }));
98
102
  }
99
103
  // Render avatar with text section
100
104
  return (jsxs("div", { ref: ref, className: cn("inline-flex items-center", avatarTheme.gapSizes[size]), role: ariaRole === "presentation" ? "presentation" : undefined, "aria-label": ariaRole === "presentation" ? undefined : accessibilityLabel, "data-size": size, "data-status": status, "data-error": imageError ? "true" : "false", ...props, children: [avatarWithTooltip, jsxs("div", { className: "min-w-0", children: [resolvedTitle && (jsx("div", { className: cn(avatarTheme.titleStyle, avatarTheme.textSizes[size]), children: resolvedTitle })), subtitle && (jsx("div", { className: cn(avatarTheme.subtitleStyle, avatarTheme.textSizes[size]), children: subtitle }))] })] }));
@@ -44,11 +44,15 @@ const AvatarGroup = React__default.forwardRef(({ avatars = [], max = 5, size = "
44
44
  }
45
45
  : {};
46
46
  return (jsx(MotionDiv, { className: cn(
47
+ // flex (not the default block) so the inline-flex Avatar is a flex
48
+ // child — a block wrapper would leave a baseline descender below it,
49
+ // inflating the row and dropping the self-centered overflow chip.
50
+ "flex",
47
51
  // First avatar doesn't need negative margin
48
52
  index > 0 ? spacingClass : "z-10"), "data-position": position, "data-index": index, ...motionProps, children: jsx(Avatar, { size: size, ...avatarProps, contextualLabel: contextLabel,
49
53
  // Ensure that groupPosition is not passed to avoid conflicts
50
54
  groupPosition: undefined }) }, index));
51
- }), overflowCount > 0 && (jsx("div", { className: cn(spacingClass, "self-center"), "data-overflow-count": overflowCount, children: overflowIndicator ? (overflowIndicator(overflowCount)) : (jsx(Avatar, { size: size, name: `+${overflowCount} more`, fallback: jsxs("span", { children: ["+", overflowCount] }), className: avatarGroupTheme.overflowAvatarStyle, role: "img", "aria-label": `+ ${overflowCount} more users` })) }))] }));
55
+ }), overflowCount > 0 && (jsx("div", { className: cn("flex", spacingClass), "data-overflow-count": overflowCount, children: overflowIndicator ? (overflowIndicator(overflowCount)) : (jsx(Avatar, { size: size, name: `+${overflowCount} more`, fallback: jsxs("span", { children: ["+", overflowCount] }), className: avatarGroupTheme.overflowAvatarStyle, role: "img", "aria-label": `+ ${overflowCount} more users` })) }))] }));
52
56
  });
53
57
  // Set display name for dev tools and Storybook
54
58
  AvatarGroup.displayName = "AvatarGroup";
@@ -3,7 +3,9 @@
3
3
  */
4
4
  const avatarGroupTheme = {
5
5
  // Base styles for the avatar group
6
- baseStyle: "flex items-start",
6
+ baseStyle: "flex items-center",
7
+ // NOTE: items-center only works because Avatar's wrapper no longer leaves a
8
+ // baseline descender below the circle (Avatar.tsx wrapper is inline-flex).
7
9
  // Spacing options - separated from hover effects
8
10
  spacingStyles: {
9
11
  tight: "-ml-5 z-10",
@@ -11,7 +13,7 @@ const avatarGroupTheme = {
11
13
  loose: "-ml-2 z-10",
12
14
  },
13
15
  // Overflow avatar styles
14
- overflowAvatarStyle: "bg-[var(--color-surface)] text-[var(--color-text-secondary)] font-semibold text-xs flex items-center justify-center size-7",
16
+ overflowAvatarStyle: "bg-[var(--color-surface)]/60 backdrop-blur-sm text-[var(--color-text-secondary)] font-bold tracking-tight text-[10px] flex items-center justify-center size-6",
15
17
  };
16
18
 
17
19
  export { avatarGroupTheme };
@@ -128,7 +128,7 @@ const Badge = React__default.memo(React__default.forwardRef(({ children, variant
128
128
  const renderLeftContent = () => {
129
129
  var _a, _b, _c;
130
130
  if (avatar) {
131
- return (jsx("span", { className: cn("inline-flex items-center justify-center shrink-0 overflow-hidden [&_div]:!size-full", (_a = theme.avatarSizes) === null || _a === void 0 ? void 0 : _a[size], pill ? "rounded-full -ml-2" : "rounded-full -ml-1.5"), children: jsx(Avatar, { src: avatar.src, name: avatar.name, fallback: (_b = avatar.fallback) !== null && _b !== void 0 ? _b : jsx(UserIcon, { className: "size-2.5" }), initialsCount: avatar.initialsCount, size: "xs", className: cn("!size-full border-0", pill ? "rounded-full" : "rounded-md ring-0") }) }));
131
+ return (jsx("span", { className: cn("inline-flex items-center justify-center shrink-0 overflow-hidden [&_div]:!size-full", (_a = theme.avatarSizes) === null || _a === void 0 ? void 0 : _a[size], pill ? "rounded-full -ml-2" : "rounded-full -ml-0"), children: jsx(Avatar, { src: avatar.src, name: avatar.name, fallback: (_b = avatar.fallback) !== null && _b !== void 0 ? _b : jsx(UserIcon, { className: "size-2.5" }), initialsCount: avatar.initialsCount, size: "xs", className: cn("!size-full border-0", pill ? "rounded-full" : "rounded-md ring-0") }) }));
132
132
  }
133
133
  if (iconStart) {
134
134
  return (jsx("span", { className: cn("inline-flex items-center justify-center flex-shrink-0 -ml-1", (_c = theme.iconSizes) === null || _c === void 0 ? void 0 : _c[size]), "aria-hidden": "true", children: iconStart }));
@@ -4,13 +4,13 @@
4
4
  */
5
5
  const badgeTheme = {
6
6
  // Base styles applied to all badges
7
- baseStyle: "inline-flex items-center align-middle select-none whitespace-nowrap transition-all duration-300 h-fit w-fit tracking-tight font-semibold border",
7
+ baseStyle: "inline-flex items-center align-middle select-none whitespace-nowrap transition-all duration-300 h-fit w-fit tracking-tight font-medium border",
8
8
  // Visual style variants (structure only, no colors)
9
9
  // All variants get `border` via baseStyle for consistent box sizing
10
10
  variants: {
11
11
  filled: "border-transparent",
12
12
  outline: "bg-transparent",
13
- soft: "",
13
+ soft: "border-none",
14
14
  },
15
15
  // Color styles organized PER VARIANT
16
16
  // This structure enables reliable dark: variants and className overrides
@@ -48,24 +48,25 @@ const badgeTheme = {
48
48
  soft: {
49
49
  neutral: "bg-[var(--color-neutral-100)] text-[var(--color-text-primary)] border-[var(--color-text-primary)]/10 " +
50
50
  "dark:bg-[var(--color-neutral-900)]",
51
- primary: "bg-[var(--color-primary-100)] text-[var(--color-primary-800)] border-[var(--color-primary-800)]/20 " +
52
- "dark:bg-[var(--color-primary-500)]/20 dark:text-[var(--color-primary-300)]",
53
- secondary: "bg-[var(--color-secondary-100)] text-[var(--color-secondary-800)] border-[var(--color-secondary-800)]/10 " +
54
- "dark:bg-[var(--color-secondary-500)]/20 dark:text-[var(--color-secondary-400)]",
55
- success: "bg-[var(--color-success-100)] text-[var(--color-success-800)] border-[var(--color-success-800)]/20 " +
56
- "dark:bg-[var(--color-success-500)]/20 dark:text-[var(--color-success-400)]",
57
- warning: "bg-[var(--color-warning-100)] text-[var(--color-warning-800)] border-[var(--color-warning-800)]/20 " +
58
- "dark:bg-[var(--color-warning-500)]/20 dark:text-[var(--color-warning-400)]",
59
- danger: "bg-[var(--color-danger-100)] text-[var(--color-danger-800)] border-[var(--color-danger-800)]/20 " +
60
- "dark:bg-[var(--color-danger-500)]/20 dark:text-[var(--color-danger-400)]",
51
+ primary: "bg-[var(--color-primary-50)] text-[var(--color-primary-700)] border-[var(--color-primary)]/20 " +
52
+ "dark:bg-[var(--color-primary-400)]/20 dark:text-[var(--color-primary-300)]",
53
+ secondary: "bg-[var(--color-secondary-50)] text-[var(--color-secondary-700)] border-[var(--color-secondary)]/10 " +
54
+ "dark:bg-[var(--color-secondary-400)]/20 dark:text-[var(--color-secondary-400)]",
55
+ success: "bg-[var(--color-success-100)]/70 text-[var(--color-success-700)] border-[var(--color-success)]/20 " +
56
+ "dark:bg-[var(--color-success-400)]/20 dark:text-[var(--color-success-400)]",
57
+ warning: "bg-[var(--color-warning-50)] text-[var(--color-warning-700)] border-[var(--color-warning)]/20 " +
58
+ "dark:bg-[var(--color-warning-400)]/20 dark:text-[var(--color-warning-400)]",
59
+ danger: "bg-[var(--color-danger-50)] text-[var(--color-danger-700)] border-[var(--color-danger)]/20 " +
60
+ "dark:bg-[var(--color-danger-400)]/20 dark:text-[var(--color-danger-400)]",
61
61
  },
62
62
  },
63
63
  // Flat size structure (no nested objects)
64
64
  sizes: {
65
- sm: "text-xs px-1.5 py-0.25 gap-1",
66
- md: "text-sm px-2 py-0.25 gap-1",
65
+ sm: "text-xs px-1 py-0.25 gap-1",
66
+ md: "text-xs px-1.5 py-0.25 gap-1",
67
67
  },
68
- // Additional padding for pill shape
68
+ // Additional padding for pill shape — must clear the rounded-full cap radius
69
+ // (≈ height/2), otherwise content sits inside the curve and hugs the edge.
69
70
  pillSizes: {
70
71
  sm: "px-2",
71
72
  md: "px-2.5",
@@ -107,7 +107,7 @@ const Button = React__default.forwardRef(({ children, className = "", iconOnly =
107
107
  return (jsxs(motion.button, { type: "button", ...restProps, ...animationProps, ref: mergedRef, className: cn(buttonTheme.baseStyle, colorClasses, variantClasses, sizeClasses, blockStyle, stateClasses, darkMode && "dark", className), disabled: isDisabled, "data-state": state, "data-color": resolvedColor, "data-variant": resolvedVariant, "data-size": size, "data-icon-only": iconOnly ? "true" : "false", "data-block": block ? "true" : "false", "aria-disabled": isDisabled || undefined, "aria-invalid": isError || undefined, "aria-label": ariaLabel, onClick: handleClick, children: [showReflection &&
108
108
  resolvedVariant !== "link" &&
109
109
  resolvedVariant !== "ghost" &&
110
- resolvedVariant !== "outline" && (jsx("div", { className: "absolute top-0.25 right-0.25 left-0.25 h-3 border-t-[0.5px] border-white/40 rounded-t-[calc(var(--button-radius)-1.25px)] opacity-60 blur-[0.75px]" })), isLoading && (jsx("div", { className: "absolute inset-0 flex items-center justify-center", children: jsx(Spinner, { size: "sm", color: color, className: spinnerClassName }) })), jsx("span", { className: cn("inline-flex items-center gap-2 whitespace-nowrap", isLoading && "opacity-0"), children: children }), enableRipple &&
110
+ resolvedVariant !== "outline" && (jsx("div", { className: "absolute top-0.25 right-0.25 left-0.25 h-3 border-t-[0.5px] border-white/50 rounded-t-[calc(var(--button-radius)-1.25px)] blur-[0.25px]" })), isLoading && (jsx("div", { className: "absolute inset-0 flex items-center justify-center", children: jsx(Spinner, { size: "sm", color: color, className: spinnerClassName }) })), jsx("span", { className: cn("inline-flex items-center gap-2 whitespace-nowrap", isLoading && "opacity-0"), children: children }), enableRipple &&
111
111
  ripples.map((ripple) => {
112
112
  const animation = getRippleAnimation(effect, ripple, rippleScale);
113
113
  return (jsx(motion.span, { initial: animation.initial, animate: animation.animate, transition: animation.transition, className: cn("absolute rounded-full size-5 pointer-events-none ", animation.className, rippleClassName ||
@@ -3,10 +3,10 @@
3
3
  */
4
4
  const buttonTheme = {
5
5
  // Base styles for the button element
6
- baseStyle: "relative inline-flex items-center justify-center gap-2 focus:outline-none rounded-[var(--button-radius)] overflow-hidden cursor-pointer transition-all duration-300 ease-in-out min-w-fit flex-shrink-0 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 cursor-pointer",
6
+ baseStyle: "relative inline-flex items-center justify-center gap-2 focus:outline-none rounded-[var(--button-radius)] overflow-hidden cursor-pointer transition-all duration-300 ease-in-out min-w-fit flex-shrink-0 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 cursor-pointer backdrop-blur-sm",
7
7
  // Visual style variants - STRUCTURE only (no colors)
8
8
  variantStyles: {
9
- filled: "border hover:brightness-[0.9] dark:hover:brightness-[1.15]",
9
+ filled: "border border-black/25 hover:brightness-[0.9] dark:hover:brightness-[1.15]",
10
10
  outline: "bg-transparent border",
11
11
  soft: "border-transparent",
12
12
  ghost: "bg-transparent border-transparent",
@@ -21,7 +21,7 @@ const buttonTheme = {
21
21
  "dark:bg-[var(--color-neutral-200)] dark:text-[var(--color-neutral-900)] dark:border-[var(--color-neutral-200)]",
22
22
  primary: "bg-[var(--color-primary)] text-[var(--color-primary-contrast)] border-[var(--color-primary)] " +
23
23
  "focus-visible:outline-[var(--color-primary-600)] " +
24
- "dark:text-[var(--color-primary-contrast)] dark:bg-[var(--color-primary-600)] dark:border-[var(--color-primary-600)]",
24
+ "dark:text-[var(--color-primary-contrast)] dark:bg-[var(--color-primary)] dark:border-[var(--color-primary-600)]",
25
25
  secondary: "bg-[var(--color-secondary)] text-[var(--color-secondary-contrast)] border-[var(--color-secondary)] " +
26
26
  "focus-visible:outline-[var(--color-secondary-600)] " +
27
27
  "dark:text-[var(--color-secondary-contrast)] dark:bg-[var(--color-secondary-600)] dark:border-[var(--color-secondary-600)]",
@@ -3,7 +3,7 @@
3
3
  * Uses design tokens and data-[state=*] selectors
4
4
  */
5
5
  const calendarTheme = {
6
- baseStyle: "select-none w-full bg-white dark:bg-[var(--color-neutral-900)]",
6
+ baseStyle: "select-none w-full",
7
7
  headerStyle: "flex items-center justify-between mb-4",
8
8
  titleStyle: "text-sm font-semibold text-[var(--color-text-primary)] " + "",
9
9
  headerDropdownsStyle: "grid grid-cols-2 items-center gap-2 flex-1 justify-center mx-3",
@@ -1,4 +1,4 @@
1
- import { jsx } from 'react/jsx-runtime';
1
+ import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
2
2
  import React__default, { useMemo } from 'react';
3
3
  import { cn } from '../../../utils/cn.js';
4
4
  import { cardTheme } from './Card.theme.js';
@@ -8,12 +8,16 @@ import { CardSubtitle } from './CardSubtitle.js';
8
8
  import { CardBody } from './CardBody.js';
9
9
  import { CardFooter } from './CardFooter.js';
10
10
 
11
- const CardRoot = React__default.forwardRef(({ children, className, theme: customTheme = {}, darkMode = false, ...props }, ref) => {
11
+ const CardRoot = React__default.forwardRef(({ children, className, theme: customTheme = {}, darkMode = false, title, subtitle, actions, footer, ...props }, ref) => {
12
12
  const theme = useMemo(() => ({
13
13
  ...cardTheme,
14
14
  ...customTheme,
15
15
  }), [customTheme]);
16
- return (jsx("div", { ref: ref, className: cn(theme.baseStyle, darkMode && "dark", className), ...props, children: children }));
16
+ const hasHeader = Boolean(title || subtitle || actions);
17
+ // Slot-prop mode: any header/footer slot composes Header/Body/Footer for us.
18
+ // Otherwise children render raw — the compound API path, unchanged.
19
+ const managed = hasHeader || Boolean(footer);
20
+ return (jsx("div", { ref: ref, className: cn(theme.baseStyle, darkMode && "dark", className), ...props, children: managed ? (jsxs(Fragment, { children: [hasHeader && (jsxs(CardHeader, { className: actions ? "flex-row items-start justify-between gap-4" : undefined, children: [(title || subtitle) && (jsxs("div", { className: "flex flex-col", children: [title && jsx(CardTitle, { children: title }), subtitle && jsx(CardSubtitle, { children: subtitle })] })), actions && (jsx("div", { className: "flex items-center gap-2 shrink-0", children: actions }))] })), children != null && jsx(CardBody, { children: children }), footer && jsx(CardFooter, { children: footer })] })) : (children) }));
17
21
  });
18
22
  CardRoot.displayName = 'Card';
19
23
  // Create compound component with proper typing
@@ -1,8 +1,8 @@
1
1
  const cardTheme = {
2
- baseStyle: "rounded-[var(--card-radius)] overflow-hidden bg-white border border-[var(--color-border)] shadow-xs dark:bg-[var(--color-background-secondary)]",
3
- headerStyle: "flex flex-col p-6",
2
+ baseStyle: "rounded-[var(--card-radius)] overflow-hidden bg-[var(--color-surface)] border-0 border-[var(--color-border)]",
3
+ headerStyle: "flex flex-col p-6 items-start",
4
4
  titleStyle: "text-base font-semibold leading-none text-[var(--color-text-primary)]",
5
- subtitleStyle: "text-sm text-[var(--color-text-muted)] mt-1.5",
5
+ subtitleStyle: "text-sm text-[var(--color-text-secondary)] mt-2",
6
6
  bodyStyle: "p-6 pt-0 first:pt-6",
7
7
  footerStyle: "flex items-center p-6 pt-0 first:pt-6",
8
8
  };
@@ -15,11 +15,36 @@ export interface CardThemeOverrides {
15
15
  bodyStyle?: string;
16
16
  footerStyle?: string;
17
17
  }
18
- export interface CardProps extends HTMLAttributes<HTMLDivElement> {
18
+ export interface CardProps extends Omit<HTMLAttributes<HTMLDivElement>, "title"> {
19
19
  /**
20
- * The content to be displayed inside the card
20
+ * The content to be displayed inside the card. In slot-prop mode (any of
21
+ * `title`/`subtitle`/`actions`/`footer` set) children render inside an
22
+ * auto `Card.Body`; otherwise they render raw (compound mode).
21
23
  */
22
24
  children?: ReactNode;
25
+ /**
26
+ * Header title (serializable slot-prop). Renders `Card.Header` + `Card.Title`
27
+ * internally. Mirrors `Section`. Omit and use the compound `Card.Header`
28
+ * parts for full control.
29
+ */
30
+ title?: ReactNode;
31
+ /**
32
+ * Header subtitle (serializable slot-prop). Renders `Card.Subtitle`.
33
+ */
34
+ subtitle?: ReactNode;
35
+ /**
36
+ * Header-end controls — buttons, links, Segmented, a kebab menu, etc.
37
+ * Right-aligned next to the title. Holds `ReactNode`, so it is NOT part of
38
+ * the generative schema (app-code / hand-authored only), like `Section`'s.
39
+ * For a card whose primary control is a full Tabs bar, compose `Tabs` in the
40
+ * body instead of overloading this slot.
41
+ */
42
+ actions?: ReactNode;
43
+ /**
44
+ * Footer content (serializable slot-prop). Renders `Card.Footer`. Holds
45
+ * `ReactNode`, so it is excluded from the generative schema like `actions`.
46
+ */
47
+ footer?: ReactNode;
23
48
  /**
24
49
  * Custom class name for the card
25
50
  */
@@ -1,8 +1,7 @@
1
- import { jsxs, jsx } from 'react/jsx-runtime';
1
+ import { jsx } from 'react/jsx-runtime';
2
2
  import React__default from 'react';
3
- import { cn } from '../../../utils/cn.js';
3
+ import { MenuItem } from '../MenuItem/MenuItem.js';
4
4
  import { Kbd } from '../Kbd/Kbd.js';
5
- import { commandPaletteTheme } from './CommandPalette.theme.js';
6
5
 
7
6
  /**
8
7
  * Map string shortcuts to KbdKey types
@@ -100,7 +99,7 @@ const Shortcut = ({ keys }) => {
100
99
  * />
101
100
  * ```
102
101
  */
103
- const CommandItem = ({ command, index, isHighlighted, contentStart, contentEnd, className, onSelect, onMouseEnter, theme = commandPaletteTheme, }) => {
102
+ const CommandItem = ({ command, index, isHighlighted, contentStart, contentEnd, className, onSelect, onMouseEnter, }) => {
104
103
  const handleClick = () => {
105
104
  if (!command.disabled) {
106
105
  onSelect(command);
@@ -126,7 +125,7 @@ const CommandItem = ({ command, index, isHighlighted, contentStart, contentEnd,
126
125
  }
127
126
  return null;
128
127
  };
129
- return (jsxs("div", { "data-command-index": index, "data-highlighted": isHighlighted, "data-disabled": command.disabled || false, className: cn(theme.commandItem, className), role: "option", "aria-selected": isHighlighted, "aria-disabled": command.disabled || false, onClick: handleClick, onMouseEnter: handleMouseEnter, children: [finalContentStart && (jsx("div", { className: "flex-shrink-0", children: finalContentStart })), jsxs("div", { className: "flex-1 min-w-0", children: [jsx("div", { className: "text-base truncate", children: command.label }), command.subtitle && (jsx("div", { className: "text-base opacity-70 truncate mt-0", children: command.subtitle }))] }), renderContentEnd()] }));
128
+ return (jsx(MenuItem, { role: "option", selected: isHighlighted, disabled: command.disabled, startContent: finalContentStart, subtitle: command.subtitle, endContent: renderContentEnd(), onActivate: handleClick, onMouseEnter: handleMouseEnter, "aria-selected": isHighlighted, "data-command-index": index, "data-highlighted": isHighlighted, className: className, children: command.label }));
130
129
  };
131
130
 
132
131
  export { CommandItem };