@flikk/ui 1.0.0-beta.31 → 1.0.0-beta.32

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 (428) hide show
  1. package/CHANGELOG.md +295 -22
  2. package/dist/components/ai/AgentRequest/AgentRequest.animations.d.ts +25 -0
  3. package/dist/components/ai/AgentRequest/AgentRequest.animations.js +81 -0
  4. package/dist/components/ai/AgentRequest/AgentRequest.d.ts +3 -0
  5. package/dist/components/ai/AgentRequest/AgentRequest.js +435 -0
  6. package/dist/components/ai/AgentRequest/AgentRequest.theme.d.ts +2 -0
  7. package/dist/components/ai/AgentRequest/AgentRequest.theme.js +106 -0
  8. package/dist/components/ai/AgentRequest/AgentRequest.types.d.ts +241 -0
  9. package/dist/components/ai/AgentRequest/index.d.ts +3 -0
  10. package/dist/components/ai/CodeBlock/CodeBlock.theme.js +1 -1
  11. package/dist/components/ai/PromptInput/PromptInput.js +2 -2
  12. package/dist/components/ai/PromptInput/PromptInput.theme.js +2 -2
  13. package/dist/components/ai/PromptSuggestion/PromptSuggestion.theme.js +2 -2
  14. package/dist/components/ai/Reasoning/Reasoning.js +27 -3
  15. package/dist/components/ai/Reasoning/Reasoning.theme.d.ts +6 -0
  16. package/dist/components/ai/Reasoning/Reasoning.theme.js +36 -0
  17. package/dist/components/ai/Reasoning/Reasoning.types.d.ts +58 -5
  18. package/dist/components/ai/Reasoning/ReasoningTrace.d.ts +11 -0
  19. package/dist/components/ai/Reasoning/ReasoningTrace.js +84 -0
  20. package/dist/components/ai/Reasoning/index.d.ts +2 -1
  21. package/dist/components/ai/StreamingResponse/AnimatedText.d.ts +7 -0
  22. package/dist/components/ai/StreamingResponse/AnimatedText.js +8 -7
  23. package/dist/components/ai/StreamingResponse/MarkdownRenderer.d.ts +5 -0
  24. package/dist/components/ai/StreamingResponse/MarkdownRenderer.js +4 -4
  25. package/dist/components/ai/StreamingResponse/StreamingCursor.d.ts +2 -2
  26. package/dist/components/ai/StreamingResponse/StreamingCursor.js +10 -7
  27. package/dist/components/ai/StreamingResponse/StreamingResponse.animations.d.ts +10 -0
  28. package/dist/components/ai/StreamingResponse/StreamingResponse.animations.js +59 -33
  29. package/dist/components/ai/StreamingResponse/StreamingResponse.js +13 -7
  30. package/dist/components/ai/StreamingResponse/StreamingResponse.types.d.ts +33 -2
  31. package/dist/components/ai/StreamingResponse/StreamingSurface.d.ts +13 -0
  32. package/dist/components/ai/StreamingResponse/StreamingSurface.js +38 -0
  33. package/dist/components/ai/StreamingResponse/WordAnimationContext.d.ts +5 -0
  34. package/dist/components/ai/StreamingResponse/WordAnimationContext.js +5 -4
  35. package/dist/components/ai/StreamingResponse/index.d.ts +4 -2
  36. package/dist/components/ai/TokenCounter/TokenCounter.theme.js +1 -1
  37. package/dist/components/ai/index.d.ts +3 -2
  38. package/dist/components/ai/index.js +4 -0
  39. package/dist/components/canvas/BaseNode.js +1 -1
  40. package/dist/components/canvas/CanvasToolbar.js +0 -1
  41. package/dist/components/canvas/Edge.js +2 -2
  42. package/dist/components/canvas/NodeControls.js +0 -1
  43. package/dist/components/canvas/NodeRenderer.js +2 -2
  44. package/dist/components/charts/ActivityRings/ActivityRings.js +2 -2
  45. package/dist/components/charts/ActivityRings/ActivityRings.theme.js +1 -1
  46. package/dist/components/charts/AreaChart/AreaChart.js +3 -3
  47. package/dist/components/charts/AreaChart/AreaChart.theme.js +3 -3
  48. package/dist/components/charts/BarChart/BarChart.js +4 -4
  49. package/dist/components/charts/ComboChart/BarRenderer.js +2 -2
  50. package/dist/components/charts/ComboChart/BarRenderer.types.d.ts +1 -1
  51. package/dist/components/charts/ComboChart/ComboChartCanvas.js +1 -1
  52. package/dist/components/charts/ComboChart/LineRenderer.js +1 -1
  53. package/dist/components/charts/ComboChart/LineRenderer.types.d.ts +1 -1
  54. package/dist/components/charts/DonutChart/DonutChart.theme.js +4 -4
  55. package/dist/components/charts/DonutChart/MultiSegmentDonutChart.theme.js +1 -1
  56. package/dist/components/charts/Heatmap/Heatmap.js +49 -42
  57. package/dist/components/charts/Heatmap/Heatmap.theme.d.ts +6 -2
  58. package/dist/components/charts/Heatmap/Heatmap.theme.js +20 -8
  59. package/dist/components/charts/Heatmap/Heatmap.types.d.ts +49 -82
  60. package/dist/components/charts/Heatmap/HeatmapCell.js +30 -81
  61. package/dist/components/charts/Heatmap/HeatmapLegend.d.ts +7 -6
  62. package/dist/components/charts/Heatmap/HeatmapLegend.js +6 -6
  63. package/dist/components/charts/Heatmap/index.d.ts +1 -1
  64. package/dist/components/charts/Heatmap/utils/heatmapUtils.d.ts +7 -12
  65. package/dist/components/charts/Heatmap/utils/heatmapUtils.js +16 -61
  66. package/dist/components/charts/Heatmap/utils/heatmapUtils.test.d.ts +1 -0
  67. package/dist/components/charts/HorizontalBarChart/HorizontalBarChart.js +1 -1
  68. package/dist/components/charts/LineChart/LineChart.js +2 -2
  69. package/dist/components/charts/LollipopChart/LollipopChart.js +1 -1
  70. package/dist/components/charts/RadarChart/RadarChart.js +1 -1
  71. package/dist/components/charts/StackedBarChart/StackedBarChart.js +3 -3
  72. package/dist/components/charts/hooks/useChartAccessibility.js +9 -6
  73. package/dist/components/charts/index.d.ts +4 -8
  74. package/dist/components/charts/index.js +2 -4
  75. package/dist/components/charts/shared/ChartText/ChartText.theme.js +1 -1
  76. package/dist/components/charts/shared/index.d.ts +1 -1
  77. package/dist/components/charts/theme/chart.theme.js +3 -3
  78. package/dist/components/charts/utils/animation-utils.d.ts +12 -7
  79. package/dist/components/charts/utils/animation-utils.js +19 -19
  80. package/dist/components/core/Accordion/Accordion.theme.js +1 -1
  81. package/dist/components/core/Alert/Alert.animations.d.ts +11 -4
  82. package/dist/components/core/Alert/Alert.animations.js +11 -4
  83. package/dist/components/core/Alert/Alert.js +16 -2
  84. package/dist/components/core/Alert/Alert.theme.js +1 -1
  85. package/dist/components/core/Alert/Alert.types.d.ts +4 -2
  86. package/dist/components/core/AlertDialog/AlertDialog.js +2 -2
  87. package/dist/components/core/Avatar/Avatar.theme.js +1 -1
  88. package/dist/components/core/Badge/Badge.animations.d.ts +0 -5
  89. package/dist/components/core/Badge/Badge.animations.js +5 -84
  90. package/dist/components/core/Badge/Badge.d.ts +7 -4
  91. package/dist/components/core/Badge/Badge.js +27 -64
  92. package/dist/components/core/Badge/Badge.theme.js +8 -12
  93. package/dist/components/core/Badge/Badge.types.d.ts +18 -34
  94. package/dist/components/core/Breadcrumbs/Breadcrumbs.theme.js +4 -4
  95. package/dist/components/core/Button/Button.js +7 -43
  96. package/dist/components/core/Button/Button.theme.js +2 -2
  97. package/dist/components/core/Button/Button.types.d.ts +8 -12
  98. package/dist/components/core/Button/index.d.ts +0 -2
  99. package/dist/components/core/Calendar/Calendar.theme.js +1 -1
  100. package/dist/components/core/Calendar/CalendarMini/CalendarMini.theme.js +2 -2
  101. package/dist/components/core/Card/Card.js +7 -2
  102. package/dist/components/core/Card/Card.theme.js +29 -1
  103. package/dist/components/core/Card/Card.types.d.ts +20 -0
  104. package/dist/components/core/Card/CardBody.js +9 -1
  105. package/dist/components/core/Card/CardContext.d.ts +13 -0
  106. package/dist/components/core/Card/CardContext.js +14 -0
  107. package/dist/components/core/Card/CardHeader.js +4 -1
  108. package/dist/components/core/ContextMenu/ContextMenu.theme.js +4 -3
  109. package/dist/components/core/ContextMenu/ContextMenu.types.d.ts +8 -1
  110. package/dist/components/core/ContextMenu/ContextMenuSub.d.ts +11 -1
  111. package/dist/components/core/ContextMenu/ContextMenuSub.js +35 -22
  112. package/dist/components/core/ContextMenu/ContextMenuSubBody.js +14 -3
  113. package/dist/components/core/ContextMenu/ContextMenuSubTrigger.js +21 -8
  114. package/dist/components/core/DragDrop/DragDrop.theme.js +2 -2
  115. package/dist/components/core/Drawer/Drawer.theme.js +1 -1
  116. package/dist/components/core/Drawer/DrawerHeader.js +0 -1
  117. package/dist/components/core/Dropdown/DropdownMenu.js +22 -7
  118. package/dist/components/core/Link/Link.js +1 -1
  119. package/dist/components/core/Masonry/Masonry.theme.js +1 -1
  120. package/dist/components/core/MenuItem/MenuItem.js +2 -1
  121. package/dist/components/core/MenuItem/MenuItem.theme.js +13 -1
  122. package/dist/components/core/Message/Message.js +2 -0
  123. package/dist/components/core/Message/Message.theme.js +3 -3
  124. package/dist/components/core/Modal/Modal.animations.d.ts +1 -1
  125. package/dist/components/core/Modal/Modal.animations.js +50 -11
  126. package/dist/components/core/Modal/Modal.js +5 -1
  127. package/dist/components/core/Modal/Modal.theme.js +1 -1
  128. package/dist/components/core/Modal/ModalHeader.js +0 -1
  129. package/dist/components/core/ModalStack/ModalStackModal.js +3 -1
  130. package/dist/components/core/NavItem/NavItem.js +3 -2
  131. package/dist/components/core/NavItem/NavItem.theme.js +1 -1
  132. package/dist/components/core/OfflineIndicator/OfflineIndicator.theme.js +4 -2
  133. package/dist/components/core/PageHeading/PageHeading.theme.js +1 -1
  134. package/dist/components/core/Pagination/Pagination.theme.js +2 -2
  135. package/dist/components/core/Pill/Pill.js +2 -1
  136. package/dist/components/core/Pill/Pill.theme.js +4 -2
  137. package/dist/components/core/Popover/PopoverBody.js +16 -5
  138. package/dist/components/core/Progress/Progress.d.ts +0 -25
  139. package/dist/components/core/Progress/Progress.js +79 -11
  140. package/dist/components/core/Progress/Progress.theme.js +17 -0
  141. package/dist/components/core/Progress/Progress.types.d.ts +47 -1
  142. package/dist/components/core/Rating/Rating.theme.js +1 -1
  143. package/dist/components/core/Rating/Rating.types.d.ts +3 -2
  144. package/dist/components/core/ScrollArea/ScrollArea.js +1 -1
  145. package/dist/components/core/ScrollArea/ScrollArea.theme.js +1 -1
  146. package/dist/components/core/Segmented/Segmented.theme.js +3 -3
  147. package/dist/components/core/Segmented/SegmentedContext.js +1 -0
  148. package/dist/components/core/Sidebar/Sidebar.js +5 -2
  149. package/dist/components/core/Sidebar/Sidebar.theme.js +2 -2
  150. package/dist/components/core/Sidebar/SidebarContent.js +1 -1
  151. package/dist/components/core/Sidebar/SidebarHeader.js +1 -1
  152. package/dist/components/core/Sidebar/SidebarSearch.js +2 -2
  153. package/dist/components/core/Sidebar/SidebarToggle.js +1 -1
  154. package/dist/components/core/Sidebar/SidebarUserProfile.js +1 -1
  155. package/dist/components/core/Sortable/Sortable.theme.js +1 -1
  156. package/dist/components/core/Tabs/Tabs.theme.js +1 -1
  157. package/dist/components/core/Tag/Tag.theme.js +1 -1
  158. package/dist/components/core/Toast/ToastProvider.js +1 -1
  159. package/dist/components/core/Tree/Tree.theme.js +1 -1
  160. package/dist/components/core/index.d.ts +0 -2
  161. package/dist/components/core/index.js +0 -4
  162. package/dist/components/core/shared/ChartTooltip/ChartTooltip.animations.d.ts +4 -0
  163. package/dist/components/core/shared/ChartTooltip/ChartTooltip.animations.js +20 -0
  164. package/dist/components/{charts → core}/shared/ChartTooltip/ChartTooltip.js +1 -1
  165. package/dist/components/core/shared/Ripple.d.ts +16 -0
  166. package/dist/components/core/shared/Ripple.js +141 -0
  167. package/dist/components/data-display/GanttChart/GanttChart.theme.js +6 -6
  168. package/dist/components/data-display/GanttChart/GanttTaskBar.js +1 -1
  169. package/dist/components/data-display/GanttChart/GanttTimelineHeader.js +1 -1
  170. package/dist/components/data-display/GanttChart/GanttToolbar.js +0 -1
  171. package/dist/components/data-display/KPI/KPI.js +11 -20
  172. package/dist/components/data-display/KPI/KPI.theme.js +8 -4
  173. package/dist/components/data-display/Metric/Metric.theme.js +4 -4
  174. package/dist/components/data-display/Table/Table.theme.js +2 -2
  175. package/dist/components/data-display/Table/TableColumnManager.js +1 -2
  176. package/dist/components/data-display/Table/TableContext.js +1 -0
  177. package/dist/components/data-display/Table/TableFilter.js +9 -2
  178. package/dist/components/data-display/Table/TableSelectionHeader.js +1 -1
  179. package/dist/components/data-display/Timeline/Timeline.theme.js +1 -1
  180. package/dist/components/effects/CustomCursor/CustomCursor.d.ts +1 -1
  181. package/dist/components/effects/CustomCursor/CustomCursor.js +1 -1
  182. package/dist/components/effects/CustomCursor/CustomCursor.theme.js +4 -4
  183. package/dist/components/effects/Neumorphic/InsetCircleButton.js +1 -1
  184. package/dist/components/effects/Overlay/Overlay.js +7 -3
  185. package/dist/components/effects/index.d.ts +0 -32
  186. package/dist/components/effects/index.js +0 -16
  187. package/dist/components/effects/shared/ShaderCanvas/ShaderCanvas.d.ts +0 -2
  188. package/dist/components/effects/shared/ShaderCanvas/ShaderCanvas.js +1 -93
  189. package/dist/components/effects/shared/ShaderCanvas/ShaderCanvas.types.d.ts +0 -10
  190. package/dist/components/effects/shared/ShaderCanvas/index.d.ts +1 -1
  191. package/dist/components/effects/shared/index.d.ts +1 -3
  192. package/dist/components/effects/shared/shaderNoise.glsl.d.ts +1 -1
  193. package/dist/components/effects/shared/shaderNoise.glsl.js +2 -11
  194. package/dist/components/forms/Checkbox/Checkbox.theme.js +1 -1
  195. package/dist/components/forms/ColorPicker/ColorPickerHeader.js +1 -1
  196. package/dist/components/forms/ColorPicker/ColorPickerImage.js +1 -1
  197. package/dist/components/forms/Combobox/Combobox.js +2 -0
  198. package/dist/components/forms/DateRangePicker/DateRangePicker.theme.js +1 -1
  199. package/dist/components/forms/DateRangePicker/DateRangePickerContext.js +1 -0
  200. package/dist/components/forms/FileUpload/FileUpload.theme.js +2 -2
  201. package/dist/components/forms/FileUpload/FileUploadProgress.theme.js +1 -1
  202. package/dist/components/forms/InputAddress/InputAddress.types.d.ts +2 -2
  203. package/dist/components/forms/Radio/Radio.theme.js +1 -1
  204. package/dist/components/forms/RichTextEditor/RichTextEditor.d.ts +12 -16
  205. package/dist/components/forms/RichTextEditor/RichTextEditor.js +165 -1680
  206. package/dist/components/forms/RichTextEditor/RichTextEditor.theme.d.ts +12 -56
  207. package/dist/components/forms/RichTextEditor/RichTextEditor.theme.js +60 -118
  208. package/dist/components/forms/RichTextEditor/RichTextEditor.types.d.ts +62 -126
  209. package/dist/components/forms/RichTextEditor/RichTextLinkField.d.ts +18 -0
  210. package/dist/components/forms/RichTextEditor/RichTextLinkField.js +46 -0
  211. package/dist/components/forms/RichTextEditor/RichTextToolbar.d.ts +15 -0
  212. package/dist/components/forms/RichTextEditor/RichTextToolbar.js +93 -0
  213. package/dist/components/forms/RichTextEditor/editorCommands.d.ts +50 -0
  214. package/dist/components/forms/RichTextEditor/editorCommands.js +58 -0
  215. package/dist/components/forms/RichTextEditor/editorState.d.ts +19 -0
  216. package/dist/components/forms/RichTextEditor/editorState.js +103 -0
  217. package/dist/components/forms/RichTextEditor/index.d.ts +5 -3
  218. package/dist/components/forms/RichTextEditor/sanitizeHtml.d.ts +38 -0
  219. package/dist/components/forms/RichTextEditor/sanitizeHtml.js +179 -0
  220. package/dist/components/forms/RichTextEditor/sanitizeHtml.test.d.ts +1 -0
  221. package/dist/components/forms/Select/Select.js +4 -4
  222. package/dist/components/forms/Select/Select.types.d.ts +70 -7
  223. package/dist/components/forms/Select/useSelectState.d.ts +9 -3
  224. package/dist/components/forms/Select/useSelectState.js +4 -1
  225. package/dist/components/forms/SelectableCard/SelectableCard.js +2 -1
  226. package/dist/components/forms/SelectableCard/SelectableCard.theme.js +1 -1
  227. package/dist/components/forms/Switch/Switch.theme.js +2 -2
  228. package/dist/components/forms/TimePicker/TimePicker.theme.js +1 -1
  229. package/dist/components/forms/TimePicker/TimePickerTrigger.js +1 -1
  230. package/dist/components/forms/forms.theme.js +19 -5
  231. package/dist/components/forms/index.js +1 -0
  232. package/dist/components/generative/FormShell.d.ts +22 -0
  233. package/dist/components/generative/FormShell.js +102 -0
  234. package/dist/components/generative/GenerativeView.d.ts +52 -1
  235. package/dist/components/generative/GenerativeView.js +203 -11
  236. package/dist/components/generative/actions.d.ts +5 -0
  237. package/dist/components/generative/ai-sdk/index.d.ts +1 -0
  238. package/dist/components/generative/ai-sdk/index.js +1 -0
  239. package/dist/components/generative/ai-sdk/useGenerativeChat.d.ts +52 -0
  240. package/dist/components/generative/ai-sdk/useGenerativeChat.js +73 -0
  241. package/dist/components/generative/ai-sdk/useGenerativeChat.test.d.ts +1 -0
  242. package/dist/components/generative/fieldBinding.d.ts +31 -0
  243. package/dist/components/generative/fieldBinding.js +33 -0
  244. package/dist/components/generative/fieldBinding.test.d.ts +1 -0
  245. package/dist/components/generative/formScope.d.ts +71 -0
  246. package/dist/components/generative/formScope.js +135 -0
  247. package/dist/components/generative/index.d.ts +4 -0
  248. package/dist/components/generative/index.js +4 -0
  249. package/dist/components/generative/registry.d.ts +2 -0
  250. package/dist/components/generative/registry.js +10 -10
  251. package/dist/components/generative/schema.generated.js +178 -292
  252. package/dist/components/generative/toToolResult.d.ts +21 -0
  253. package/dist/components/generative/toToolResult.js +15 -0
  254. package/dist/components/generative/toToolResult.test.d.ts +1 -0
  255. package/dist/components/generative/validate.d.ts +10 -1
  256. package/dist/components/generative/validate.js +126 -11
  257. package/dist/components/layout/Grid/Grid.js +1 -0
  258. package/dist/components/layout/Section/Section.theme.js +1 -1
  259. package/dist/components/layout/Stack/Stack.js +1 -0
  260. package/dist/generative.schema.json +178 -292
  261. package/dist/index.js +1 -4
  262. package/dist/registry.json +2599 -2375
  263. package/dist/shadcn-compat.css +5 -5
  264. package/dist/styles/theme.test.d.ts +1 -0
  265. package/dist/styles.css +1 -1
  266. package/dist/test/render.d.ts +17 -0
  267. package/dist/themes/precision.css +232 -0
  268. package/dist/tools.json +179 -294
  269. package/dist/utils/index.d.ts +0 -1
  270. package/package.json +31 -1
  271. package/src/global.scss +21 -28
  272. package/src/styles/theme.css +124 -41
  273. package/src/styles/theme.test.ts +119 -0
  274. package/tailwind.preset.cjs +30 -20
  275. package/dist/components/charts/FunnelChart/FunnelChart.animations.d.ts +0 -35
  276. package/dist/components/charts/FunnelChart/FunnelChart.animations.js +0 -59
  277. package/dist/components/charts/FunnelChart/FunnelChart.d.ts +0 -8
  278. package/dist/components/charts/FunnelChart/FunnelChart.js +0 -410
  279. package/dist/components/charts/FunnelChart/FunnelChart.theme.d.ts +0 -2
  280. package/dist/components/charts/FunnelChart/FunnelChart.theme.js +0 -12
  281. package/dist/components/charts/FunnelChart/FunnelChart.types.d.ts +0 -105
  282. package/dist/components/charts/FunnelChart/index.d.ts +0 -4
  283. package/dist/components/charts/ScatterPlot/ScatterPlot.d.ts +0 -9
  284. package/dist/components/charts/ScatterPlot/ScatterPlot.js +0 -208
  285. package/dist/components/charts/ScatterPlot/ScatterPlot.theme.d.ts +0 -18
  286. package/dist/components/charts/ScatterPlot/ScatterPlot.theme.js +0 -42
  287. package/dist/components/charts/ScatterPlot/ScatterPlot.types.d.ts +0 -60
  288. package/dist/components/charts/ScatterPlot/ScatterPlot.types.js +0 -19
  289. package/dist/components/charts/ScatterPlot/index.d.ts +0 -3
  290. package/dist/components/core/Button/Button.ripple.d.ts +0 -71
  291. package/dist/components/core/Button/Button.ripple.js +0 -236
  292. package/dist/components/core/Calendar/CalendarEvent/CalendarEvent.d.ts +0 -4
  293. package/dist/components/core/Calendar/CalendarEvent/CalendarEvent.theme.d.ts +0 -12
  294. package/dist/components/core/Calendar/CalendarEvent/CalendarEvent.types.d.ts +0 -23
  295. package/dist/components/core/Calendar/CalendarEvent/index.d.ts +0 -2
  296. package/dist/components/core/CardStack/CardStack.animations.d.ts +0 -47
  297. package/dist/components/core/CardStack/CardStack.d.ts +0 -3
  298. package/dist/components/core/CardStack/CardStack.js +0 -187
  299. package/dist/components/core/CardStack/CardStack.theme.d.ts +0 -6
  300. package/dist/components/core/CardStack/CardStack.theme.js +0 -33
  301. package/dist/components/core/CardStack/CardStack.types.d.ts +0 -139
  302. package/dist/components/core/CardStack/index.d.ts +0 -7
  303. package/dist/components/core/Carousel/Carousel.d.ts +0 -3
  304. package/dist/components/core/Carousel/Carousel.js +0 -83
  305. package/dist/components/core/Carousel/Carousel.theme.d.ts +0 -10
  306. package/dist/components/core/Carousel/Carousel.theme.js +0 -20
  307. package/dist/components/core/Carousel/Carousel.types.d.ts +0 -113
  308. package/dist/components/core/Carousel/CarouselBody.d.ts +0 -4
  309. package/dist/components/core/Carousel/CarouselBody.js +0 -59
  310. package/dist/components/core/Carousel/CarouselContext.d.ts +0 -3
  311. package/dist/components/core/Carousel/CarouselContext.js +0 -13
  312. package/dist/components/core/Carousel/CarouselItem.d.ts +0 -4
  313. package/dist/components/core/Carousel/CarouselItem.js +0 -11
  314. package/dist/components/core/Carousel/CarouselNext.d.ts +0 -4
  315. package/dist/components/core/Carousel/CarouselNext.js +0 -16
  316. package/dist/components/core/Carousel/CarouselPrevious.d.ts +0 -4
  317. package/dist/components/core/Carousel/CarouselPrevious.js +0 -16
  318. package/dist/components/core/Carousel/index.d.ts +0 -3
  319. package/dist/components/effects/ColorPanels/ColorPanels.d.ts +0 -8
  320. package/dist/components/effects/ColorPanels/ColorPanels.js +0 -66
  321. package/dist/components/effects/ColorPanels/ColorPanels.shaders.d.ts +0 -12
  322. package/dist/components/effects/ColorPanels/ColorPanels.shaders.js +0 -218
  323. package/dist/components/effects/ColorPanels/ColorPanels.types.d.ts +0 -29
  324. package/dist/components/effects/ColorPanels/ColorPanels.types.js +0 -3
  325. package/dist/components/effects/ColorPanels/index.d.ts +0 -2
  326. package/dist/components/effects/FlutedGlass/FlutedGlass.d.ts +0 -9
  327. package/dist/components/effects/FlutedGlass/FlutedGlass.js +0 -80
  328. package/dist/components/effects/FlutedGlass/FlutedGlass.shaders.d.ts +0 -12
  329. package/dist/components/effects/FlutedGlass/FlutedGlass.shaders.js +0 -335
  330. package/dist/components/effects/FlutedGlass/FlutedGlass.types.d.ts +0 -61
  331. package/dist/components/effects/FlutedGlass/FlutedGlass.types.js +0 -16
  332. package/dist/components/effects/FlutedGlass/index.d.ts +0 -3
  333. package/dist/components/effects/GlassEffect/GlassEffect.d.ts +0 -15
  334. package/dist/components/effects/GlassEffect/GlassEffect.js +0 -38
  335. package/dist/components/effects/GlassEffect/GlassEffect.types.d.ts +0 -19
  336. package/dist/components/effects/GlassEffect/index.d.ts +0 -2
  337. package/dist/components/effects/GlassSurface/GlassSurface.d.ts +0 -8
  338. package/dist/components/effects/GlassSurface/GlassSurface.js +0 -250
  339. package/dist/components/effects/GlassSurface/GlassSurface.types.d.ts +0 -66
  340. package/dist/components/effects/GlassSurface/index.d.ts +0 -2
  341. package/dist/components/effects/GodRays/GodRays.d.ts +0 -8
  342. package/dist/components/effects/GodRays/GodRays.js +0 -68
  343. package/dist/components/effects/GodRays/GodRays.shaders.d.ts +0 -10
  344. package/dist/components/effects/GodRays/GodRays.shaders.js +0 -128
  345. package/dist/components/effects/GodRays/GodRays.types.d.ts +0 -25
  346. package/dist/components/effects/GodRays/GodRays.types.js +0 -3
  347. package/dist/components/effects/GodRays/index.d.ts +0 -2
  348. package/dist/components/effects/GridPattern/GridPattern.d.ts +0 -18
  349. package/dist/components/effects/GridPattern/GridPattern.js +0 -65
  350. package/dist/components/effects/GridPattern/GridPattern.types.d.ts +0 -47
  351. package/dist/components/effects/GridPattern/index.d.ts +0 -2
  352. package/dist/components/effects/HalftoneCmyk/HalftoneCmyk.d.ts +0 -10
  353. package/dist/components/effects/HalftoneCmyk/HalftoneCmyk.js +0 -78
  354. package/dist/components/effects/HalftoneCmyk/HalftoneCmyk.shaders.d.ts +0 -22
  355. package/dist/components/effects/HalftoneCmyk/HalftoneCmyk.shaders.js +0 -239
  356. package/dist/components/effects/HalftoneCmyk/HalftoneCmyk.types.d.ts +0 -52
  357. package/dist/components/effects/HalftoneCmyk/index.d.ts +0 -2
  358. package/dist/components/effects/HalftoneDots/HalftoneDots.d.ts +0 -9
  359. package/dist/components/effects/HalftoneDots/HalftoneDots.js +0 -68
  360. package/dist/components/effects/HalftoneDots/HalftoneDots.shaders.d.ts +0 -13
  361. package/dist/components/effects/HalftoneDots/HalftoneDots.shaders.js +0 -296
  362. package/dist/components/effects/HalftoneDots/HalftoneDots.types.d.ts +0 -43
  363. package/dist/components/effects/HalftoneDots/HalftoneDots.types.js +0 -12
  364. package/dist/components/effects/HalftoneDots/index.d.ts +0 -3
  365. package/dist/components/effects/ImageDithering/ImageDithering.d.ts +0 -9
  366. package/dist/components/effects/ImageDithering/ImageDithering.js +0 -68
  367. package/dist/components/effects/ImageDithering/ImageDithering.shaders.d.ts +0 -12
  368. package/dist/components/effects/ImageDithering/ImageDithering.shaders.js +0 -117
  369. package/dist/components/effects/ImageDithering/ImageDithering.types.d.ts +0 -30
  370. package/dist/components/effects/ImageDithering/ImageDithering.types.js +0 -8
  371. package/dist/components/effects/ImageDithering/index.d.ts +0 -3
  372. package/dist/components/effects/MagneticElement/MagneticElement.d.ts +0 -30
  373. package/dist/components/effects/MagneticElement/MagneticElement.js +0 -111
  374. package/dist/components/effects/MagneticElement/MagneticElement.types.d.ts +0 -44
  375. package/dist/components/effects/MagneticElement/index.d.ts +0 -2
  376. package/dist/components/effects/Metaballs/Metaballs.d.ts +0 -8
  377. package/dist/components/effects/Metaballs/Metaballs.js +0 -59
  378. package/dist/components/effects/Metaballs/Metaballs.shaders.d.ts +0 -10
  379. package/dist/components/effects/Metaballs/Metaballs.shaders.js +0 -102
  380. package/dist/components/effects/Metaballs/Metaballs.types.d.ts +0 -16
  381. package/dist/components/effects/Metaballs/Metaballs.types.js +0 -3
  382. package/dist/components/effects/Metaballs/index.d.ts +0 -2
  383. package/dist/components/effects/PaperTexture/PaperTexture.d.ts +0 -9
  384. package/dist/components/effects/PaperTexture/PaperTexture.js +0 -61
  385. package/dist/components/effects/PaperTexture/PaperTexture.shaders.d.ts +0 -22
  386. package/dist/components/effects/PaperTexture/PaperTexture.shaders.js +0 -145
  387. package/dist/components/effects/PaperTexture/PaperTexture.types.d.ts +0 -19
  388. package/dist/components/effects/PaperTexture/index.d.ts +0 -2
  389. package/dist/components/effects/PulsingBorder/PulsingBorder.d.ts +0 -27
  390. package/dist/components/effects/PulsingBorder/PulsingBorder.js +0 -174
  391. package/dist/components/effects/PulsingBorder/PulsingBorder.shaders.d.ts +0 -14
  392. package/dist/components/effects/PulsingBorder/PulsingBorder.shaders.js +0 -258
  393. package/dist/components/effects/PulsingBorder/PulsingBorder.types.d.ts +0 -75
  394. package/dist/components/effects/PulsingBorder/PulsingBorder.types.js +0 -3
  395. package/dist/components/effects/PulsingBorder/index.d.ts +0 -2
  396. package/dist/components/effects/SmokeRing/SmokeRing.d.ts +0 -8
  397. package/dist/components/effects/SmokeRing/SmokeRing.js +0 -62
  398. package/dist/components/effects/SmokeRing/SmokeRing.shaders.d.ts +0 -14
  399. package/dist/components/effects/SmokeRing/SmokeRing.shaders.js +0 -130
  400. package/dist/components/effects/SmokeRing/SmokeRing.types.d.ts +0 -22
  401. package/dist/components/effects/SmokeRing/SmokeRing.types.js +0 -3
  402. package/dist/components/effects/SmokeRing/index.d.ts +0 -2
  403. package/dist/components/effects/StaticGradientMesh/StaticGradientMesh.d.ts +0 -9
  404. package/dist/components/effects/StaticGradientMesh/StaticGradientMesh.js +0 -59
  405. package/dist/components/effects/StaticGradientMesh/StaticGradientMesh.shaders.d.ts +0 -14
  406. package/dist/components/effects/StaticGradientMesh/StaticGradientMesh.shaders.js +0 -129
  407. package/dist/components/effects/StaticGradientMesh/StaticGradientMesh.types.d.ts +0 -23
  408. package/dist/components/effects/StaticGradientMesh/StaticGradientMesh.types.js +0 -3
  409. package/dist/components/effects/StaticGradientMesh/index.d.ts +0 -2
  410. package/dist/components/effects/Water/Water.d.ts +0 -9
  411. package/dist/components/effects/Water/Water.js +0 -65
  412. package/dist/components/effects/Water/Water.shaders.d.ts +0 -11
  413. package/dist/components/effects/Water/Water.shaders.js +0 -123
  414. package/dist/components/effects/Water/Water.types.d.ts +0 -25
  415. package/dist/components/effects/Water/index.d.ts +0 -2
  416. package/dist/components/effects/shared/bayerMatrices.glsl.d.ts +0 -10
  417. package/dist/components/effects/shared/bayerMatrices.glsl.js +0 -44
  418. package/dist/components/effects/shared/imageUV.glsl.d.ts +0 -12
  419. package/dist/components/effects/shared/imageUV.glsl.js +0 -26
  420. package/dist/components/forms/RichTextEditor/RichTextEditor.animations.d.ts +0 -7
  421. package/dist/components/forms/RichTextEditor/RichTextEditor.animations.js +0 -32
  422. package/dist/utils/calendarUtils.d.ts +0 -60
  423. /package/dist/components/{charts → core}/shared/ChartTooltip/ChartTooltip.d.ts +0 -0
  424. /package/dist/components/{charts → core}/shared/ChartTooltip/ChartTooltip.theme.d.ts +0 -0
  425. /package/dist/components/{charts → core}/shared/ChartTooltip/ChartTooltip.theme.js +0 -0
  426. /package/dist/components/{charts → core}/shared/ChartTooltip/ChartTooltip.types.d.ts +0 -0
  427. /package/dist/components/{charts → core}/shared/ChartTooltip/ChartTooltipContent.d.ts +0 -0
  428. /package/dist/components/{charts → core}/shared/ChartTooltip/index.d.ts +0 -0
@@ -1,6 +1,6 @@
1
1
  "use client";
2
2
  import { jsxs, jsx } from 'react/jsx-runtime';
3
- import React__default, { useRef, useCallback } from 'react';
3
+ import React__default, { useRef, useCallback, useEffect } from 'react';
4
4
  import { CaretRight } from '@phosphor-icons/react';
5
5
  import { cn } from '../../../utils/cn.js';
6
6
  import { useContextMenuContext, useSubMenuContext } from './ContextMenuContext.js';
@@ -10,21 +10,34 @@ import { useContextMenuContext, useSubMenuContext } from './ContextMenuContext.j
10
10
  */
11
11
  const ContextMenuSubTrigger = React__default.forwardRef(({ children, className, disabled = false, startContent, ...props }, ref) => {
12
12
  const { theme } = useContextMenuContext();
13
- const { isOpen, onOpenChange, triggerRef } = useSubMenuContext();
13
+ const { isOpen, onOpenChange, triggerRef, cancelClose, scheduleClose } = useSubMenuContext();
14
14
  const hoverTimeoutRef = useRef(null);
15
+ const clearOpenTimeout = useCallback(() => {
16
+ if (hoverTimeoutRef.current) {
17
+ clearTimeout(hoverTimeoutRef.current);
18
+ hoverTimeoutRef.current = null;
19
+ }
20
+ }, []);
15
21
  // Handle mouse enter - open submenu after short delay
16
22
  const handleMouseEnter = useCallback(() => {
17
23
  if (disabled)
18
24
  return;
19
- // Clear any existing timeout
20
- if (hoverTimeoutRef.current) {
21
- clearTimeout(hoverTimeoutRef.current);
22
- }
25
+ // Re-entering the trigger cancels a close scheduled by leaving the submenu body.
26
+ cancelClose();
27
+ clearOpenTimeout();
23
28
  // Open submenu after short delay
24
29
  hoverTimeoutRef.current = setTimeout(() => {
30
+ hoverTimeoutRef.current = null;
25
31
  onOpenChange(true);
26
32
  }, 150);
27
- }, [disabled, onOpenChange]);
33
+ }, [disabled, onOpenChange, cancelClose, clearOpenTimeout]);
34
+ // Handle mouse leave - hand off to the submenu body, which cancels the close if the
35
+ // pointer lands there; otherwise the submenu closes after the grace period.
36
+ const handleMouseLeave = useCallback(() => {
37
+ clearOpenTimeout();
38
+ scheduleClose();
39
+ }, [clearOpenTimeout, scheduleClose]);
40
+ useEffect(() => clearOpenTimeout, [clearOpenTimeout]);
28
41
  // Handle keyboard navigation
29
42
  const handleKeyDown = useCallback((e) => {
30
43
  if (disabled)
@@ -54,7 +67,7 @@ const ContextMenuSubTrigger = React__default.forwardRef(({ children, className,
54
67
  ref.current = el;
55
68
  }
56
69
  }, [ref, triggerRef]);
57
- 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: [startContent && (jsx("div", { className: "flex items-center justify-center flex-shrink-0", children: startContent })), jsx("span", { className: "flex-1 truncate", children: children }), jsx(CaretRight, { className: "absolute right-2 top-1/2 -translate-y-1/2 size-3 text-[var(--color-text-secondary)]", "aria-hidden": "true", weight: "bold" })] }));
70
+ 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, onMouseLeave: handleMouseLeave, onKeyDown: handleKeyDown, ...props, children: [startContent && (jsx("div", { className: "flex items-center justify-center flex-shrink-0", children: startContent })), jsx("span", { className: "flex-1 truncate", children: children }), jsx(CaretRight, { className: "absolute right-2 top-1/2 -translate-y-1/2 size-3 text-[var(--color-text-secondary)]", "aria-hidden": "true", weight: "bold" })] }));
58
71
  });
59
72
  ContextMenuSubTrigger.displayName = "ContextMenuSubTrigger";
60
73
 
@@ -1,6 +1,6 @@
1
1
  const dragDropTheme = {
2
- draggableStyle: 'select-none rounded-[var(--radius-base)] transition-all duration-200',
3
- droppableStyle: 'min-h-[120px] border-2 border-dashed border-[var(--color-border)] rounded-[var(--radius-base)] p-4 transition-all duration-200 bg-[var(--color-background)]',
2
+ draggableStyle: 'select-none rounded-[var(--radius-base)] transition-all duration-[var(--motion-duration-base)]',
3
+ droppableStyle: 'min-h-[120px] border-2 border-dashed border-[var(--color-border)] rounded-[var(--radius-base)] p-4 transition-all duration-[var(--motion-duration-base)] bg-[var(--color-background)]',
4
4
  dragOverStyle: 'border-[var(--color-primary)] bg-[var(--color-primary-50)]',
5
5
  dragPreviewStyle: 'opacity-60',
6
6
  };
@@ -10,7 +10,7 @@ const drawerTheme = {
10
10
  inner: "h-full flex flex-col",
11
11
  header: "flex items-start justify-between px-[var(--drawer-px)] py-[var(--drawer-py)] border-b border-[var(--color-border)] shrink-0 text-[var(--color-text-primary)] gap-4",
12
12
  headerContent: "flex items-start gap-3 flex-1 min-w-0",
13
- title: "text-[length:var(--drawer-title-size)] font-semibold leading-6 text-[var(--color-text-primary)]",
13
+ title: "text-[length:var(--drawer-title-size)]/[var(--drawer-title-line-height)] font-semibold text-[var(--color-text-primary)]",
14
14
  subtitle: "text-sm text-[var(--color-text-secondary)] mt-0.5",
15
15
  body: "flex-1 overflow-y-auto px-[var(--drawer-px)] py-[var(--drawer-py)]",
16
16
  // Footer's vertical padding is deliberately lighter than header/body —
@@ -3,7 +3,6 @@ import { jsxs, jsx } from 'react/jsx-runtime';
3
3
  import { cn } from '../../../utils/cn.js';
4
4
  import { useDrawerContext } from './DrawerContext.js';
5
5
  import { Button } from '../Button/Button.js';
6
- import 'react';
7
6
  import { X } from '@phosphor-icons/react';
8
7
 
9
8
  const DrawerHeader = ({ children, icon, showCloseButton, className, ...props }) => {
@@ -141,12 +141,22 @@ const DropdownMenu = React__default.forwardRef(({ children, className, animation
141
141
  ((_a = triggerRef.current) === null || _a === void 0 ? void 0 : _a.contains(e.target))) {
142
142
  return;
143
143
  }
144
- // Ignore clicks that land inside any FlikkUI overlay portal (a nested
145
- // Select/Tooltip/Dropdown/Popover renders to document.body, outside our
146
- // menu's own DOM subtree — without this it would count as an outside
147
- // click and dismiss the menu). See the `data-flikkui-portal` convention
148
- // (CLAUDE.md §11) — mirrors PopoverBody's bail.
149
- if ((_c = (_b = e.target) === null || _b === void 0 ? void 0 : _b.closest) === null || _c === void 0 ? void 0 : _c.call(_b, "[data-flikkui-portal]")) {
144
+ // Ignore clicks that land inside a DESCENDANT FlikkUI overlay portal (a
145
+ // nested Select/Tooltip/Dropdown/Popover renders to document.body,
146
+ // outside our menu's own DOM subtree — without this it would count as
147
+ // an outside click and dismiss the menu). See the `data-flikkui-portal`
148
+ // convention (CLAUDE.md §11) — mirrors PopoverBody's bail.
149
+ //
150
+ // The bail only protects against a DESCENDANT portal, not an ANCESTOR
151
+ // one: when this menu's own trigger lives inside another overlay (e.g.
152
+ // a Dropdown opened from inside a Modal), a click on that host
153
+ // overlay's body content also matches `closest("[data-flikkui-portal]")`
154
+ // — it finds the Modal's portal wrapper, which contains our trigger.
155
+ // That's a real outside click and must still close the menu. Only bail
156
+ // when the matched portal does NOT contain our trigger — i.e. it's a
157
+ // portal we opened ourselves, not the one hosting us.
158
+ const portalEl = (_c = (_b = e.target) === null || _b === void 0 ? void 0 : _b.closest) === null || _c === void 0 ? void 0 : _c.call(_b, "[data-flikkui-portal]");
159
+ if (portalEl && !portalEl.contains(triggerRef.current)) {
150
160
  return;
151
161
  }
152
162
  onOpenChange(false);
@@ -209,7 +219,12 @@ const DropdownMenu = React__default.forwardRef(({ children, className, animation
209
219
  });
210
220
  // Extract DOM props to avoid type conflicts with Framer Motion
211
221
  const { onAnimationStart, onAnimationEnd, onDrag, onDragStart, onDragEnd, ...domProps } = props;
212
- const menuContent = (jsx(AnimatePresence, { children: isOpen && (jsx(motion.div, { ref: handleRef, className: cn("fixed z-50", surfaceClasses(surfaceLevel, { translucent: true }), theme.menuStyle, horizontal ? "flex-row p-1" : "flex-col p-1", className), style: {
222
+ const menuContent = (jsx(AnimatePresence, { children: isOpen && (jsx(motion.div, { ref: handleRef, className: cn("fixed z-50", surfaceClasses(surfaceLevel, { translucent: true }), theme.menuStyle,
223
+ // --dropdown-padding (not a literal p-1): it also feeds
224
+ // --dropdown-inner-radius, which rounds the first/last row.
225
+ horizontal
226
+ ? "flex-row p-[var(--dropdown-padding)]"
227
+ : "flex-col p-[var(--dropdown-padding)]", className), style: {
213
228
  ...cssVariables,
214
229
  top: `${position.top}px`,
215
230
  left: `${position.left}px`,
@@ -14,7 +14,7 @@ import { cn } from '../../../utils/cn.js';
14
14
  // Resting link look (transparent; underline grows in on hover via the motion
15
15
  // span below). Kept minimal and open.
16
16
  const LINK_BASE = "relative inline-flex items-center justify-center gap-2 bg-transparent border-transparent cursor-pointer " +
17
- "transition-colors duration-300 ease-in-out " +
17
+ "transition-colors duration-[var(--motion-duration-slow)] ease-in-out " +
18
18
  "focus:outline-none focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2";
19
19
  // Animated underline — a bottom-anchored line that scales in from the left on
20
20
  // hover/focus. `bg-current` inherits each color variant's text tint.
@@ -19,7 +19,7 @@ const masonryTheme = {
19
19
  },
20
20
  // Animation classes
21
21
  animations: {
22
- transition: "transition-[left,top,width,height] duration-400 ease-in-out",
22
+ transition: "transition-[left,top,width,height] duration-[var(--motion-duration-slower)] ease-in-out",
23
23
  enter: "opacity-0 scale-95",
24
24
  exit: "opacity-100 scale-100",
25
25
  },
@@ -3,6 +3,7 @@ import { jsxs, jsx } from 'react/jsx-runtime';
3
3
  import React__default, { useState, useCallback } from 'react';
4
4
  import { cn } from '../../../utils/cn.js';
5
5
  import { menuItemTheme } from './MenuItem.theme.js';
6
+ import { Ripple } from '../shared/Ripple.js';
6
7
 
7
8
  /**
8
9
  * MenuItem - Shared base component for menu items used by Dropdown and ContextMenu.
@@ -47,7 +48,7 @@ const MenuItem = React__default.forwardRef(({ children, className, startContent,
47
48
  // Focus fill composites over any state (incl. selected) — see focusedStyle note.
48
49
  isFocused && !disabled && 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'
49
50
  ? jsx("div", { className: theme.subtitleStyle, children: subtitle })
50
- : subtitle)] }), endContent && (jsx("div", { className: "flex items-center justify-center ml-2", children: endContent }))] }));
51
+ : subtitle)] }), endContent && (jsx("div", { className: "flex items-center justify-center ml-2", children: endContent })), jsx(Ripple, { disabled: disabled })] }));
51
52
  });
52
53
  MenuItem.displayName = "MenuItem";
53
54
 
@@ -1,7 +1,19 @@
1
1
  const menuItemTheme = {
2
2
  // Structural base only — layout, spacing, radius, transition. No state colors:
3
3
  // those are resolved in JS (see `states`) so a consumer `className` always wins.
4
- baseStyle: "relative flex items-center gap-2 px-3 py-1.5 text-sm font-[500] cursor-pointer outline-none select-none rounded-[var(--radius-base)] transition-colors duration-300 mb-px last-of-type:mb-0",
4
+ //
5
+ // Radius: interior rows are a flat 4px; the first and last rows meet the panel's
6
+ // own corners, so they take --dropdown-inner-radius — the panel's radius minus its
7
+ // border and padding — which keeps their curve concentric with the panel's instead
8
+ // of bulging past it (same calc model as --segmented-inner-radius).
9
+ // 🔴 The first:/last: variants resolve against DOM SIBLINGS: any wrapper element
10
+ // around a row makes it both first and last of its own subtree and rounds all four
11
+ // corners (see ContextMenuSub, which renders no element for exactly this reason).
12
+ // 🔴 This assumes a --dropdown-radius panel. That holds for every host today —
13
+ // Mention's suggestion popover renders MenuItem rows too, and its panel's
14
+ // --form-dropdown-radius aliases --dropdown-radius for exactly that reason. A host
15
+ // that gives its panel a different radius has to re-derive this row radius with it.
16
+ baseStyle: "relative flex items-center gap-2 px-3 py-1.5 text-sm font-[500] cursor-pointer outline-none select-none first:rounded-t-[var(--dropdown-inner-radius)] last:rounded-b-[var(--dropdown-inner-radius)] rounded-[4px] transition-colors duration-[var(--motion-duration-slow)] mb-px last-of-type:mb-0",
5
17
  // State styling resolved in JS to plain utility classes so `className` overrides
6
18
  // win (data-[state] variants carry attribute-selector specificity and can't be
7
19
  // overridden by a plain className — see Button.theme.ts / NavItem.theme.ts for
@@ -27,6 +27,8 @@ import { MessageDateDivider } from './MessageDateDivider.js';
27
27
 
28
28
  const MessageFooter = ({ isStreaming, streamingIndicator, showTimestamp, timestamp, actions, timestampStyle, streamingIndicatorStyle, actionsContainerStyle, variant, }) => {
29
29
  if (isStreaming) {
30
+ if (streamingIndicator === false)
31
+ return null;
30
32
  return (jsx("div", { className: cn("flex flex-row items-center gap-3 mt-1", variant === "receiver" ? "ml-2" : "mr-3"), children: jsx("div", { className: cn(timestampStyle, streamingIndicatorStyle), children: streamingIndicator || (jsxs(Fragment, { children: [jsx("span", { children: "Typing" }), jsx(motion.span, { animate: { opacity: [0.4, 1, 0.4] }, transition: {
31
33
  duration: 1.5,
32
34
  repeat: Infinity,
@@ -46,13 +46,13 @@ const messageTheme = {
46
46
  statusFailed: "text-[var(--color-danger)]",
47
47
  // Attachment styles
48
48
  attachmentContainerStyle: "flex flex-col gap-2 mt-2",
49
- fileStyle: "flex items-center gap-3 rounded-lg border border-[var(--color-border)] bg-[var(--color-background-secondary)] px-3 py-2.5 text-xs",
49
+ fileStyle: "flex items-center gap-3 rounded-lg border border-[var(--color-border)] bg-[var(--color-surface)] px-3 py-2.5 text-xs",
50
50
  imageStyle: "rounded-lg overflow-hidden max-w-xs",
51
- audioStyle: "flex items-center gap-3 rounded-lg border border-[var(--color-border)] bg-[var(--color-background-secondary)] px-3 py-2.5 text-xs",
51
+ audioStyle: "flex items-center gap-3 rounded-lg border border-[var(--color-border)] bg-[var(--color-surface)] px-3 py-2.5 text-xs",
52
52
  linkStyle: "flex flex-col rounded-lg border border-[var(--color-border)] overflow-hidden text-xs max-w-xs",
53
53
  // Reactions styles
54
54
  reactionsContainerStyle: "flex flex-wrap items-center gap-1.5 mt-1.5",
55
- reactionPillStyle: "inline-flex items-center gap-1 rounded-full border border-[var(--color-border)] bg-[var(--color-background-secondary)] px-2 py-0.5 text-xs cursor-pointer transition-colors hover:bg-[var(--color-surface-hover)]",
55
+ reactionPillStyle: "inline-flex items-center gap-1 rounded-full border border-[var(--color-border)] bg-[var(--color-surface)] px-2 py-0.5 text-xs cursor-pointer transition-colors hover:bg-[var(--color-surface-hover)]",
56
56
  reactionPillActiveStyle: "border-[var(--color-primary-200)] bg-[var(--color-primary-50)] text-[var(--color-primary)]",
57
57
  // Reply/quote styles
58
58
  replyStyle: "border-l-2 border-[var(--color-border)] pl-2.5 mb-2 text-xs text-[var(--color-text-muted)]",
@@ -5,6 +5,6 @@ import { Variants } from 'motion/react';
5
5
  export declare const modalOverlayAnimations: Variants;
6
6
  /**
7
7
  * Modal content animation variants
8
- * Scale + slight slide (Vercel/Notion style) with premium spring
8
+ * Restrained scale + lift with a matched, responsive exit.
9
9
  */
10
10
  export declare const modalContentAnimations: Variants;
@@ -1,21 +1,39 @@
1
1
  "use client";
2
2
  import '../../../theme/ThemeContext.js';
3
3
  import '../../../theme/SurfaceContext.js';
4
- import { springs, overlayBackdropAnimations } from '../../../theme/animations.js';
4
+ import { easings, springs } from '../../../theme/animations.js';
5
5
 
6
6
  /**
7
7
  * Modal overlay animation variants
8
8
  */
9
- const modalOverlayAnimations = overlayBackdropAnimations;
9
+ const modalOverlayAnimations = {
10
+ initial: { opacity: 0 },
11
+ animate: {
12
+ opacity: 1,
13
+ transition: {
14
+ duration: 0.28,
15
+ ease: easings.easeOut,
16
+ },
17
+ },
18
+ exit: {
19
+ opacity: 0,
20
+ transition: {
21
+ duration: 0.22,
22
+ delay: 0.05,
23
+ ease: easings.easeInOut,
24
+ },
25
+ },
26
+ };
10
27
  /**
11
28
  * Modal content animation variants
12
- * Scale + slight slide (Vercel/Notion style) with premium spring
29
+ * Restrained scale + lift with a matched, responsive exit.
13
30
  */
14
31
  const modalContentAnimations = {
15
32
  initial: {
16
33
  opacity: 0,
17
- scale: 0.98,
18
- y: 12,
34
+ scale: 0.975,
35
+ y: 10,
36
+ transformOrigin: "50% 45%",
19
37
  willChange: "transform, opacity",
20
38
  },
21
39
  animate: {
@@ -23,17 +41,38 @@ const modalContentAnimations = {
23
41
  scale: 1,
24
42
  y: 0,
25
43
  transition: {
26
- ...springs.smooth,
27
- delay: 0.05,
44
+ opacity: {
45
+ duration: 0.18,
46
+ delay: 0.07,
47
+ ease: easings.easeOut,
48
+ },
49
+ scale: {
50
+ ...springs.premium,
51
+ delay: 0.07,
52
+ },
53
+ y: {
54
+ ...springs.premium,
55
+ delay: 0.07,
56
+ },
28
57
  },
29
58
  },
30
59
  exit: {
31
60
  opacity: 0,
32
- scale: 0.98,
33
- y: 8,
61
+ scale: 0.985,
62
+ y: 6,
34
63
  transition: {
35
- duration: 0.15,
36
- ease: [0.4, 0, 1, 1],
64
+ opacity: {
65
+ duration: 0.14,
66
+ ease: easings.easeIn,
67
+ },
68
+ scale: {
69
+ duration: 0.18,
70
+ ease: easings.easeInOut,
71
+ },
72
+ y: {
73
+ duration: 0.18,
74
+ ease: easings.easeInOut,
75
+ },
37
76
  },
38
77
  },
39
78
  };
@@ -54,7 +54,11 @@ const ModalRoot = ({ isOpen, onClose, size = "md", closeOnOverlayClick = true, c
54
54
  titleId,
55
55
  subtitleId,
56
56
  }), [isOpen, onClose, size, isSizeToken, closeOnOverlayClick, closeOnEsc, showCloseButton, theme, isBodyScrollable, setIsBodyScrollable, titleId, subtitleId]);
57
- return (jsx(Overlay, { isOpen: isOpen, onClose: onClose, closeOnOverlayClick: closeOnOverlayClick, closeOnEsc: closeOnEsc, position: "center", role: role, ariaModal: true, ariaLabelledBy: titleId, ariaDescribedBy: subtitleId, contentClassName: cn(surfaceClasses(surfaceLevel, { translucent: true, shadow: false }), theme.container, isSizeToken ? modalSizeVariants[size] : size, darkMode && "dark", 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(
58
+ // Opaque: the panel sits behind Overlay's dimming scrim, and the blur lives on
59
+ // that scrim — not here. At /80 the scrim tinted the panel gray instead of
60
+ // frosting anything. Matches Drawer, the other backdrop-grounded dialog.
61
+ surfaceClasses(surfaceLevel, { translucent: false, shadow: false }), theme.container, isSizeToken ? modalSizeVariants[size] : size, darkMode && "dark", className), animations: {
58
62
  overlay: modalOverlayAnimations,
59
63
  content: modalContentAnimations,
60
64
  }, ...props, children: jsx(ModalContext.Provider, { value: contextValue, children: jsx(SurfaceProvider, { level: surfaceLevel, children: children }) }) }));
@@ -6,7 +6,7 @@ const modalTheme = {
6
6
  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 ring-6 !ring-white/10 border border-[var(--color-border)]",
7
7
  header: "flex items-start justify-between px-[var(--modal-px)] pt-[var(--modal-py)] pb-0 shrink-0 border-b border-transparent gap-6 relative",
8
8
  headerContent: "flex flex-col items-start gap-2 flex-1",
9
- title: "text-[length:var(--modal-title-size)] leading-6 font-semibold text-[var(--color-text-primary)]",
9
+ title: "text-[length:var(--modal-title-size)]/[var(--modal-title-line-height)] font-semibold text-[var(--color-text-primary)]",
10
10
  subtitle: "text-sm text-[var(--color-text-secondary)] mt-0.5",
11
11
  // pb-[...*0.75] is the gap before the footer — proportional to --modal-py
12
12
  // (today's ratio, 12/16) so a themed --modal-py increase widens it too.
@@ -3,7 +3,6 @@ import { jsxs, jsx } from 'react/jsx-runtime';
3
3
  import { cn } from '../../../utils/cn.js';
4
4
  import { useModalContext } from './ModalContext.js';
5
5
  import { Button } from '../Button/Button.js';
6
- import 'react';
7
6
  import { X } from '@phosphor-icons/react';
8
7
 
9
8
  const ModalHeader = ({ children, icon, showCloseButton, className, ...props }) => {
@@ -47,7 +47,9 @@ const ModalStackModal = ({ size = "md", showCloseButton = true, showBackButton =
47
47
  titleId,
48
48
  subtitleId,
49
49
  }), [closeHandler, size, isSizeToken, showCloseButton, theme, isBodyScrollable, setIsBodyScrollable, titleId, subtitleId]);
50
- return (jsx(ModalContext.Provider, { value: contextValue, children: jsx("div", { className: cn(surfaceClasses(surfaceLevel, { translucent: true, shadow: false }), theme.container, modalSizeVariants[size], className), role: "dialog", "aria-modal": "true", "aria-labelledby": titleId, "aria-describedby": subtitleId, children: jsxs(SurfaceProvider, { level: surfaceLevel, children: [showBackButton && (jsx("div", { className: cn(modalStackTheme.backButton), children: jsxs(Link, { onClick: backHandler, "aria-label": "Go back", size: "sm", children: [jsx(ArrowLeft, { className: "size-4" }), "Back"] }) })), children] }) }) }));
50
+ return (jsx(ModalContext.Provider, { value: contextValue, children: jsx("div", { className: cn(
51
+ // Opaque — same reason as Modal: behind the shared scrim, no blur on the panel.
52
+ surfaceClasses(surfaceLevel, { translucent: false, shadow: false }), theme.container, modalSizeVariants[size], className), role: "dialog", "aria-modal": "true", "aria-labelledby": titleId, "aria-describedby": subtitleId, children: jsxs(SurfaceProvider, { level: surfaceLevel, children: [showBackButton && (jsx("div", { className: cn(modalStackTheme.backButton), children: jsxs(Link, { onClick: backHandler, "aria-label": "Go back", size: "sm", children: [jsx(ArrowLeft, { className: "size-4" }), "Back"] }) })), children] }) }) }));
51
53
  };
52
54
  ModalStackModal.displayName = "ModalStack.Modal";
53
55
 
@@ -15,6 +15,7 @@ import { Tooltip } from '../Tooltip/Tooltip.js';
15
15
  import '../Tooltip/Tooltip.animations.js';
16
16
  import { Badge } from '../Badge/Badge.js';
17
17
  import { CaretDown } from '@phosphor-icons/react';
18
+ import { Ripple } from '../shared/Ripple.js';
18
19
  import { AnimatePresence, motion } from 'motion/react';
19
20
 
20
21
  const NavItem = React__default.forwardRef(({ children, startContent, endContent, notification, description, shortcut, href, onClick, active = false, isDisabled = false, hasSubmenu: propHasSubmenu = false, expanded: controlledExpanded, onToggleExpanded, items, defaultExpanded = false, level = 0, showTooltipWhenCollapsed = true, className, theme: customTheme = {}, ...props }, ref) => {
@@ -186,7 +187,7 @@ const NavItem = React__default.forwardRef(({ children, startContent, endContent,
186
187
  const iconClasses = cn(theme.icon, getIconStateClasses(), hasSubmenu && isExpanded && !isActive && "opacity-100", isCollapsedView && ((_b = theme.collapsed) === null || _b === void 0 ? void 0 : _b.icon), isHoveredOrDropdownOpen && "opacity-100");
187
188
  const textClasses = cn(theme.text);
188
189
  // Chevron for submenu
189
- const chevron = hasSubmenu && !isCollapsedView ? (jsx(CaretDown, { weight: "bold", className: cn("size-4 transition-transform duration-200 text-[var(--color-text-muted)]", isExpanded && "text-[var(--color-text-primary)]", isExpanded && "rotate-180") })) : null;
190
+ const chevron = hasSubmenu && !isCollapsedView ? (jsx(CaretDown, { weight: "bold", className: cn("size-4 transition-transform duration-[var(--motion-duration-base)] text-[var(--color-text-muted)]", isExpanded && "text-[var(--color-text-primary)]", isExpanded && "rotate-180") })) : null;
190
191
  // Strip drag/animation DOM handlers that collide with motion's prop types.
191
192
  // `onSubmit`/`onSubmitCapture` are stripped too: NavItem renders as either
192
193
  // `motion.a` or `motion.button`, but `NavItemProps extends HTMLAttributes<HTMLElement>`
@@ -230,7 +231,7 @@ const NavItem = React__default.forwardRef(({ children, startContent, endContent,
230
231
  ? ` (${notification} unread)`
231
232
  : notification === true
232
233
  ? " (unread)"
233
- : null] }))] }));
234
+ : null] })), jsx(Ripple, { disabled: isDisabled })] }));
234
235
  // Content component
235
236
  const content = href && !hasSubmenu ? (jsx(motion.a, { ref: ref, href: isDisabled ? undefined : href, tabIndex: isDisabled ? -1 : undefined, ...interactionProps, children: innerContent })) : (jsx(motion.button, { ref: ref, type: "button", disabled: isDisabled, ...interactionProps, children: innerContent }));
236
237
  // Self-contained submenu
@@ -1,5 +1,5 @@
1
1
  const navItemTheme = {
2
- baseStyle: "group relative flex items-center gap-3 px-2.5 py-2 text-sm font-medium cursor-pointer select-none w-full rounded-[var(--nav-item-radius)] outline-none overflow-hidden transition-[padding,gap,height,background-color,border-color,color,box-shadow] duration-200 ease-[cubic-bezier(0.4,0,0.2,1)] text-left",
2
+ baseStyle: "group relative flex items-center gap-3 px-2.5 py-2 text-sm font-medium cursor-pointer select-none w-full rounded-[var(--nav-item-radius)] outline-none overflow-hidden transition-[padding,gap,height,background-color,border-color,color,box-shadow] duration-[var(--motion-duration-base)] ease-[cubic-bezier(0.4,0,0.2,1)] text-left",
3
3
  icon: "size-5",
4
4
  text: "flex-1 min-w-0 truncate",
5
5
  // State styling resolved in JS to plain utility classes so `className` overrides win
@@ -1,5 +1,5 @@
1
1
  const offlineIndicatorTheme = {
2
- base: "fixed z-50 flex items-center gap-1.5 transition-colors duration-300 select-none",
2
+ base: "fixed z-50 flex items-center gap-1.5 transition-colors duration-[var(--motion-duration-slow)] select-none",
3
3
  positions: {
4
4
  top: "top-4 left-1/2 -translate-x-1/2",
5
5
  bottom: "bottom-4 left-1/2 -translate-x-1/2",
@@ -34,7 +34,9 @@ const offlineIndicatorTheme = {
34
34
  // (near-black in light, near-white in dark) — a fixed Link color can't.
35
35
  action: "text-xs font-semibold text-inherit",
36
36
  icon: "size-3.5 flex-shrink-0",
37
- message: "text-xs font-medium -tracking-[0.025em]",
37
+ // tracking-tight IS -0.025em — byte-identical to the arbitrary value it
38
+ // replaces, but routed through --tracking-tight so a theme can retune it.
39
+ message: "text-xs font-medium tracking-tight",
38
40
  queueCount: "text-xs opacity-80 ml-1",
39
41
  };
40
42
 
@@ -1,7 +1,7 @@
1
1
  const pageHeadingTheme = {
2
2
  baseStyle: "flex flex-col pb-6 mb-6",
3
3
  headerStyle: "flex flex-col items-start sm:flex-row sm:items-center gap-4",
4
- titleStyle: "text-[length:var(--page-heading-title-size)] leading-[1.4] font-bold text-[var(--color-text-primary)]",
4
+ titleStyle: "text-[length:var(--page-heading-title-size)]/[var(--page-heading-title-line-height)] font-bold text-[var(--color-text-primary)]",
5
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)]",
@@ -7,7 +7,7 @@ const paginationTheme = {
7
7
  // Unified item styles for all pagination elements (pages, navigation, etc.)
8
8
  // Light mode: white background, muted text, neutral borders
9
9
  // Dark mode: neutral-800 background, lighter text, neutral-600 borders
10
- itemStyle: "inline-flex items-center justify-center font-medium rounded-[var(--form-radius)] transition-all duration-200 ease-in-out " +
10
+ itemStyle: "inline-flex items-center justify-center font-medium rounded-[var(--form-radius)] transition-all duration-[var(--motion-duration-base)] ease-in-out " +
11
11
  // Focus styles
12
12
  "focus:outline-none focus-visible:ring-2 focus-visible:ring-[var(--color-primary)] focus-visible:ring-offset-2 dark:focus-visible:ring-offset-[var(--color-mono-900)] " +
13
13
  // Base state - light
@@ -15,7 +15,7 @@ const paginationTheme = {
15
15
  // Base state - dark
16
16
  "dark:bg-transparent dark:text-[var(--color-text-secondary)] dark:border-transparent " +
17
17
  // Hover state - light
18
- "hover:text-[var(--color-text-primary)] hover:bg-[var(--color-background-secondary)] hover:border-[var(--color-border)] " +
18
+ "hover:text-[var(--color-text-primary)] hover:bg-[var(--color-surface)] hover:border-[var(--color-border)] " +
19
19
  // Hover state - dark
20
20
  "dark:hover:bg-[var(--color-surface-hover)] dark:hover:text-[var(--color-text-primary)] dark:hover:border-[var(--color-border)]/0 " +
21
21
  // Active state - light
@@ -4,6 +4,7 @@ import React__default, { useState, useEffect, useCallback } from 'react';
4
4
  import { useReducedMotion, motion } from 'motion/react';
5
5
  import { pillTheme } from './Pill.theme.js';
6
6
  import { createPressVariants } from '../shared/interaction.animations.js';
7
+ import { Ripple } from '../shared/Ripple.js';
7
8
  import { cn } from '../../../utils/cn.js';
8
9
 
9
10
  // Shared press physics + subtle hover lift (module-level constant)
@@ -122,7 +123,7 @@ const Pill = React__default.forwardRef((props, ref) => {
122
123
  // Accessibility
123
124
  role: isSelectable && !readOnly ? "button" : undefined, tabIndex: isInteractive ? 0 : undefined, "aria-pressed": isSelectable && !readOnly ? isSelected : undefined, "aria-readonly": readOnly || undefined,
124
125
  // Animation
125
- variants: PILL_PRESS_VARIANTS, animate: "rest", whileHover: isInteractive && !shouldReduceMotion ? "hover" : undefined, whileTap: isInteractive && !shouldReduceMotion ? "press" : undefined, ...restProps, children: [renderStartIcon(), children] }));
126
+ variants: PILL_PRESS_VARIANTS, animate: "rest", whileHover: isInteractive && !shouldReduceMotion ? "hover" : undefined, whileTap: isInteractive && !shouldReduceMotion ? "press" : undefined, ...restProps, children: [renderStartIcon(), children, isInteractive && jsx(Ripple, {})] }));
126
127
  });
127
128
  Pill.displayName = "Pill";
128
129
 
@@ -8,8 +8,10 @@ const pillTheme = {
8
8
  /**
9
9
  * Base pill style - structure and default colors (no hover)
10
10
  */
11
- baseStyle: "inline-flex items-center justify-center font-medium rounded-full select-none whitespace-nowrap " +
12
- "ring-1 bg-[var(--color-surface)] transition-[color,background-color,box-shadow] duration-150 ease-out " +
11
+ baseStyle:
12
+ // `relative` positions the press <Ripple /> layer (selectable pills only).
13
+ "relative inline-flex items-center justify-center font-medium rounded-full select-none whitespace-nowrap " +
14
+ "ring-1 bg-[var(--color-surface)] transition-[color,background-color,box-shadow] duration-[var(--motion-duration-fast)] ease-out " +
13
15
  "text-[var(--color-text-primary)] ring-[var(--color-border)] " +
14
16
  "focus:outline-none focus-visible:ring-2 focus-visible:ring-[var(--color-primary)]",
15
17
  /**
@@ -45,11 +45,22 @@ const PopoverBody = React__default.forwardRef(({ children, className, animation
45
45
  ((_a = triggerRef.current) === null || _a === void 0 ? void 0 : _a.contains(e.target))) {
46
46
  return;
47
47
  }
48
- // Ignore clicks that land inside any FlikkUI overlay portal (a nested
49
- // Select/Tooltip/Dropdown/Popover renders to document.body, outside our
50
- // content ref — without this it would count as an outside click and
51
- // dismiss the popover). See the `data-flikkui-portal` convention.
52
- if ((_c = (_b = e.target) === null || _b === void 0 ? void 0 : _b.closest) === null || _c === void 0 ? void 0 : _c.call(_b, "[data-flikkui-portal]")) {
48
+ // Ignore clicks that land inside a DESCENDANT FlikkUI overlay portal (a
49
+ // nested Select/Tooltip/Dropdown/Popover renders to document.body,
50
+ // outside our content ref — without this it would count as an outside
51
+ // click and dismiss the popover). See the `data-flikkui-portal`
52
+ // convention.
53
+ //
54
+ // The bail only protects against a DESCENDANT portal, not an ANCESTOR
55
+ // one: when this popover's own trigger lives inside another overlay
56
+ // (e.g. a Popover opened from inside a Modal), a click on that host
57
+ // overlay's body content also matches `closest("[data-flikkui-portal]")`
58
+ // — it finds the Modal's portal wrapper, which contains our trigger.
59
+ // That's a real outside click and must still close the popover. Only
60
+ // bail when the matched portal does NOT contain our trigger — i.e.
61
+ // it's a portal we opened ourselves, not the one hosting us.
62
+ const portalEl = (_c = (_b = e.target) === null || _b === void 0 ? void 0 : _b.closest) === null || _c === void 0 ? void 0 : _c.call(_b, "[data-flikkui-portal]");
63
+ if (portalEl && !portalEl.contains(triggerRef.current)) {
53
64
  return;
54
65
  }
55
66
  if (closeOnClickOutside && !preventClose) {
@@ -1,29 +1,4 @@
1
1
  import React from "react";
2
2
  import { ProgressProps } from "./Progress.types";
3
- /**
4
- * Progress component - Linear progress bar for tracking completion
5
- *
6
- * Features:
7
- * - Determinate mode: Shows specific progress value (0-100)
8
- * - Indeterminate mode: Animated loading state when value is undefined
9
- * - Multiple sizes with default primary color
10
- * - className controls the fill bar color (the primary styling target)
11
- * - wrapperClassName controls the outer container
12
- * - Flexible label positioning (right, top, bottom, inside)
13
- * - Respects reduced motion preferences
14
- *
15
- * @example
16
- * // Default (primary color)
17
- * <Progress value={60} />
18
- *
19
- * // Custom fill color via className
20
- * <Progress value={70} className="bg-[var(--color-success)]" />
21
- *
22
- * // With label
23
- * <Progress value={75} showLabel labelPosition="right" />
24
- *
25
- * // Indeterminate (loading)
26
- * <Progress />
27
- */
28
3
  declare const Progress: React.ForwardRefExoticComponent<ProgressProps & React.RefAttributes<HTMLDivElement>>;
29
4
  export { Progress };