@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
@@ -211,7 +211,7 @@ const CommandPalette = React__default.forwardRef(({ isOpen, onClose, commands =
211
211
  // Otherwise render flat list
212
212
  return displayCommands.map((command, index) => (jsx(CommandItem, { command: command, index: index, isHighlighted: index === highlightedIndex, onSelect: handleSelectCommand, onMouseEnter: setHighlightedIndex, theme: theme }, command.id)));
213
213
  };
214
- return (jsxs(Overlay, { ref: ref, isOpen: isOpen, onClose: onClose, closeOnOverlayClick: closeOnOverlayClick, closeOnEsc: closeOnEsc, position: "top", overlayClassName: overlayClassName, contentClassName: cn(theme.container, className), animations: {
214
+ return (jsxs(Overlay, { ref: ref, isOpen: isOpen, onClose: onClose, closeOnOverlayClick: closeOnOverlayClick, closeOnEsc: closeOnEsc, position: "top", overlayClassName: cn(theme.overlay, overlayClassName), contentClassName: cn(theme.container, className), animations: {
215
215
  overlay: overlayAnimations,
216
216
  content: containerAnimations,
217
217
  }, children: [jsx("div", { className: theme.searchWrapper, children: jsxs("div", { className: "flex items-center gap-3", children: [jsx(MagnifyingGlassIcon, { className: "w-5 h-5 text-[var(--color-text-muted)]", strokeWidth: 2 }), jsx("input", { ref: searchInputRef, type: "text", className: theme.searchInput, placeholder: placeholder, value: searchValue, onChange: handleSearchChange, autoComplete: "off", autoCorrect: "off", spellCheck: false, "aria-label": "Search commands" })] }) }), jsx(ScrollArea, { ref: listContainerRef, type: "hover", className: "overscroll-contain px-1", style: {
@@ -1,8 +1,12 @@
1
1
  const commandPaletteTheme = {
2
- overlay: "fixed inset-0 bg-[var(--overlay-bg)] backdrop-blur-[var(--overlay-blur)] z-50 " +
3
- "flex items-start justify-center pt-[min(10vh,4rem)] px-4",
2
+ // Applied to the Overlay backdrop (positioning/z-index come from Overlay).
3
+ // Overrides the shared 65%-black scrim (--overlay-bg) with a lighter dim so
4
+ // real page content sits behind the container — that's what the container's
5
+ // backdrop-blur frosts into the glass effect. A heavy scrim would leave only
6
+ // a flat dark layer to blur, making backdrop-blur look like it does nothing.
7
+ overlay: "",
4
8
  container: "relative w-full max-h-[calc(100vh-2rem)] max-w-lg " +
5
- "bg-[var(--color-background)] rounded-[var(--modal-radius)] shadow-2xl shadow-black/30 " +
9
+ "bg-[var(--color-surface-overlay)]/80 rounded-[var(--modal-radius)] shadow-2xl shadow-black/30 " +
6
10
  "border border-[var(--color-border)] ring-4 ring-[var(--color-background)]/20 " +
7
11
  "flex flex-col my-4 min-h-0 overflow-hidden " +
8
12
  // Dark mode
@@ -11,18 +15,12 @@ const commandPaletteTheme = {
11
15
  searchInput: "w-full px-0 py-0 text-sm bg-transparent border-none outline-none " +
12
16
  "text-[var(--color-text-primary)] placeholder:text-[var(--color-text-placeholder)] " +
13
17
  "focus:outline-none focus:ring-0 " +
14
- // Dark mode
15
- "dark:text-[var(--color-neutral-200)] dark:placeholder:text-[var(--color-neutral-500)]",
18
+ // Dark mode — matches Input's controlBaseStyle text/placeholder tokens
19
+ "dark:text-[var(--color-text-primary)] dark:placeholder:text-[var(--color-neutral-500)]",
16
20
  groupLabel: "px-4 py-1 text-xs font-semibold text-[var(--color-text-muted)]/50 uppercase " +
17
21
  "dark:text-[var(--color-neutral-500)]",
18
- commandItem: "flex items-center gap-3 px-4 py-2 rounded-[var(--radius-base)] cursor-pointer transition-colors " +
19
- "hover:bg-[var(--color-primary)] " +
20
- "data-[highlighted=true]:bg-[var(--color-primary)] data-[highlighted=true]:hover:bg-[var(--color-primary)] " +
21
- "data-[highlighted=true]:text-[var(--color-primary-contrast)] " +
22
- "data-[disabled=true]:opacity-50 data-[disabled=true]:cursor-not-allowed data-[disabled=true]:hover:bg-transparent " +
23
- // Dark mode - adjust hover state
24
- "dark:text-[var(--color-neutral-200)] dark:hover:bg-[var(--color-primary-600)] " +
25
- "dark:data-[highlighted=true]:bg-[var(--color-primary-600)]",
22
+ // Command rows render via the shared MenuItem primitive and use its default
23
+ // styling (subtle highlight + standard padding) no per-row theme here.
26
24
  emptyState: "px-4 py-12 text-center text-sm text-[var(--color-text-muted)] " +
27
25
  "dark:text-[var(--color-neutral-500)]",
28
26
  footer: "border-t border-[var(--color-border)] px-4 py-2 text-xs text-[var(--color-text-muted)]font-medium",
@@ -86,8 +86,6 @@ export interface CommandPaletteThemeOverrides {
86
86
  searchInput?: string;
87
87
  /** Style for group labels */
88
88
  groupLabel?: string;
89
- /** Style for command items (uses data-[highlighted] and data-[disabled] selectors) */
90
- commandItem?: string;
91
89
  /** Style for empty state */
92
90
  emptyState?: string;
93
91
  /** Style for the footer area */
@@ -5,21 +5,20 @@ const contextMenuTheme = {
5
5
  ...dropdownTheme,
6
6
  // Content uses the same styling as Dropdown menu
7
7
  contentStyle: dropdownTheme.menuStyle.replace("flex", "flex-col p-1"),
8
- // Items use exact same styling as Dropdown items (with space for check icon)
9
- itemStyle: `${dropdownTheme.itemBaseStyle} data-[checked=true]:pl-8`,
10
- // Checked state - tick icon positioning (absolute left)
11
- itemCheckedStyle: "absolute left-2.5 top-1/2 -translate-y-1/2 w-4 h-4 text-[var(--color-text-primary)] " +
12
- "dark:text-[var(--color-neutral-200)]",
13
- // Submenu trigger - based on Dropdown item style with chevron space
14
- subTriggerStyle: `${dropdownTheme.itemBaseStyle} pr-8 data-[state=open]:bg-[var(--color-surface-hover)] ` +
15
- "dark:data-[state=open]:bg-[var(--color-neutral-700)]",
16
- // Submenu content - matches main dropdown menu style
17
- subContentStyle: "min-w-[180px] max-h-[400px] overflow-y-auto rounded-[var(--dropdown-radius)] border border-[var(--color-border)] " +
18
- "bg-[var(--color-background)] shadow-real-xl flex flex-col p-1 focus:outline-none " +
19
- "dark:bg-[var(--color-background-secondary)]",
20
- // Separator - horizontal divider
21
- separatorStyle: "h-px bg-[var(--color-border)] my-1 -mx-1 " +
22
- "dark:bg-[var(--color-neutral-700)]",
8
+ // Items use exact same styling as Dropdown items. The left padding for the
9
+ // check icon is applied per-item in ContextMenuItem (className) when checked.
10
+ itemStyle: dropdownTheme.itemBaseStyle,
11
+ // Checked state - tick icon positioning (absolute left).
12
+ // --color-text-primary flips for dark mode on its own.
13
+ itemCheckedStyle: "absolute left-2.5 top-1/2 -translate-y-1/2 w-4 h-4 text-[var(--color-text-primary)]",
14
+ // Submenu trigger - based on Dropdown item style with chevron space.
15
+ // --color-surface-hover is a translucent tint that lightens in dark on its own.
16
+ subTriggerStyle: `${dropdownTheme.itemBaseStyle} pr-8 data-[state=open]:bg-[var(--color-surface-hover)]`,
17
+ // Submenu content - floating anchored overlay, matches main dropdown menu
18
+ subContentStyle: "min-w-[180px] max-h-[400px] overflow-y-auto rounded-[var(--dropdown-radius)] border border-[var(--color-border)] ml-1 " +
19
+ "bg-[var(--color-surface-overlay)]/80 backdrop-blur-md shadow-real-xl flex flex-col p-1 focus:outline-none",
20
+ // Separator - horizontal divider (--color-border flips for dark on its own)
21
+ separatorStyle: "h-px bg-[var(--color-border)] my-1 -mx-1",
23
22
  // Label - section header (matches Dropdown section title)
24
23
  labelStyle: dropdownTheme.sectionTitleStyle,
25
24
  };
@@ -23,7 +23,7 @@ const ContextMenuItem = React__default.forwardRef(({ children, className, checke
23
23
  // Build end content: user's endContent OR shortcut display
24
24
  const resolvedEndContent = endContent ||
25
25
  (shortcut ? (jsx("span", { className: "text-sm text-[var(--color-text-muted)] font-mono", children: shortcut })) : undefined);
26
- return (jsx(MenuItem, { ref: ref, role: "menuitem", disabled: disabled, isDanger: isDanger, startContent: resolvedStartContent, endContent: resolvedEndContent, subtitle: subtitle, onActivate: handleActivate, "data-checked": checked, "aria-checked": checked ? "true" : undefined, className: cn(checked && "pl-8", className), theme: {
26
+ return (jsx(MenuItem, { ref: ref, role: "menuitem", disabled: disabled, isDanger: isDanger, startContent: resolvedStartContent, endContent: resolvedEndContent, subtitle: subtitle, onActivate: handleActivate, "data-checked": checked, "aria-checked": checked ? "true" : undefined, className: cn(checked && "pl-6", className), theme: {
27
27
  baseStyle: theme.itemStyle,
28
28
  dangerStyle: theme.itemDangerStyle,
29
29
  focusStyle: theme.itemFocusStyle,
@@ -53,7 +53,7 @@ const ContextMenuSubTrigger = React__default.forwardRef(({ children, className,
53
53
  ref.current = el;
54
54
  }
55
55
  }, [ref, triggerRef]);
56
- return (jsxs("div", { ref: handleRef, role: "menuitem", "aria-haspopup": "true", "aria-expanded": isOpen, "aria-disabled": disabled, "data-state": isOpen ? "open" : "closed", "data-disabled": disabled, tabIndex: disabled ? undefined : -1, className: cn(theme.subTriggerStyle, theme.itemFocusStyle, className), onMouseEnter: handleMouseEnter, onKeyDown: handleKeyDown, ...props, children: [jsx("span", { className: "flex-1 truncate", children: children }), jsx(ChevronRightIcon, { className: "absolute right-2 top-1/2 -translate-y-1/2 w-4 h-4 text-[var(--color-text-muted)]", "aria-hidden": "true" })] }));
56
+ return (jsxs("div", { ref: handleRef, role: "menuitem", "aria-haspopup": "true", "aria-expanded": isOpen, "aria-disabled": disabled, "data-state": isOpen ? "open" : "closed", "data-disabled": disabled, tabIndex: disabled ? undefined : -1, className: cn(theme.subTriggerStyle, theme.itemFocusStyle, className), onMouseEnter: handleMouseEnter, onKeyDown: handleKeyDown, ...props, children: [jsx("span", { className: "flex-1 truncate", children: children }), jsx(ChevronRightIcon, { className: "absolute right-2 top-1/2 -translate-y-1/2 size-3 text-[var(--color-text-secondary)]", "aria-hidden": "true", strokeWidth: 2 })] }));
57
57
  });
58
58
  ContextMenuSubTrigger.displayName = "ContextMenuSubTrigger";
59
59
 
@@ -0,0 +1,3 @@
1
+ import React from 'react';
2
+ import { DotSeparatorProps } from './DotSeparator.types';
3
+ export declare const DotSeparator: React.ForwardRefExoticComponent<DotSeparatorProps & React.RefAttributes<HTMLSpanElement>>;
@@ -0,0 +1,19 @@
1
+ import { jsx } from 'react/jsx-runtime';
2
+ import React__default, { useMemo } from 'react';
3
+ import { cn } from '../../../utils/cn.js';
4
+ import { dotSeparatorTheme } from './DotSeparator.theme.js';
5
+
6
+ const DotSeparator = React__default.forwardRef(({ size = 'md', className, theme: customTheme = {}, ...props }, ref) => {
7
+ const theme = useMemo(() => ({
8
+ ...dotSeparatorTheme,
9
+ ...customTheme,
10
+ sizes: {
11
+ ...dotSeparatorTheme.sizes,
12
+ ...customTheme.sizes,
13
+ },
14
+ }), [customTheme]);
15
+ return (jsx("span", { ref: ref, "aria-hidden": "true", className: cn(theme.baseStyle, theme.sizes[size], className), ...props }));
16
+ });
17
+ DotSeparator.displayName = 'DotSeparator';
18
+
19
+ export { DotSeparator };
@@ -0,0 +1,2 @@
1
+ import { DotSeparatorTheme } from './DotSeparator.types';
2
+ export declare const dotSeparatorTheme: DotSeparatorTheme;
@@ -0,0 +1,10 @@
1
+ const dotSeparatorTheme = {
2
+ baseStyle: 'inline-block shrink-0 rounded-full align-middle bg-[var(--color-text-muted)]',
3
+ sizes: {
4
+ sm: 'size-0.5 mx-1', // 2px dot
5
+ md: 'size-1 mx-1.5', // 4px dot
6
+ lg: 'size-1.5 mx-2', // 6px dot
7
+ },
8
+ };
9
+
10
+ export { dotSeparatorTheme };
@@ -0,0 +1,25 @@
1
+ import { HTMLAttributes } from 'react';
2
+ export type DotSeparatorSize = 'sm' | 'md' | 'lg';
3
+ export interface DotSeparatorTheme {
4
+ baseStyle: string;
5
+ sizes: Record<DotSeparatorSize, string>;
6
+ }
7
+ export interface DotSeparatorThemeOverrides {
8
+ baseStyle?: string;
9
+ sizes?: Partial<Record<DotSeparatorSize, string>>;
10
+ }
11
+ export interface DotSeparatorProps extends HTMLAttributes<HTMLSpanElement> {
12
+ /**
13
+ * The size of the dot (also scales its horizontal spacing)
14
+ * @default 'md'
15
+ */
16
+ size?: DotSeparatorSize;
17
+ /**
18
+ * Custom class name for the dot
19
+ */
20
+ className?: string;
21
+ /**
22
+ * Component-level theme overrides
23
+ */
24
+ theme?: DotSeparatorThemeOverrides;
25
+ }
@@ -0,0 +1,3 @@
1
+ export { DotSeparator } from './DotSeparator';
2
+ export type { DotSeparatorProps, DotSeparatorSize, DotSeparatorTheme, DotSeparatorThemeOverrides, } from './DotSeparator.types';
3
+ export { dotSeparatorTheme } from './DotSeparator.theme';
@@ -2,19 +2,18 @@ import { menuItemTheme } from '../MenuItem/MenuItem.theme.js';
2
2
 
3
3
  const dropdownTheme = {
4
4
  // Menu container - similar to Popover but with menu-specific styling
5
- menuStyle: "min-w-[200px] max-h-[400px] overflow-y-auto rounded-[var(--dropdown-radius)] border border-[var(--color-border)] bg-[var(--color-surface-overlay)] shadow-real-xl focus:outline-none flex disabled:cursor-not-allowed " +
6
- "dark:bg-[var(--color-surface-overlay)]",
5
+ menuStyle: "min-w-[200px] max-h-[400px] overflow-y-auto rounded-[var(--dropdown-radius)] border border-[var(--color-border)] bg-[var(--color-surface-overlay)]/80 backdrop-blur-md shadow-real-xl focus:outline-none flex disabled:cursor-not-allowed " +
6
+ "dark:bg-[var(--color-surface-overlay)]/80",
7
7
  // Delegate item styles to shared MenuItem theme
8
8
  itemBaseStyle: menuItemTheme.baseStyle,
9
9
  itemDangerStyle: menuItemTheme.dangerStyle,
10
10
  itemFocusStyle: menuItemTheme.focusStyle,
11
11
  // Section title styling
12
- sectionTitleStyle: "px-2 py-1.5 text-xs font-semibold text-[var(--color-text-muted)] uppercase tracking-tight",
12
+ sectionTitleStyle: "px-2 py-1.5 text-[11px] font-medium text-[var(--color-text-secondary)] uppercase tracking-tight",
13
13
  // Section container styling
14
14
  sectionStyle: "py-1",
15
- // Separator between sections
16
- separatorStyle: "my-1 h-px bg-[var(--color-border)] " +
17
- "dark:bg-[var(--color-neutral-700)]",
15
+ // Separator between sections (--color-border flips for dark mode on its own)
16
+ separatorStyle: "my-1 h-px bg-[var(--color-border)]",
18
17
  };
19
18
 
20
19
  export { dropdownTheme };
@@ -63,7 +63,7 @@ const DropdownItem = React__default.forwardRef(({ itemKey, children, className,
63
63
  // Build end content: user's endContent OR selection checkmark
64
64
  const resolvedEndContent = endContent ||
65
65
  (selectionMode !== "none" ? (jsx("div", { className: cn("flex items-center justify-center flex-shrink-0 w-5 h-5"), children: isSelected && (jsx(CheckIcon, { className: "size-4 text-[var(--color-text-secondary)]" })) })) : undefined);
66
- return (jsx(MenuItem, { ref: ref, role: itemRole, disabled: disabled, isDanger: isDanger, startContent: startContent, endContent: resolvedEndContent, subtitle: subtitle, shortcut: shortcut, onActivate: handleActivate, "data-selected": isSelected, ...(selectionMode !== "none" ? { "aria-checked": isSelected } : {}), className: className, theme: {
66
+ return (jsx(MenuItem, { ref: ref, role: itemRole, disabled: disabled, isDanger: isDanger, startContent: startContent, endContent: resolvedEndContent, subtitle: subtitle, shortcut: shortcut, onActivate: handleActivate, selected: isSelected, ...(selectionMode !== "none" ? { "aria-checked": isSelected } : {}), className: className, theme: {
67
67
  baseStyle: theme.itemBaseStyle,
68
68
  dangerStyle: theme.itemDangerStyle,
69
69
  focusStyle: theme.itemFocusStyle,
@@ -1,5 +1,5 @@
1
1
  import { jsx } from 'react/jsx-runtime';
2
- import React__default, { useRef, useState, useCallback, useEffect } from 'react';
2
+ import React__default, { useRef, useState, useEffect, useCallback } from 'react';
3
3
  import { useReducedMotion, AnimatePresence, motion } from 'motion/react';
4
4
  import { createPortal } from 'react-dom';
5
5
  import { cn } from '../../../utils/cn.js';
@@ -23,7 +23,7 @@ const DropdownMenu = React__default.forwardRef(({ children, className, animation
23
23
  const [typeaheadString, setTypeaheadString] = useState("");
24
24
  const typeaheadTimeoutRef = useRef(null);
25
25
  // Use the positioning hook from Popover/Select
26
- const { position, cssVariables, contentRef: portalContentRef, } = useSelectPortal({
26
+ const { position, cssVariables, contentRef: portalContentRef, actualPlacement, } = useSelectPortal({
27
27
  triggerRef,
28
28
  isOpen: isOpen || false,
29
29
  placement,
@@ -31,6 +31,22 @@ const DropdownMenu = React__default.forwardRef(({ children, className, animation
31
31
  autoWidth: false,
32
32
  stickyTracking: true,
33
33
  });
34
+ // Escape must close the menu even when focus never entered it — after a
35
+ // mouse-open, focus stays on the trigger, so the menu's own onKeyDown
36
+ // (which also handles Escape) never fires.
37
+ useEffect(() => {
38
+ if (!isOpen)
39
+ return;
40
+ const onDocKeyDown = (e) => {
41
+ var _a;
42
+ if (e.key !== "Escape")
43
+ return;
44
+ onOpenChange(false);
45
+ (_a = triggerRef.current) === null || _a === void 0 ? void 0 : _a.focus();
46
+ };
47
+ document.addEventListener("keydown", onDocKeyDown);
48
+ return () => document.removeEventListener("keydown", onDocKeyDown);
49
+ }, [isOpen, onOpenChange, triggerRef]);
34
50
  // Get all menu items (not separators or sections)
35
51
  const getMenuItems = useCallback(() => {
36
52
  if (!localRef.current)
@@ -121,21 +137,32 @@ const DropdownMenu = React__default.forwardRef(({ children, className, animation
121
137
  }
122
138
  onOpenChange(false);
123
139
  });
124
- // Focus first item when menu opens
140
+ // Focus first item when menu opens. Retry until focus actually LANDS:
141
+ // useSelectPortal keeps the menu `visibility: hidden` until positioning
142
+ // completes, and focus() on a hidden element is a silent no-op — a
143
+ // single-shot focus fires inside that window, leaving focus on the
144
+ // trigger, which kills the whole keyboard layer (arrows, Enter, and
145
+ // typeahead all hang off focus being inside the menu).
125
146
  useEffect(() => {
126
- if (isOpen) {
127
- // Focus first item after a small delay to allow render
128
- requestAnimationFrame(() => {
129
- const items = getMenuItems();
130
- if (items.length > 0) {
131
- focusItem(0);
132
- }
133
- });
134
- }
135
- else {
147
+ if (!isOpen) {
136
148
  setFocusedIndex(-1);
137
149
  setTypeaheadString("");
150
+ return;
138
151
  }
152
+ let raf = 0;
153
+ let tries = 0;
154
+ const tryFocus = () => {
155
+ const items = getMenuItems();
156
+ if (items.length > 0) {
157
+ focusItem(0);
158
+ if (document.activeElement === items[0])
159
+ return; // focus landed
160
+ }
161
+ if (++tries < 10)
162
+ raf = requestAnimationFrame(tryFocus);
163
+ };
164
+ raf = requestAnimationFrame(tryFocus);
165
+ return () => cancelAnimationFrame(raf);
139
166
  }, [isOpen, getMenuItems, focusItem]);
140
167
  // Combine refs
141
168
  const handleRef = useCallback((el) => {
@@ -156,23 +183,23 @@ const DropdownMenu = React__default.forwardRef(({ children, className, animation
156
183
  el;
157
184
  }
158
185
  }, [ref, menuRef, portalContentRef]);
159
- // Animation variants
186
+ // Animation variants — enter/exit from the trigger's side. A menu opening
187
+ // above the trigger slides up into place and scales from its bottom edge;
188
+ // a hardcoded top-down drop reads backwards there. `actualPlacement` (not
189
+ // the prop) so a viewport-flipped menu animates from its real side.
190
+ const side = (actualPlacement || placement || "bottom").split("-")[0];
191
+ const closedShift = side === "top"
192
+ ? { y: 10 }
193
+ : side === "left"
194
+ ? { x: 10 }
195
+ : side === "right"
196
+ ? { x: -10 }
197
+ : { y: -10 };
198
+ const transformOrigin = side === "top" ? "bottom" : side === "left" ? "right" : side === "right" ? "left" : "top";
160
199
  const menuVariants = {
161
- hidden: {
162
- opacity: 0,
163
- scale: 0.95,
164
- y: -10,
165
- },
166
- visible: {
167
- opacity: 1,
168
- scale: 1,
169
- y: 0,
170
- },
171
- exit: {
172
- opacity: 0,
173
- scale: 0.95,
174
- y: -10,
175
- },
200
+ hidden: { opacity: 0, scale: 0.95, x: 0, y: 0, ...closedShift },
201
+ visible: { opacity: 1, scale: 1, x: 0, y: 0 },
202
+ exit: { opacity: 0, scale: 0.95, x: 0, y: 0, ...closedShift },
176
203
  };
177
204
  // Extract DOM props to avoid type conflicts with Framer Motion
178
205
  const { onAnimationStart, onAnimationEnd, onDrag, onDragStart, onDragEnd, ...domProps } = props;
@@ -180,6 +207,7 @@ const DropdownMenu = React__default.forwardRef(({ children, className, animation
180
207
  ...cssVariables,
181
208
  top: `${position.top}px`,
182
209
  left: `${position.left}px`,
210
+ transformOrigin,
183
211
  }, id: menuId, role: "menu", "aria-label": ariaLabel || undefined, "aria-orientation": horizontal ? "horizontal" : "vertical", tabIndex: -1, onKeyDown: handleKeyDown, variants: shouldReduceMotion || !animation ? {} : menuVariants, initial: shouldReduceMotion || !animation ? undefined : "hidden", animate: shouldReduceMotion || !animation ? undefined : "visible", exit: shouldReduceMotion || !animation ? undefined : "exit", transition: shouldReduceMotion || !animation
184
212
  ? { duration: 0 }
185
213
  : {
@@ -189,7 +217,7 @@ const DropdownMenu = React__default.forwardRef(({ children, className, animation
189
217
  }, "data-state": isOpen ? "open" : "closed", "data-placement": placement, ...domProps, children: children })) }));
190
218
  // Use portal if specified - wrap with dark class for dark mode support
191
219
  if (portal && isClient) {
192
- return createPortal(jsx("div", { className: isDarkMode ? "dark" : undefined, children: menuContent }), document.body);
220
+ return createPortal(jsx("div", { "data-flikkui-portal": "", className: isDarkMode ? "dark" : undefined, children: menuContent }), document.body);
193
221
  }
194
222
  return menuContent;
195
223
  });
@@ -0,0 +1,5 @@
1
+ import React from "react";
2
+ import type { HeroCardProps } from "./HeroCard.types";
3
+ /** Default backdrop — one of the bundled `@flikk/ui/bg/*` blobs. */
4
+ export declare const HERO_CARD_DEFAULT_IMAGE = "/bg/1.webp";
5
+ export declare const HeroCard: React.ForwardRefExoticComponent<HeroCardProps & React.RefAttributes<HTMLDivElement>>;
@@ -0,0 +1,99 @@
1
+ import { jsxs, jsx } from 'react/jsx-runtime';
2
+ import React__default, { useRef, useCallback, useEffect } from 'react';
3
+ import { useReducedMotion } from 'motion/react';
4
+ import { cn } from '../../../utils/cn.js';
5
+ import { heroCardTheme } from './HeroCard.theme.js';
6
+
7
+ /** Default backdrop — one of the bundled `@flikk/ui/bg/*` blobs. */
8
+ const HERO_CARD_DEFAULT_IMAGE = "/bg/1.webp";
9
+ const HeroCard = React__default.forwardRef(({ image = HERO_CARD_DEFAULT_IMAGE, imageBlur = 40, imageScale = 1.5, imageOpacity = 0.25, imageBlend = "multiply", imagePosition = "center", parallax = false, parallaxIntensity = 32, contentClassName, theme, className, children, ...rest }, ref) => {
10
+ const outerRef = useRef(null);
11
+ const bgRef = useRef(null);
12
+ // Merge the forwarded ref with our internal one (we need the node for the listener)
13
+ const setOuterRef = useCallback((node) => {
14
+ outerRef.current = node;
15
+ if (typeof ref === "function")
16
+ ref(node);
17
+ else if (ref)
18
+ ref.current = node;
19
+ }, [ref]);
20
+ const prefersReducedMotion = useReducedMotion();
21
+ const parallaxOn = parallax && !!image && !prefersReducedMotion;
22
+ // Resting transform — also the SSR/no-JS value; the parallax loop overrides it imperatively.
23
+ const baseTransform = imageScale !== 1 ? `scale(${imageScale})` : undefined;
24
+ useEffect(() => {
25
+ const outer = outerRef.current;
26
+ const bg = bgRef.current;
27
+ if (!parallaxOn || !outer || !bg)
28
+ return;
29
+ let disposed = false;
30
+ // Travel can't exceed the overscan or the card edge would show through.
31
+ const maxTravel = (size) => Math.min(parallaxIntensity, ((imageScale - 1) / 2) * size);
32
+ let pointer = null;
33
+ const st = { tx: 0, ty: 0, x: 0, y: 0, raf: 0, running: false, last: 0 };
34
+ const apply = () => {
35
+ bg.style.transform = `translate3d(${st.x.toFixed(2)}px, ${st.y.toFixed(2)}px, 0) scale(${imageScale})`;
36
+ };
37
+ const loop = (now) => {
38
+ if (disposed)
39
+ return;
40
+ const dt = Math.min(Math.max((now - st.last) / 1000, 0.001), 0.05);
41
+ st.last = now;
42
+ const a = 1 - Math.exp(-9 * dt); // dt-normalized easing — same feel at 60/120Hz
43
+ st.x += (st.tx - st.x) * a;
44
+ st.y += (st.ty - st.y) * a;
45
+ apply();
46
+ if (Math.abs(st.tx - st.x) < 0.1 && Math.abs(st.ty - st.y) < 0.1 && !pointer) {
47
+ st.running = false;
48
+ return; // settled at rest, pointer gone → idle (no per-frame cost)
49
+ }
50
+ st.raf = requestAnimationFrame(loop);
51
+ };
52
+ const start = () => {
53
+ if (st.running || disposed)
54
+ return;
55
+ st.running = true;
56
+ st.last = performance.now();
57
+ st.raf = requestAnimationFrame(loop);
58
+ };
59
+ const onMove = (e) => {
60
+ if (e.pointerType !== "mouse")
61
+ return;
62
+ const r = outer.getBoundingClientRect();
63
+ pointer = { x: e.clientX, y: e.clientY };
64
+ const nx = (e.clientX - r.left) / r.width - 0.5; // -0.5 … 0.5
65
+ const ny = (e.clientY - r.top) / r.height - 0.5;
66
+ // Opposite the cursor → parallax depth; full intensity at the edges.
67
+ st.tx = -nx * 2 * maxTravel(r.width);
68
+ st.ty = -ny * 2 * maxTravel(r.height);
69
+ start();
70
+ };
71
+ const onLeave = () => {
72
+ pointer = null;
73
+ st.tx = 0;
74
+ st.ty = 0;
75
+ start(); // ease back to rest, then the loop self-stops
76
+ };
77
+ outer.addEventListener("pointermove", onMove, { passive: true });
78
+ outer.addEventListener("pointerleave", onLeave);
79
+ return () => {
80
+ disposed = true;
81
+ outer.removeEventListener("pointermove", onMove);
82
+ outer.removeEventListener("pointerleave", onLeave);
83
+ cancelAnimationFrame(st.raf);
84
+ bg.style.transform = baseTransform !== null && baseTransform !== void 0 ? baseTransform : "";
85
+ };
86
+ }, [parallaxOn, imageScale, parallaxIntensity, baseTransform]);
87
+ return (jsxs("div", { ref: setOuterRef, className: cn(heroCardTheme.baseStyle, theme === null || theme === void 0 ? void 0 : theme.baseStyle, className), ...rest, children: [image && (jsx("div", { ref: bgRef, "aria-hidden": "true", className: cn(heroCardTheme.imageStyle, theme === null || theme === void 0 ? void 0 : theme.imageStyle), style: {
88
+ backgroundImage: `url(${image})`,
89
+ backgroundPosition: imagePosition,
90
+ // Numeric knobs go inline — no dynamic Tailwind classes to purge-miss.
91
+ filter: imageBlur > 0 ? `blur(${imageBlur}px)` : undefined,
92
+ transform: baseTransform,
93
+ opacity: imageOpacity,
94
+ mixBlendMode: imageBlend,
95
+ } })), jsx("div", { className: cn(heroCardTheme.contentStyle, theme === null || theme === void 0 ? void 0 : theme.contentStyle, contentClassName), children: children })] }));
96
+ });
97
+ HeroCard.displayName = "HeroCard";
98
+
99
+ export { HERO_CARD_DEFAULT_IMAGE, HeroCard };
@@ -0,0 +1,3 @@
1
+ import type { HeroCardThemeOverrides } from "./HeroCard.types";
2
+ export type HeroCardTheme = Required<HeroCardThemeOverrides>;
3
+ export declare const heroCardTheme: HeroCardTheme;
@@ -0,0 +1,8 @@
1
+ const heroCardTheme = {
2
+ // Shares Card's radius token; gradient runs on the primary scale so it follows the app theme.
3
+ baseStyle: "relative overflow-hidden rounded-[calc(var(--card-radius)*2)] p-10 text-white bg-gradient-to-br from-[var(--color-primary-600)] via-[var(--color-primary-700)] to-[var(--color-primary-500)] ring-4 ring-[var(--color-primary)]/20 ",
4
+ imageStyle: "absolute inset-0 z-0 pointer-events-none bg-cover",
5
+ contentStyle: "relative z-10",
6
+ };
7
+
8
+ export { heroCardTheme };
@@ -0,0 +1,70 @@
1
+ import React from "react";
2
+ /** How the backdrop image composites over the gradient fill. */
3
+ export type HeroCardBlendMode = "multiply" | "overlay" | "soft-light" | "hard-light" | "screen" | "luminosity" | "normal";
4
+ export interface HeroCardThemeOverrides {
5
+ baseStyle?: string;
6
+ imageStyle?: string;
7
+ contentStyle?: string;
8
+ }
9
+ /**
10
+ * HeroCard — a gradient hero shell with an ambient blurred backdrop image.
11
+ * Children are the content (anything) and render above the backdrop.
12
+ *
13
+ * @example Default (bundled image + gradient)
14
+ * ```tsx
15
+ * <HeroCard>
16
+ * <h2 className="text-3xl font-semibold">Good morning, Maya</h2>
17
+ * </HeroCard>
18
+ * ```
19
+ *
20
+ * @example Full backdrop control
21
+ * ```tsx
22
+ * <HeroCard
23
+ * image="/bg/7.webp"
24
+ * imageBlur={32}
25
+ * imageScale={1.5}
26
+ * imageOpacity={0.35}
27
+ * imageBlend="overlay"
28
+ * imagePosition="top right"
29
+ * className="from-rose-500 via-purple-700 to-indigo-900"
30
+ * >
31
+ * …
32
+ * </HeroCard>
33
+ * ```
34
+ */
35
+ export interface HeroCardProps extends React.HTMLAttributes<HTMLDivElement> {
36
+ /**
37
+ * Backdrop image src. Defaults to the bundled `/bg/3.webp`
38
+ * (ship the `@flikk/ui/bg/*` assets at `/bg/` or pass your own URL).
39
+ * Pass `null` for a gradient-only hero.
40
+ */
41
+ image?: string | null;
42
+ /** Backdrop blur radius in px. @default 24 */
43
+ imageBlur?: number;
44
+ /** Backdrop scale factor — zooming the abstract blobs in/out reframes the texture. @default 1.25 */
45
+ imageScale?: number;
46
+ /** Backdrop opacity, 0–1. @default 0.5 */
47
+ imageOpacity?: number;
48
+ /** Blend mode compositing the image over the gradient. @default "multiply" */
49
+ imageBlend?: HeroCardBlendMode;
50
+ /** CSS `background-position` — e.g. `"top right"`, `"30% 70%"`. @default "center" */
51
+ imagePosition?: string;
52
+ /**
53
+ * On pointer hover, drift the backdrop image opposite the cursor (damped) for a
54
+ * parallax-depth effect. Pairs with a `TiltCard` wrapper. Mouse-driven; respects
55
+ * `prefers-reduced-motion`; no-op without an `image`. Travel is bounded by the
56
+ * `imageScale` overscan so card edges never show.
57
+ * @default false
58
+ */
59
+ parallax?: boolean;
60
+ /**
61
+ * Max backdrop travel in px (each direction) when `parallax` is on. Auto-clamped
62
+ * to the available `imageScale` overscan.
63
+ * @default 32
64
+ */
65
+ parallaxIntensity?: number;
66
+ /** className for the content wrapper (the layer lifted above the backdrop). */
67
+ contentClassName?: string;
68
+ /** Theme overrides (shadcn approach — `className` still wins). */
69
+ theme?: HeroCardThemeOverrides;
70
+ }
@@ -0,0 +1,4 @@
1
+ export { HeroCard, HERO_CARD_DEFAULT_IMAGE } from "./HeroCard";
2
+ export { heroCardTheme } from "./HeroCard.theme";
3
+ export type { HeroCardTheme } from "./HeroCard.theme";
4
+ export type { HeroCardProps, HeroCardThemeOverrides, HeroCardBlendMode } from "./HeroCard.types";
@@ -2,7 +2,7 @@
2
2
  * Default theme configuration for Kbd component
3
3
  */
4
4
  const kbdTheme = {
5
- baseStyle: 'inline-flex items-center justify-center leading-none font-sans font-medium rounded-[calc(var(--radius-base)*0.75)] bg-[var(--color-background-secondary)] border border-[var(--color-border)] text-[var(--color-text-secondary)] glass-effect',
5
+ baseStyle: 'inline-flex items-center justify-center leading-none font-sans font-medium rounded-[calc(var(--radius-base)*0.75)] bg-[var(--color-surface-raised)] border border-[var(--color-border)] text-[var(--color-text-secondary)]',
6
6
  sizes: {
7
7
  sm: 'text-xs px-1 min-w-5 h-5',
8
8
  md: 'text-xs px-1.5 min-w-6 h-6',
@@ -9,12 +9,15 @@ import { menuItemTheme } from './MenuItem.theme.js';
9
9
  * Handles visual layout, base styling, keyboard activation, and focus tracking.
10
10
  * Context-specific behavior (selection, checked state) is handled by consumers.
11
11
  */
12
- const MenuItem = React__default.forwardRef(({ children, className, startContent, endContent, subtitle, shortcut, disabled = false, isDanger = false, onActivate, theme: themeOverrides, role = "menuitem", ...props }, ref) => {
12
+ const MenuItem = React__default.forwardRef(({ children, className, startContent, endContent, subtitle, shortcut, disabled = false, isDanger = false, selected = false, onActivate, theme: themeOverrides, role = "menuitem", ...props }, ref) => {
13
13
  const [isFocused, setIsFocused] = useState(false);
14
14
  const theme = {
15
15
  ...menuItemTheme,
16
16
  ...themeOverrides,
17
17
  };
18
+ // Resolve state to plain utility classes (not data-[state] variants) so a
19
+ // consumer `className` always wins the cascade. See MenuItem.theme.ts.
20
+ const stateKey = disabled ? "disabled" : selected ? "selected" : "default";
18
21
  const handleClick = useCallback(() => {
19
22
  if (disabled)
20
23
  return;
@@ -26,7 +29,7 @@ const MenuItem = React__default.forwardRef(({ children, className, startContent,
26
29
  handleClick();
27
30
  }
28
31
  }, [handleClick]);
29
- return (jsxs("div", { ref: ref, role: role, tabIndex: disabled ? undefined : -1, "aria-disabled": disabled, "data-focused": isFocused, "data-disabled": disabled, className: cn(theme.baseStyle, theme.focusStyle, isDanger && theme.dangerStyle, className), onClick: handleClick, onKeyDown: handleKeyDown, onFocus: () => setIsFocused(true), onBlur: () => setIsFocused(false), ...props, children: [startContent && (jsx("div", { className: "flex items-center justify-center flex-shrink-0", children: startContent })), jsxs("div", { className: "flex-1 min-w-0", children: [jsxs("div", { className: "flex items-center justify-between gap-2", children: [jsx("span", { className: "truncate", children: children }), shortcut && (jsx("span", { className: "ml-auto flex-shrink-0", children: shortcut }))] }), subtitle && (typeof subtitle === 'string'
32
+ return (jsxs("div", { ref: ref, role: role, tabIndex: disabled ? undefined : -1, "aria-disabled": disabled, "data-focused": isFocused, "data-disabled": disabled, "data-selected": selected, className: cn(theme.baseStyle, theme.states[stateKey], isFocused && !disabled && !selected && theme.focusedStyle, isDanger && theme.dangerStyle, theme.focusStyle, className), onClick: handleClick, onKeyDown: handleKeyDown, onFocus: () => setIsFocused(true), onBlur: () => setIsFocused(false), ...props, children: [startContent && (jsx("div", { className: "flex items-center justify-center flex-shrink-0", children: startContent })), jsxs("div", { className: "flex-1 min-w-0", children: [jsxs("div", { className: "flex items-center justify-between gap-2", children: [jsx("span", { className: "truncate", children: children }), shortcut && (jsx("span", { className: "ml-auto flex-shrink-0", children: shortcut }))] }), subtitle && (typeof subtitle === 'string'
30
33
  ? jsx("div", { className: theme.subtitleStyle, children: subtitle })
31
34
  : subtitle)] }), endContent && (jsx("div", { className: "flex items-center justify-center ml-2", children: endContent }))] }));
32
35
  });
@@ -1,5 +1,11 @@
1
1
  export interface MenuItemTheme {
2
2
  baseStyle: string;
3
+ states: {
4
+ default: string;
5
+ selected: string;
6
+ disabled: string;
7
+ };
8
+ focusedStyle: string;
3
9
  dangerStyle: string;
4
10
  focusStyle: string;
5
11
  subtitleStyle: string;