@flikk/ui 1.0.0-beta.27 → 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 (319) 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 -143
  25. package/dist/components/ai/PromptInput/VoiceRecorder.js +0 -88
  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 +2 -2
  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/CommandPalette.theme.js +2 -2
  112. package/dist/components/core/ContextMenu/ContextMenu.theme.js +2 -2
  113. package/dist/components/core/ContextMenu/ContextMenuItem.js +1 -1
  114. package/dist/components/core/ContextMenu/ContextMenuSubTrigger.js +1 -1
  115. package/dist/components/core/Dropdown/Dropdown.theme.js +3 -3
  116. package/dist/components/core/Dropdown/DropdownMenu.js +57 -29
  117. package/dist/components/core/HeroCard/HeroCard.d.ts +5 -0
  118. package/dist/components/core/HeroCard/HeroCard.js +99 -0
  119. package/dist/components/core/HeroCard/HeroCard.theme.d.ts +3 -0
  120. package/dist/components/core/HeroCard/HeroCard.theme.js +8 -0
  121. package/dist/components/core/HeroCard/HeroCard.types.d.ts +70 -0
  122. package/dist/components/core/HeroCard/index.d.ts +4 -0
  123. package/dist/components/core/Kbd/Kbd.theme.js +1 -1
  124. package/dist/components/core/Modal/Modal.d.ts +1 -1
  125. package/dist/components/core/Modal/Modal.js +2 -7
  126. package/dist/components/core/Modal/Modal.theme.js +4 -8
  127. package/dist/components/core/Modal/Modal.types.d.ts +0 -10
  128. package/dist/components/core/Modal/index.d.ts +1 -1
  129. package/dist/components/core/ModalStack/ModalStack.d.ts +1 -1
  130. package/dist/components/core/ModalStack/ModalStack.types.d.ts +1 -2
  131. package/dist/components/core/ModalStack/ModalStackModal.d.ts +1 -1
  132. package/dist/components/core/ModalStack/ModalStackModal.js +2 -7
  133. package/dist/components/core/PageHeading/PageHeading.theme.js +2 -2
  134. package/dist/components/core/Popover/Popover.theme.js +1 -1
  135. package/dist/components/core/ScrollArea/ScrollArea.js +242 -4
  136. package/dist/components/core/ScrollArea/ScrollArea.types.d.ts +12 -1
  137. package/dist/components/core/ScrollArea/smooth/SmoothScrollEngine.d.ts +4 -0
  138. package/dist/components/core/ScrollArea/smooth/SmoothScrollEngine.js +23 -0
  139. package/dist/components/core/ScrollArea/smooth/useSmoothScroll.js +4 -0
  140. package/dist/components/core/ScrollArea/smooth/useSmoothScroll.types.d.ts +5 -0
  141. package/dist/components/core/Segmented/Segmented.theme.js +2 -2
  142. package/dist/components/core/Tooltip/Tooltip.theme.js +1 -1
  143. package/dist/components/core/index.d.ts +1 -0
  144. package/dist/components/core/index.js +2 -0
  145. package/dist/components/data-display/DescriptionList/DescriptionList.js +23 -7
  146. package/dist/components/data-display/DescriptionList/DescriptionList.theme.js +10 -3
  147. package/dist/components/data-display/DescriptionList/DescriptionList.types.d.ts +49 -10
  148. package/dist/components/data-display/DescriptionList/index.d.ts +1 -1
  149. package/dist/components/data-display/Feed/Feed.js +28 -5
  150. package/dist/components/data-display/Feed/Feed.theme.js +1 -1
  151. package/dist/components/data-display/Feed/Feed.types.d.ts +32 -1
  152. package/dist/components/data-display/Feed/index.d.ts +1 -1
  153. package/dist/components/data-display/Metric/Metric.js +8 -8
  154. package/dist/components/data-display/Metric/Metric.theme.d.ts +3 -2
  155. package/dist/components/data-display/Metric/Metric.theme.js +50 -68
  156. package/dist/components/data-display/Metric/Metric.types.d.ts +19 -21
  157. package/dist/components/data-display/Table/Table.js +2 -2
  158. package/dist/components/data-display/Table/Table.theme.js +24 -4
  159. package/dist/components/data-display/Table/Table.types.d.ts +8 -0
  160. package/dist/components/data-display/Table/TableBody.js +2 -2
  161. package/dist/components/data-display/Table/TableCell.js +1 -1
  162. package/dist/components/data-display/Table/TableRow.d.ts +1 -1
  163. package/dist/components/data-display/Table/TableRow.js +9 -2
  164. package/dist/components/data-display/Timeline/Timeline.js +27 -5
  165. package/dist/components/data-display/Timeline/Timeline.theme.d.ts +10 -2
  166. package/dist/components/data-display/Timeline/Timeline.theme.js +14 -8
  167. package/dist/components/data-display/Timeline/Timeline.types.d.ts +48 -16
  168. package/dist/components/data-display/Timeline/Timeline.utils.d.ts +6 -0
  169. package/dist/components/data-display/Timeline/Timeline.utils.js +11 -0
  170. package/dist/components/data-display/Timeline/TimelineItem.js +13 -20
  171. package/dist/components/data-display/Timeline/TimelineMarker.js +10 -8
  172. package/dist/components/data-display/Timeline/index.d.ts +2 -2
  173. package/dist/components/effects/3d/index.d.ts +0 -2
  174. package/dist/components/effects/3d/index.js +0 -1
  175. package/dist/components/effects/DotPattern/DotPattern.js +1 -1
  176. package/dist/components/effects/Overlay/Overlay.theme.js +1 -2
  177. package/dist/components/effects/Preloader/Preloader.animations.d.ts +23 -0
  178. package/dist/components/effects/Preloader/Preloader.animations.js +150 -0
  179. package/dist/components/effects/Preloader/Preloader.d.ts +3 -0
  180. package/dist/components/effects/Preloader/Preloader.js +119 -0
  181. package/dist/components/effects/Preloader/Preloader.types.d.ts +63 -0
  182. package/dist/components/effects/Preloader/index.d.ts +2 -0
  183. package/dist/components/effects/ProgressiveBlur/ProgressiveBlur.js +25 -14
  184. package/dist/components/effects/ProgressiveBlur/ProgressiveBlur.types.d.ts +2 -0
  185. package/dist/components/effects/TiltCard/TiltCard.d.ts +12 -0
  186. package/dist/components/effects/TiltCard/TiltCard.glow.d.ts +28 -0
  187. package/dist/components/effects/TiltCard/TiltCard.glow.js +114 -0
  188. package/dist/components/effects/TiltCard/TiltCard.js +177 -0
  189. package/dist/components/effects/{SpotlightBorder/SpotlightBorder.shaders.d.ts → TiltCard/TiltCard.shaders.d.ts} +1 -1
  190. package/dist/components/effects/{SpotlightBorder/SpotlightBorder.shaders.js → TiltCard/TiltCard.shaders.js} +1 -1
  191. package/dist/components/effects/TiltCard/TiltCard.types.d.ts +88 -0
  192. package/dist/components/effects/TiltCard/index.d.ts +2 -0
  193. package/dist/components/effects/index.d.ts +4 -12
  194. package/dist/components/effects/index.js +2 -6
  195. package/dist/components/forms/Checkbox/Checkbox.js +7 -1
  196. package/dist/components/forms/DatePicker/DatePicker.theme.js +2 -2
  197. package/dist/components/forms/DateRangePicker/DateRangePicker.theme.js +1 -1
  198. package/dist/components/forms/FileUpload/FileUpload.js +1 -89
  199. package/dist/components/forms/FormLabel/FormLabel.theme.js +1 -1
  200. package/dist/components/forms/RichTextEditor/RichTextEditor.theme.js +2 -2
  201. package/dist/components/forms/Slider/Slider.theme.js +1 -1
  202. package/dist/components/forms/Switch/Switch.js +27 -15
  203. package/dist/components/forms/Switch/Switch.theme.d.ts +36 -6
  204. package/dist/components/forms/Switch/Switch.theme.js +33 -4
  205. package/dist/components/forms/Switch/Switch.types.d.ts +12 -2
  206. package/dist/components/forms/TimePicker/TimePicker.theme.js +1 -2
  207. package/dist/components/forms/TimePicker/TimePickerContent.js +1 -90
  208. package/dist/components/forms/forms.theme.js +1 -1
  209. package/dist/components/forms/index.d.ts +0 -4
  210. package/dist/components/forms/index.js +0 -92
  211. package/dist/components/generative/GenerativeView.d.ts +21 -0
  212. package/dist/components/generative/GenerativeView.js +116 -0
  213. package/dist/components/generative/actions.d.ts +26 -0
  214. package/dist/components/generative/actions.js +51 -0
  215. package/dist/components/generative/index.d.ts +11 -0
  216. package/dist/components/generative/index.js +9 -0
  217. package/dist/components/generative/registry.d.ts +43 -0
  218. package/dist/components/generative/registry.js +114 -0
  219. package/dist/components/generative/resolvers.d.ts +35 -0
  220. package/dist/components/generative/resolvers.js +93 -0
  221. package/dist/components/generative/schema.generated.d.ts +2 -0
  222. package/dist/components/generative/schema.generated.js +1639 -0
  223. package/dist/components/generative/schemaTypes.d.ts +30 -0
  224. package/dist/components/generative/streaming.d.ts +39 -0
  225. package/dist/components/generative/streaming.js +283 -0
  226. package/dist/components/generative/tools.d.ts +21 -0
  227. package/dist/components/generative/tools.js +54 -0
  228. package/dist/components/generative/types.d.ts +41 -0
  229. package/dist/components/generative/useGenerativeStream.d.ts +37 -0
  230. package/dist/components/generative/useGenerativeStream.js +36 -0
  231. package/dist/components/generative/validate.d.ts +24 -0
  232. package/dist/components/generative/validate.js +259 -0
  233. package/dist/components/layout/AppShell/AppShell.theme.js +2 -2
  234. package/dist/components/layout/FormLayout/FormLayout.js +1 -90
  235. package/dist/components/layout/Grid/Grid.d.ts +3 -0
  236. package/dist/components/layout/Grid/Grid.js +50 -0
  237. package/dist/components/layout/Grid/Grid.theme.d.ts +2 -0
  238. package/dist/components/layout/Grid/Grid.theme.js +35 -0
  239. package/dist/components/layout/Grid/Grid.types.d.ts +57 -0
  240. package/dist/components/layout/Grid/index.d.ts +3 -0
  241. package/dist/components/layout/Section/Section.d.ts +3 -0
  242. package/dist/components/layout/Section/Section.js +18 -0
  243. package/dist/components/layout/Section/Section.theme.d.ts +2 -0
  244. package/dist/components/layout/Section/Section.theme.js +10 -0
  245. package/dist/components/layout/Section/Section.types.d.ts +34 -0
  246. package/dist/components/layout/Section/index.d.ts +3 -0
  247. package/dist/components/layout/Stack/Stack.d.ts +3 -0
  248. package/dist/components/layout/Stack/Stack.js +19 -0
  249. package/dist/components/layout/Stack/Stack.theme.d.ts +2 -0
  250. package/dist/components/layout/Stack/Stack.theme.js +10 -0
  251. package/dist/components/layout/Stack/Stack.types.d.ts +39 -0
  252. package/dist/components/layout/Stack/index.d.ts +3 -0
  253. package/dist/components/layout/index.d.ts +3 -0
  254. package/dist/components/layout/index.js +6 -0
  255. package/dist/generative.schema.json +1637 -0
  256. package/dist/index.js +180 -180
  257. package/dist/registry.json +648 -464
  258. package/dist/styles.css +1 -1
  259. package/dist/tools.json +1731 -0
  260. package/package.json +17 -4
  261. package/src/global.scss +53 -101
  262. package/src/styles/theme.css +687 -493
  263. package/dist/bg/1.jpg +0 -0
  264. package/dist/bg/10.jpg +0 -0
  265. package/dist/bg/11.jpg +0 -0
  266. package/dist/bg/14.jpg +0 -0
  267. package/dist/bg/15.jpg +0 -0
  268. package/dist/bg/16.jpg +0 -0
  269. package/dist/bg/17.jpg +0 -0
  270. package/dist/bg/18.jpg +0 -0
  271. package/dist/bg/19.jpg +0 -0
  272. package/dist/bg/2.jpg +0 -0
  273. package/dist/bg/20.jpg +0 -0
  274. package/dist/bg/21.jpg +0 -0
  275. package/dist/bg/22.jpg +0 -0
  276. package/dist/bg/23.jpg +0 -0
  277. package/dist/bg/24.jpg +0 -0
  278. package/dist/bg/3.jpg +0 -0
  279. package/dist/bg/4.jpg +0 -0
  280. package/dist/bg/5.jpg +0 -0
  281. package/dist/bg/6.jpg +0 -0
  282. package/dist/bg/7.jpg +0 -0
  283. package/dist/bg/8.jpg +0 -0
  284. package/dist/bg/9.jpg +0 -0
  285. package/dist/components/effects/MorphingText/MorphingText.d.ts +0 -17
  286. package/dist/components/effects/MorphingText/MorphingText.js +0 -125
  287. package/dist/components/effects/MorphingText/MorphingText.types.d.ts +0 -18
  288. package/dist/components/effects/MorphingText/index.d.ts +0 -2
  289. package/dist/components/effects/PageTransition/PageTransition.animations.d.ts +0 -8
  290. package/dist/components/effects/PageTransition/PageTransition.animations.js +0 -53
  291. package/dist/components/effects/PageTransition/PageTransition.d.ts +0 -3
  292. package/dist/components/effects/PageTransition/PageTransition.js +0 -82
  293. package/dist/components/effects/PageTransition/PageTransition.types.d.ts +0 -15
  294. package/dist/components/effects/PageTransition/index.d.ts +0 -2
  295. package/dist/components/effects/ParallaxSection/ParallaxSection.d.ts +0 -26
  296. package/dist/components/effects/ParallaxSection/ParallaxSection.js +0 -71
  297. package/dist/components/effects/ParallaxSection/ParallaxSection.types.d.ts +0 -11
  298. package/dist/components/effects/ParallaxSection/index.d.ts +0 -2
  299. package/dist/components/effects/Spotlight/Spotlight.d.ts +0 -36
  300. package/dist/components/effects/Spotlight/Spotlight.js +0 -112
  301. package/dist/components/effects/Spotlight/Spotlight.types.d.ts +0 -29
  302. package/dist/components/effects/Spotlight/index.d.ts +0 -2
  303. package/dist/components/effects/SpotlightBorder/SpotlightBorder.d.ts +0 -18
  304. package/dist/components/effects/SpotlightBorder/SpotlightBorder.js +0 -213
  305. package/dist/components/effects/SpotlightBorder/SpotlightBorder.types.d.ts +0 -61
  306. package/dist/components/effects/SpotlightBorder/index.d.ts +0 -2
  307. package/dist/components/effects/StickyScroll/StickyScroll.d.ts +0 -30
  308. package/dist/components/effects/StickyScroll/StickyScroll.js +0 -128
  309. package/dist/components/effects/StickyScroll/StickyScroll.types.d.ts +0 -19
  310. package/dist/components/effects/StickyScroll/index.d.ts +0 -2
  311. package/dist/components/forms/CronInput/CronInput.d.ts +0 -3
  312. package/dist/components/forms/CronInput/CronInput.js +0 -113
  313. package/dist/components/forms/CronInput/CronInput.theme.d.ts +0 -6
  314. package/dist/components/forms/CronInput/CronInput.theme.js +0 -75
  315. package/dist/components/forms/CronInput/CronInput.types.d.ts +0 -109
  316. package/dist/components/forms/CronInput/CronInput.utils.d.ts +0 -67
  317. package/dist/components/forms/CronInput/CronInput.utils.js +0 -505
  318. package/dist/components/forms/CronInput/index.d.ts +0 -4
  319. /package/dist/components/effects/{SpotlightBorder/SpotlightBorder.types.js → TiltCard/TiltCard.types.js} +0 -0
@@ -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
 
@@ -2,14 +2,14 @@ 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
15
  // Separator between sections (--color-border flips for dark mode on its own)
@@ -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
  : {
@@ -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',
@@ -3,7 +3,7 @@ import { ModalProps, ModalContextValue } from "./Modal.types";
3
3
  export declare const ModalContext: React.Context<ModalContextValue | undefined>;
4
4
  export declare const useModalContext: () => ModalContextValue;
5
5
  export declare const Modal: {
6
- ({ isOpen, onClose, size, variant, closeOnOverlayClick, closeOnEsc, showCloseButton, role, children, className, theme: themeOverrides, ...props }: ModalProps): import("react/jsx-runtime").JSX.Element;
6
+ ({ isOpen, onClose, size, closeOnOverlayClick, closeOnEsc, showCloseButton, role, children, className, theme: themeOverrides, ...props }: ModalProps): import("react/jsx-runtime").JSX.Element;
7
7
  displayName: string;
8
8
  } & {
9
9
  Header: {
@@ -18,8 +18,7 @@ const useModalContext = () => {
18
18
  throw new Error("Modal compound components must be used within <Modal>");
19
19
  return ctx;
20
20
  };
21
- const ModalRoot = ({ isOpen, onClose, size = "md", variant = "default", closeOnOverlayClick = true, closeOnEsc = true, showCloseButton = true, role = "dialog", children, className, theme: themeOverrides, ...props }) => {
22
- var _a;
21
+ const ModalRoot = ({ isOpen, onClose, size = "md", closeOnOverlayClick = true, closeOnEsc = true, showCloseButton = true, role = "dialog", children, className, theme: themeOverrides, ...props }) => {
23
22
  // Generate unique IDs for ARIA linkage
24
23
  const id = useId();
25
24
  const titleId = `${id}-title`;
@@ -39,10 +38,6 @@ const ModalRoot = ({ isOpen, onClose, size = "md", variant = "default", closeOnO
39
38
  const theme = {
40
39
  ...modalTheme,
41
40
  ...(themeOverrides || {}),
42
- containerVariants: {
43
- ...modalTheme.containerVariants,
44
- ...((themeOverrides === null || themeOverrides === void 0 ? void 0 : themeOverrides.containerVariants) || {}),
45
- },
46
41
  };
47
42
  // Context value
48
43
  const contextValue = useMemo(() => ({
@@ -59,7 +54,7 @@ const ModalRoot = ({ isOpen, onClose, size = "md", variant = "default", closeOnO
59
54
  titleId,
60
55
  subtitleId,
61
56
  }), [isOpen, onClose, size, isSizeToken, closeOnOverlayClick, closeOnEsc, showCloseButton, theme, isBodyScrollable, setIsBodyScrollable, titleId, subtitleId]);
62
- return (jsx(Overlay, { isOpen: isOpen, onClose: onClose, closeOnOverlayClick: closeOnOverlayClick, closeOnEsc: closeOnEsc, position: "center", role: role, ariaModal: true, ariaLabelledBy: titleId, ariaDescribedBy: subtitleId, contentClassName: cn(theme.container, (_a = theme.containerVariants) === null || _a === void 0 ? void 0 : _a[variant], isSizeToken ? modalSizeVariants[size] : size, className), animations: {
57
+ return (jsx(Overlay, { isOpen: isOpen, onClose: onClose, closeOnOverlayClick: closeOnOverlayClick, closeOnEsc: closeOnEsc, position: "center", role: role, ariaModal: true, ariaLabelledBy: titleId, ariaDescribedBy: subtitleId, contentClassName: cn(theme.container, isSizeToken ? modalSizeVariants[size] : size, className), animations: {
63
58
  overlay: modalOverlayAnimations,
64
59
  content: modalContentAnimations,
65
60
  }, ...props, children: jsx(ModalContext.Provider, { value: contextValue, children: children }) }));
@@ -1,17 +1,13 @@
1
1
  const modalTheme = {
2
2
  // Note: overlay styling is now handled by the shared Overlay component
3
3
  overlay: "",
4
- container: "relative w-full max-h-[calc(100vh-2rem)] rounded-[var(--modal-radius)] shadow-2xl shadow-black/30 flex flex-col my-4 min-h-0 overflow-hidden",
5
- containerVariants: {
6
- default: "bg-[var(--color-surface-raised)] ring-4 !ring-white/10 dark:bg-[var(--color-surface-raised)] border border-[var(--color-border)]",
7
- translucent: "bg-gradient-to-b from-[var(--color-background)]/90 to-[var(--color-background)]/70 backdrop-blur-xl ring-4 ring-white/20 border-t border-[var(--color-border)]",
8
- },
9
- header: "flex items-start justify-between p-6 pb-0 shrink-0 border-b border-transparent gap-6 relative",
4
+ container: "relative w-full max-h-[calc(100vh-2rem)] rounded-[var(--modal-radius)] shadow-2xl shadow-black/30 flex flex-col my-4 min-h-0 overflow-hidden bg-[var(--color-surface-raised)]/80 ring-6 !ring-white/10 border border-[var(--color-border)]",
5
+ header: "flex items-start justify-between p-4 pb-0 shrink-0 border-b border-transparent gap-6 relative",
10
6
  headerContent: "flex flex-col items-start gap-2 flex-1",
11
7
  title: "text-base leading-6 font-semibold text-[var(--color-text-primary)]",
12
8
  subtitle: "text-sm text-[var(--color-text-muted)] mt-0.5",
13
- body: "flex-1 overflow-y-auto p-6 pb-3",
14
- footer: "flex items-center justify-end gap-2 p-6 py-3 border-t border-transparent",
9
+ body: "flex-1 overflow-y-auto p-4 pb-3",
10
+ footer: "flex items-center justify-end gap-2 p-3 py-2 border-t border-transparent",
15
11
  };
16
12
  // Size variants for the modal container
17
13
  const modalSizeVariants = {
@@ -2,11 +2,9 @@ import React from "react";
2
2
  export type ModalSizeToken = "sm" | "md" | "lg" | "xl" | "full";
3
3
  /** Preset size token or any arbitrary Tailwind width class, e.g. `"w-80"`, `"w-[50vw]"` */
4
4
  export type ModalSize = ModalSizeToken | (string & {});
5
- export type ModalVariant = "default" | "translucent";
6
5
  export interface ModalTheme {
7
6
  overlay: string;
8
7
  container: string;
9
- containerVariants: Record<ModalVariant, string>;
10
8
  header: string;
11
9
  headerContent: string;
12
10
  title: string;
@@ -17,7 +15,6 @@ export interface ModalTheme {
17
15
  export interface ModalThemeOverrides {
18
16
  overlay?: string;
19
17
  container?: string;
20
- containerVariants?: Partial<Record<ModalVariant, string>>;
21
18
  header?: string;
22
19
  headerContent?: string;
23
20
  title?: string;
@@ -43,13 +40,6 @@ export interface ModalProps extends Omit<React.HTMLAttributes<HTMLDivElement>, "
43
40
  isOpen: boolean;
44
41
  onClose: () => void;
45
42
  size?: ModalSize;
46
- /**
47
- * Visual variant of the modal container.
48
- * - `default`: Solid background with subtle ring
49
- * - `translucent`: Frosted glass effect with reduced opacity and backdrop blur
50
- * @default "default"
51
- */
52
- variant?: ModalVariant;
53
43
  closeOnOverlayClick?: boolean;
54
44
  closeOnEsc?: boolean;
55
45
  showCloseButton?: boolean;
@@ -1,2 +1,2 @@
1
1
  export { Modal } from "./Modal";
2
- export type { ModalProps, ModalSize, ModalVariant, ModalThemeOverrides } from "./Modal.types";
2
+ export type { ModalProps, ModalSize, ModalThemeOverrides } from "./Modal.types";
@@ -5,7 +5,7 @@ export declare const ModalStack: {
5
5
  displayName: string;
6
6
  } & {
7
7
  Modal: {
8
- ({ size, variant, showCloseButton, showBackButton, onClose, onBack, children, className, theme: themeOverrides, _stackOnClose, _isBackModal, }: ModalStackModalInternalProps): import("react/jsx-runtime").JSX.Element;
8
+ ({ size, showCloseButton, showBackButton, onClose, onBack, children, className, theme: themeOverrides, _stackOnClose, _isBackModal, }: ModalStackModalInternalProps): import("react/jsx-runtime").JSX.Element;
9
9
  displayName: string;
10
10
  };
11
11
  };
@@ -1,5 +1,5 @@
1
1
  import React from "react";
2
- import { ModalSize, ModalVariant, ModalThemeOverrides } from "../Modal/Modal.types";
2
+ import { ModalSize, ModalThemeOverrides } from "../Modal/Modal.types";
3
3
  export interface ModalStackProps {
4
4
  isOpen: boolean;
5
5
  onClose: () => void;
@@ -12,7 +12,6 @@ export interface ModalStackModalProps {
12
12
  isOpen?: boolean;
13
13
  onClose?: () => void;
14
14
  size?: ModalSize;
15
- variant?: ModalVariant;
16
15
  showCloseButton?: boolean;
17
16
  showBackButton?: boolean;
18
17
  onBack?: () => void;
@@ -6,6 +6,6 @@ export interface ModalStackModalInternalProps extends ModalStackModalProps {
6
6
  _isBackModal?: boolean;
7
7
  }
8
8
  export declare const ModalStackModal: {
9
- ({ size, variant, showCloseButton, showBackButton, onClose, onBack, children, className, theme: themeOverrides, _stackOnClose, _isBackModal, }: ModalStackModalInternalProps): import("react/jsx-runtime").JSX.Element;
9
+ ({ size, showCloseButton, showBackButton, onClose, onBack, children, className, theme: themeOverrides, _stackOnClose, _isBackModal, }: ModalStackModalInternalProps): import("react/jsx-runtime").JSX.Element;
10
10
  displayName: string;
11
11
  };
@@ -7,8 +7,7 @@ import { ArrowLeftIcon } from '@heroicons/react/24/outline';
7
7
  import { modalStackTheme } from './ModalStack.theme.js';
8
8
  import { Button } from '../Button/Button.js';
9
9
 
10
- const ModalStackModal = ({ size = "md", variant = "default", showCloseButton = true, showBackButton = false, onClose, onBack, children, className, theme: themeOverrides, _stackOnClose, _isBackModal, }) => {
11
- var _a;
10
+ const ModalStackModal = ({ size = "md", showCloseButton = true, showBackButton = false, onClose, onBack, children, className, theme: themeOverrides, _stackOnClose, _isBackModal, }) => {
12
11
  const id = useId();
13
12
  const titleId = `${id}-title`;
14
13
  const subtitleId = `${id}-subtitle`;
@@ -25,10 +24,6 @@ const ModalStackModal = ({ size = "md", variant = "default", showCloseButton = t
25
24
  const theme = {
26
25
  ...modalTheme,
27
26
  ...(themeOverrides || {}),
28
- containerVariants: {
29
- ...modalTheme.containerVariants,
30
- ...((themeOverrides === null || themeOverrides === void 0 ? void 0 : themeOverrides.containerVariants) || {}),
31
- },
32
27
  };
33
28
  const contextValue = {
34
29
  isOpen: true,
@@ -44,7 +39,7 @@ const ModalStackModal = ({ size = "md", variant = "default", showCloseButton = t
44
39
  titleId,
45
40
  subtitleId,
46
41
  };
47
- return (jsx(ModalContext.Provider, { value: contextValue, children: jsxs("div", { className: cn(theme.container, (_a = theme.containerVariants) === null || _a === void 0 ? void 0 : _a[variant], modalSizeVariants[size], className), role: "dialog", "aria-modal": "true", "aria-labelledby": titleId, "aria-describedby": subtitleId, children: [showBackButton && (jsx("div", { className: cn(modalStackTheme.backButton), children: jsxs(Button, { onClick: backHandler, "aria-label": "Go back", variant: "link", size: "sm", children: [jsx(ArrowLeftIcon, { className: "size-4" }), "Back"] }) })), children] }) }));
42
+ return (jsx(ModalContext.Provider, { value: contextValue, children: jsxs("div", { className: cn(theme.container, modalSizeVariants[size], className), role: "dialog", "aria-modal": "true", "aria-labelledby": titleId, "aria-describedby": subtitleId, children: [showBackButton && (jsx("div", { className: cn(modalStackTheme.backButton), children: jsxs(Button, { onClick: backHandler, "aria-label": "Go back", variant: "link", size: "sm", children: [jsx(ArrowLeftIcon, { className: "size-4" }), "Back"] }) })), children] }) }));
48
43
  };
49
44
  ModalStackModal.displayName = "ModalStack.Modal";
50
45
 
@@ -1,8 +1,8 @@
1
1
  const pageHeadingTheme = {
2
2
  baseStyle: "flex flex-col pb-6 mb-6",
3
3
  headerStyle: "flex items-center gap-4",
4
- titleStyle: "text-xl font-semibold tracking-tight text-[var(--color-text-primary)]",
5
- subtitleStyle: "text-sm text-[var(--color-text-muted)] mt-1",
4
+ titleStyle: "text-xl font-bold text-[var(--color-text-primary)]",
5
+ subtitleStyle: "text-sm text-[var(--color-text-secondary)] mt-1",
6
6
  actionsStyle: "sm:ml-auto flex items-center gap-2 shrink-0",
7
7
  iconStyle: "flex items-center justify-center shrink-0 text-[var(--color-text-muted)]",
8
8
  separatorStyle: "border-b border-[var(--color-border)] mt-4",
@@ -5,7 +5,7 @@ const popoverTheme = {
5
5
  // Base styles for the popover
6
6
  baseStyle: "z-50 outline-none",
7
7
  // Body styles
8
- bodyStyle: "bg-[var(--color-surface-overlay)] border border-[var(--color-border)] rounded-[var(--popover-radius)] shadow-real-xl p-4 max-w-[min(24rem,calc(100vw-2rem))] dark:bg-[var(--color-surface-overlay)] ",
8
+ bodyStyle: "bg-[var(--color-surface-overlay)]/80 backdrop-blur-md border border-[var(--color-border)] rounded-[var(--popover-radius)] shadow-real-xl p-4 max-w-[min(24rem,calc(100vw-2rem))]",
9
9
  };
10
10
 
11
11
  export { popoverTheme };