@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
@@ -1,95 +1,12 @@
1
1
  import { jsxs, jsx } from 'react/jsx-runtime';
2
- import React__default, { useMemo, useId, useRef, useState, useCallback } from 'react';
2
+ import React__default, { useMemo, useId, useRef, useCallback, useState, useEffect } from 'react';
3
+ import { useReducedMotion, AnimatePresence, motion } from 'motion/react';
3
4
  import { fileUploadTheme } from './FileUpload.theme.js';
5
+ import { PREVIEW_LAYOUT_SPRING, PREVIEW_ITEM } from './FileUpload.animations.js';
4
6
  import { cn } from '../../../utils/cn.js';
5
7
  import { CloudArrowUpIcon, DocumentIcon, XMarkIcon } from '@heroicons/react/24/outline';
6
- import '../../core/Accordion/Accordion.js';
7
- import '../../core/AlertDialog/AlertDialog.js';
8
- import '../../core/AspectRatio/AspectRatio.js';
9
- import '../../core/Avatar/Avatar.js';
10
- import '../../core/AvatarGroup/AvatarGroup.js';
11
- import '../../core/Badge/Badge.js';
12
- import '../../core/Breadcrumbs/Breadcrumbs.js';
13
- import '../../core/Breadcrumbs/Breadcrumbs.theme.js';
14
- import { Button } from '../../core/Button/Button.js';
15
- import '../../core/ButtonGroup/ButtonGroup.js';
16
- import '../../core/ButtonGroup/ButtonGroupSeparator.js';
17
- import '../../core/ButtonGroup/ButtonGroupText.js';
18
- import '../../core/Calendar/Calendar.js';
19
- import '../../core/Calendar/CalendarMini/CalendarMini.js';
20
- import '../../core/Card/Card.js';
21
- import '../../core/CardStack/CardStack.js';
22
- import '../../core/Carousel/Carousel.js';
23
- import '../../core/Carousel/CarouselBody.js';
24
- import '../../core/CommandPalette/CommandPalette.js';
25
- import '../../core/Separator/Separator.js';
26
- import '../../core/Drawer/Drawer.js';
27
- import '../../core/Drawer/DrawerBody.js';
28
- import '../../core/Dropdown/Dropdown.js';
29
- import '../../core/Dropdown/DropdownTrigger.js';
30
- import '../../core/Dropdown/DropdownMenu.js';
31
- import '../../core/Dropdown/DropdownItem.js';
32
- import '../../core/Dropdown/DropdownSection.js';
33
- import '../../core/Dropdown/DropdownSeparator.js';
34
- import '../../core/Dropdown/Dropdown.theme.js';
35
- import '../../core/Kbd/Kbd.js';
36
- import '../../core/MenuItem/MenuItem.js';
37
- import '../../core/Link/Link.js';
38
- import '../../core/Modal/Modal.js';
39
- import '../../core/ModalStack/ModalStack.js';
40
- import '../../core/PageHeading/PageHeading.js';
41
- import '../../core/Pagination/Pagination.js';
42
- import '../../core/Popover/Popover.js';
43
- import '../../core/Popover/PopoverContext.js';
44
- import '../../core/Popover/PopoverBody.js';
45
- import '../../core/Progress/Progress.js';
46
- import '../../core/Rating/Rating.js';
47
- import '../../core/ScrollArea/ScrollArea.js';
48
- import '../../core/ScrollArea/smooth/SmoothScrollEngine.js';
49
- import '../../core/Segmented/Segmented.js';
50
- import '../../core/Skeleton/Skeleton.js';
51
- import '../../core/SlidingNumber/SlidingNumber.js';
52
- import '../../core/Tabs/Tabs.js';
53
- import '../../core/Tabs/TabsList.js';
54
- import '../../core/Tabs/TabsTrigger.js';
55
- import '../../core/Tabs/TabsBody.js';
56
- import '../../core/Tabs/TabsContext.js';
57
- import '../../core/Tooltip/Tooltip.js';
58
- import '../../core/Tooltip/Tooltip.animations.js';
59
- import '../../core/Tree/Tree.js';
60
- import '../../core/Tag/Tag.js';
61
- import '../../core/Alert/Alert.js';
62
- import '../../core/Toast/Toast.js';
63
- import '../../core/Toast/ToastProvider.js';
64
- import '@heroicons/react/24/solid';
65
- import '../../core/Spinner/Spinner.js';
66
- import '../../core/Message/Message.js';
67
- import '../../core/Message/TypeWriter.js';
68
- import '../../core/Message/MessageBody.js';
69
- import '@heroicons/react/16/solid';
70
- import '../../core/Empty/Empty.js';
71
- import '../../core/Masonry/Masonry.js';
72
- import '../../core/DragDrop/DragDrop.js';
73
- import '../../core/Sortable/Sortable.js';
74
- import '../../core/NavItem/NavItem.js';
75
- import '../../core/Sidebar/Sidebar.js';
76
- import '../../core/Sidebar/SidebarHeader.js';
77
- import '../../core/Sidebar/SidebarContent.js';
78
- import '../../core/Sidebar/SidebarFooter.js';
79
- import '../../core/Sidebar/SidebarNav.js';
80
- import '../../core/Sidebar/SidebarNavGroup.js';
81
- import '../../core/Sidebar/SidebarToggle.js';
82
- import '../../core/Sidebar/SidebarMobileTrigger.js';
83
- import '../../core/Sidebar/SidebarUserProfile.js';
84
- import '../../core/Sidebar/SidebarLogo.js';
85
- import '../../core/Sidebar/SidebarContext.js';
86
- import '../../core/OfflineIndicator/OfflineIndicator.js';
87
- import '../../core/ContextMenu/ContextMenu.js';
88
- import '../../core/ContextMenu/ContextMenu.theme.js';
89
- import '../../core/Pill/Pill.js';
90
- import '../../core/Icon/Icon.js';
91
- import '../../core/ImagePlaceholder/ImagePlaceholder.js';
92
8
  import { FormLabel } from '../FormLabel/FormLabel.js';
9
+ import { Button } from '../../core/Button/Button.js';
93
10
 
94
11
  /**
95
12
  * FileUpload component - Drag-and-drop file uploader with previews
@@ -111,7 +28,7 @@ import { FormLabel } from '../FormLabel/FormLabel.js';
111
28
  * onUpload={(files) => console.log(files)}
112
29
  * />
113
30
  */
114
- const FileUpload = React__default.forwardRef(({ accept, multiple = false, maxSize, maxFiles, state = "default", disabled = false, label, errorMessage, onUpload, onRemove, onError, showPreview = true, buttonText = "Choose files", helperText = "or drag and drop", description, className, theme: customTheme, ...props }, ref) => {
31
+ const FileUpload = React__default.forwardRef(({ accept, multiple = false, maxSize, maxFiles, state = "default", disabled = false, label, errorMessage, value, defaultFiles, onChange, onUpload, onRemove, onError, showPreview = true, showIcon = true, buttonText = "Choose files", helperText = "or drag and drop", description, className, theme: customTheme, ...props }, ref) => {
115
32
  // Merge custom theme with default theme
116
33
  const theme = useMemo(() => customTheme
117
34
  ? { ...fileUploadTheme, ...customTheme }
@@ -119,10 +36,39 @@ const FileUpload = React__default.forwardRef(({ accept, multiple = false, maxSiz
119
36
  const generatedId = useId();
120
37
  const isDisabled = state === "disabled" || disabled;
121
38
  const isInvalid = state === "invalid";
39
+ // Wire helper/error text to the control for screen readers.
40
+ const describedBy = [
41
+ description ? `${generatedId}-description` : null,
42
+ errorMessage ? `${generatedId}-error` : null,
43
+ ]
44
+ .filter(Boolean)
45
+ .join(" ") || undefined;
46
+ const shouldReduceMotion = useReducedMotion();
47
+ // Stable key per File reference — index keys would break exit/reflow
48
+ // animations as the list reorders. WeakMap so removed files are GC'd.
49
+ const fileKeysRef = useRef(new WeakMap());
50
+ const keyCounterRef = useRef(0);
51
+ const getFileKey = useCallback((file) => {
52
+ let key = fileKeysRef.current.get(file);
53
+ if (!key) {
54
+ key = `file-${keyCounterRef.current++}`;
55
+ fileKeysRef.current.set(file, key);
56
+ }
57
+ return key;
58
+ }, []);
122
59
  const inputRef = useRef(null);
123
60
  const [isDragActive, setIsDragActive] = useState(false);
124
- const [selectedFiles, setSelectedFiles] = useState([]);
61
+ // Controlled when `value` is provided; otherwise track the list internally.
62
+ const isControlled = value !== undefined;
63
+ const [internalFiles, setInternalFiles] = useState(defaultFiles !== null && defaultFiles !== void 0 ? defaultFiles : []);
64
+ const selectedFiles = isControlled ? value : internalFiles;
125
65
  const [previewUrls, setPreviewUrls] = useState(new Map());
66
+ // Commit a new list: update internal state when uncontrolled, always notify.
67
+ const commitFiles = useCallback((next) => {
68
+ if (!isControlled)
69
+ setInternalFiles(next);
70
+ onChange === null || onChange === void 0 ? void 0 : onChange(next);
71
+ }, [isControlled, onChange]);
126
72
  // Convert accept prop to array
127
73
  const acceptTypes = Array.isArray(accept) ? accept : accept ? [accept] : [];
128
74
  const acceptString = acceptTypes.join(",");
@@ -150,25 +96,40 @@ const FileUpload = React__default.forwardRef(({ accept, multiple = false, maxSiz
150
96
  return true;
151
97
  return file.size <= maxSize;
152
98
  }, [maxSize]);
153
- // Create preview URL for images
154
- const createPreview = useCallback((file) => {
155
- if (file.type.startsWith("image/")) {
156
- const url = URL.createObjectURL(file);
157
- setPreviewUrls((prev) => new Map(prev).set(file, url));
158
- }
99
+ // Keep image preview URLs in sync with the current list. Runs for files added
100
+ // via the dropzone as well as files injected through `value`/`defaultFiles`.
101
+ useEffect(() => {
102
+ setPreviewUrls((prev) => {
103
+ const next = new Map();
104
+ let changed = false;
105
+ for (const file of selectedFiles) {
106
+ if (!file.type.startsWith("image/"))
107
+ continue;
108
+ const existing = prev.get(file);
109
+ if (existing) {
110
+ next.set(file, existing);
111
+ }
112
+ else {
113
+ next.set(file, URL.createObjectURL(file));
114
+ changed = true;
115
+ }
116
+ }
117
+ // Revoke URLs for files no longer present.
118
+ for (const [file, url] of prev) {
119
+ if (!next.has(file)) {
120
+ URL.revokeObjectURL(url);
121
+ changed = true;
122
+ }
123
+ }
124
+ return changed ? next : prev;
125
+ });
126
+ }, [selectedFiles]);
127
+ // Revoke any outstanding object URLs on unmount.
128
+ const previewUrlsRef = useRef(previewUrls);
129
+ previewUrlsRef.current = previewUrls;
130
+ useEffect(() => () => {
131
+ previewUrlsRef.current.forEach((url) => URL.revokeObjectURL(url));
159
132
  }, []);
160
- // Clean up preview URLs
161
- const revokePreview = useCallback((file) => {
162
- const url = previewUrls.get(file);
163
- if (url) {
164
- URL.revokeObjectURL(url);
165
- setPreviewUrls((prev) => {
166
- const newMap = new Map(prev);
167
- newMap.delete(file);
168
- return newMap;
169
- });
170
- }
171
- }, [previewUrls]);
172
133
  // Handle file selection/drop
173
134
  const handleFiles = useCallback((files) => {
174
135
  if (!files || files.length === 0)
@@ -209,14 +170,13 @@ const FileUpload = React__default.forwardRef(({ accept, multiple = false, maxSiz
209
170
  onError === null || onError === void 0 ? void 0 : onError(error);
210
171
  return;
211
172
  }
212
- // Update selected files
173
+ // Append when multiple, otherwise replace. Previews are handled by the
174
+ // sync effect above.
213
175
  const newFiles = multiple
214
176
  ? [...selectedFiles, ...validFiles]
215
177
  : validFiles;
216
- setSelectedFiles(newFiles);
217
- // Create previews
218
- validFiles.forEach(createPreview);
219
- // Call onUpload callback
178
+ commitFiles(newFiles);
179
+ // Call onUpload callback with only the newly added files
220
180
  onUpload === null || onUpload === void 0 ? void 0 : onUpload(validFiles);
221
181
  }, [
222
182
  isValidFileType,
@@ -227,7 +187,7 @@ const FileUpload = React__default.forwardRef(({ accept, multiple = false, maxSiz
227
187
  multiple,
228
188
  onUpload,
229
189
  onError,
230
- createPreview,
190
+ commitFiles,
231
191
  ]);
232
192
  // Handle drag events
233
193
  const handleDragEnter = useCallback((e) => {
@@ -269,32 +229,23 @@ const FileUpload = React__default.forwardRef(({ accept, multiple = false, maxSiz
269
229
  }, [handleFiles]);
270
230
  // Handle file removal
271
231
  const handleRemoveFile = useCallback((file) => {
272
- setSelectedFiles((prev) => prev.filter((f) => f !== file));
273
- revokePreview(file);
232
+ // Preview cleanup is handled by the sync effect.
233
+ commitFiles(selectedFiles.filter((f) => f !== file));
274
234
  onRemove === null || onRemove === void 0 ? void 0 : onRemove(file);
275
- }, [onRemove, revokePreview]);
276
- // Format file size
277
- const formatFileSize = (bytes) => {
278
- if (bytes === 0)
279
- return "0 Bytes";
280
- const k = 1024;
281
- const sizes = ["Bytes", "KB", "MB", "GB"];
282
- const i = Math.floor(Math.log(bytes) / Math.log(k));
283
- return Math.round((bytes / Math.pow(k, i)) * 100) / 100 + " " + sizes[i];
284
- };
285
- return (jsxs("div", { ref: ref, className: cn(theme.containerStyle, className), ...props, children: [label && (typeof label === "string" ? (jsx(FormLabel, { htmlFor: `${generatedId}-input`, state: isDisabled ? "disabled" : isInvalid ? "invalid" : "default", children: label })) : (label)), jsx("input", { ref: inputRef, id: `${generatedId}-input`, type: "file", accept: acceptString, multiple: multiple, onChange: handleInputChange, disabled: isDisabled, className: "sr-only", "aria-label": "File upload" }), jsx("div", { className: cn(theme.dropzoneStyle, isDragActive && theme.dropzoneActiveStyle, isDisabled && theme.dropzoneDisabledStyle, isInvalid && "border-[var(--color-danger)]"), onDragEnter: handleDragEnter, onDragLeave: handleDragLeave, onDragOver: handleDragOver, onDrop: handleDrop, onClick: handleClick, role: "button", tabIndex: isDisabled ? -1 : 0, "aria-disabled": isDisabled, "aria-invalid": isInvalid || undefined, onKeyDown: (e) => {
235
+ }, [commitFiles, selectedFiles, onRemove]);
236
+ return (jsxs("div", { ref: ref, className: cn(theme.containerStyle, className), ...props, children: [label && (typeof label === "string" ? (jsx(FormLabel, { htmlFor: `${generatedId}-input`, state: isDisabled ? "disabled" : isInvalid ? "invalid" : "default", children: label })) : (label)), jsx("input", { ref: inputRef, id: `${generatedId}-input`, type: "file", accept: acceptString, multiple: multiple, onChange: handleInputChange, disabled: isDisabled, className: "sr-only", "aria-label": "File upload", "aria-invalid": isInvalid || undefined, "aria-describedby": describedBy }), jsx("div", { className: cn(theme.dropzoneStyle, isDragActive && theme.dropzoneActiveStyle, isDisabled && theme.dropzoneDisabledStyle, isInvalid && "border-[var(--color-danger)]"), onDragEnter: handleDragEnter, onDragLeave: handleDragLeave, onDragOver: handleDragOver, onDrop: handleDrop, onClick: handleClick, role: "button", tabIndex: isDisabled ? -1 : 0, "aria-disabled": isDisabled, "aria-invalid": isInvalid || undefined, "aria-describedby": describedBy, onKeyDown: (e) => {
286
237
  if (e.key === "Enter" || e.key === " ") {
287
238
  e.preventDefault();
288
239
  handleClick();
289
240
  }
290
- }, children: jsxs("div", { className: theme.contentStyle, children: [jsx("div", { className: "size-11 border border-border bg-white rounded-full flex items-center justify-center mb-4", children: jsx(CloudArrowUpIcon, { className: `size-6 text-[var(--color-text-secondary)]` }) }), jsxs("p", { className: "text-base font-medium text-[var(--color-text-primary)]", children: [jsx("span", { className: "text-[var(--color-primary)] font-semibold", children: buttonText }), " ", helperText] }), description && (jsx("p", { className: "text-sm text-[var(--color-text-muted)] mt-1", children: description }))] }) }), errorMessage && (jsx("div", { className: "text-sm mt-1 text-[var(--color-danger)]", children: errorMessage })), showPreview && selectedFiles.length > 0 && (jsx("div", { className: theme.previewContainerStyle, children: selectedFiles.map((file, index) => {
291
- const previewUrl = previewUrls.get(file);
292
- const isImage = file.type.startsWith("image/");
293
- return (jsxs("div", { className: theme.previewItemStyle, children: [isImage && previewUrl ? (jsx("img", { src: previewUrl, alt: file.name, className: theme.previewImageStyle })) : (jsxs("div", { className: theme.previewFileStyle, children: [jsx(DocumentIcon, { className: "w-8 h-8 mx-auto mb-2 text-[var(--color-text-muted)]" }), jsx("span", { className: "text-sm", children: file.name }), jsx("span", { className: "text-sm text-[var(--color-text-placeholder)] mt-1", children: formatFileSize(file.size) })] })), jsx(Button, { variant: "filled", color: "danger", size: "sm", iconOnly: true, onClick: (e) => {
294
- e.stopPropagation();
295
- handleRemoveFile(file);
296
- }, "aria-label": `Remove ${file.name}`, className: cn(theme.removeButtonStyle, "rounded-full !p-0 size-6"), children: jsx(XMarkIcon, { className: "size-4", strokeWidth: 2 }) })] }, `${file.name}-${index}`));
297
- }) }))] }));
241
+ }, children: jsxs("div", { className: "flex flex-col items-center text-center pointer-events-none", children: [showIcon && (jsx("div", { className: "size-10 border border-[var(--color-border)] bg-[var(--color-surface-raised)] rounded-full flex items-center justify-center mb-3", children: jsx(CloudArrowUpIcon, { className: "size-6 text-[var(--color-text-secondary)]" }) })), jsxs("p", { className: "text-sm font-medium text-[var(--color-text-primary)]/80", children: [jsx("span", { className: "text-[var(--color-primary)]", children: buttonText }), " ", helperText] }), description && (jsx("p", { id: `${generatedId}-description`, className: "text-xs text-[var(--color-text-muted)] mt-0.5", children: description }))] }) }), errorMessage && (jsx("div", { id: `${generatedId}-error`, className: "text-sm mt-1 text-[var(--color-danger)]", children: errorMessage })), showPreview && selectedFiles.length > 0 && (jsx("div", { className: theme.previewContainerStyle, children: jsx(AnimatePresence, { initial: false, children: selectedFiles.map((file) => {
242
+ const previewUrl = previewUrls.get(file);
243
+ const isImage = file.type.startsWith("image/");
244
+ return (jsxs(motion.div, { layout: !shouldReduceMotion, initial: shouldReduceMotion ? false : PREVIEW_ITEM.initial, animate: PREVIEW_ITEM.animate, exit: shouldReduceMotion ? { opacity: 0 } : PREVIEW_ITEM.exit, transition: PREVIEW_LAYOUT_SPRING, className: theme.previewItemStyle, children: [isImage && previewUrl ? (jsx("img", { src: previewUrl, alt: file.name, className: theme.previewImageStyle })) : (jsx("div", { className: theme.previewFileStyle, title: file.name, children: jsx(DocumentIcon, { className: "size-6" }) })), jsx(Button, { variant: "soft", color: "danger", size: "sm", iconOnly: true, onClick: (e) => {
245
+ e.stopPropagation();
246
+ handleRemoveFile(file);
247
+ }, "aria-label": `Remove ${file.name}`, className: cn(theme.removeButtonStyle, "rounded-full !p-0 size-6"), children: jsx(XMarkIcon, { className: "size-4", strokeWidth: 2 }) })] }, getFileKey(file)));
248
+ }) }) }))] }));
298
249
  });
299
250
  FileUpload.displayName = "FileUpload";
300
251
 
@@ -1,25 +1,17 @@
1
1
  /**
2
- * Internal theme structure for the FileUpload component
2
+ * Theme for the FileUpload component.
3
+ * Uses production-ready CSS variables from theme.css.
3
4
  */
4
5
  interface FileUploadTheme {
5
6
  containerStyle: string;
6
7
  dropzoneStyle: string;
7
8
  dropzoneActiveStyle: string;
8
9
  dropzoneDisabledStyle: string;
9
- contentStyle: string;
10
- iconStyle: string;
11
- textStyle: string;
12
- helperTextStyle: string;
13
- descriptionStyle: string;
14
10
  previewContainerStyle: string;
15
11
  previewItemStyle: string;
16
12
  previewImageStyle: string;
17
13
  previewFileStyle: string;
18
14
  removeButtonStyle: string;
19
15
  }
20
- /**
21
- * Default theme for the FileUpload component
22
- * Uses production-ready CSS variables from global.scss
23
- */
24
16
  export declare const fileUploadTheme: FileUploadTheme;
25
17
  export {};
@@ -1,36 +1,22 @@
1
- /**
2
- * Default theme for the FileUpload component
3
- * Uses production-ready CSS variables from global.scss
4
- */
5
1
  const fileUploadTheme = {
6
- // Container wrapper
2
+ // Root container
7
3
  containerStyle: "w-full",
8
4
  // Dropzone area (default state)
9
- dropzoneStyle: "relative flex flex-col items-center justify-center w-full min-h-[160px] p-6 border border-dashed border-[var(--color-border)] rounded-[var(--form-radius)] bg-[var(--color-background-secondary)] hover:bg-[var(--color-background-secondary)] hover:border-[var(--color-primary)] transition-colors duration-400 cursor-pointer",
10
- // Dropzone when dragging over
11
- dropzoneActiveStyle: "border-[var(--color-primary)] bg-[var(--color-primary-50)] scale-[1.01]",
12
- // Dropzone when disabled
13
- dropzoneDisabledStyle: "cursor-not-allowed opacity-60 hover:bg-[var(--color-background-secondary)] hover:border-[var(--color-border)]",
14
- // Content wrapper inside dropzone
15
- contentStyle: "flex flex-col items-center text-center pointer-events-none",
16
- // Upload icon
17
- iconStyle: "size-8 text-[var(--color-text-placeholder)]",
18
- // Main text
19
- textStyle: "text-sm font-medium text-[var(--color-text-primary)]",
20
- // Helper text
21
- helperTextStyle: "text-sm text-[var(--color-text-muted)] mt-1",
22
- // Description below dropzone
23
- descriptionStyle: "text-xs text-[var(--color-text-muted)] mt-1",
24
- // Preview container
25
- previewContainerStyle: "grid grid-cols-2 sm:grid-cols-3 md:grid-cols-4 gap-4 mt-4",
26
- // Individual preview item
27
- previewItemStyle: "relative group rounded-[var(--radius-base)] border border-[var(--color-border)] overflow-hidden bg-[var(--color-background-secondary)]",
28
- // Preview image
29
- previewImageStyle: "w-full h-32 object-cover",
30
- // Preview file (non-image)
31
- previewFileStyle: "flex items-center justify-center w-full h-32 p-3 text-sm text-[var(--color-text-secondary)] text-center break-all",
32
- // Remove button
33
- removeButtonStyle: "absolute top-1 right-1 -translate-y-1 opacity-0 group-hover:opacity-100 transition-all duration-400 group-hover:-translate-y-0",
5
+ dropzoneStyle: "relative flex flex-col items-center justify-center w-full min-h-[160px] p-6 border border-dashed border-[var(--color-border)] rounded-[var(--form-radius)] bg-[var(--color-surface)] hover:border-[var(--color-border-hover)] transition-colors duration-400 cursor-pointer",
6
+ // Dragging over translucent primary tint composites over the surface in both modes
7
+ dropzoneActiveStyle: "border-solid border-[var(--color-primary)] bg-[var(--color-primary)]/5",
8
+ // Disabled
9
+ dropzoneDisabledStyle: "cursor-not-allowed opacity-60 hover:bg-[var(--color-surface)] hover:border-[var(--color-border)]",
10
+ // Wrapping row of fixed-width thumbnails (not a stretch grid)
11
+ previewContainerStyle: "flex flex-wrap gap-1 mt-2",
12
+ // Fixed responsive thumbnail — stays small on large containers, wraps to more-per-row
13
+ previewItemStyle: "relative group shrink-0 size-10 sm:size-12 md:size-16 rounded-[var(--radius-base)] border border-[var(--color-border)] overflow-hidden bg-[var(--color-surface)]",
14
+ // Image fills the thumbnail box
15
+ previewImageStyle: "size-full object-cover",
16
+ // Non-image tile — centered document icon (filename surfaced via title tooltip)
17
+ previewFileStyle: "flex items-center justify-center size-full text-[var(--color-text-muted)]",
18
+ // Remove button (revealed on item hover)
19
+ removeButtonStyle: "absolute top-1 right-1 -translate-y-1 opacity-0 group-hover:opacity-100 transition-all duration-400 group-hover:-translate-y-0",
34
20
  };
35
21
 
36
22
  export { fileUploadTheme };
@@ -4,7 +4,7 @@ export type FileUploadState = "default" | "disabled" | "invalid";
4
4
  * FileUpload component props
5
5
  * Supports both click-to-upload and drag-and-drop
6
6
  */
7
- export interface FileUploadProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'onError'> {
7
+ export interface FileUploadProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'onError' | 'onChange'> {
8
8
  /**
9
9
  * Accepted file types (MIME types or file extensions)
10
10
  * @example ["image/*", ".pdf", ".doc"]
@@ -43,7 +43,22 @@ export interface FileUploadProps extends Omit<React.HTMLAttributes<HTMLDivElemen
43
43
  */
44
44
  errorMessage?: React.ReactNode;
45
45
  /**
46
- * Callback when files are selected/dropped
46
+ * Controlled file list. When provided, the component is controlled and the
47
+ * parent owns the list — pair with `onChange`. Leave undefined for the
48
+ * uncontrolled behavior (the component tracks its own list internally).
49
+ */
50
+ value?: File[];
51
+ /**
52
+ * Initial file list for the uncontrolled case. Ignored when `value` is set.
53
+ */
54
+ defaultFiles?: File[];
55
+ /**
56
+ * Callback fired whenever the full file list changes (add or remove),
57
+ * with the complete next list. Required to read state in controlled mode.
58
+ */
59
+ onChange?: (files: File[]) => void;
60
+ /**
61
+ * Callback when files are selected/dropped, with only the newly added files.
47
62
  */
48
63
  onUpload?: (files: File[]) => void;
49
64
  /**
@@ -59,20 +74,26 @@ export interface FileUploadProps extends Omit<React.HTMLAttributes<HTMLDivElemen
59
74
  * @default true
60
75
  */
61
76
  showPreview?: boolean;
77
+ /**
78
+ * Show the upload icon inside the dropzone. Set `false` for slim/compact
79
+ * containers where the icon would crowd the text.
80
+ * @default true
81
+ */
82
+ showIcon?: boolean;
62
83
  /**
63
84
  * Custom upload button text
64
85
  * @default "Choose files"
65
86
  */
66
- buttonText?: string;
87
+ buttonText?: React.ReactNode;
67
88
  /**
68
89
  * Custom dropzone helper text
69
90
  * @default "or drag and drop"
70
91
  */
71
- helperText?: string;
92
+ helperText?: React.ReactNode;
72
93
  /**
73
94
  * Helper text displayed below the upload area
74
95
  */
75
- description?: string;
96
+ description?: React.ReactNode;
76
97
  /**
77
98
  * Custom CSS class for the container
78
99
  */
@@ -96,11 +117,6 @@ export interface FileUploadThemeOverrides {
96
117
  dropzoneStyle?: string;
97
118
  dropzoneActiveStyle?: string;
98
119
  dropzoneDisabledStyle?: string;
99
- contentStyle?: string;
100
- iconStyle?: string;
101
- textStyle?: string;
102
- helperTextStyle?: string;
103
- descriptionStyle?: string;
104
120
  previewContainerStyle?: string;
105
121
  previewItemStyle?: string;
106
122
  previewImageStyle?: string;
@@ -3,7 +3,7 @@
3
3
  */
4
4
  const formLabelTheme = {
5
5
  // Base styles for the label element
6
- baseStyle: "block text-sm/6 font-medium mb-2",
6
+ baseStyle: "block text-sm/6 font-medium mb-1",
7
7
  // State variants - using design tokens from global.scss
8
8
  stateStyles: {
9
9
  default: "text-[var(--color-text-primary)]",
@@ -9,14 +9,16 @@ const inputTheme = {
9
9
  wrapperStyle: formsBaseTheme.wrapperStyle,
10
10
  // Input group styles - no focus-within (focus is managed via JS for contentStart/contentEnd compatibility)
11
11
  inputGroupStyle: "relative flex rounded-[var(--form-radius)] shadow-[inset_0_0_0_1px_var(--color-border)] " +
12
- "bg-white transition-all " +
13
- "dark:shadow-[inset_0_0_0_1px_var(--color-neutral-700)] dark:bg-[var(--color-neutral-900)]",
12
+ "bg-[var(--color-surface)] transition-all " +
13
+ // Hover edge: strengthen the border to --color-border-secondary on hover. Scoped with
14
+ // not-focus-within so the JS-driven focus border (primary) always wins.
15
+ "not-focus-within:hover:shadow-[inset_0_0_0_1px_var(--color-border-secondary)]",
14
16
  // JS-driven focus ring (applied when isFocused is true)
15
- inputGroupFocusStyle: "shadow-[inset_0_0_0_2px_var(--color-primary-600)] ring-4 ring-[var(--color-primary)]/10 " +
16
- "dark:shadow-[inset_0_0_0_2px_var(--color-primary-500)] dark:ring-[var(--color-primary-500)]/20",
17
+ inputGroupFocusStyle: "shadow-[inset_0_0_0_1px_var(--color-primary-600)] ring-4 ring-[var(--color-primary)]/10 " +
18
+ "dark:shadow-[inset_0_0_0_1px_var(--color-primary-500)] dark:ring-[var(--color-primary-500)]/20",
17
19
  // JS-driven focus ring for invalid state
18
- inputGroupFocusInvalidStyle: "shadow-[inset_0_0_0_2px_var(--color-danger)] ring-4 ring-[var(--color-danger)]/10 " +
19
- "dark:shadow-[inset_0_0_0_2px_var(--color-danger-500)] dark:ring-[var(--color-danger-500)]/20",
20
+ inputGroupFocusInvalidStyle: "shadow-[inset_0_0_0_1px_var(--color-danger)] ring-4 ring-[var(--color-danger)]/10 " +
21
+ "dark:shadow-[inset_0_0_0_1px_var(--color-danger-500)] dark:ring-[var(--color-danger-500)]/20",
20
22
  // Base input styles - extends common form control with design tokens
21
23
  baseStyle: `${formsBaseTheme.controlBaseStyle} py-2 px-3`,
22
24
  // Size variants - composed from atomic tokens
@@ -30,7 +32,10 @@ const inputTheme = {
30
32
  default: formsBaseTheme.states.default,
31
33
  disabled: formsBaseTheme.states.disabled,
32
34
  invalid: "shadow-[inset_0_0_0_1px_var(--color-danger)] bg-[var(--color-danger-50)] " +
33
- "dark:bg-[var(--color-danger-950)]/30 dark:shadow-[inset_0_0_0_1px_var(--color-danger-500)]",
35
+ // Keep the danger border on hover (don't let the hover edge override it)
36
+ "not-focus-within:hover:shadow-[inset_0_0_0_1px_var(--color-danger)] " +
37
+ "dark:bg-[var(--color-danger-950)]/30 dark:shadow-[inset_0_0_0_1px_var(--color-danger-500)] " +
38
+ "dark:not-focus-within:hover:shadow-[inset_0_0_0_1px_var(--color-danger-500)]",
34
39
  },
35
40
  // Helper text styles with state handling
36
41
  helperText: formsBaseTheme.helperText,
@@ -66,9 +71,7 @@ const inputTheme = {
66
71
  numberButtonsContainerStyle: "absolute inset-y-0 right-0 flex flex-row items-center pr-2 z-10 gap-1",
67
72
  numberButtonStyle: "bg-[var(--color-background-secondary)] flex items-center justify-center " +
68
73
  "text-[var(--color-text-muted)] hover:bg-[var(--color-surface-hover)] " +
69
- "hover:text-[var(--color-text-primary)] cursor-pointer size-6 rounded-sm transition-colors " +
70
- "dark:bg-[var(--color-neutral-800)] dark:text-[var(--color-neutral-500)] " +
71
- "dark:hover:bg-[var(--color-neutral-700)] dark:hover:text-[var(--color-neutral-200)]",
74
+ "hover:text-[var(--color-text-primary)] cursor-pointer size-6 rounded-sm transition-colors",
72
75
  // Type-specific styles organized by input type
73
76
  typeStyles: {
74
77
  password: {
@@ -3,7 +3,7 @@
3
3
  * Follows Flikkui design system with CSS variables
4
4
  */
5
5
  const inputCounterTheme = {
6
- baseStyle: "flex items-center gap-3 transition-all p-1 border border-[var(--color-border)] rounded-[var(--form-radius)] w-fit",
6
+ baseStyle: "flex items-center gap-3 transition-all p-1 bg-[var(--color-surface)] border border-[var(--color-border)] rounded-[var(--form-radius)] w-fit",
7
7
  buttonWrapperStyle: "flex-shrink-0",
8
8
  numberStyle: "min-w-fit text-center text-sm font-medium text-[var(--color-text-primary)] tabular-nums select-none",
9
9
  };