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

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 (1373) hide show
  1. package/CHANGELOG.md +1281 -0
  2. package/README.md +52 -0
  3. package/dist/bg/1.webp +0 -0
  4. package/dist/bg/10.webp +0 -0
  5. package/dist/bg/11.webp +0 -0
  6. package/dist/bg/12.webp +0 -0
  7. package/dist/bg/13.webp +0 -0
  8. package/dist/bg/14.webp +0 -0
  9. package/dist/bg/15.webp +0 -0
  10. package/dist/bg/16.webp +0 -0
  11. package/dist/bg/17.webp +0 -0
  12. package/dist/bg/18.webp +0 -0
  13. package/dist/bg/19.webp +0 -0
  14. package/dist/bg/2.webp +0 -0
  15. package/dist/bg/20.webp +0 -0
  16. package/dist/bg/21.webp +0 -0
  17. package/dist/bg/22.webp +0 -0
  18. package/dist/bg/3.webp +0 -0
  19. package/dist/bg/4.webp +0 -0
  20. package/dist/bg/5.webp +0 -0
  21. package/dist/bg/6.webp +0 -0
  22. package/dist/bg/7.webp +0 -0
  23. package/dist/bg/8.webp +0 -0
  24. package/dist/bg/9.webp +0 -0
  25. package/dist/components/ai/AgentStatus/AgentStatus.d.ts +3 -0
  26. package/dist/components/ai/AgentStatus/AgentStatus.js +144 -0
  27. package/dist/components/ai/AgentStatus/AgentStatus.theme.d.ts +2 -0
  28. package/dist/components/ai/AgentStatus/AgentStatus.theme.js +37 -0
  29. package/dist/components/ai/AgentStatus/AgentStatus.types.d.ts +116 -0
  30. package/dist/components/ai/AgentStatus/index.d.ts +3 -0
  31. package/dist/components/ai/CodeBlock/CodeBlock.js +24 -7
  32. package/dist/components/ai/CodeBlock/CodeBlock.theme.js +3 -4
  33. package/dist/components/ai/CodeBlock/CodeBlock.types.d.ts +0 -2
  34. package/dist/components/ai/CodeBlock/LanguageIcon.js +1 -0
  35. package/dist/components/ai/PromptInput/PromptInput.animations.d.ts +25 -0
  36. package/dist/components/ai/PromptInput/PromptInput.animations.js +61 -0
  37. package/dist/components/ai/PromptInput/PromptInput.js +110 -150
  38. package/dist/components/ai/PromptInput/PromptInput.theme.js +24 -3
  39. package/dist/components/ai/PromptInput/PromptInput.types.d.ts +49 -1
  40. package/dist/components/ai/PromptInput/VoiceRecorder.d.ts +11 -0
  41. package/dist/components/ai/PromptInput/VoiceRecorder.js +328 -0
  42. package/dist/components/ai/PromptInput/VoiceRecorder.types.d.ts +17 -0
  43. package/dist/components/ai/PromptInput/index.d.ts +1 -0
  44. package/dist/components/ai/{PromptSuggestions → PromptSuggestion}/PromptSuggestion.js +1 -0
  45. package/dist/components/ai/{PromptSuggestions → PromptSuggestion}/PromptSuggestion.theme.js +4 -4
  46. package/dist/components/ai/Reasoning/Reasoning.d.ts +5 -0
  47. package/dist/components/ai/Reasoning/Reasoning.js +16 -0
  48. package/dist/components/ai/Reasoning/Reasoning.types.d.ts +20 -0
  49. package/dist/components/ai/Reasoning/index.d.ts +2 -0
  50. package/dist/components/ai/SourceCitation/SourceCitation.d.ts +4 -0
  51. package/dist/components/ai/SourceCitation/SourceCitation.js +29 -0
  52. package/dist/components/ai/SourceCitation/SourceCitation.theme.d.ts +2 -0
  53. package/dist/components/ai/SourceCitation/SourceCitation.theme.js +23 -0
  54. package/dist/components/ai/SourceCitation/SourceCitation.types.d.ts +55 -0
  55. package/dist/components/ai/SourceCitation/index.d.ts +3 -0
  56. package/dist/components/ai/StreamingResponse/AnimatedText.js +4 -3
  57. package/dist/components/ai/StreamingResponse/ErrorDisplay.js +3 -2
  58. package/dist/components/ai/StreamingResponse/MarkdownRenderer.d.ts +5 -2
  59. package/dist/components/ai/StreamingResponse/MarkdownRenderer.js +60 -35
  60. package/dist/components/ai/StreamingResponse/StreamingCursor.d.ts +4 -5
  61. package/dist/components/ai/StreamingResponse/StreamingCursor.js +14 -10
  62. package/dist/components/ai/StreamingResponse/StreamingResponse.animations.d.ts +9 -2
  63. package/dist/components/ai/StreamingResponse/StreamingResponse.animations.js +37 -12
  64. package/dist/components/ai/StreamingResponse/StreamingResponse.js +9 -4
  65. package/dist/components/ai/StreamingResponse/StreamingResponse.theme.js +3 -1
  66. package/dist/components/ai/StreamingResponse/StreamingResponse.types.d.ts +9 -7
  67. package/dist/components/ai/StreamingResponse/WordAnimationContext.d.ts +27 -0
  68. package/dist/components/ai/StreamingResponse/WordAnimationContext.js +136 -0
  69. package/dist/components/ai/StreamingResponse/index.d.ts +3 -1
  70. package/dist/components/ai/TokenCounter/TokenCounter.js +3 -2
  71. package/dist/components/ai/TokenCounter/TokenCounter.theme.js +1 -1
  72. package/dist/components/ai/index.d.ts +5 -9
  73. package/dist/components/ai/index.js +14 -8
  74. package/dist/components/ai/shared/StatusIndicator.d.ts +8 -0
  75. package/dist/components/ai/shared/StatusIndicator.js +34 -0
  76. package/dist/components/canvas/Background.d.ts +19 -0
  77. package/dist/components/canvas/Background.js +24 -0
  78. package/dist/components/canvas/BaseNode.d.ts +15 -0
  79. package/dist/components/canvas/BaseNode.js +20 -0
  80. package/dist/components/canvas/CanvasToolbar.d.ts +34 -0
  81. package/dist/components/canvas/CanvasToolbar.js +35 -0
  82. package/dist/components/canvas/Edge.d.ts +32 -0
  83. package/dist/components/canvas/Edge.js +113 -0
  84. package/dist/components/canvas/EdgeLayer.d.ts +19 -0
  85. package/dist/components/canvas/EdgeLayer.js +121 -0
  86. package/dist/components/canvas/Handle.d.ts +11 -0
  87. package/dist/components/canvas/Handle.js +64 -0
  88. package/dist/components/canvas/MiniMap.d.ts +22 -0
  89. package/dist/components/canvas/MiniMap.js +106 -0
  90. package/dist/components/canvas/NodeCanvas.d.ts +10 -0
  91. package/dist/components/canvas/NodeCanvas.js +481 -0
  92. package/dist/components/canvas/NodeCanvas.theme.d.ts +7 -0
  93. package/dist/components/canvas/NodeCanvas.theme.js +9 -0
  94. package/dist/components/canvas/NodeCanvas.types.d.ts +191 -0
  95. package/dist/components/canvas/NodeControls.d.ts +25 -0
  96. package/dist/components/canvas/NodeControls.js +41 -0
  97. package/dist/components/canvas/NodeRenderer.d.ts +22 -0
  98. package/dist/components/canvas/NodeRenderer.js +126 -0
  99. package/dist/components/canvas/changes.d.ts +11 -0
  100. package/dist/components/canvas/changes.js +76 -0
  101. package/dist/components/canvas/changes.test.d.ts +1 -0
  102. package/dist/components/canvas/context/CanvasContext.d.ts +41 -0
  103. package/dist/components/canvas/context/CanvasContext.js +34 -0
  104. package/dist/components/canvas/context/ConnectionContext.d.ts +33 -0
  105. package/dist/components/canvas/context/ConnectionContext.js +14 -0
  106. package/dist/components/canvas/context/HandleRegistry.d.ts +24 -0
  107. package/dist/components/canvas/context/HandleRegistry.js +16 -0
  108. package/dist/components/canvas/context/InteractionContext.d.ts +18 -0
  109. package/dist/components/canvas/context/InteractionContext.js +15 -0
  110. package/dist/components/canvas/context/NodeIdContext.d.ts +3 -0
  111. package/dist/components/canvas/context/NodeIdContext.js +16 -0
  112. package/dist/components/canvas/hooks/useConnection.d.ts +17 -0
  113. package/dist/components/canvas/hooks/useConnection.js +30 -0
  114. package/dist/components/canvas/hooks/useMarquee.d.ts +25 -0
  115. package/dist/components/canvas/hooks/useMarquee.js +92 -0
  116. package/dist/components/canvas/hooks/useNodeDrag.d.ts +23 -0
  117. package/dist/components/canvas/hooks/useNodeDrag.js +111 -0
  118. package/dist/components/canvas/hooks/usePanZoom.d.ts +30 -0
  119. package/dist/components/canvas/hooks/usePanZoom.js +195 -0
  120. package/dist/components/canvas/hooks/useViewport.d.ts +21 -0
  121. package/dist/components/canvas/hooks/useViewport.js +36 -0
  122. package/dist/components/canvas/index.d.ts +14 -0
  123. package/dist/components/canvas/index.js +12 -0
  124. package/dist/components/canvas/layout.d.ts +22 -0
  125. package/dist/components/canvas/layout.js +67 -0
  126. package/dist/components/canvas/layout.test.d.ts +1 -0
  127. package/dist/components/canvas/utils.d.ts +4 -0
  128. package/dist/components/canvas/utils.js +16 -0
  129. package/dist/components/canvas/utils.test.d.ts +1 -0
  130. package/dist/components/charts/ActivityRings/ActivityRings.js +29 -18
  131. package/dist/components/charts/ActivityRings/ActivityRings.types.d.ts +2 -3
  132. package/dist/components/charts/ActivityRings/ActivityRings.types.js +2 -1
  133. package/dist/components/charts/AreaChart/AreaChart.js +213 -176
  134. package/dist/components/charts/AreaChart/AreaChart.theme.d.ts +1 -6
  135. package/dist/components/charts/AreaChart/AreaChart.theme.js +7 -19
  136. package/dist/components/charts/AreaChart/AreaChart.types.d.ts +23 -16
  137. package/dist/components/charts/AreaChart/AreaChart.types.js +11 -3
  138. package/dist/components/charts/AreaChart/index.d.ts +1 -1
  139. package/dist/components/charts/BarChart/BarChart.js +220 -185
  140. package/dist/components/charts/BarChart/BarChart.types.d.ts +22 -18
  141. package/dist/components/charts/BarChart/BarChart.types.js +12 -4
  142. package/dist/components/charts/ChartContainer.d.ts +7 -0
  143. package/dist/components/charts/ChartContainer.js +11 -8
  144. package/dist/components/charts/{shared/BarRenderer → ComboChart}/BarRenderer.d.ts +3 -1
  145. package/dist/components/charts/{shared/BarRenderer → ComboChart}/BarRenderer.js +145 -107
  146. package/dist/components/charts/{shared/BarRenderer → ComboChart}/BarRenderer.types.d.ts +17 -5
  147. package/dist/components/charts/ComboChart/ComboChart.js +29 -25
  148. package/dist/components/charts/ComboChart/ComboChart.types.d.ts +18 -16
  149. package/dist/components/charts/ComboChart/ComboChart.types.js +18 -2
  150. package/dist/components/charts/ComboChart/ComboChartCanvas.d.ts +98 -0
  151. package/dist/components/charts/{shared/ChartContainer/ChartContainer.js → ComboChart/ComboChartCanvas.js} +41 -44
  152. package/dist/components/charts/{shared/ChartContainer/ChartContainer.types.d.ts → ComboChart/ComboChartCanvas.types.d.ts} +23 -3
  153. package/dist/components/charts/{shared/LineRenderer → ComboChart}/LineRenderer.d.ts +3 -1
  154. package/dist/components/charts/{shared/LineRenderer → ComboChart}/LineRenderer.js +42 -24
  155. package/dist/components/charts/{shared/LineRenderer → ComboChart}/LineRenderer.types.d.ts +11 -5
  156. package/dist/components/charts/DonutChart/DonutChart.js +3 -2
  157. package/dist/components/charts/DonutChart/DonutChart.theme.js +1 -1
  158. package/dist/components/charts/DonutChart/DonutChart.types.d.ts +1 -2
  159. package/dist/components/charts/DonutChart/MultiSegmentDonutChart.js +10 -24
  160. package/dist/components/charts/DonutChart/MultiSegmentDonutChart.types.d.ts +1 -2
  161. package/dist/components/charts/DonutChart/donut-utils.js +1 -0
  162. package/dist/components/charts/FunnelChart/FunnelChart.animations.js +1 -48
  163. package/dist/components/charts/FunnelChart/FunnelChart.d.ts +3 -4
  164. package/dist/components/charts/FunnelChart/FunnelChart.js +306 -358
  165. package/dist/components/charts/Heatmap/Heatmap.js +29 -36
  166. package/dist/components/charts/Heatmap/HeatmapCell.js +2 -1
  167. package/dist/components/charts/Heatmap/HeatmapLegend.js +1 -1
  168. package/dist/components/charts/HorizontalBarChart/HorizontalBarChart.d.ts +16 -0
  169. package/dist/components/charts/HorizontalBarChart/HorizontalBarChart.js +237 -0
  170. package/dist/components/charts/HorizontalBarChart/HorizontalBarChart.types.d.ts +62 -0
  171. package/dist/components/charts/HorizontalBarChart/HorizontalBarChart.types.js +21 -0
  172. package/dist/components/charts/HorizontalBarChart/index.d.ts +3 -0
  173. package/dist/components/charts/LineChart/LineChart.js +197 -167
  174. package/dist/components/charts/LineChart/LineChart.types.d.ts +14 -17
  175. package/dist/components/charts/LineChart/LineChart.types.js +11 -3
  176. package/dist/components/charts/LollipopChart/LollipopChart.d.ts +3 -0
  177. package/dist/components/charts/LollipopChart/LollipopChart.js +361 -0
  178. package/dist/components/charts/LollipopChart/LollipopChart.types.d.ts +42 -0
  179. package/dist/components/charts/LollipopChart/LollipopChart.types.js +12 -0
  180. package/dist/components/charts/LollipopChart/index.d.ts +3 -0
  181. package/dist/components/charts/RadarChart/RadarChart.js +10 -2
  182. package/dist/components/charts/RadarChart/RadarChart.theme.js +5 -10
  183. package/dist/components/charts/RadarChart/RadarChart.types.d.ts +0 -8
  184. package/dist/components/charts/ScatterPlot/ScatterPlot.js +72 -72
  185. package/dist/components/charts/ScatterPlot/ScatterPlot.theme.d.ts +0 -4
  186. package/dist/components/charts/ScatterPlot/ScatterPlot.theme.js +10 -6
  187. package/dist/components/charts/ScatterPlot/ScatterPlot.types.d.ts +15 -26
  188. package/dist/components/charts/ScatterPlot/ScatterPlot.types.js +9 -2
  189. package/dist/components/charts/StackedBarChart/StackedBarChart.js +209 -154
  190. package/dist/components/charts/StackedBarChart/StackedBarChart.types.d.ts +22 -20
  191. package/dist/components/charts/StackedBarChart/StackedBarChart.types.js +13 -4
  192. package/dist/components/charts/hooks/index.d.ts +3 -1
  193. package/dist/components/charts/hooks/useChartAccessibility.d.ts +1 -1
  194. package/dist/components/charts/hooks/useChartAccessibility.js +4 -0
  195. package/dist/components/charts/hooks/useChartDimensions.d.ts +29 -0
  196. package/dist/components/charts/hooks/useChartDimensions.js +43 -0
  197. package/dist/components/charts/hooks/useChartScales.js +1 -1
  198. package/dist/components/charts/hooks/useChartTheme.js +1 -0
  199. package/dist/components/charts/hooks/useChartValidation.d.ts +0 -8
  200. package/dist/components/charts/hooks/useChartValidation.js +1 -0
  201. package/dist/components/charts/hooks/useTooltipPosition.js +19 -6
  202. package/dist/components/charts/index.d.ts +9 -3
  203. package/dist/components/charts/index.js +7 -3
  204. package/dist/components/charts/shared/ChartAxis/CategoryYAxis.d.ts +14 -0
  205. package/dist/components/charts/shared/ChartAxis/CategoryYAxis.js +35 -0
  206. package/dist/components/charts/shared/ChartAxis/ChartAxis.types.d.ts +69 -8
  207. package/dist/components/charts/shared/ChartAxis/ValueXAxis.d.ts +14 -0
  208. package/dist/components/charts/shared/ChartAxis/ValueXAxis.js +64 -0
  209. package/dist/components/charts/shared/ChartAxis/XAxis.js +1 -1
  210. package/dist/components/charts/shared/ChartAxis/YAxis.js +2 -2
  211. package/dist/components/charts/shared/ChartAxis/index.d.ts +3 -1
  212. package/dist/components/charts/shared/ChartCrosshair/ChartCrosshair.js +5 -12
  213. package/dist/components/charts/shared/ChartErrorBoundary/ChartErrorBoundary.js +2 -1
  214. package/dist/components/charts/shared/ChartGrid/HorizontalGrid.d.ts +0 -2
  215. package/dist/components/charts/shared/ChartGrid/HorizontalGrid.js +1 -1
  216. package/dist/components/charts/shared/ChartGrid/VerticalGrid.d.ts +29 -0
  217. package/dist/components/charts/shared/ChartGrid/VerticalGrid.js +26 -0
  218. package/dist/components/charts/shared/ChartGrid/index.d.ts +2 -0
  219. package/dist/components/charts/shared/ChartLegend/ChartLegend.d.ts +5 -2
  220. package/dist/components/charts/shared/ChartLegend/ChartLegend.js +15 -22
  221. package/dist/components/charts/shared/ChartLegend/ChartLegend.types.d.ts +7 -12
  222. package/dist/components/charts/shared/ChartLegend/index.d.ts +2 -3
  223. package/dist/components/charts/shared/ChartMarker/ChartMarker.js +8 -1
  224. package/dist/components/charts/shared/ChartText/ChartText.js +2 -1
  225. package/dist/components/charts/shared/ChartTooltip/ChartTooltip.js +4 -13
  226. package/dist/components/charts/shared/ChartTooltip/ChartTooltip.theme.js +1 -1
  227. package/dist/components/charts/shared/ChartTooltip/ChartTooltip.types.d.ts +13 -2
  228. package/dist/components/charts/shared/index.d.ts +0 -7
  229. package/dist/components/charts/theme/chart.theme.js +24 -23
  230. package/dist/components/charts/types/chart.types.d.ts +35 -7
  231. package/dist/components/charts/types/chart.types.js +11 -10
  232. package/dist/components/charts/utils/animation-utils.d.ts +95 -0
  233. package/dist/components/charts/utils/animation-utils.js +148 -2
  234. package/dist/components/charts/utils/bar-emphasis.d.ts +109 -0
  235. package/dist/components/charts/utils/bar-emphasis.js +85 -0
  236. package/dist/components/charts/utils/chart-validation.js +7 -0
  237. package/dist/components/charts/utils/index.d.ts +1 -0
  238. package/dist/components/charts/utils/series-color.d.ts +7 -0
  239. package/dist/components/charts/utils/series-color.js +20 -0
  240. package/dist/components/core/Accordion/Accordion.animations.d.ts +6 -1
  241. package/dist/components/core/Accordion/Accordion.animations.js +15 -1
  242. package/dist/components/core/Accordion/Accordion.d.ts +4 -4
  243. package/dist/components/core/Accordion/Accordion.js +23 -19
  244. package/dist/components/core/Accordion/Accordion.theme.d.ts +2 -2
  245. package/dist/components/core/Accordion/Accordion.theme.js +7 -7
  246. package/dist/components/core/Accordion/Accordion.types.d.ts +63 -5
  247. package/dist/components/core/Accordion/AccordionBody.d.ts +3 -0
  248. package/dist/components/core/Accordion/{AccordionContent.js → AccordionBody.js} +6 -5
  249. package/dist/components/core/Accordion/AccordionContext.d.ts +3 -0
  250. package/dist/components/core/Accordion/AccordionContext.js +15 -0
  251. package/dist/components/core/Accordion/AccordionItem.js +14 -10
  252. package/dist/components/core/Accordion/AccordionTrigger.js +52 -10
  253. package/dist/components/core/Accordion/index.d.ts +2 -2
  254. package/dist/components/core/Alert/Alert.animations.d.ts +12 -0
  255. package/dist/components/core/Alert/Alert.animations.js +60 -0
  256. package/dist/components/core/Alert/Alert.js +29 -10
  257. package/dist/components/core/Alert/Alert.theme.js +3 -12
  258. package/dist/components/core/Alert/Alert.types.d.ts +6 -13
  259. package/dist/components/core/Alert/index.d.ts +1 -1
  260. package/dist/components/core/AlertDialog/AlertDialog.js +15 -1
  261. package/dist/components/core/Avatar/Avatar.js +104 -39
  262. package/dist/components/core/Avatar/Avatar.theme.d.ts +10 -8
  263. package/dist/components/core/Avatar/Avatar.theme.js +80 -14
  264. package/dist/components/core/Avatar/Avatar.types.d.ts +55 -9
  265. package/dist/components/core/Avatar/index.d.ts +1 -1
  266. package/dist/components/core/AvatarGroup/AvatarGroup.animations.js +3 -2
  267. package/dist/components/core/AvatarGroup/AvatarGroup.js +12 -10
  268. package/dist/components/core/AvatarGroup/AvatarGroup.theme.d.ts +1 -2
  269. package/dist/components/core/AvatarGroup/AvatarGroup.theme.js +6 -8
  270. package/dist/components/core/AvatarGroup/AvatarGroup.types.d.ts +0 -6
  271. package/dist/components/core/AvatarGroup/index.d.ts +1 -1
  272. package/dist/components/core/Badge/Badge.animations.js +6 -3
  273. package/dist/components/core/Badge/Badge.d.ts +1 -1
  274. package/dist/components/core/Badge/Badge.js +36 -74
  275. package/dist/components/core/Badge/Badge.theme.js +75 -66
  276. package/dist/components/core/Badge/Badge.types.d.ts +21 -34
  277. package/dist/components/core/Breadcrumbs/Breadcrumbs.js +24 -25
  278. package/dist/components/core/Breadcrumbs/Breadcrumbs.theme.d.ts +1 -4
  279. package/dist/components/core/Breadcrumbs/Breadcrumbs.theme.js +4 -4
  280. package/dist/components/core/Breadcrumbs/Breadcrumbs.types.d.ts +1 -1
  281. package/dist/components/core/Button/Button.d.ts +1 -1
  282. package/dist/components/core/Button/Button.js +49 -53
  283. package/dist/components/core/Button/Button.ripple.d.ts +5 -1
  284. package/dist/components/core/Button/Button.ripple.js +31 -24
  285. package/dist/components/core/Button/Button.theme.d.ts +4 -4
  286. package/dist/components/core/Button/Button.theme.js +63 -92
  287. package/dist/components/core/Button/Button.types.d.ts +23 -7
  288. package/dist/components/core/Button/index.d.ts +2 -0
  289. package/dist/components/core/ButtonGroup/ButtonGroup.theme.js +6 -6
  290. package/dist/components/core/ButtonGroup/ButtonGroupText.js +1 -3
  291. package/dist/components/core/Calendar/Calendar.animations.js +1 -0
  292. package/dist/components/core/Calendar/Calendar.js +134 -10
  293. package/dist/components/core/Calendar/Calendar.theme.js +22 -26
  294. package/dist/components/core/Calendar/Calendar.types.d.ts +4 -2
  295. package/dist/components/core/Calendar/CalendarEvent/CalendarEvent.types.d.ts +5 -6
  296. package/dist/components/core/Calendar/CalendarMini/CalendarMini.animations.js +1 -0
  297. package/dist/components/core/Calendar/CalendarMini/CalendarMini.js +9 -5
  298. package/dist/components/core/Calendar/CalendarMini/CalendarMini.theme.js +2 -2
  299. package/dist/components/core/Card/Card.d.ts +2 -2
  300. package/dist/components/core/Card/Card.js +17 -6
  301. package/dist/components/core/Card/Card.theme.js +16 -6
  302. package/dist/components/core/Card/Card.types.d.ts +43 -15
  303. package/dist/components/core/Card/CardBody.d.ts +3 -0
  304. package/dist/components/core/Card/CardBody.js +11 -0
  305. package/dist/components/core/Card/CardFooter.js +1 -1
  306. package/dist/components/core/Card/CardHeader.js +1 -1
  307. package/dist/components/core/Card/CardSubtitle.d.ts +1 -1
  308. package/dist/components/core/Card/CardTitle.d.ts +1 -1
  309. package/dist/components/core/Card/index.d.ts +2 -2
  310. package/dist/components/core/CardStack/CardStack.js +1 -0
  311. package/dist/components/core/Carousel/Carousel.js +5 -4
  312. package/dist/components/core/Carousel/Carousel.types.d.ts +4 -4
  313. package/dist/components/core/Carousel/CarouselBody.d.ts +4 -0
  314. package/dist/components/core/Carousel/{CarouselContent.js → CarouselBody.js} +12 -5
  315. package/dist/components/core/Carousel/CarouselContext.js +1 -0
  316. package/dist/components/core/Carousel/CarouselNext.js +3 -2
  317. package/dist/components/core/Carousel/CarouselPrevious.js +3 -2
  318. package/dist/components/core/Carousel/index.d.ts +2 -1
  319. package/dist/components/core/CommandPalette/CommandItem.js +5 -5
  320. package/dist/components/core/CommandPalette/CommandPalette.animations.js +1 -0
  321. package/dist/components/core/CommandPalette/CommandPalette.js +61 -14
  322. package/dist/components/core/CommandPalette/CommandPalette.theme.js +15 -18
  323. package/dist/components/core/CommandPalette/CommandPalette.types.d.ts +16 -2
  324. package/dist/components/core/ContextMenu/ContextMenu.d.ts +2 -2
  325. package/dist/components/core/ContextMenu/ContextMenu.js +38 -15
  326. package/dist/components/core/ContextMenu/ContextMenu.theme.js +15 -15
  327. package/dist/components/core/ContextMenu/ContextMenu.types.d.ts +19 -2
  328. package/dist/components/core/ContextMenu/ContextMenuBody.d.ts +6 -0
  329. package/dist/components/core/ContextMenu/{ContextMenuContent.js → ContextMenuBody.js} +20 -11
  330. package/dist/components/core/ContextMenu/ContextMenuContext.js +1 -0
  331. package/dist/components/core/ContextMenu/ContextMenuItem.js +19 -9
  332. package/dist/components/core/ContextMenu/ContextMenuLabel.js +1 -0
  333. package/dist/components/core/ContextMenu/ContextMenuSeparator.js +1 -0
  334. package/dist/components/core/ContextMenu/ContextMenuSub.js +4 -3
  335. package/dist/components/core/ContextMenu/ContextMenuSubBody.d.ts +6 -0
  336. package/dist/components/core/ContextMenu/{ContextMenuSubContent.js → ContextMenuSubBody.js} +16 -9
  337. package/dist/components/core/ContextMenu/ContextMenuSubTrigger.js +4 -3
  338. package/dist/components/core/ContextMenu/ContextMenuTrigger.js +13 -6
  339. package/dist/components/core/ContextMenu/index.d.ts +1 -1
  340. package/dist/components/core/DotSeparator/DotSeparator.d.ts +3 -0
  341. package/dist/components/core/DotSeparator/DotSeparator.js +20 -0
  342. package/dist/components/core/DotSeparator/DotSeparator.theme.d.ts +2 -0
  343. package/dist/components/core/DotSeparator/DotSeparator.theme.js +10 -0
  344. package/dist/components/core/DotSeparator/DotSeparator.types.d.ts +25 -0
  345. package/dist/components/core/DotSeparator/index.d.ts +3 -0
  346. package/dist/components/core/DragDrop/DragDrop.js +189 -17
  347. package/dist/components/core/DragDrop/DragDrop.types.d.ts +6 -0
  348. package/dist/components/core/Drawer/Drawer.animations.js +14 -12
  349. package/dist/components/core/Drawer/Drawer.d.ts +6 -6
  350. package/dist/components/core/Drawer/Drawer.js +63 -20
  351. package/dist/components/core/Drawer/Drawer.theme.d.ts +2 -0
  352. package/dist/components/core/Drawer/Drawer.theme.js +23 -16
  353. package/dist/components/core/Drawer/Drawer.types.d.ts +24 -6
  354. package/dist/components/core/Drawer/DrawerBody.d.ts +5 -0
  355. package/dist/components/core/Drawer/{DrawerContent.js → DrawerBody.js} +5 -4
  356. package/dist/components/core/Drawer/DrawerContext.d.ts +3 -0
  357. package/dist/components/core/Drawer/DrawerContext.js +15 -0
  358. package/dist/components/core/Drawer/DrawerFooter.js +2 -1
  359. package/dist/components/core/Drawer/DrawerHeader.js +5 -3
  360. package/dist/components/core/Drawer/DrawerSubtitle.js +2 -1
  361. package/dist/components/core/Drawer/DrawerTitle.d.ts +1 -1
  362. package/dist/components/core/Drawer/DrawerTitle.js +4 -3
  363. package/dist/components/core/Drawer/index.d.ts +2 -1
  364. package/dist/components/core/Dropdown/Dropdown.d.ts +1 -1
  365. package/dist/components/core/Dropdown/Dropdown.js +28 -10
  366. package/dist/components/core/Dropdown/Dropdown.theme.js +9 -7
  367. package/dist/components/core/Dropdown/Dropdown.types.d.ts +12 -3
  368. package/dist/components/core/Dropdown/DropdownContext.js +1 -0
  369. package/dist/components/core/Dropdown/DropdownItem.js +5 -4
  370. package/dist/components/core/Dropdown/DropdownMenu.js +75 -74
  371. package/dist/components/core/Dropdown/DropdownSection.js +5 -2
  372. package/dist/components/core/Dropdown/DropdownSeparator.js +2 -1
  373. package/dist/components/core/Dropdown/DropdownTrigger.d.ts +6 -1
  374. package/dist/components/core/Dropdown/DropdownTrigger.js +42 -9
  375. package/dist/components/core/Empty/Empty.js +1 -1
  376. package/dist/components/core/Empty/Empty.theme.js +1 -1
  377. package/dist/components/core/HeroCard/HeroCard.d.ts +5 -0
  378. package/dist/components/core/HeroCard/HeroCard.js +100 -0
  379. package/dist/components/core/HeroCard/HeroCard.theme.d.ts +3 -0
  380. package/dist/components/core/HeroCard/HeroCard.theme.js +11 -0
  381. package/dist/components/core/HeroCard/HeroCard.types.d.ts +70 -0
  382. package/dist/components/core/HeroCard/index.d.ts +4 -0
  383. package/dist/components/core/Icon/Icon.d.ts +3 -0
  384. package/dist/components/core/Icon/Icon.js +70 -0
  385. package/dist/components/core/Icon/Icon.theme.d.ts +2 -0
  386. package/dist/components/core/Icon/Icon.theme.js +19 -0
  387. package/dist/components/core/Icon/Icon.types.d.ts +32 -0
  388. package/dist/components/core/Icon/data/fileTypes.d.ts +7 -0
  389. package/dist/components/core/Icon/data/fileTypes.js +30 -0
  390. package/dist/components/core/Icon/data/paymentMethods.d.ts +27 -0
  391. package/dist/components/core/Icon/data/paymentMethods.js +169 -0
  392. package/dist/components/core/Icon/index.d.ts +4 -0
  393. package/dist/components/core/ImagePlaceholder/ImagePlaceholder.d.ts +14 -0
  394. package/dist/components/core/ImagePlaceholder/ImagePlaceholder.js +37 -0
  395. package/dist/components/core/ImagePlaceholder/ImagePlaceholder.theme.d.ts +6 -0
  396. package/dist/components/core/ImagePlaceholder/ImagePlaceholder.theme.js +8 -0
  397. package/dist/components/core/ImagePlaceholder/ImagePlaceholder.types.d.ts +32 -0
  398. package/dist/components/core/ImagePlaceholder/index.d.ts +2 -0
  399. package/dist/components/core/Kbd/Kbd.theme.js +5 -3
  400. package/dist/components/core/Link/Link.d.ts +1 -1
  401. package/dist/components/core/Link/Link.js +62 -29
  402. package/dist/components/core/Link/Link.types.d.ts +26 -9
  403. package/dist/components/core/Masonry/Masonry.js +88 -71
  404. package/dist/components/core/Masonry/Masonry.theme.js +10 -4
  405. package/dist/components/core/MenuItem/MenuItem.js +23 -2
  406. package/dist/components/core/MenuItem/MenuItem.theme.d.ts +6 -0
  407. package/dist/components/core/MenuItem/MenuItem.theme.js +25 -18
  408. package/dist/components/core/MenuItem/MenuItem.types.d.ts +3 -1
  409. package/dist/components/core/Message/Message.d.ts +10 -1
  410. package/dist/components/core/Message/Message.js +50 -8
  411. package/dist/components/core/Message/Message.theme.js +27 -7
  412. package/dist/components/core/Message/Message.types.d.ts +122 -7
  413. package/dist/components/core/Message/MessageActions.js +1 -0
  414. package/dist/components/core/Message/MessageAudio.d.ts +8 -0
  415. package/dist/components/core/Message/MessageAudio.js +12 -0
  416. package/dist/components/core/Message/MessageAvatar.d.ts +2 -2
  417. package/dist/components/core/Message/MessageAvatar.js +4 -3
  418. package/dist/components/core/Message/MessageBody.d.ts +8 -0
  419. package/dist/components/core/Message/{MessageContent.js → MessageBody.js} +4 -3
  420. package/dist/components/core/Message/MessageContext.d.ts +3 -1
  421. package/dist/components/core/Message/MessageContext.js +1 -0
  422. package/dist/components/core/Message/MessageDateDivider.d.ts +6 -0
  423. package/dist/components/core/Message/MessageDateDivider.js +10 -0
  424. package/dist/components/core/Message/MessageFile.d.ts +9 -0
  425. package/dist/components/core/Message/MessageFile.js +16 -0
  426. package/dist/components/core/Message/MessageImage.d.ts +11 -0
  427. package/dist/components/core/Message/MessageImage.js +14 -0
  428. package/dist/components/core/Message/MessageLink.d.ts +10 -0
  429. package/dist/components/core/Message/MessageLink.js +15 -0
  430. package/dist/components/core/Message/MessageList.js +1 -0
  431. package/dist/components/core/Message/MessageReactions.d.ts +8 -0
  432. package/dist/components/core/Message/MessageReactions.js +13 -0
  433. package/dist/components/core/Message/MessageReply.d.ts +8 -0
  434. package/dist/components/core/Message/MessageReply.js +10 -0
  435. package/dist/components/core/Message/MessageSenderName.d.ts +6 -0
  436. package/dist/components/core/Message/MessageSenderName.js +10 -0
  437. package/dist/components/core/Message/MessageStatusIndicator.d.ts +9 -0
  438. package/dist/components/core/Message/MessageStatusIndicator.js +46 -0
  439. package/dist/components/core/Message/MessageTimestamp.js +1 -0
  440. package/dist/components/core/Message/TypeWriter.d.ts +1 -1
  441. package/dist/components/core/Message/TypeWriter.js +74 -9
  442. package/dist/components/core/Message/index.d.ts +21 -1
  443. package/dist/components/core/Modal/Modal.animations.d.ts +1 -0
  444. package/dist/components/core/Modal/Modal.animations.js +20 -30
  445. package/dist/components/core/Modal/Modal.d.ts +4 -6
  446. package/dist/components/core/Modal/Modal.js +21 -22
  447. package/dist/components/core/Modal/Modal.theme.js +15 -12
  448. package/dist/components/core/Modal/Modal.types.d.ts +15 -12
  449. package/dist/components/core/Modal/ModalBody.js +9 -9
  450. package/dist/components/core/Modal/ModalContext.d.ts +3 -0
  451. package/dist/components/core/Modal/ModalContext.js +16 -0
  452. package/dist/components/core/Modal/ModalFooter.js +3 -2
  453. package/dist/components/core/Modal/ModalHeader.js +5 -3
  454. package/dist/components/core/Modal/ModalSubtitle.js +2 -1
  455. package/dist/components/core/Modal/ModalTitle.d.ts +1 -1
  456. package/dist/components/core/Modal/ModalTitle.js +4 -3
  457. package/dist/components/core/Modal/index.d.ts +1 -1
  458. package/dist/components/core/ModalStack/ModalStack.animations.js +1 -0
  459. package/dist/components/core/ModalStack/ModalStack.d.ts +1 -1
  460. package/dist/components/core/ModalStack/ModalStack.js +2 -1
  461. package/dist/components/core/ModalStack/ModalStack.types.d.ts +1 -2
  462. package/dist/components/core/ModalStack/ModalStackModal.d.ts +1 -1
  463. package/dist/components/core/ModalStack/ModalStackModal.js +20 -16
  464. package/dist/components/core/NavItem/NavItem.d.ts +1 -1
  465. package/dist/components/core/NavItem/NavItem.js +273 -79
  466. package/dist/components/core/NavItem/NavItem.theme.js +31 -9
  467. package/dist/components/core/NavItem/NavItem.types.d.ts +51 -59
  468. package/dist/components/core/NavItem/index.d.ts +1 -1
  469. package/dist/components/core/OfflineIndicator/OfflineIndicator.animations.d.ts +22 -0
  470. package/dist/components/core/OfflineIndicator/OfflineIndicator.animations.js +54 -0
  471. package/dist/components/core/OfflineIndicator/OfflineIndicator.js +24 -24
  472. package/dist/components/core/OfflineIndicator/OfflineIndicator.theme.js +26 -7
  473. package/dist/components/core/OfflineIndicator/OfflineIndicator.types.d.ts +17 -0
  474. package/dist/components/core/PageHeading/PageHeading.js +8 -3
  475. package/dist/components/core/PageHeading/PageHeading.theme.js +3 -3
  476. package/dist/components/core/PageHeading/PageHeading.types.d.ts +13 -2
  477. package/dist/components/core/PageHeading/PageHeadingBackButton.js +6 -3
  478. package/dist/components/core/Pagination/Pagination.js +10 -4
  479. package/dist/components/core/Pagination/Pagination.theme.d.ts +2 -10
  480. package/dist/components/core/Pagination/Pagination.theme.js +6 -6
  481. package/dist/components/core/Pagination/Pagination.types.d.ts +11 -1
  482. package/dist/components/core/Pill/Pill.js +17 -6
  483. package/dist/components/core/Pill/Pill.theme.js +13 -11
  484. package/dist/components/core/Popover/Popover.d.ts +2 -2
  485. package/dist/components/core/Popover/Popover.js +11 -10
  486. package/dist/components/core/Popover/Popover.theme.d.ts +1 -1
  487. package/dist/components/core/Popover/Popover.theme.js +4 -2
  488. package/dist/components/core/Popover/Popover.types.d.ts +21 -3
  489. package/dist/components/core/Popover/PopoverBody.d.ts +7 -0
  490. package/dist/components/core/Popover/PopoverBody.js +134 -0
  491. package/dist/components/core/Popover/PopoverContext.js +1 -0
  492. package/dist/components/core/Popover/PopoverTrigger.d.ts +1 -1
  493. package/dist/components/core/Popover/PopoverTrigger.js +13 -12
  494. package/dist/components/core/Popover/index.d.ts +4 -3
  495. package/dist/components/core/Progress/Progress.d.ts +9 -8
  496. package/dist/components/core/Progress/Progress.js +18 -17
  497. package/dist/components/core/Progress/Progress.theme.js +6 -14
  498. package/dist/components/core/Progress/Progress.types.d.ts +2 -19
  499. package/dist/components/core/Progress/index.d.ts +1 -1
  500. package/dist/components/core/Rating/Rating.js +17 -10
  501. package/dist/components/core/Rating/Rating.theme.js +1 -1
  502. package/dist/components/core/ScrollArea/ScrollArea.js +294 -12
  503. package/dist/components/core/ScrollArea/ScrollArea.theme.js +1 -1
  504. package/dist/components/core/ScrollArea/ScrollArea.types.d.ts +24 -4
  505. package/dist/components/core/ScrollArea/index.d.ts +1 -1
  506. package/dist/components/core/ScrollArea/smooth/SmoothScrollEngine.d.ts +5 -0
  507. package/dist/components/core/ScrollArea/smooth/SmoothScrollEngine.js +37 -3
  508. package/dist/components/core/ScrollArea/smooth/SnapPointDetector.js +1 -0
  509. package/dist/components/core/ScrollArea/smooth/useSmoothScroll.js +5 -0
  510. package/dist/components/core/ScrollArea/smooth/useSmoothScroll.types.d.ts +5 -0
  511. package/dist/components/core/Segmented/Segmented.js +21 -19
  512. package/dist/components/core/Segmented/Segmented.theme.js +10 -7
  513. package/dist/components/core/Segmented/SegmentedItem.js +30 -3
  514. package/dist/components/core/Separator/Separator.js +1 -0
  515. package/dist/components/core/Sidebar/Sidebar.d.ts +14 -1
  516. package/dist/components/core/Sidebar/Sidebar.js +95 -21
  517. package/dist/components/core/Sidebar/Sidebar.theme.js +7 -7
  518. package/dist/components/core/Sidebar/Sidebar.types.d.ts +190 -8
  519. package/dist/components/core/Sidebar/SidebarCard.d.ts +25 -0
  520. package/dist/components/core/Sidebar/SidebarCard.js +69 -0
  521. package/dist/components/core/Sidebar/SidebarCard.theme.d.ts +8 -0
  522. package/dist/components/core/Sidebar/SidebarCard.theme.js +18 -0
  523. package/dist/components/core/Sidebar/SidebarContent.js +11 -4
  524. package/dist/components/core/Sidebar/SidebarContext.d.ts +26 -11
  525. package/dist/components/core/Sidebar/SidebarContext.js +87 -11
  526. package/dist/components/core/Sidebar/SidebarFooter.js +5 -4
  527. package/dist/components/core/Sidebar/SidebarHeader.js +15 -4
  528. package/dist/components/core/Sidebar/SidebarLogo.d.ts +3 -0
  529. package/dist/components/core/Sidebar/SidebarLogo.js +49 -0
  530. package/dist/components/core/Sidebar/SidebarMobileTrigger.d.ts +3 -0
  531. package/dist/components/core/Sidebar/SidebarMobileTrigger.js +30 -0
  532. package/dist/components/core/Sidebar/SidebarNav.js +6 -2
  533. package/dist/components/core/Sidebar/SidebarNavGroup.js +6 -5
  534. package/dist/components/core/Sidebar/SidebarSearch.d.ts +22 -0
  535. package/dist/components/core/Sidebar/SidebarSearch.js +136 -0
  536. package/dist/components/core/Sidebar/SidebarToggle.js +9 -4
  537. package/dist/components/core/Sidebar/SidebarUserProfile.d.ts +3 -0
  538. package/dist/components/core/Sidebar/SidebarUserProfile.js +49 -0
  539. package/dist/components/core/Sidebar/index.d.ts +7 -3
  540. package/dist/components/core/Skeleton/Skeleton.js +2 -2
  541. package/dist/components/core/Skeleton/Skeleton.theme.js +1 -1
  542. package/dist/components/core/SlidingNumber/SlidingNumber.js +3 -1
  543. package/dist/components/core/Sortable/Sortable.animations.js +1 -0
  544. package/dist/components/core/Sortable/Sortable.d.ts +1 -1
  545. package/dist/components/core/Sortable/Sortable.js +25 -8
  546. package/dist/components/core/Sortable/Sortable.theme.js +1 -1
  547. package/dist/components/core/Sortable/Sortable.types.d.ts +9 -5
  548. package/dist/components/core/Spinner/Spinner.js +1 -0
  549. package/dist/components/core/Spinner/Spinner.theme.js +4 -6
  550. package/dist/components/core/Spinner/Spinner.types.d.ts +2 -1
  551. package/dist/components/core/Tabs/Tabs.animations.d.ts +2 -2
  552. package/dist/components/core/Tabs/Tabs.animations.js +4 -3
  553. package/dist/components/core/Tabs/Tabs.d.ts +1 -1
  554. package/dist/components/core/Tabs/Tabs.js +15 -7
  555. package/dist/components/core/Tabs/Tabs.theme.d.ts +2 -2
  556. package/dist/components/core/Tabs/Tabs.theme.js +6 -6
  557. package/dist/components/core/Tabs/Tabs.types.d.ts +13 -9
  558. package/dist/components/core/Tabs/TabsBody.d.ts +6 -0
  559. package/dist/components/core/Tabs/{TabsContent.js → TabsBody.js} +15 -12
  560. package/dist/components/core/Tabs/TabsContext.js +1 -0
  561. package/dist/components/core/Tabs/TabsList.js +20 -21
  562. package/dist/components/core/Tabs/TabsTrigger.js +81 -38
  563. package/dist/components/core/Tabs/index.d.ts +2 -2
  564. package/dist/components/core/Tag/Tag.animations.js +0 -13
  565. package/dist/components/core/Tag/Tag.d.ts +2 -2
  566. package/dist/components/core/Tag/Tag.js +48 -6
  567. package/dist/components/core/Tag/Tag.theme.js +21 -6
  568. package/dist/components/core/Tag/Tag.types.d.ts +31 -1
  569. package/dist/components/core/Toast/Toast.animations.d.ts +3 -2
  570. package/dist/components/core/Toast/Toast.animations.js +20 -17
  571. package/dist/components/core/Toast/Toast.d.ts +2 -2
  572. package/dist/components/core/Toast/Toast.js +67 -32
  573. package/dist/components/core/Toast/Toast.theme.js +8 -16
  574. package/dist/components/core/Toast/Toast.types.d.ts +41 -48
  575. package/dist/components/core/Toast/ToastProvider.js +7 -2
  576. package/dist/components/core/Toast/index.d.ts +1 -1
  577. package/dist/components/core/Toast/useToast.js +10 -11
  578. package/dist/components/core/Tooltip/Tooltip.animations.js +19 -53
  579. package/dist/components/core/Tooltip/Tooltip.d.ts +1 -1
  580. package/dist/components/core/Tooltip/Tooltip.js +89 -45
  581. package/dist/components/core/Tooltip/Tooltip.theme.js +4 -3
  582. package/dist/components/core/Tooltip/Tooltip.types.d.ts +38 -1
  583. package/dist/components/core/Tree/Tree.animations.d.ts +1 -2
  584. package/dist/components/core/Tree/Tree.animations.js +20 -58
  585. package/dist/components/core/Tree/Tree.js +184 -12
  586. package/dist/components/core/index.d.ts +4 -2
  587. package/dist/components/core/index.js +29 -6
  588. package/dist/components/core/shared/interaction.animations.d.ts +51 -0
  589. package/dist/components/core/shared/interaction.animations.js +59 -0
  590. package/dist/components/data-display/DescriptionList/DescriptionList.js +24 -7
  591. package/dist/components/data-display/DescriptionList/DescriptionList.theme.js +10 -3
  592. package/dist/components/data-display/DescriptionList/DescriptionList.types.d.ts +49 -10
  593. package/dist/components/data-display/DescriptionList/index.d.ts +1 -1
  594. package/dist/components/data-display/Feed/Feed.animations.d.ts +40 -0
  595. package/dist/components/data-display/Feed/Feed.animations.js +26 -0
  596. package/dist/components/data-display/Feed/Feed.d.ts +5 -1
  597. package/dist/components/data-display/Feed/Feed.js +114 -55
  598. package/dist/components/data-display/Feed/Feed.theme.js +11 -13
  599. package/dist/components/data-display/Feed/Feed.types.d.ts +66 -34
  600. package/dist/components/data-display/Feed/index.d.ts +1 -1
  601. package/dist/components/data-display/GanttChart/GanttChart.d.ts +3 -4
  602. package/dist/components/data-display/GanttChart/GanttChart.js +36 -25
  603. package/dist/components/data-display/GanttChart/GanttChart.theme.js +19 -17
  604. package/dist/components/data-display/GanttChart/GanttChart.types.d.ts +21 -2
  605. package/dist/components/data-display/GanttChart/GanttChart.utils.js +1 -1
  606. package/dist/components/data-display/GanttChart/GanttChartContext.d.ts +5 -0
  607. package/dist/components/data-display/GanttChart/GanttChartContext.js +26 -0
  608. package/dist/components/data-display/GanttChart/GanttChartPanel.d.ts +1 -1
  609. package/dist/components/data-display/GanttChart/GanttChartPanel.js +6 -5
  610. package/dist/components/data-display/GanttChart/GanttDependencyArrows.js +9 -5
  611. package/dist/components/data-display/GanttChart/GanttGroupBar.js +2 -1
  612. package/dist/components/data-display/GanttChart/GanttMilestone.js +8 -7
  613. package/dist/components/data-display/GanttChart/GanttSplitter.js +17 -2
  614. package/dist/components/data-display/GanttChart/GanttTableGroupRow.js +5 -4
  615. package/dist/components/data-display/GanttChart/GanttTableHeader.js +2 -1
  616. package/dist/components/data-display/GanttChart/GanttTablePanel.js +3 -2
  617. package/dist/components/data-display/GanttChart/GanttTableTaskRow.js +4 -3
  618. package/dist/components/data-display/GanttChart/GanttTaskBar.js +43 -19
  619. package/dist/components/data-display/GanttChart/GanttTaskContextMenu.js +4 -3
  620. package/dist/components/data-display/GanttChart/GanttTimelineGrid.js +4 -2
  621. package/dist/components/data-display/GanttChart/GanttTimelineHeader.js +37 -12
  622. package/dist/components/data-display/GanttChart/GanttToolbar.js +6 -4
  623. package/dist/components/data-display/GanttChart/hooks/useGanttDates.js +1 -0
  624. package/dist/components/data-display/GanttChart/hooks/useGanttDrag.js +4 -2
  625. package/dist/components/data-display/GanttChart/hooks/useGanttLayout.js +1 -0
  626. package/dist/components/data-display/GanttChart/hooks/useGanttScrollSync.js +1 -0
  627. package/dist/components/data-display/GanttChart/index.d.ts +1 -1
  628. package/dist/components/data-display/KPI/KPI.js +15 -4
  629. package/dist/components/data-display/KPI/KPI.theme.js +10 -11
  630. package/dist/components/data-display/KPI/KPI.types.d.ts +5 -4
  631. package/dist/components/data-display/Metric/Metric.js +9 -9
  632. package/dist/components/data-display/Metric/Metric.theme.d.ts +3 -2
  633. package/dist/components/data-display/Metric/Metric.theme.js +55 -64
  634. package/dist/components/data-display/Metric/Metric.types.d.ts +22 -25
  635. package/dist/components/data-display/Table/Table.animations.js +17 -10
  636. package/dist/components/data-display/Table/Table.d.ts +2 -7
  637. package/dist/components/data-display/Table/Table.filterUtils.js +8 -1
  638. package/dist/components/data-display/Table/Table.js +28 -31
  639. package/dist/components/data-display/Table/Table.theme.js +47 -19
  640. package/dist/components/data-display/Table/Table.types.d.ts +37 -8
  641. package/dist/components/data-display/Table/TableActions.js +7 -6
  642. package/dist/components/data-display/Table/TableActionsMenu.js +3 -3
  643. package/dist/components/data-display/Table/TableBody.js +3 -2
  644. package/dist/components/data-display/Table/TableCell.d.ts +1 -1
  645. package/dist/components/data-display/Table/TableCell.js +13 -5
  646. package/dist/components/data-display/Table/TableColumnManager.js +5 -2
  647. package/dist/components/data-display/Table/TableContext.d.ts +11 -0
  648. package/dist/components/data-display/Table/TableContext.js +21 -0
  649. package/dist/components/data-display/Table/TableDeclarative.js +8 -9
  650. package/dist/components/data-display/Table/TableFilter.js +34 -26
  651. package/dist/components/data-display/Table/TableHeader.js +6 -2
  652. package/dist/components/data-display/Table/TablePagination.js +4 -7
  653. package/dist/components/data-display/Table/TableRow.d.ts +1 -1
  654. package/dist/components/data-display/Table/TableRow.js +14 -10
  655. package/dist/components/data-display/Table/TableSelectionHeader.js +7 -5
  656. package/dist/components/data-display/Table/hooks/useTableColumns.js +1 -0
  657. package/dist/components/data-display/Table/hooks/useTableExpansion.js +1 -0
  658. package/dist/components/data-display/Table/hooks/useTableFilter.js +1 -0
  659. package/dist/components/data-display/Table/hooks/useTablePagination.js +1 -0
  660. package/dist/components/data-display/Table/hooks/useTableSelection.js +1 -0
  661. package/dist/components/data-display/Table/index.d.ts +2 -2
  662. package/dist/components/data-display/Table/index.js +2 -2
  663. package/dist/components/data-display/Timeline/Timeline.animations.d.ts +0 -7
  664. package/dist/components/data-display/Timeline/Timeline.animations.js +2 -27
  665. package/dist/components/data-display/Timeline/Timeline.d.ts +2 -2
  666. package/dist/components/data-display/Timeline/Timeline.js +33 -17
  667. package/dist/components/data-display/Timeline/Timeline.theme.d.ts +2 -16
  668. package/dist/components/data-display/Timeline/Timeline.theme.js +14 -8
  669. package/dist/components/data-display/Timeline/Timeline.types.d.ts +70 -27
  670. package/dist/components/data-display/Timeline/Timeline.utils.d.ts +6 -0
  671. package/dist/components/data-display/Timeline/Timeline.utils.js +11 -0
  672. package/dist/components/data-display/Timeline/TimelineContent.js +5 -8
  673. package/dist/components/data-display/Timeline/TimelineContext.d.ts +3 -0
  674. package/dist/components/data-display/Timeline/TimelineContext.js +16 -0
  675. package/dist/components/data-display/Timeline/TimelineItem.js +21 -40
  676. package/dist/components/data-display/Timeline/TimelineMarker.js +14 -11
  677. package/dist/components/data-display/Timeline/index.d.ts +2 -2
  678. package/dist/components/effects/3d/index.d.ts +4 -0
  679. package/dist/components/effects/3d/index.js +2 -0
  680. package/dist/components/effects/AIOrb/AIOrb.d.ts +1 -0
  681. package/dist/components/effects/AIOrb/AIOrb.js +3 -2
  682. package/dist/components/effects/AIOrb/AIOrb.types.d.ts +1 -0
  683. package/dist/components/effects/AIOrb/hooks/index.d.ts +2 -0
  684. package/dist/components/effects/AIOrb/hooks/useOrbState.d.ts +20 -0
  685. package/dist/components/effects/AIOrb/hooks/useOrbState.js +28 -0
  686. package/dist/components/effects/AIOrb/index.d.ts +2 -2
  687. package/dist/components/effects/AIOrb/variants/Aura/Aura.d.ts +3 -0
  688. package/dist/components/effects/AIOrb/variants/Aura/Aura.js +84 -0
  689. package/dist/components/effects/AIOrb/variants/Aura/Aura.shaders.d.ts +28 -0
  690. package/dist/components/effects/AIOrb/variants/Aura/Aura.shaders.js +191 -0
  691. package/dist/components/effects/AIOrb/variants/Aura/Aura.types.d.ts +53 -0
  692. package/dist/components/effects/AIOrb/variants/Aura/index.d.ts +2 -0
  693. package/dist/components/effects/AIOrb/variants/DotSphere/DotSphere.d.ts +7 -0
  694. package/dist/components/effects/AIOrb/variants/DotSphere/DotSphere.impl.d.ts +3 -0
  695. package/dist/components/effects/AIOrb/variants/DotSphere/DotSphere.impl.js +176 -0
  696. package/dist/components/effects/AIOrb/variants/DotSphere/DotSphere.js +29 -130
  697. package/dist/components/effects/AIOrb/variants/DotSphere/DotSphere.types.d.ts +6 -0
  698. package/dist/components/effects/AIOrb/variants/Liquid/Liquid.d.ts +8 -0
  699. package/dist/components/effects/AIOrb/variants/Liquid/Liquid.impl.d.ts +3 -0
  700. package/dist/components/effects/AIOrb/variants/Liquid/Liquid.impl.js +140 -0
  701. package/dist/components/effects/AIOrb/variants/Liquid/Liquid.js +29 -101
  702. package/dist/components/effects/AIOrb/variants/Liquid/Liquid.types.d.ts +6 -0
  703. package/dist/components/effects/AIOrb/variants/index.d.ts +2 -0
  704. package/dist/components/effects/Animated/Animated.animations.js +29 -10
  705. package/dist/components/effects/Animated/Animated.d.ts +4 -4
  706. package/dist/components/effects/Animated/Animated.js +9 -9
  707. package/dist/components/effects/Animated/AnimatedContext.d.ts +3 -0
  708. package/dist/components/effects/Animated/AnimatedContext.js +12 -0
  709. package/dist/components/effects/Animated/AnimatedItem.d.ts +1 -1
  710. package/dist/components/effects/Animated/AnimatedItem.js +7 -5
  711. package/dist/components/effects/Aurora/Aurora.d.ts +6 -17
  712. package/dist/components/effects/Aurora/Aurora.js +332 -105
  713. package/dist/components/effects/Aurora/Aurora.types.d.ts +6 -0
  714. package/dist/components/effects/ColorPanels/ColorPanels.d.ts +8 -0
  715. package/dist/components/effects/ColorPanels/ColorPanels.js +66 -0
  716. package/dist/components/effects/ColorPanels/ColorPanels.shaders.d.ts +12 -0
  717. package/dist/components/effects/ColorPanels/ColorPanels.shaders.js +218 -0
  718. package/dist/components/effects/ColorPanels/ColorPanels.types.d.ts +29 -0
  719. package/dist/components/effects/ColorPanels/ColorPanels.types.js +3 -0
  720. package/dist/components/effects/ColorPanels/index.d.ts +2 -0
  721. package/dist/components/effects/CustomCursor/CustomCursor.d.ts +4 -4
  722. package/dist/components/effects/CustomCursor/CustomCursor.js +55 -55
  723. package/dist/components/effects/CustomCursor/CustomCursor.theme.js +2 -2
  724. package/dist/components/effects/CustomCursor/CustomCursor.types.d.ts +5 -4
  725. package/dist/components/effects/Dithering/Dithering.d.ts +10 -0
  726. package/dist/components/effects/Dithering/Dithering.js +62 -0
  727. package/dist/components/effects/Dithering/Dithering.shaders.d.ts +11 -0
  728. package/dist/components/effects/Dithering/Dithering.shaders.js +166 -0
  729. package/dist/components/effects/Dithering/Dithering.types.d.ts +31 -0
  730. package/dist/components/effects/Dithering/Dithering.types.js +17 -0
  731. package/dist/components/effects/Dithering/index.d.ts +3 -0
  732. package/dist/components/effects/DotPattern/DotPattern.js +8 -1
  733. package/dist/components/effects/DotPattern/DotPattern.types.d.ts +4 -2
  734. package/dist/components/effects/FlutedGlass/FlutedGlass.d.ts +9 -0
  735. package/dist/components/effects/FlutedGlass/FlutedGlass.js +80 -0
  736. package/dist/components/effects/FlutedGlass/FlutedGlass.shaders.d.ts +12 -0
  737. package/dist/components/effects/FlutedGlass/FlutedGlass.shaders.js +335 -0
  738. package/dist/components/effects/FlutedGlass/FlutedGlass.types.d.ts +61 -0
  739. package/dist/components/effects/FlutedGlass/FlutedGlass.types.js +16 -0
  740. package/dist/components/effects/FlutedGlass/index.d.ts +3 -0
  741. package/dist/components/effects/GemSmoke/GemSmoke.d.ts +8 -0
  742. package/dist/components/effects/GemSmoke/GemSmoke.js +70 -0
  743. package/dist/components/effects/GemSmoke/GemSmoke.shaders.d.ts +18 -0
  744. package/dist/components/effects/GemSmoke/GemSmoke.shaders.js +181 -0
  745. package/dist/components/effects/GemSmoke/GemSmoke.types.d.ts +37 -0
  746. package/dist/components/effects/GemSmoke/GemSmoke.types.js +10 -0
  747. package/dist/components/effects/GemSmoke/index.d.ts +3 -0
  748. package/dist/components/effects/GlassEffect/GlassEffect.js +1 -1
  749. package/dist/components/effects/GlassSurface/GlassSurface.d.ts +1 -1
  750. package/dist/components/effects/GlassSurface/GlassSurface.js +40 -34
  751. package/dist/components/effects/GlassSurface/GlassSurface.types.d.ts +14 -0
  752. package/dist/components/effects/GodRays/GodRays.d.ts +8 -0
  753. package/dist/components/effects/GodRays/GodRays.js +68 -0
  754. package/dist/components/effects/GodRays/GodRays.shaders.d.ts +10 -0
  755. package/dist/components/effects/GodRays/GodRays.shaders.js +128 -0
  756. package/dist/components/effects/GodRays/GodRays.types.d.ts +25 -0
  757. package/dist/components/effects/GodRays/GodRays.types.js +3 -0
  758. package/dist/components/effects/GodRays/index.d.ts +2 -0
  759. package/dist/components/effects/GradientMesh/GradientMesh.d.ts +9 -0
  760. package/dist/components/effects/GradientMesh/GradientMesh.js +56 -0
  761. package/dist/components/effects/GradientMesh/GradientMesh.shaders.d.ts +15 -0
  762. package/dist/components/effects/GradientMesh/GradientMesh.shaders.js +127 -0
  763. package/dist/components/effects/GradientMesh/GradientMesh.types.d.ts +17 -0
  764. package/dist/components/effects/GradientMesh/GradientMesh.types.js +3 -0
  765. package/dist/components/effects/GradientMesh/index.d.ts +2 -0
  766. package/dist/components/effects/GrainGradient/GrainGradient.d.ts +9 -0
  767. package/dist/components/effects/GrainGradient/GrainGradient.js +62 -0
  768. package/dist/components/effects/GrainGradient/GrainGradient.shaders.d.ts +17 -0
  769. package/dist/components/effects/GrainGradient/GrainGradient.shaders.js +168 -0
  770. package/dist/components/effects/GrainGradient/GrainGradient.types.d.ts +26 -0
  771. package/dist/components/effects/GrainGradient/GrainGradient.types.js +9 -0
  772. package/dist/components/effects/GrainGradient/index.d.ts +3 -0
  773. package/dist/components/effects/GridPattern/GridPattern.js +1 -0
  774. package/dist/components/effects/HalftoneCmyk/HalftoneCmyk.d.ts +10 -0
  775. package/dist/components/effects/HalftoneCmyk/HalftoneCmyk.js +78 -0
  776. package/dist/components/effects/HalftoneCmyk/HalftoneCmyk.shaders.d.ts +22 -0
  777. package/dist/components/effects/HalftoneCmyk/HalftoneCmyk.shaders.js +239 -0
  778. package/dist/components/effects/HalftoneCmyk/HalftoneCmyk.types.d.ts +52 -0
  779. package/dist/components/effects/HalftoneCmyk/index.d.ts +2 -0
  780. package/dist/components/effects/HalftoneDots/HalftoneDots.d.ts +9 -0
  781. package/dist/components/effects/HalftoneDots/HalftoneDots.js +68 -0
  782. package/dist/components/effects/HalftoneDots/HalftoneDots.shaders.d.ts +13 -0
  783. package/dist/components/effects/HalftoneDots/HalftoneDots.shaders.js +296 -0
  784. package/dist/components/effects/HalftoneDots/HalftoneDots.types.d.ts +43 -0
  785. package/dist/components/effects/HalftoneDots/HalftoneDots.types.js +12 -0
  786. package/dist/components/effects/HalftoneDots/index.d.ts +3 -0
  787. package/dist/components/effects/ImageDithering/ImageDithering.d.ts +9 -0
  788. package/dist/components/effects/ImageDithering/ImageDithering.js +68 -0
  789. package/dist/components/effects/ImageDithering/ImageDithering.shaders.d.ts +12 -0
  790. package/dist/components/effects/ImageDithering/ImageDithering.shaders.js +117 -0
  791. package/dist/components/effects/ImageDithering/ImageDithering.types.d.ts +30 -0
  792. package/dist/components/effects/ImageDithering/ImageDithering.types.js +8 -0
  793. package/dist/components/effects/ImageDithering/index.d.ts +3 -0
  794. package/dist/components/effects/InteractiveCharacters/InteractiveCharacters.animations.d.ts +39 -0
  795. package/dist/components/effects/InteractiveCharacters/InteractiveCharacters.animations.js +98 -0
  796. package/dist/components/effects/InteractiveCharacters/InteractiveCharacters.d.ts +3 -0
  797. package/dist/components/effects/InteractiveCharacters/InteractiveCharacters.js +105 -0
  798. package/dist/components/effects/InteractiveCharacters/InteractiveCharacters.types.d.ts +30 -0
  799. package/dist/components/effects/InteractiveCharacters/characters/BlobCharacter.d.ts +3 -0
  800. package/dist/components/effects/InteractiveCharacters/characters/BlobCharacter.js +46 -0
  801. package/dist/components/effects/InteractiveCharacters/characters/SmallCharacter.d.ts +3 -0
  802. package/dist/components/effects/InteractiveCharacters/characters/SmallCharacter.js +46 -0
  803. package/dist/components/effects/InteractiveCharacters/characters/TallCharacter.d.ts +3 -0
  804. package/dist/components/effects/InteractiveCharacters/characters/TallCharacter.js +48 -0
  805. package/dist/components/effects/InteractiveCharacters/hooks/useBlink.d.ts +14 -0
  806. package/dist/components/effects/InteractiveCharacters/hooks/useBlink.js +42 -0
  807. package/dist/components/effects/InteractiveCharacters/hooks/useIdleAnimation.d.ts +25 -0
  808. package/dist/components/effects/InteractiveCharacters/hooks/useIdleAnimation.js +85 -0
  809. package/dist/components/effects/InteractiveCharacters/hooks/useMouseTracking.d.ts +18 -0
  810. package/dist/components/effects/InteractiveCharacters/hooks/useMouseTracking.js +36 -0
  811. package/dist/components/effects/InteractiveCharacters/index.d.ts +2 -0
  812. package/dist/components/effects/LiquidMetal/LiquidMetal.d.ts +9 -0
  813. package/dist/components/effects/LiquidMetal/LiquidMetal.js +61 -0
  814. package/dist/components/effects/LiquidMetal/LiquidMetal.shaders.d.ts +19 -0
  815. package/dist/components/effects/LiquidMetal/LiquidMetal.shaders.js +202 -0
  816. package/dist/components/effects/LiquidMetal/LiquidMetal.types.d.ts +34 -0
  817. package/dist/components/effects/LiquidMetal/LiquidMetal.types.js +9 -0
  818. package/dist/components/effects/LiquidMetal/index.d.ts +3 -0
  819. package/dist/components/effects/MagneticElement/MagneticElement.js +1 -0
  820. package/dist/components/effects/MeshGradient/MeshGradient.d.ts +25 -0
  821. package/dist/components/effects/MeshGradient/MeshGradient.js +47 -0
  822. package/dist/components/effects/MeshGradient/MeshGradient.types.d.ts +40 -0
  823. package/dist/components/effects/MeshGradient/MeshGradient.utils.d.ts +83 -0
  824. package/dist/components/effects/MeshGradient/MeshGradient.utils.js +112 -0
  825. package/dist/components/effects/MeshGradient/index.d.ts +4 -0
  826. package/dist/components/effects/Metaballs/Metaballs.d.ts +8 -0
  827. package/dist/components/effects/Metaballs/Metaballs.js +59 -0
  828. package/dist/components/effects/Metaballs/Metaballs.shaders.d.ts +10 -0
  829. package/dist/components/effects/Metaballs/Metaballs.shaders.js +102 -0
  830. package/dist/components/effects/Metaballs/Metaballs.types.d.ts +16 -0
  831. package/dist/components/effects/Metaballs/Metaballs.types.js +3 -0
  832. package/dist/components/effects/Metaballs/index.d.ts +2 -0
  833. package/dist/components/effects/Neumorphic/InsetCircleButton.d.ts +10 -0
  834. package/dist/components/effects/Neumorphic/InsetCircleButton.js +11 -0
  835. package/dist/components/effects/Neumorphic/InsetPill.d.ts +8 -0
  836. package/dist/components/effects/Neumorphic/InsetPill.js +8 -0
  837. package/dist/components/effects/Neumorphic/index.d.ts +4 -0
  838. package/dist/components/effects/NoiseOverlay/NoiseOverlay.d.ts +1 -1
  839. package/dist/components/effects/NoiseOverlay/NoiseOverlay.js +5 -4
  840. package/dist/components/effects/Overlay/Overlay.js +52 -25
  841. package/dist/components/effects/Overlay/Overlay.theme.js +1 -2
  842. package/dist/components/effects/PaperTexture/PaperTexture.d.ts +9 -0
  843. package/dist/components/effects/PaperTexture/PaperTexture.js +61 -0
  844. package/dist/components/effects/PaperTexture/PaperTexture.shaders.d.ts +22 -0
  845. package/dist/components/effects/PaperTexture/PaperTexture.shaders.js +145 -0
  846. package/dist/components/effects/PaperTexture/PaperTexture.types.d.ts +19 -0
  847. package/dist/components/effects/PaperTexture/index.d.ts +2 -0
  848. package/dist/components/effects/Particles/Particles.js +1 -0
  849. package/dist/components/effects/Particles/Particles.scene.js +1 -0
  850. package/dist/components/effects/Preloader/Preloader.animations.d.ts +23 -0
  851. package/dist/components/effects/Preloader/Preloader.animations.js +150 -0
  852. package/dist/components/effects/Preloader/Preloader.d.ts +3 -0
  853. package/dist/components/effects/Preloader/Preloader.js +120 -0
  854. package/dist/components/effects/Preloader/Preloader.types.d.ts +63 -0
  855. package/dist/components/effects/Preloader/index.d.ts +2 -0
  856. package/dist/components/effects/ProgressiveBlur/ProgressiveBlur.js +26 -14
  857. package/dist/components/effects/ProgressiveBlur/ProgressiveBlur.types.d.ts +2 -0
  858. package/dist/components/effects/PulsingBorder/PulsingBorder.d.ts +27 -0
  859. package/dist/components/effects/PulsingBorder/PulsingBorder.js +174 -0
  860. package/dist/components/effects/PulsingBorder/PulsingBorder.shaders.d.ts +14 -0
  861. package/dist/components/effects/PulsingBorder/PulsingBorder.shaders.js +258 -0
  862. package/dist/components/effects/PulsingBorder/PulsingBorder.types.d.ts +75 -0
  863. package/dist/components/effects/PulsingBorder/PulsingBorder.types.js +3 -0
  864. package/dist/components/effects/PulsingBorder/index.d.ts +2 -0
  865. package/dist/components/effects/ScrollReveal/ScrollReveal.js +1 -0
  866. package/dist/components/effects/Shimmer/Shimmer.d.ts +21 -0
  867. package/dist/components/effects/Shimmer/Shimmer.js +44 -0
  868. package/dist/components/effects/Shimmer/Shimmer.types.d.ts +49 -0
  869. package/dist/components/effects/Shimmer/index.d.ts +2 -0
  870. package/dist/components/effects/SmokeRing/SmokeRing.d.ts +8 -0
  871. package/dist/components/effects/SmokeRing/SmokeRing.js +62 -0
  872. package/dist/components/effects/SmokeRing/SmokeRing.shaders.d.ts +14 -0
  873. package/dist/components/effects/SmokeRing/SmokeRing.shaders.js +130 -0
  874. package/dist/components/effects/SmokeRing/SmokeRing.types.d.ts +22 -0
  875. package/dist/components/effects/SmokeRing/SmokeRing.types.js +3 -0
  876. package/dist/components/effects/SmokeRing/index.d.ts +2 -0
  877. package/dist/components/effects/StaticGradientMesh/StaticGradientMesh.d.ts +9 -0
  878. package/dist/components/effects/StaticGradientMesh/StaticGradientMesh.js +59 -0
  879. package/dist/components/effects/StaticGradientMesh/StaticGradientMesh.shaders.d.ts +14 -0
  880. package/dist/components/effects/StaticGradientMesh/StaticGradientMesh.shaders.js +129 -0
  881. package/dist/components/effects/StaticGradientMesh/StaticGradientMesh.types.d.ts +23 -0
  882. package/dist/components/effects/StaticGradientMesh/StaticGradientMesh.types.js +3 -0
  883. package/dist/components/effects/StaticGradientMesh/index.d.ts +2 -0
  884. package/dist/components/effects/StaticRadialGradient/StaticRadialGradient.d.ts +9 -0
  885. package/dist/components/effects/StaticRadialGradient/StaticRadialGradient.js +66 -0
  886. package/dist/components/effects/StaticRadialGradient/StaticRadialGradient.shaders.d.ts +13 -0
  887. package/dist/components/effects/StaticRadialGradient/StaticRadialGradient.shaders.js +169 -0
  888. package/dist/components/effects/StaticRadialGradient/StaticRadialGradient.types.d.ts +29 -0
  889. package/dist/components/effects/StaticRadialGradient/StaticRadialGradient.types.js +3 -0
  890. package/dist/components/effects/StaticRadialGradient/index.d.ts +2 -0
  891. package/dist/components/effects/StripePattern/StripePattern.d.ts +18 -0
  892. package/dist/components/effects/StripePattern/StripePattern.js +55 -0
  893. package/dist/components/effects/StripePattern/StripePattern.types.d.ts +53 -0
  894. package/dist/components/effects/StripePattern/index.d.ts +2 -0
  895. package/dist/components/effects/TiltCard/TiltCard.d.ts +12 -0
  896. package/dist/components/effects/TiltCard/TiltCard.glow.d.ts +28 -0
  897. package/dist/components/effects/TiltCard/TiltCard.glow.js +115 -0
  898. package/dist/components/effects/TiltCard/TiltCard.js +178 -0
  899. package/dist/components/effects/{SpotlightBorder/SpotlightBorder.shaders.d.ts → TiltCard/TiltCard.shaders.d.ts} +1 -1
  900. package/dist/components/effects/{SpotlightBorder/SpotlightBorder.shaders.js → TiltCard/TiltCard.shaders.js} +1 -1
  901. package/dist/components/effects/TiltCard/TiltCard.types.d.ts +88 -0
  902. package/dist/components/effects/TiltCard/index.d.ts +2 -0
  903. package/dist/components/effects/Water/Water.d.ts +9 -0
  904. package/dist/components/effects/Water/Water.js +65 -0
  905. package/dist/components/effects/Water/Water.shaders.d.ts +11 -0
  906. package/dist/components/effects/Water/Water.shaders.js +123 -0
  907. package/dist/components/effects/Water/Water.types.d.ts +25 -0
  908. package/dist/components/effects/Water/index.d.ts +2 -0
  909. package/dist/components/effects/index.d.ts +57 -16
  910. package/dist/components/effects/index.js +30 -8
  911. package/dist/components/effects/shared/ShaderCanvas/ShaderCanvas.d.ts +13 -0
  912. package/dist/components/effects/shared/ShaderCanvas/ShaderCanvas.js +255 -0
  913. package/dist/components/effects/shared/ShaderCanvas/ShaderCanvas.types.d.ts +18 -0
  914. package/dist/components/effects/shared/ShaderCanvas/index.d.ts +2 -0
  915. package/dist/components/effects/shared/bayerMatrices.glsl.d.ts +10 -0
  916. package/dist/components/effects/shared/bayerMatrices.glsl.js +44 -0
  917. package/dist/components/effects/shared/imageUV.glsl.d.ts +12 -0
  918. package/dist/components/effects/shared/imageUV.glsl.js +26 -0
  919. package/dist/components/effects/shared/index.d.ts +7 -0
  920. package/dist/components/effects/shared/resolveShaderColor.d.ts +13 -0
  921. package/dist/components/effects/shared/resolveShaderColor.js +62 -0
  922. package/dist/components/effects/shared/resolveShaderColor.test.d.ts +1 -0
  923. package/dist/components/effects/shared/shaderNoise.glsl.d.ts +34 -0
  924. package/dist/components/effects/shared/shaderNoise.glsl.js +84 -0
  925. package/dist/components/forms/Checkbox/Checkbox.animations.d.ts +14 -0
  926. package/dist/components/forms/Checkbox/Checkbox.animations.js +54 -0
  927. package/dist/components/forms/Checkbox/Checkbox.d.ts +3 -4
  928. package/dist/components/forms/Checkbox/Checkbox.js +55 -12
  929. package/dist/components/forms/Checkbox/Checkbox.theme.js +14 -8
  930. package/dist/components/forms/Checkbox/Checkbox.types.d.ts +36 -8
  931. package/dist/components/forms/Checkbox/CheckboxContext.d.ts +14 -0
  932. package/dist/components/forms/Checkbox/CheckboxContext.js +13 -0
  933. package/dist/components/forms/Checkbox/CheckboxGroup.d.ts +3 -0
  934. package/dist/components/forms/Checkbox/CheckboxGroup.js +48 -0
  935. package/dist/components/forms/Checkbox/index.d.ts +1 -1
  936. package/dist/components/forms/ColorPicker/ColorPicker.d.ts +6 -10
  937. package/dist/components/forms/ColorPicker/ColorPicker.js +150 -27
  938. package/dist/components/forms/ColorPicker/ColorPicker.theme.js +8 -5
  939. package/dist/components/forms/ColorPicker/ColorPicker.types.d.ts +112 -5
  940. package/dist/components/forms/ColorPicker/ColorPicker2DCanvas.js +44 -6
  941. package/dist/components/forms/ColorPicker/ColorPickerBody.d.ts +7 -0
  942. package/dist/components/forms/ColorPicker/{ColorPickerContent.js → ColorPickerBody.js} +17 -14
  943. package/dist/components/forms/ColorPicker/ColorPickerContext.d.ts +4 -0
  944. package/dist/components/forms/ColorPicker/ColorPickerContext.js +13 -0
  945. package/dist/components/forms/ColorPicker/ColorPickerEyeDropper.js +7 -6
  946. package/dist/components/forms/ColorPicker/ColorPickerFormatSelector.js +2 -1
  947. package/dist/components/forms/ColorPicker/ColorPickerGradient.d.ts +7 -0
  948. package/dist/components/forms/ColorPicker/ColorPickerGradient.js +187 -0
  949. package/dist/components/forms/ColorPicker/ColorPickerHeader.d.ts +14 -0
  950. package/dist/components/forms/ColorPicker/ColorPickerHeader.js +32 -0
  951. package/dist/components/forms/ColorPicker/ColorPickerImage.d.ts +6 -0
  952. package/dist/components/forms/ColorPicker/ColorPickerImage.js +155 -0
  953. package/dist/components/forms/ColorPicker/ColorPickerInput.d.ts +0 -4
  954. package/dist/components/forms/ColorPicker/ColorPickerInput.js +54 -61
  955. package/dist/components/forms/ColorPicker/ColorPickerPresets.js +14 -12
  956. package/dist/components/forms/ColorPicker/ColorPickerSavedColors.d.ts +3 -0
  957. package/dist/components/forms/ColorPicker/ColorPickerSavedColors.js +70 -0
  958. package/dist/components/forms/ColorPicker/ColorPickerSliders.d.ts +1 -2
  959. package/dist/components/forms/ColorPicker/ColorPickerSliders.js +85 -23
  960. package/dist/components/forms/ColorPicker/ColorPickerSwatch.d.ts +1 -1
  961. package/dist/components/forms/ColorPicker/ColorPickerSwatch.js +11 -9
  962. package/dist/components/forms/ColorPicker/ColorPickerTrigger.js +22 -3
  963. package/dist/components/forms/ColorPicker/index.d.ts +9 -3
  964. package/dist/components/forms/Combobox/Combobox.js +92 -71
  965. package/dist/components/forms/Combobox/Combobox.theme.js +4 -6
  966. package/dist/components/forms/Combobox/Combobox.types.d.ts +12 -2
  967. package/dist/components/forms/DatePicker/DatePicker.animations.js +17 -25
  968. package/dist/components/forms/DatePicker/DatePicker.d.ts +6 -26
  969. package/dist/components/forms/DatePicker/DatePicker.js +10 -8
  970. package/dist/components/forms/DatePicker/DatePicker.theme.js +13 -20
  971. package/dist/components/forms/DatePicker/DatePicker.types.d.ts +28 -6
  972. package/dist/components/forms/DatePicker/DatePickerBody.d.ts +7 -0
  973. package/dist/components/forms/DatePicker/{DatePickerContent.js → DatePickerBody.js} +32 -54
  974. package/dist/components/forms/DatePicker/DatePickerContext.d.ts +29 -0
  975. package/dist/components/forms/DatePicker/DatePickerContext.js +6 -0
  976. package/dist/components/forms/DatePicker/DatePickerPresets.js +2 -1
  977. package/dist/components/forms/DatePicker/DatePickerTrigger.js +6 -5
  978. package/dist/components/forms/DatePicker/index.d.ts +2 -2
  979. package/dist/components/forms/DateRangePicker/DateRangePicker.animations.d.ts +1 -0
  980. package/dist/components/forms/DateRangePicker/DateRangePicker.d.ts +17 -0
  981. package/dist/components/forms/DateRangePicker/DateRangePicker.js +121 -0
  982. package/dist/components/forms/DateRangePicker/DateRangePicker.theme.d.ts +5 -0
  983. package/dist/components/forms/DateRangePicker/DateRangePicker.theme.js +45 -0
  984. package/dist/components/forms/DateRangePicker/DateRangePicker.types.d.ts +177 -0
  985. package/dist/components/forms/DateRangePicker/DateRangePickerBody.d.ts +6 -0
  986. package/dist/components/forms/DateRangePicker/DateRangePickerBody.js +186 -0
  987. package/dist/components/forms/DateRangePicker/DateRangePickerContext.d.ts +24 -0
  988. package/dist/components/forms/DateRangePicker/DateRangePickerContext.js +5 -0
  989. package/dist/components/forms/DateRangePicker/DateRangePickerPresets.d.ts +6 -0
  990. package/dist/components/forms/DateRangePicker/DateRangePickerPresets.js +42 -0
  991. package/dist/components/forms/DateRangePicker/DateRangePickerTrigger.d.ts +6 -0
  992. package/dist/components/forms/DateRangePicker/DateRangePickerTrigger.js +33 -0
  993. package/dist/components/forms/DateRangePicker/dateRangePresets.d.ts +5 -0
  994. package/dist/components/forms/DateRangePicker/dateRangePresets.js +59 -0
  995. package/dist/components/forms/DateRangePicker/index.d.ts +4 -0
  996. package/dist/components/forms/FileUpload/FileUpload.animations.d.ts +29 -0
  997. package/dist/components/forms/FileUpload/FileUpload.animations.js +19 -0
  998. package/dist/components/forms/FileUpload/FileUpload.js +96 -133
  999. package/dist/components/forms/FileUpload/FileUpload.theme.d.ts +2 -10
  1000. package/dist/components/forms/FileUpload/FileUpload.theme.js +20 -30
  1001. package/dist/components/forms/FileUpload/FileUpload.types.d.ts +41 -10
  1002. package/dist/components/forms/FileUpload/FileUploadProgress.animations.d.ts +36 -0
  1003. package/dist/components/forms/FileUpload/FileUploadProgress.animations.js +22 -0
  1004. package/dist/components/forms/FileUpload/FileUploadProgress.d.ts +3 -0
  1005. package/dist/components/forms/FileUpload/FileUploadProgress.js +119 -0
  1006. package/dist/components/forms/FileUpload/FileUploadProgress.theme.d.ts +19 -0
  1007. package/dist/components/forms/FileUpload/FileUploadProgress.theme.js +27 -0
  1008. package/dist/components/forms/FileUpload/FileUploadProgress.types.d.ts +33 -0
  1009. package/dist/components/forms/FileUpload/index.d.ts +3 -0
  1010. package/dist/components/forms/FormLabel/FormLabel.js +2 -2
  1011. package/dist/components/forms/FormLabel/FormLabel.theme.js +1 -1
  1012. package/dist/components/forms/Input/Input.js +17 -17
  1013. package/dist/components/forms/Input/Input.theme.js +42 -31
  1014. package/dist/components/forms/Input/Input.types.d.ts +20 -4
  1015. package/dist/components/forms/Input/index.d.ts +1 -0
  1016. package/dist/components/forms/Input/inputMasks.d.ts +24 -0
  1017. package/dist/components/forms/Input/inputMasks.js +61 -5
  1018. package/dist/components/forms/InputAddress/InputAddress.d.ts +6 -1
  1019. package/dist/components/forms/InputAddress/InputAddress.js +108 -20
  1020. package/dist/components/forms/InputAddress/InputAddress.theme.js +5 -5
  1021. package/dist/components/forms/InputAddress/InputAddress.types.d.ts +8 -2
  1022. package/dist/components/forms/InputAddress/index.d.ts +1 -1
  1023. package/dist/components/forms/InputCounter/InputCounter.d.ts +1 -1
  1024. package/dist/components/forms/InputCounter/InputCounter.js +81 -55
  1025. package/dist/components/forms/InputCounter/InputCounter.theme.js +1 -1
  1026. package/dist/components/forms/InputCounter/InputCounter.types.d.ts +17 -3
  1027. package/dist/components/forms/InputCreditCard/InputCreditCard.d.ts +1 -1
  1028. package/dist/components/forms/InputCreditCard/InputCreditCard.js +33 -9
  1029. package/dist/components/forms/InputCreditCard/InputCreditCard.theme.js +5 -5
  1030. package/dist/components/forms/InputCreditCard/InputCreditCard.types.d.ts +9 -0
  1031. package/dist/components/forms/InputCreditCard/index.d.ts +1 -0
  1032. package/dist/components/forms/InputDate/InputDate.js +1 -0
  1033. package/dist/components/forms/InputOTP/InputOTP.d.ts +3 -12
  1034. package/dist/components/forms/InputOTP/InputOTP.js +160 -150
  1035. package/dist/components/forms/InputOTP/InputOTP.theme.d.ts +5 -1
  1036. package/dist/components/forms/InputOTP/InputOTP.theme.js +40 -5
  1037. package/dist/components/forms/InputOTP/InputOTP.types.d.ts +72 -6
  1038. package/dist/components/forms/InputOTP/index.d.ts +1 -1
  1039. package/dist/components/forms/InputTag/InputTag.js +71 -54
  1040. package/dist/components/forms/InputTag/InputTag.theme.js +1 -1
  1041. package/dist/components/forms/InputTag/InputTag.types.d.ts +10 -2
  1042. package/dist/components/forms/Mention/Mention.d.ts +1 -1
  1043. package/dist/components/forms/Mention/Mention.js +505 -199
  1044. package/dist/components/forms/Mention/Mention.theme.js +19 -28
  1045. package/dist/components/forms/Mention/Mention.types.d.ts +75 -18
  1046. package/dist/components/forms/Mention/Mention.utils.d.ts +42 -0
  1047. package/dist/components/forms/Mention/Mention.utils.js +314 -0
  1048. package/dist/components/forms/Mention/index.d.ts +1 -1
  1049. package/dist/components/forms/Radio/Radio.animations.d.ts +10 -0
  1050. package/dist/components/forms/Radio/Radio.animations.js +38 -0
  1051. package/dist/components/forms/Radio/Radio.d.ts +3 -4
  1052. package/dist/components/forms/Radio/Radio.js +46 -5
  1053. package/dist/components/forms/Radio/Radio.theme.js +25 -13
  1054. package/dist/components/forms/Radio/Radio.types.d.ts +39 -10
  1055. package/dist/components/forms/Radio/RadioContext.d.ts +14 -0
  1056. package/dist/components/forms/Radio/RadioContext.js +13 -0
  1057. package/dist/components/forms/Radio/RadioGroup.d.ts +3 -0
  1058. package/dist/components/forms/Radio/RadioGroup.js +44 -0
  1059. package/dist/components/forms/Radio/index.d.ts +1 -1
  1060. package/dist/components/forms/RichTextEditor/RichTextEditor.animations.js +1 -0
  1061. package/dist/components/forms/RichTextEditor/RichTextEditor.d.ts +18 -0
  1062. package/dist/components/forms/RichTextEditor/RichTextEditor.js +1268 -255
  1063. package/dist/components/forms/RichTextEditor/RichTextEditor.theme.d.ts +53 -1
  1064. package/dist/components/forms/RichTextEditor/RichTextEditor.theme.js +100 -25
  1065. package/dist/components/forms/RichTextEditor/RichTextEditor.types.d.ts +69 -5
  1066. package/dist/components/forms/RichTextEditor/index.d.ts +2 -2
  1067. package/dist/components/forms/Select/Select.animations.js +17 -25
  1068. package/dist/components/forms/Select/Select.d.ts +11 -3
  1069. package/dist/components/forms/Select/Select.js +84 -79
  1070. package/dist/components/forms/Select/Select.theme.js +7 -7
  1071. package/dist/components/forms/Select/Select.types.d.ts +53 -9
  1072. package/dist/components/forms/Select/useSelectState.js +7 -0
  1073. package/dist/components/forms/SelectableCard/SelectableCard.animations.d.ts +1 -2
  1074. package/dist/components/forms/SelectableCard/SelectableCard.animations.js +6 -7
  1075. package/dist/components/forms/SelectableCard/SelectableCard.d.ts +1 -1
  1076. package/dist/components/forms/SelectableCard/SelectableCard.js +43 -27
  1077. package/dist/components/forms/SelectableCard/SelectableCard.theme.js +15 -25
  1078. package/dist/components/forms/SelectableCard/SelectableCard.types.d.ts +16 -4
  1079. package/dist/components/forms/SelectableCard/SelectableCardContext.d.ts +1 -0
  1080. package/dist/components/forms/SelectableCard/SelectableCardContext.js +5 -7
  1081. package/dist/components/forms/SelectableCard/SelectableCardGroup.js +32 -10
  1082. package/dist/components/forms/SelectableCard/index.d.ts +1 -1
  1083. package/dist/components/forms/Signature/Signature.js +13 -3
  1084. package/dist/components/forms/Signature/Signature.types.d.ts +9 -3
  1085. package/dist/components/forms/Slider/Slider.js +42 -7
  1086. package/dist/components/forms/Slider/Slider.theme.js +11 -5
  1087. package/dist/components/forms/Slider/Slider.types.d.ts +2 -2
  1088. package/dist/components/forms/Switch/Switch.js +41 -21
  1089. package/dist/components/forms/Switch/Switch.theme.d.ts +36 -6
  1090. package/dist/components/forms/Switch/Switch.theme.js +45 -4
  1091. package/dist/components/forms/Switch/Switch.types.d.ts +36 -8
  1092. package/dist/components/forms/Textarea/Textarea.js +12 -3
  1093. package/dist/components/forms/Textarea/Textarea.types.d.ts +12 -4
  1094. package/dist/components/forms/TimePicker/TimePicker.d.ts +2 -12
  1095. package/dist/components/forms/TimePicker/TimePicker.js +8 -5
  1096. package/dist/components/forms/TimePicker/TimePicker.theme.js +11 -14
  1097. package/dist/components/forms/TimePicker/TimePicker.types.d.ts +21 -2
  1098. package/dist/components/forms/TimePicker/TimePickerContent.js +13 -112
  1099. package/dist/components/forms/TimePicker/TimePickerContext.d.ts +15 -0
  1100. package/dist/components/forms/TimePicker/TimePickerContext.js +6 -0
  1101. package/dist/components/forms/TimePicker/TimePickerTrigger.js +22 -8
  1102. package/dist/components/forms/TimePicker/WheelColumn.js +1 -0
  1103. package/dist/components/forms/TimePicker/useWheelPicker.js +1 -0
  1104. package/dist/components/forms/forms.theme.d.ts +1 -0
  1105. package/dist/components/forms/forms.theme.js +98 -45
  1106. package/dist/components/forms/index.d.ts +11 -11
  1107. package/dist/components/forms/index.js +22 -88
  1108. package/dist/components/generative/GenerativeView.d.ts +21 -0
  1109. package/dist/components/generative/GenerativeView.js +117 -0
  1110. package/dist/components/generative/actions.d.ts +26 -0
  1111. package/dist/components/generative/actions.js +51 -0
  1112. package/dist/components/generative/actions.test.d.ts +1 -0
  1113. package/dist/components/generative/index.d.ts +11 -0
  1114. package/dist/components/generative/index.js +9 -0
  1115. package/dist/components/generative/registry.d.ts +43 -0
  1116. package/dist/components/generative/registry.js +325 -0
  1117. package/dist/components/generative/resolvers.d.ts +35 -0
  1118. package/dist/components/generative/resolvers.js +93 -0
  1119. package/dist/components/generative/schema.generated.d.ts +2 -0
  1120. package/dist/components/generative/schema.generated.js +4362 -0
  1121. package/dist/components/generative/schemaTypes.d.ts +30 -0
  1122. package/dist/components/generative/streaming.d.ts +39 -0
  1123. package/dist/components/generative/streaming.js +283 -0
  1124. package/dist/components/generative/streaming.test.d.ts +1 -0
  1125. package/dist/components/generative/tools.d.ts +21 -0
  1126. package/dist/components/generative/tools.js +54 -0
  1127. package/dist/components/generative/tools.test.d.ts +1 -0
  1128. package/dist/components/generative/types.d.ts +41 -0
  1129. package/dist/components/generative/useGenerativeStream.d.ts +37 -0
  1130. package/dist/components/generative/useGenerativeStream.js +37 -0
  1131. package/dist/components/generative/validate.d.ts +24 -0
  1132. package/dist/components/generative/validate.js +351 -0
  1133. package/dist/components/generative/validate.test.d.ts +1 -0
  1134. package/dist/components/layout/AppShell/AppShell.d.ts +10 -0
  1135. package/dist/components/layout/AppShell/AppShell.js +85 -0
  1136. package/dist/components/layout/AppShell/AppShell.theme.d.ts +3 -0
  1137. package/dist/components/layout/AppShell/AppShell.theme.js +42 -0
  1138. package/dist/components/layout/AppShell/AppShell.types.d.ts +127 -0
  1139. package/dist/components/layout/AppShell/AppShellContext.d.ts +14 -0
  1140. package/dist/components/layout/AppShell/AppShellContext.js +20 -0
  1141. package/dist/components/layout/AppShell/AppShellFooter.d.ts +3 -0
  1142. package/dist/components/layout/AppShell/AppShellFooter.js +12 -0
  1143. package/dist/components/layout/AppShell/AppShellHeader.d.ts +3 -0
  1144. package/dist/components/layout/AppShell/AppShellHeader.js +12 -0
  1145. package/dist/components/layout/AppShell/AppShellMain.d.ts +3 -0
  1146. package/dist/components/layout/AppShell/AppShellMain.js +20 -0
  1147. package/dist/components/layout/AppShell/AppShellRightPanel.d.ts +3 -0
  1148. package/dist/components/layout/AppShell/AppShellRightPanel.js +17 -0
  1149. package/dist/components/layout/AppShell/AppShellSidebar.d.ts +3 -0
  1150. package/dist/components/layout/AppShell/AppShellSidebar.js +17 -0
  1151. package/dist/components/layout/AppShell/AppShellTopbar.d.ts +3 -0
  1152. package/dist/components/layout/AppShell/AppShellTopbar.js +12 -0
  1153. package/dist/components/layout/AppShell/index.d.ts +3 -0
  1154. package/dist/components/layout/FormLayout/FormLayout.d.ts +0 -2
  1155. package/dist/components/layout/FormLayout/FormLayout.js +14 -6
  1156. package/dist/components/layout/FormLayout/FormLayout.theme.js +2 -5
  1157. package/dist/components/layout/FormLayout/FormLayout.types.d.ts +9 -27
  1158. package/dist/components/layout/FormLayout/FormLayoutSection.js +9 -2
  1159. package/dist/components/layout/FormLayout/index.d.ts +1 -1
  1160. package/dist/components/layout/Grid/Grid.d.ts +3 -0
  1161. package/dist/components/layout/Grid/Grid.js +58 -0
  1162. package/dist/components/layout/Grid/Grid.theme.d.ts +2 -0
  1163. package/dist/components/layout/Grid/Grid.theme.js +35 -0
  1164. package/dist/components/layout/Grid/Grid.types.d.ts +71 -0
  1165. package/dist/components/layout/Grid/index.d.ts +3 -0
  1166. package/dist/components/layout/Section/Section.d.ts +3 -0
  1167. package/dist/components/layout/Section/Section.js +19 -0
  1168. package/dist/components/layout/Section/Section.theme.d.ts +2 -0
  1169. package/dist/components/layout/Section/Section.theme.js +10 -0
  1170. package/dist/components/layout/Section/Section.types.d.ts +34 -0
  1171. package/dist/components/layout/Section/index.d.ts +3 -0
  1172. package/dist/components/layout/Stack/Stack.d.ts +3 -0
  1173. package/dist/components/layout/Stack/Stack.js +27 -0
  1174. package/dist/components/layout/Stack/Stack.theme.d.ts +2 -0
  1175. package/dist/components/layout/Stack/Stack.theme.js +10 -0
  1176. package/dist/components/layout/Stack/Stack.types.d.ts +46 -0
  1177. package/dist/components/layout/Stack/index.d.ts +3 -0
  1178. package/dist/components/layout/index.d.ts +4 -1
  1179. package/dist/components/layout/index.js +10 -0
  1180. package/dist/generative.schema.json +4360 -0
  1181. package/dist/hooks/index.d.ts +4 -0
  1182. package/dist/hooks/useClickOutside.d.ts +10 -4
  1183. package/dist/hooks/useClickOutside.js +45 -24
  1184. package/dist/hooks/useDarkMode.d.ts +1 -0
  1185. package/dist/hooks/useDarkMode.js +43 -0
  1186. package/dist/hooks/useElapsedTime.d.ts +28 -0
  1187. package/dist/hooks/useElapsedTime.js +37 -0
  1188. package/dist/hooks/useFocusTrap.js +1 -0
  1189. package/dist/hooks/useFormStateMachine.d.ts +1 -1
  1190. package/dist/hooks/useIsClient.js +1 -0
  1191. package/dist/hooks/useMediaQuery.d.ts +5 -0
  1192. package/dist/hooks/useMediaQuery.js +22 -0
  1193. package/dist/hooks/useNetworkStatus.d.ts +0 -4
  1194. package/dist/hooks/useNetworkStatus.js +2 -5
  1195. package/dist/hooks/useOverlay.d.ts +2 -0
  1196. package/dist/hooks/useOverlay.js +39 -4
  1197. package/dist/hooks/useScaleBackground.js +6 -2
  1198. package/dist/hooks/useSelectPortal.d.ts +20 -2
  1199. package/dist/hooks/useSelectPortal.js +180 -58
  1200. package/dist/hooks/useSlidingNumber.js +1 -0
  1201. package/dist/hooks/useStreamingSSE.d.ts +0 -5
  1202. package/dist/hooks/useStreamingSSE.js +1 -5
  1203. package/dist/hooks/useTypewriter.js +1 -0
  1204. package/dist/index.d.ts +1 -2
  1205. package/dist/index.js +60 -72
  1206. package/dist/registry.json +12043 -0
  1207. package/dist/shadcn-compat.css +80 -0
  1208. package/dist/styles.css +1 -1
  1209. package/dist/test/render.d.ts +11 -0
  1210. package/dist/test/setup.d.ts +1 -0
  1211. package/dist/theme/SurfaceContext.d.ts +98 -0
  1212. package/dist/theme/SurfaceContext.js +114 -0
  1213. package/dist/theme/ThemeContext.js +19 -0
  1214. package/dist/theme/animations.d.ts +75 -0
  1215. package/dist/theme/animations.js +132 -0
  1216. package/dist/theme/index.d.ts +5 -0
  1217. package/dist/theme.css +28 -0
  1218. package/dist/themes/ember.css +131 -0
  1219. package/dist/themes/iris.css +94 -0
  1220. package/dist/themes/jade.css +139 -0
  1221. package/dist/tools.json +4498 -0
  1222. package/dist/utils/actionQueue.d.ts +0 -4
  1223. package/dist/utils/actionQueue.js +1 -4
  1224. package/dist/utils/cn.js +21 -1
  1225. package/dist/utils/colorUtils.d.ts +53 -0
  1226. package/dist/utils/colorUtils.js +90 -0
  1227. package/dist/utils/dateUtils.js +81 -15
  1228. package/dist/utils/formatUtils.d.ts +10 -0
  1229. package/dist/utils/formatUtils.js +24 -0
  1230. package/dist/utils/index.d.ts +3 -1
  1231. package/dist/utils/paletteGenerator.d.ts +46 -0
  1232. package/dist/utils/performanceMonitor.js +1 -0
  1233. package/dist/utils/smoothScrollUtils.js +1 -0
  1234. package/dist/utils/stateMachine.d.ts +4 -4
  1235. package/package.json +87 -33
  1236. package/src/global.scss +1025 -0
  1237. package/src/styles/theme.css +1126 -0
  1238. package/tailwind.preset.cjs +60 -13
  1239. package/dist/components/ai/ApprovalCard/ApprovalCard.d.ts +0 -3
  1240. package/dist/components/ai/ApprovalCard/ApprovalCard.js +0 -15
  1241. package/dist/components/ai/ApprovalCard/ApprovalCard.theme.d.ts +0 -13
  1242. package/dist/components/ai/ApprovalCard/ApprovalCard.theme.js +0 -15
  1243. package/dist/components/ai/ApprovalCard/ApprovalCard.types.d.ts +0 -43
  1244. package/dist/components/ai/ApprovalCard/index.d.ts +0 -2
  1245. package/dist/components/ai/MessageHistory/MessageHistory.d.ts +0 -18
  1246. package/dist/components/ai/MessageHistory/MessageHistory.js +0 -97
  1247. package/dist/components/ai/MessageHistory/MessageHistory.theme.d.ts +0 -2
  1248. package/dist/components/ai/MessageHistory/MessageHistory.theme.js +0 -8
  1249. package/dist/components/ai/MessageHistory/MessageHistory.types.d.ts +0 -94
  1250. package/dist/components/ai/MessageHistory/index.d.ts +0 -3
  1251. package/dist/components/ai/ThinkingIndicator/ThinkingIndicator.animations.d.ts +0 -10
  1252. package/dist/components/ai/ThinkingIndicator/ThinkingIndicator.animations.js +0 -47
  1253. package/dist/components/ai/ThinkingIndicator/ThinkingIndicator.d.ts +0 -20
  1254. package/dist/components/ai/ThinkingIndicator/ThinkingIndicator.js +0 -55
  1255. package/dist/components/ai/ThinkingIndicator/ThinkingIndicator.theme.d.ts +0 -2
  1256. package/dist/components/ai/ThinkingIndicator/ThinkingIndicator.theme.js +0 -20
  1257. package/dist/components/ai/ThinkingIndicator/ThinkingIndicator.types.d.ts +0 -67
  1258. package/dist/components/ai/ThinkingIndicator/index.d.ts +0 -3
  1259. package/dist/components/charts/shared/BarRenderer/index.d.ts +0 -3
  1260. package/dist/components/charts/shared/ChartContainer/ChartContainer.d.ts +0 -85
  1261. package/dist/components/charts/shared/ChartContainer/index.d.ts +0 -3
  1262. package/dist/components/charts/shared/ChartLegend/ChartLegendContent.d.ts +0 -7
  1263. package/dist/components/charts/shared/ChartLegend/ChartLegendContent.js +0 -18
  1264. package/dist/components/charts/shared/LineRenderer/index.d.ts +0 -2
  1265. package/dist/components/core/Accordion/AccordionContent.d.ts +0 -3
  1266. package/dist/components/core/Button/Button.animations.d.ts +0 -5
  1267. package/dist/components/core/Card/CardContent.d.ts +0 -3
  1268. package/dist/components/core/Card/CardContent.js +0 -11
  1269. package/dist/components/core/Carousel/CarouselContent.d.ts +0 -4
  1270. package/dist/components/core/ContextMenu/ContextMenuContent.d.ts +0 -6
  1271. package/dist/components/core/ContextMenu/ContextMenuSubContent.d.ts +0 -6
  1272. package/dist/components/core/Drawer/DrawerContent.d.ts +0 -5
  1273. package/dist/components/core/Loader/Loader.d.ts +0 -24
  1274. package/dist/components/core/Loader/Loader.js +0 -57
  1275. package/dist/components/core/Loader/Loader.theme.d.ts +0 -27
  1276. package/dist/components/core/Loader/Loader.theme.js +0 -60
  1277. package/dist/components/core/Loader/Loader.types.d.ts +0 -71
  1278. package/dist/components/core/Loader/index.d.ts +0 -2
  1279. package/dist/components/core/Message/MessageContent.d.ts +0 -8
  1280. package/dist/components/core/Pill/Pill.animations.d.ts +0 -32
  1281. package/dist/components/core/Pill/Pill.animations.js +0 -25
  1282. package/dist/components/core/Popover/Popover.animations.js +0 -13
  1283. package/dist/components/core/Popover/PopoverContent.d.ts +0 -7
  1284. package/dist/components/core/Popover/PopoverContent.js +0 -136
  1285. package/dist/components/core/Sidebar/SidebarSubmenu.d.ts +0 -7
  1286. package/dist/components/core/Sidebar/SidebarSubmenu.js +0 -12
  1287. package/dist/components/core/SocialIcon/SocialIcon.d.ts +0 -3
  1288. package/dist/components/core/SocialIcon/SocialIcon.js +0 -30
  1289. package/dist/components/core/SocialIcon/SocialIcon.theme.d.ts +0 -2
  1290. package/dist/components/core/SocialIcon/SocialIcon.theme.js +0 -12
  1291. package/dist/components/core/SocialIcon/SocialIcon.types.d.ts +0 -18
  1292. package/dist/components/core/SocialIcon/index.d.ts +0 -2
  1293. package/dist/components/core/Tabs/TabsContent.d.ts +0 -6
  1294. package/dist/components/effects/MorphingText/MorphingText.d.ts +0 -17
  1295. package/dist/components/effects/MorphingText/MorphingText.js +0 -91
  1296. package/dist/components/effects/MorphingText/MorphingText.types.d.ts +0 -18
  1297. package/dist/components/effects/MorphingText/index.d.ts +0 -2
  1298. package/dist/components/effects/ParallaxSection/ParallaxSection.d.ts +0 -26
  1299. package/dist/components/effects/ParallaxSection/ParallaxSection.js +0 -71
  1300. package/dist/components/effects/ParallaxSection/ParallaxSection.types.d.ts +0 -11
  1301. package/dist/components/effects/ParallaxSection/index.d.ts +0 -2
  1302. package/dist/components/effects/Spotlight/Spotlight.d.ts +0 -36
  1303. package/dist/components/effects/Spotlight/Spotlight.js +0 -112
  1304. package/dist/components/effects/Spotlight/Spotlight.types.d.ts +0 -29
  1305. package/dist/components/effects/Spotlight/index.d.ts +0 -2
  1306. package/dist/components/effects/SpotlightBorder/SpotlightBorder.d.ts +0 -18
  1307. package/dist/components/effects/SpotlightBorder/SpotlightBorder.js +0 -214
  1308. package/dist/components/effects/SpotlightBorder/SpotlightBorder.types.d.ts +0 -61
  1309. package/dist/components/effects/SpotlightBorder/index.d.ts +0 -2
  1310. package/dist/components/effects/StickyScroll/StickyScroll.d.ts +0 -30
  1311. package/dist/components/effects/StickyScroll/StickyScroll.js +0 -128
  1312. package/dist/components/effects/StickyScroll/StickyScroll.types.d.ts +0 -19
  1313. package/dist/components/effects/StickyScroll/index.d.ts +0 -2
  1314. package/dist/components/forms/ColorPicker/ColorPickerContent.d.ts +0 -7
  1315. package/dist/components/forms/CronInput/CronInput.d.ts +0 -3
  1316. package/dist/components/forms/CronInput/CronInput.js +0 -107
  1317. package/dist/components/forms/CronInput/CronInput.theme.d.ts +0 -6
  1318. package/dist/components/forms/CronInput/CronInput.theme.js +0 -84
  1319. package/dist/components/forms/CronInput/CronInput.types.d.ts +0 -98
  1320. package/dist/components/forms/CronInput/CronInput.utils.d.ts +0 -67
  1321. package/dist/components/forms/CronInput/CronInput.utils.js +0 -505
  1322. package/dist/components/forms/CronInput/index.d.ts +0 -4
  1323. package/dist/components/forms/DatePicker/DatePickerContent.d.ts +0 -7
  1324. package/dist/components/forms/TransferList/TransferList.animations.d.ts +0 -10
  1325. package/dist/components/forms/TransferList/TransferList.animations.js +0 -32
  1326. package/dist/components/forms/TransferList/TransferList.d.ts +0 -28
  1327. package/dist/components/forms/TransferList/TransferList.js +0 -199
  1328. package/dist/components/forms/TransferList/TransferList.theme.d.ts +0 -6
  1329. package/dist/components/forms/TransferList/TransferList.theme.js +0 -60
  1330. package/dist/components/forms/TransferList/TransferList.types.d.ts +0 -101
  1331. package/dist/components/forms/TransferList/index.d.ts +0 -3
  1332. package/dist/components/layout/FormLayout/FormLayoutBody.d.ts +0 -3
  1333. package/dist/components/layout/FormLayout/FormLayoutBody.js +0 -91
  1334. package/dist/components/layout/FormLayout/FormLayoutHeader.d.ts +0 -3
  1335. package/dist/components/layout/FormLayout/FormLayoutHeader.js +0 -12
  1336. package/dist/components/layout/PageLayout/PageLayout.d.ts +0 -7
  1337. package/dist/components/layout/PageLayout/PageLayout.js +0 -33
  1338. package/dist/components/layout/PageLayout/PageLayout.theme.d.ts +0 -2
  1339. package/dist/components/layout/PageLayout/PageLayout.theme.js +0 -10
  1340. package/dist/components/layout/PageLayout/PageLayout.types.d.ts +0 -39
  1341. package/dist/components/layout/PageLayout/PageLayoutContent.d.ts +0 -3
  1342. package/dist/components/layout/PageLayout/PageLayoutContent.js +0 -12
  1343. package/dist/components/layout/PageLayout/PageLayoutHeader.d.ts +0 -3
  1344. package/dist/components/layout/PageLayout/PageLayoutHeader.js +0 -12
  1345. package/dist/components/layout/PageLayout/PageLayoutSidebar.d.ts +0 -3
  1346. package/dist/components/layout/PageLayout/PageLayoutSidebar.js +0 -12
  1347. package/dist/components/layout/PageLayout/index.d.ts +0 -3
  1348. package/dist/icons/Icon.d.ts +0 -24
  1349. package/dist/icons/Icon.js +0 -30
  1350. package/dist/icons/Index.d.ts +0 -16
  1351. package/dist/icons/core/ChevronUpDown.d.ts +0 -1
  1352. package/dist/icons/core/ChevronUpDown.js +0 -7
  1353. package/dist/icons/core/DollarIcon.d.ts +0 -1
  1354. package/dist/icons/core/DollarIcon.js +0 -5
  1355. package/dist/icons/core/LockIcon.d.ts +0 -1
  1356. package/dist/icons/core/LockIcon.js +0 -5
  1357. package/dist/icons/core/MinusIcon.d.ts +0 -1
  1358. package/dist/icons/core/MinusIcon.js +0 -7
  1359. package/dist/icons/core/PlusIcon.d.ts +0 -1
  1360. package/dist/icons/core/PlusIcon.js +0 -7
  1361. package/dist/icons/core/SearchIcon.d.ts +0 -1
  1362. package/dist/icons/core/SearchIcon.js +0 -7
  1363. package/dist/icons/core/TickIcon.d.ts +0 -1
  1364. package/dist/icons/core/TickIcon.js +0 -5
  1365. package/dist/icons/core/User.d.ts +0 -1
  1366. package/dist/utils/useClickOutside.d.ts +0 -1
  1367. /package/dist/components/ai/{PromptSuggestions → PromptSuggestion}/PromptSuggestion.d.ts +0 -0
  1368. /package/dist/components/ai/{PromptSuggestions → PromptSuggestion}/PromptSuggestion.theme.d.ts +0 -0
  1369. /package/dist/components/ai/{PromptSuggestions → PromptSuggestion}/PromptSuggestion.types.d.ts +0 -0
  1370. /package/dist/components/ai/{PromptSuggestions → PromptSuggestion}/index.d.ts +0 -0
  1371. /package/dist/components/core/{SocialIcon → Icon/data}/platforms.d.ts +0 -0
  1372. /package/dist/components/core/{SocialIcon → Icon/data}/platforms.js +0 -0
  1373. /package/dist/components/effects/{SpotlightBorder/SpotlightBorder.types.js → TiltCard/TiltCard.types.js} +0 -0
@@ -1,38 +1,38 @@
1
+ "use client";
1
2
  import { jsxs, jsx } from 'react/jsx-runtime';
2
- import React__default, { useState, useRef, useMemo, useCallback, useEffect } from 'react';
3
+ import React__default, { useState, useCallback, useRef, useMemo, useEffect } from 'react';
3
4
  import { createPortal } from 'react-dom';
4
5
  import { useReducedMotion, AnimatePresence, motion } from 'motion/react';
5
6
  import { FormLabel } from '../FormLabel/FormLabel.js';
6
- import { richTextEditorTheme, colorOptions } from './RichTextEditor.theme.js';
7
+ import { MONO_COLORS, TAILWIND_COLOR_FAMILIES, getTailwindShadeTokens, richTextEditorTheme, resolveTailwindColor } from './RichTextEditor.theme.js';
7
8
  import { floatingToolbarVariants } from './RichTextEditor.animations.js';
8
9
  import { cn } from '../../../utils/cn.js';
9
10
  import { Button } from '../../core/Button/Button.js';
10
- import { ArrowUturnRightIcon, ArrowUturnLeftIcon, Bars3BottomRightIcon, Bars3Icon, Bars3BottomLeftIcon, UnderlineIcon, ItalicIcon, BoldIcon } from '@heroicons/react/24/outline';
11
+ import { ScrollArea } from '../../core/ScrollArea/ScrollArea.js';
12
+ import '../../core/ScrollArea/smooth/SmoothScrollEngine.js';
13
+ import { ArrowUUpRight, ArrowUUpLeft, TextAlignRight, List, TextAlignLeft, PaintBrush, ArrowsLeftRight, ArrowsDownUp, TextB, TextUnderline, TextItalic } from '@phosphor-icons/react';
11
14
  import { useSelectPortal } from '../../../hooks/useSelectPortal.js';
12
- import { PaintBrushIcon } from '@heroicons/react/24/solid';
13
15
  import { createDropdownAnimations } from '../Select/Select.animations.js';
14
16
  import { useIsClient } from '../../../hooks/useIsClient.js';
17
+ import { useSurfaceElevation, SurfaceProvider, surfaceClasses } from '../../../theme/SurfaceContext.js';
15
18
 
16
19
  const FONT_SIZE_OPTIONS = [
17
- { key: "xs", label: "XS", value: "0.75rem", px: 12 },
18
- { key: "sm", label: "SM", value: "0.875rem", px: 14 },
19
- { key: "md", label: "MD", value: "1rem", px: 16 },
20
- { key: "lg", label: "LG", value: "1.125rem", px: 18 },
21
- { key: "xl", label: "XL", value: "1.25rem", px: 20 },
22
- { key: "2xl", label: "2XL", value: "1.5rem", px: 24 },
23
- { key: "3xl", label: "3XL", value: "1.875rem", px: 30 },
24
- { key: "4xl", label: "4XL", value: "2.25rem", px: 36 },
20
+ { key: "xs", label: "XS", value: "0.75rem", px: 12, className: "text-xs" },
21
+ { key: "sm", label: "SM", value: "0.875rem", px: 14, className: "text-sm" },
22
+ { key: "md", label: "MD", value: "1rem", px: 16, className: "text-base" },
23
+ { key: "lg", label: "LG", value: "1.125rem", px: 18, className: "text-lg" },
24
+ { key: "xl", label: "XL", value: "1.25rem", px: 20, className: "text-xl" },
25
+ { key: "2xl", label: "2XL", value: "1.5rem", px: 24, className: "text-2xl" },
26
+ { key: "3xl", label: "3XL", value: "1.875rem", px: 30, className: "text-3xl" },
27
+ { key: "4xl", label: "4XL", value: "2.25rem", px: 36, className: "text-4xl" },
28
+ { key: "5xl", label: "5XL", value: "3rem", px: 48, className: "text-5xl" },
29
+ { key: "6xl", label: "6XL", value: "3.75rem", px: 60, className: "text-6xl" },
30
+ { key: "7xl", label: "7XL", value: "4.5rem", px: 72, className: "text-7xl" },
31
+ { key: "8xl", label: "8XL", value: "6rem", px: 96, className: "text-8xl" },
32
+ { key: "9xl", label: "9XL", value: "8rem", px: 128, className: "text-9xl" },
25
33
  ];
26
- const FONT_SIZE_COMMAND_VALUE = {
27
- xs: "1",
28
- sm: "2",
29
- md: "3",
30
- lg: "4",
31
- xl: "5",
32
- "2xl": "6",
33
- "3xl": "7",
34
- "4xl": "7",
35
- };
34
+ /** All font-size class names — used to scrub stale classes when swapping. */
35
+ const FONT_SIZE_CLASSES = FONT_SIZE_OPTIONS.map((o) => o.className);
36
36
  const getFontSizeOption = (key) => { var _a; return (_a = FONT_SIZE_OPTIONS.find((option) => option.key === key)) !== null && _a !== void 0 ? _a : FONT_SIZE_OPTIONS[2]; };
37
37
  const getClosestFontSizeKey = (px) => {
38
38
  let closest = "md";
@@ -46,23 +46,153 @@ const getClosestFontSizeKey = (px) => {
46
46
  });
47
47
  return closest;
48
48
  };
49
+ /**
50
+ * Curated default list of font families shipped with the editor.
51
+ * The `Default` entry clears the inline font-family. The rest are popular
52
+ * Google Fonts chosen for broad weight coverage. Each stack ends in a sensible
53
+ * fallback so text stays readable while the font is loading.
54
+ */
55
+ const DEFAULT_FONT_FAMILY_OPTIONS = [
56
+ { key: "default", label: "Default", stack: "" },
57
+ { key: "inter", label: "Inter", family: "Inter", stack: "'Inter', system-ui, sans-serif" },
58
+ { key: "roboto", label: "Roboto", family: "Roboto", stack: "'Roboto', system-ui, sans-serif" },
59
+ { key: "manrope", label: "Manrope", family: "Manrope", stack: "'Manrope', system-ui, sans-serif" },
60
+ { key: "poppins", label: "Poppins", family: "Poppins", stack: "'Poppins', system-ui, sans-serif" },
61
+ { key: "lora", label: "Lora", family: "Lora", stack: "'Lora', Georgia, serif" },
62
+ { key: "playfair", label: "Playfair Display", family: "Playfair Display", stack: "'Playfair Display', Georgia, serif" },
63
+ { key: "merriweather", label: "Merriweather", family: "Merriweather", stack: "'Merriweather', Georgia, serif" },
64
+ { key: "jetbrains", label: "JetBrains Mono", family: "JetBrains Mono", stack: "'JetBrains Mono', Menlo, monospace" },
65
+ ];
66
+ // Bumped when migrating from raw hex values to Tailwind shade tokens
67
+ // (e.g. "rose-500"). Old hex entries from prior versions are ignored — the
68
+ // picker now applies color via `text-{token}` classes, not via execCommand.
69
+ const RECENT_COLORS_KEY = "flikkui-rte-recent-colors-v2";
70
+ const RECENT_COLORS_LIMIT = 10;
71
+ const DEFAULT_FONT_WEIGHT_REQUEST = [100, 200, 300, 400, 500, 600, 700, 800, 900];
72
+ const loadedGoogleFonts = new Set();
73
+ /**
74
+ * Lazily injects a Google Fonts `<link rel="stylesheet">` for the given family.
75
+ * Idempotent: each family is requested at most once per page lifetime.
76
+ * SSR-safe (no-ops when `document` is undefined).
77
+ *
78
+ * @example
79
+ * import { loadGoogleFont } from "@flikk/ui";
80
+ * loadGoogleFont("Inter");
81
+ */
82
+ const loadGoogleFont = (family, weights = DEFAULT_FONT_WEIGHT_REQUEST) => {
83
+ if (typeof document === "undefined")
84
+ return;
85
+ if (!family)
86
+ return;
87
+ const cacheKey = `${family}:${weights.join(",")}`;
88
+ if (loadedGoogleFonts.has(cacheKey))
89
+ return;
90
+ loadedGoogleFonts.add(cacheKey);
91
+ const familyParam = family.replace(/\s+/g, "+");
92
+ const weightsParam = weights.length > 0 ? `:wght@${weights.join(";")}` : "";
93
+ const href = `https://fonts.googleapis.com/css2?family=${familyParam}${weightsParam}&display=swap`;
94
+ const link = document.createElement("link");
95
+ link.rel = "stylesheet";
96
+ link.href = href;
97
+ link.setAttribute("data-flikkui-font", family);
98
+ document.head.appendChild(link);
99
+ };
100
+ const FONT_WEIGHT_OPTIONS = [
101
+ { key: "thin", label: "Thin", value: "100", weight: 100, className: "font-thin" },
102
+ { key: "extralight", label: "Extra Light", value: "200", weight: 200, className: "font-extralight" },
103
+ { key: "light", label: "Light", value: "300", weight: 300, className: "font-light" },
104
+ { key: "normal", label: "Regular", value: "400", weight: 400, className: "font-normal" },
105
+ { key: "medium", label: "Medium", value: "500", weight: 500, className: "font-medium" },
106
+ { key: "semibold", label: "Semibold", value: "600", weight: 600, className: "font-semibold" },
107
+ { key: "bold", label: "Bold", value: "700", weight: 700, className: "font-bold" },
108
+ { key: "extrabold", label: "Extra Bold", value: "800", weight: 800, className: "font-extrabold" },
109
+ { key: "black", label: "Black", value: "900", weight: 900, className: "font-black" },
110
+ ];
111
+ const FONT_WEIGHT_CLASSES = FONT_WEIGHT_OPTIONS.map((o) => o.className);
112
+ const getFontWeightOption = (key) => { var _a; return (_a = FONT_WEIGHT_OPTIONS.find((option) => option.key === key)) !== null && _a !== void 0 ? _a : FONT_WEIGHT_OPTIONS[3]; };
113
+ const getClosestFontWeightKey = (weight) => {
114
+ let closest = "normal";
115
+ let minDiff = Number.POSITIVE_INFINITY;
116
+ FONT_WEIGHT_OPTIONS.forEach((option) => {
117
+ const diff = Math.abs(option.weight - weight);
118
+ if (diff < minDiff) {
119
+ minDiff = diff;
120
+ closest = option.key;
121
+ }
122
+ });
123
+ return closest;
124
+ };
125
+ const LINE_HEIGHT_OPTIONS = [
126
+ { key: "tight", label: "Tight", value: "1.25", className: "leading-tight" },
127
+ { key: "snug", label: "Snug", value: "1.375", className: "leading-snug" },
128
+ { key: "normal", label: "Normal", value: "1.5", className: "leading-normal" },
129
+ { key: "relaxed", label: "Relaxed", value: "1.625", className: "leading-relaxed" },
130
+ { key: "loose", label: "Loose", value: "2", className: "leading-loose" },
131
+ ];
132
+ const LINE_HEIGHT_CLASSES = LINE_HEIGHT_OPTIONS.map((o) => o.className);
133
+ const getLineHeightOption = (key) => { var _a; return (_a = LINE_HEIGHT_OPTIONS.find((option) => option.key === key)) !== null && _a !== void 0 ? _a : LINE_HEIGHT_OPTIONS[2]; };
134
+ const LETTER_SPACING_OPTIONS = [
135
+ { key: "tighter", label: "Tighter", value: "-0.05em", em: -0.05, className: "tracking-tighter" },
136
+ { key: "tight", label: "Tight", value: "-0.025em", em: -0.025, className: "tracking-tight" },
137
+ { key: "normal", label: "Normal", value: "0em", em: 0, className: "tracking-normal" },
138
+ { key: "wide", label: "Wide", value: "0.025em", em: 0.025, className: "tracking-wide" },
139
+ { key: "wider", label: "Wider", value: "0.05em", em: 0.05, className: "tracking-wider" },
140
+ { key: "widest", label: "Widest", value: "0.1em", em: 0.1, className: "tracking-widest" },
141
+ ];
142
+ const LETTER_SPACING_CLASSES = LETTER_SPACING_OPTIONS.map((o) => o.className);
143
+ /**
144
+ * Every text-color class the picker can apply: `text-white`, `text-black`,
145
+ * and `text-{family}-{shade}` for each Tailwind family/shade. Used both to
146
+ * apply the new color and to scrub stale color classes off ancestor wrappers.
147
+ * Derived once at module load — list size is static.
148
+ */
149
+ const TEXT_COLOR_CLASSES = [
150
+ ...MONO_COLORS.map((c) => `text-${c.token}`),
151
+ ...TAILWIND_COLOR_FAMILIES.flatMap((family) => getTailwindShadeTokens(family).map((token) => `text-${token}`)),
152
+ ];
153
+ /** Returns the active text-color token (e.g. `"rose-500"`) walking up from the
154
+ * given element, or `""` if no `text-{token}` class is found before the editor
155
+ * boundary. */
156
+ const matchTextColorClass = (el, editor) => {
157
+ let n = el;
158
+ while (n && n !== editor) {
159
+ for (let i = 0; i < n.classList.length; i++) {
160
+ const cls = n.classList.item(i);
161
+ if (cls && TEXT_COLOR_CLASSES.includes(cls))
162
+ return cls.slice("text-".length);
163
+ }
164
+ n = n.parentElement;
165
+ }
166
+ return "";
167
+ };
168
+ const getLetterSpacingOption = (key) => { var _a; return (_a = LETTER_SPACING_OPTIONS.find((option) => option.key === key)) !== null && _a !== void 0 ? _a : LETTER_SPACING_OPTIONS[2]; };
49
169
  const DEFAULT_FORMATTING_STATE = {
50
170
  bold: false,
51
171
  italic: false,
52
172
  underline: false,
53
173
  textAlign: "left",
54
174
  fontSize: "md",
55
- textColor: "#000000",
175
+ fontWeight: "normal",
176
+ fontFamily: "default",
177
+ lineHeight: "normal",
178
+ letterSpacing: "normal",
179
+ // Token like "rose-500" / "white" / "black"; "" means inherit (no class
180
+ // applied). The picker now applies color via `text-{token}` classes
181
+ // rather than execCommand("foreColor"), so the state holds tokens.
182
+ textColor: "",
56
183
  };
57
184
  const DEFAULT_TOOLBAR = {
58
185
  show: true,
59
186
  position: "top",
60
187
  tools: [
61
- "bold",
188
+ "fontWeight",
62
189
  "italic",
63
190
  "underline",
64
191
  "separator",
192
+ "fontFamily",
65
193
  "fontSize",
194
+ "lineHeight",
195
+ "letterSpacing",
66
196
  "textColor",
67
197
  "separator",
68
198
  "alignLeft",
@@ -73,19 +203,104 @@ const DEFAULT_TOOLBAR = {
73
203
  "redo",
74
204
  ],
75
205
  };
76
- const RichTextEditor = React__default.forwardRef(({ size = "md", state = "default", className = "", label, labelClassName = "", helperText, helperTextClassName = "", value = "", onChange, placeholder = "Start typing...", id, required, minHeight = 120, maxHeight, toolbar: toolbarProp = DEFAULT_TOOLBAR, theme = {}, ...props }, ref) => {
206
+ const RichTextEditor = React__default.forwardRef(({ size = "md", state = "default", className = "", label, labelClassName = "", helperText, errorMessage, helperTextClassName = "", value = "", onChange, placeholder = "Start typing...", id, required, minHeight = 120, maxHeight, toolbar: toolbarProp = DEFAULT_TOOLBAR, theme = {}, fontFamilies = DEFAULT_FONT_FAMILY_OPTIONS, loadFontsOnDemand = true, sanitize, elevation, lift, ...props }, ref) => {
207
+ // Relative elevation: the floating toolbar (bubble menu) and the toolbar
208
+ // dropdowns lift above their host surface (overlay base = 5) so an editor
209
+ // inside a Popover/Modal still reads its floating chrome as a higher plane.
210
+ const surfaceLevel = useSurfaceElevation({ baseRung: 5, offset: 2, elevation, lift });
77
211
  const [isFocused, setIsFocused] = useState(false);
78
212
  const [showToolbar, setShowToolbar] = useState(false);
79
213
  const [toolbarPosition, setToolbarPosition] = useState({ top: 0, left: 0 });
80
214
  const [formattingState, setFormattingState] = useState(DEFAULT_FORMATTING_STATE);
81
215
  const [showFontSizePicker, setShowFontSizePicker] = useState(false);
216
+ const [showFontWeightPicker, setShowFontWeightPicker] = useState(false);
217
+ const [showFontFamilyPicker, setShowFontFamilyPicker] = useState(false);
218
+ const [showLineHeightPicker, setShowLineHeightPicker] = useState(false);
219
+ const [showLetterSpacingPicker, setShowLetterSpacingPicker] = useState(false);
82
220
  const [showColorPicker, setShowColorPicker] = useState(false);
221
+ // Recently used text colors — persisted to localStorage so they survive reloads.
222
+ const [recentColors, setRecentColors] = useState(() => {
223
+ if (typeof window === "undefined")
224
+ return [];
225
+ try {
226
+ const stored = window.localStorage.getItem(RECENT_COLORS_KEY);
227
+ if (!stored)
228
+ return [];
229
+ const parsed = JSON.parse(stored);
230
+ return Array.isArray(parsed)
231
+ ? parsed.filter((v) => typeof v === "string").slice(0, RECENT_COLORS_LIMIT)
232
+ : [];
233
+ }
234
+ catch (_a) {
235
+ return [];
236
+ }
237
+ });
238
+ const addRecentColor = useCallback((token) => {
239
+ if (!token)
240
+ return;
241
+ setRecentColors((prev) => {
242
+ const next = [token, ...prev.filter((c) => c !== token)].slice(0, RECENT_COLORS_LIMIT);
243
+ if (typeof window !== "undefined") {
244
+ try {
245
+ window.localStorage.setItem(RECENT_COLORS_KEY, JSON.stringify(next));
246
+ }
247
+ catch (_a) {
248
+ // localStorage unavailable (private mode, quota exceeded, etc.) — ignore.
249
+ }
250
+ }
251
+ return next;
252
+ });
253
+ }, []);
83
254
  const shouldReduceMotion = useReducedMotion();
84
255
  const isClient = useIsClient();
256
+ // Built-in basic sanitizer: strips <script> tags and on* event handlers
257
+ const sanitizeHtml = useCallback((html) => {
258
+ if (sanitize)
259
+ return sanitize(html);
260
+ // Basic sanitization — strips script tags and inline event handlers
261
+ return html
262
+ .replace(/<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi, '')
263
+ .replace(/\bon\w+\s*=\s*(?:"[^"]*"|'[^']*'|[^\s>]+)/gi, '');
264
+ }, [sanitize]);
85
265
  const editorRef = useRef(null);
86
266
  const toolbarRef = useRef(null);
87
267
  const fontSizeTriggerRef = useRef(null);
268
+ const fontWeightTriggerRef = useRef(null);
269
+ const fontFamilyTriggerRef = useRef(null);
270
+ const lineHeightTriggerRef = useRef(null);
271
+ const letterSpacingTriggerRef = useRef(null);
88
272
  const colorTriggerRef = useRef(null);
273
+ // Single linear history covering ALL mutations: typing, execCommand
274
+ // (bold/italic/foreColor/justify/…), and direct-DOM style ops. Typing is
275
+ // coalesced into one undo entry per ~500 ms run, so users get coarse-grained
276
+ // word-level undo instead of per-keystroke. Discrete style ops always start
277
+ // a fresh entry by passing kind='op'.
278
+ const historyRef = useRef({ undo: [], redo: [], lastPushKind: null, lastPushAt: 0 });
279
+ const HISTORY_LIMIT = 100;
280
+ const TYPING_COALESCE_MS = 500;
281
+ const pushHistory = useCallback((kind = "op") => {
282
+ if (!editorRef.current)
283
+ return;
284
+ const now = Date.now();
285
+ const stack = historyRef.current;
286
+ // Coalesce successive typing events into a single undo entry while the
287
+ // user is mid-word. Skip when the previous push was also typing AND it
288
+ // happened recently — the existing entry already represents this group.
289
+ if (kind === "typing" &&
290
+ stack.lastPushKind === "typing" &&
291
+ now - stack.lastPushAt < TYPING_COALESCE_MS) {
292
+ stack.lastPushAt = now;
293
+ // Any new mutation still invalidates the redo stack.
294
+ stack.redo = [];
295
+ return;
296
+ }
297
+ stack.undo.push(editorRef.current.innerHTML);
298
+ stack.redo = [];
299
+ stack.lastPushKind = kind;
300
+ stack.lastPushAt = now;
301
+ if (stack.undo.length > HISTORY_LIMIT)
302
+ stack.undo.shift();
303
+ }, []);
89
304
  const generatedId = React__default.useId();
90
305
  const editorId = id || generatedId;
91
306
  const themeStyles = useMemo(() => {
@@ -134,6 +349,34 @@ const RichTextEditor = React__default.forwardRef(({ size = "md", state = "defaul
134
349
  offset: 6,
135
350
  autoWidth: true,
136
351
  });
352
+ const { position: fontWeightPortalPosition, cssVariables: fontWeightPortalCssVars, contentRef: fontWeightPortalContentRef, isReady: fontWeightPortalReady, isFlipped: fontWeightIsFlipped, } = useSelectPortal({
353
+ triggerRef: fontWeightTriggerRef,
354
+ isOpen: showFontWeightPicker,
355
+ placement: "bottom-start",
356
+ offset: 6,
357
+ autoWidth: true,
358
+ });
359
+ const { position: fontFamilyPortalPosition, cssVariables: fontFamilyPortalCssVars, contentRef: fontFamilyPortalContentRef, isReady: fontFamilyPortalReady, isFlipped: fontFamilyIsFlipped, } = useSelectPortal({
360
+ triggerRef: fontFamilyTriggerRef,
361
+ isOpen: showFontFamilyPicker,
362
+ placement: "bottom-start",
363
+ offset: 6,
364
+ autoWidth: true,
365
+ });
366
+ const { position: lineHeightPortalPosition, cssVariables: lineHeightPortalCssVars, contentRef: lineHeightPortalContentRef, isReady: lineHeightPortalReady, isFlipped: lineHeightIsFlipped, } = useSelectPortal({
367
+ triggerRef: lineHeightTriggerRef,
368
+ isOpen: showLineHeightPicker,
369
+ placement: "bottom-start",
370
+ offset: 6,
371
+ autoWidth: true,
372
+ });
373
+ const { position: letterSpacingPortalPosition, cssVariables: letterSpacingPortalCssVars, contentRef: letterSpacingPortalContentRef, isReady: letterSpacingPortalReady, isFlipped: letterSpacingIsFlipped, } = useSelectPortal({
374
+ triggerRef: letterSpacingTriggerRef,
375
+ isOpen: showLetterSpacingPicker,
376
+ placement: "bottom-start",
377
+ offset: 6,
378
+ autoWidth: true,
379
+ });
137
380
  const { position: colorPortalPosition, cssVariables: colorPortalCssVars, contentRef: colorPortalContentRef, isReady: colorPortalReady, isFlipped: colorIsFlipped, } = useSelectPortal({
138
381
  triggerRef: colorTriggerRef,
139
382
  isOpen: showColorPicker,
@@ -143,6 +386,10 @@ const RichTextEditor = React__default.forwardRef(({ size = "md", state = "defaul
143
386
  });
144
387
  const isDisabled = state === "disabled";
145
388
  const isInvalid = state === "invalid";
389
+ // errorMessage takes precedence over helperText while invalid; helperText
390
+ // behavior is unchanged otherwise.
391
+ const displayedMessage = isInvalid && errorMessage ? errorMessage : helperText;
392
+ const messageId = `${editorId}-message`;
146
393
  const getDataState = () => {
147
394
  if (isDisabled)
148
395
  return "disabled";
@@ -157,38 +404,151 @@ const RichTextEditor = React__default.forwardRef(({ size = "md", state = "defaul
157
404
  editorRef.current.focus();
158
405
  }
159
406
  }, []);
407
+ const closeAllPickers = useCallback(() => {
408
+ setShowFontSizePicker(false);
409
+ setShowFontWeightPicker(false);
410
+ setShowFontFamilyPicker(false);
411
+ setShowLineHeightPicker(false);
412
+ setShowLetterSpacingPicker(false);
413
+ setShowColorPicker(false);
414
+ }, []);
415
+ const togglePicker = useCallback((which) => {
416
+ setShowFontSizePicker((prev) => (which === "fontSize" ? !prev : false));
417
+ setShowFontWeightPicker((prev) => (which === "fontWeight" ? !prev : false));
418
+ setShowFontFamilyPicker((prev) => (which === "fontFamily" ? !prev : false));
419
+ setShowLineHeightPicker((prev) => (which === "lineHeight" ? !prev : false));
420
+ setShowLetterSpacingPicker((prev) => (which === "letterSpacing" ? !prev : false));
421
+ setShowColorPicker((prev) => (which === "color" ? !prev : false));
422
+ }, []);
160
423
  const getCurrentFontSize = useCallback(() => {
161
424
  if (!editorRef.current)
162
425
  return DEFAULT_FORMATTING_STATE.fontSize;
163
426
  const selection = window.getSelection();
164
- if (!selection || selection.rangeCount === 0) {
165
- const editorComputed = window.getComputedStyle(editorRef.current);
166
- const editorSize = parseFloat(editorComputed.fontSize || "");
167
- return Number.isFinite(editorSize)
168
- ? getClosestFontSizeKey(editorSize)
169
- : DEFAULT_FORMATTING_STATE.fontSize;
170
- }
171
- const range = selection.getRangeAt(0);
172
- let node = range.startContainer;
173
- if (node.nodeType === Node.TEXT_NODE) {
174
- node = node.parentElement;
427
+ let node = null;
428
+ if (selection && selection.rangeCount > 0) {
429
+ node = selection.getRangeAt(0).startContainer;
430
+ if (node && node.nodeType === Node.TEXT_NODE)
431
+ node = node.parentElement;
175
432
  }
433
+ // Walk up looking for a `text-*` class (the size classes also bundle a
434
+ // matching line-height — that's why class-based size is reliable).
176
435
  while (node && node !== editorRef.current) {
177
436
  if (node instanceof HTMLElement) {
178
- const computed = window.getComputedStyle(node);
179
- const size = parseFloat(computed.fontSize || "");
180
- if (Number.isFinite(size)) {
181
- return getClosestFontSizeKey(size);
182
- }
437
+ const match = FONT_SIZE_OPTIONS.find((o) => node && node.classList.contains(o.className));
438
+ if (match)
439
+ return match.key;
183
440
  }
184
441
  node = node ? node.parentNode : null;
185
442
  }
443
+ // No explicit class found — fall back to the editor's computed font-size
444
+ // mapped to the closest preset. Handles initial/no-selection state.
186
445
  const editorComputed = window.getComputedStyle(editorRef.current);
187
446
  const editorSize = parseFloat(editorComputed.fontSize || "");
188
447
  return Number.isFinite(editorSize)
189
448
  ? getClosestFontSizeKey(editorSize)
190
449
  : DEFAULT_FORMATTING_STATE.fontSize;
191
450
  }, []);
451
+ const getCurrentFontFamily = useCallback(() => {
452
+ if (!editorRef.current)
453
+ return "default";
454
+ const selection = window.getSelection();
455
+ let element = null;
456
+ if (selection && selection.rangeCount > 0) {
457
+ let node = selection.getRangeAt(0).startContainer;
458
+ if (node && node.nodeType === Node.TEXT_NODE)
459
+ node = node.parentElement;
460
+ if (node instanceof HTMLElement)
461
+ element = node;
462
+ }
463
+ while (element && editorRef.current.contains(element)) {
464
+ const inline = element.style.fontFamily;
465
+ if (inline) {
466
+ // Match against the first family in the inline stack
467
+ const firstFamily = inline.split(",")[0].trim().replace(/^['"]|['"]$/g, "");
468
+ const match = fontFamilies.find((opt) => {
469
+ if (!opt.family)
470
+ return false;
471
+ return opt.family.toLowerCase() === firstFamily.toLowerCase();
472
+ });
473
+ if (match)
474
+ return match.key;
475
+ }
476
+ element = element.parentElement;
477
+ }
478
+ return "default";
479
+ }, [fontFamilies]);
480
+ const getCurrentFontWeight = useCallback(() => {
481
+ var _a;
482
+ if (!editorRef.current)
483
+ return DEFAULT_FORMATTING_STATE.fontWeight;
484
+ const selection = window.getSelection();
485
+ let node = null;
486
+ if (selection && selection.rangeCount > 0) {
487
+ node = selection.getRangeAt(0).startContainer;
488
+ if (node && node.nodeType === Node.TEXT_NODE)
489
+ node = node.parentElement;
490
+ }
491
+ while (node && node !== editorRef.current) {
492
+ if (node instanceof HTMLElement) {
493
+ const match = FONT_WEIGHT_OPTIONS.find((o) => node && node.classList.contains(o.className));
494
+ if (match)
495
+ return match.key;
496
+ }
497
+ node = node ? node.parentNode : null;
498
+ }
499
+ // Fallback: read computed font-weight (covers <strong>/<b> tags from
500
+ // the Bold toggle which produce semantic markup, not classes).
501
+ const target = (_a = (selection && selection.rangeCount > 0
502
+ ? (selection.getRangeAt(0).startContainer instanceof HTMLElement
503
+ ? selection.getRangeAt(0).startContainer
504
+ : selection.getRangeAt(0).startContainer.parentElement)
505
+ : null)) !== null && _a !== void 0 ? _a : editorRef.current;
506
+ const computed = window.getComputedStyle(target);
507
+ const weight = parseInt(computed.fontWeight, 10);
508
+ return Number.isFinite(weight)
509
+ ? getClosestFontWeightKey(weight)
510
+ : DEFAULT_FORMATTING_STATE.fontWeight;
511
+ }, []);
512
+ const getCurrentLineHeight = useCallback(() => {
513
+ if (!editorRef.current)
514
+ return DEFAULT_FORMATTING_STATE.lineHeight;
515
+ const selection = window.getSelection();
516
+ let element = null;
517
+ if (selection && selection.rangeCount > 0) {
518
+ let node = selection.getRangeAt(0).startContainer;
519
+ if (node && node.nodeType === Node.TEXT_NODE)
520
+ node = node.parentElement;
521
+ if (node instanceof HTMLElement)
522
+ element = node;
523
+ }
524
+ while (element && editorRef.current.contains(element)) {
525
+ const match = LINE_HEIGHT_OPTIONS.find((o) => element && element.classList.contains(o.className));
526
+ if (match)
527
+ return match.key;
528
+ element = element.parentElement;
529
+ }
530
+ return DEFAULT_FORMATTING_STATE.lineHeight;
531
+ }, []);
532
+ const getCurrentLetterSpacing = useCallback(() => {
533
+ if (!editorRef.current)
534
+ return DEFAULT_FORMATTING_STATE.letterSpacing;
535
+ const selection = window.getSelection();
536
+ let element = null;
537
+ if (selection && selection.rangeCount > 0) {
538
+ let node = selection.getRangeAt(0).startContainer;
539
+ if (node && node.nodeType === Node.TEXT_NODE)
540
+ node = node.parentElement;
541
+ if (node instanceof HTMLElement)
542
+ element = node;
543
+ }
544
+ while (element && editorRef.current.contains(element)) {
545
+ const match = LETTER_SPACING_OPTIONS.find((o) => element && element.classList.contains(o.className));
546
+ if (match)
547
+ return match.key;
548
+ element = element.parentElement;
549
+ }
550
+ return DEFAULT_FORMATTING_STATE.letterSpacing;
551
+ }, []);
192
552
  const updateFormattingState = useCallback(() => {
193
553
  if (!editorRef.current || isDisabled) {
194
554
  setFormattingState(DEFAULT_FORMATTING_STATE);
@@ -199,31 +559,61 @@ const RichTextEditor = React__default.forwardRef(({ size = "md", state = "defaul
199
559
  let underline = false;
200
560
  let textAlign = "left";
201
561
  let fontSize = DEFAULT_FORMATTING_STATE.fontSize;
562
+ let fontWeight = DEFAULT_FORMATTING_STATE.fontWeight;
563
+ let fontFamily = DEFAULT_FORMATTING_STATE.fontFamily;
564
+ let lineHeight = DEFAULT_FORMATTING_STATE.lineHeight;
565
+ let letterSpacing = DEFAULT_FORMATTING_STATE.letterSpacing;
202
566
  let textColor = DEFAULT_FORMATTING_STATE.textColor;
567
+ // Bold is class-driven — the toolbar Bold button and Weight=Bold
568
+ // dropdown share `font-bold`, so we walk class ancestors and only fall
569
+ // back to computed font-weight when no class is found (covers legacy
570
+ // <strong>/<b> tags from pasted content).
203
571
  try {
204
- bold = document.queryCommandState("bold");
572
+ const sel = window.getSelection();
573
+ let startEl = null;
574
+ if (sel && sel.rangeCount > 0) {
575
+ let node = sel.getRangeAt(0).startContainer;
576
+ if (node && node.nodeType === Node.TEXT_NODE)
577
+ node = node.parentElement;
578
+ if (node instanceof HTMLElement)
579
+ startEl = node;
580
+ }
581
+ const boldClasses = ["font-bold", "font-extrabold", "font-black"];
582
+ const notBoldClasses = ["font-thin", "font-extralight", "font-light", "font-normal", "font-medium", "font-semibold"];
583
+ let n = startEl;
584
+ let boldClassFound = null;
585
+ while (n && n !== editorRef.current) {
586
+ if (boldClasses.some((c) => n.classList.contains(c))) {
587
+ boldClassFound = true;
588
+ break;
589
+ }
590
+ if (notBoldClasses.some((c) => n.classList.contains(c))) {
591
+ boldClassFound = false;
592
+ break;
593
+ }
594
+ n = n.parentElement;
595
+ }
596
+ bold = boldClassFound !== null
597
+ ? boldClassFound
598
+ : startEl
599
+ ? parseInt(window.getComputedStyle(startEl).fontWeight, 10) >= 600
600
+ : false;
205
601
  }
206
602
  catch (error) {
207
603
  if (process.env.NODE_ENV !== 'production') {
208
- console.warn("queryCommandState bold failed", error);
604
+ console.warn("Failed to determine bold state", error);
209
605
  }
210
606
  }
607
+ // Italic and underline route through execCommand and produce semantic
608
+ // <em>/<u> tags, so queryCommandState is the canonical read.
211
609
  try {
212
610
  italic = document.queryCommandState("italic");
213
611
  }
214
- catch (error) {
215
- if (process.env.NODE_ENV !== 'production') {
216
- console.warn("queryCommandState italic failed", error);
217
- }
218
- }
612
+ catch (_a) { }
219
613
  try {
220
614
  underline = document.queryCommandState("underline");
221
615
  }
222
- catch (error) {
223
- if (process.env.NODE_ENV !== 'production') {
224
- console.warn("queryCommandState underline failed", error);
225
- }
226
- }
616
+ catch (_b) { }
227
617
  try {
228
618
  if (document.queryCommandState("justifyCenter")) {
229
619
  textAlign = "center";
@@ -252,14 +642,56 @@ const RichTextEditor = React__default.forwardRef(({ size = "md", state = "defaul
252
642
  }
253
643
  }
254
644
  try {
255
- const colorValue = document.queryCommandValue("foreColor");
256
- if (typeof colorValue === "string" && colorValue.trim().length > 0) {
257
- textColor = colorValue;
645
+ fontWeight = getCurrentFontWeight();
646
+ }
647
+ catch (error) {
648
+ if (process.env.NODE_ENV !== 'production') {
649
+ console.warn("Failed to determine font weight", error);
650
+ }
651
+ }
652
+ try {
653
+ fontFamily = getCurrentFontFamily();
654
+ }
655
+ catch (error) {
656
+ if (process.env.NODE_ENV !== 'production') {
657
+ console.warn("Failed to determine font family", error);
658
+ }
659
+ }
660
+ try {
661
+ lineHeight = getCurrentLineHeight();
662
+ }
663
+ catch (error) {
664
+ if (process.env.NODE_ENV !== 'production') {
665
+ console.warn("Failed to determine line height", error);
666
+ }
667
+ }
668
+ try {
669
+ letterSpacing = getCurrentLetterSpacing();
670
+ }
671
+ catch (error) {
672
+ if (process.env.NODE_ENV !== 'production') {
673
+ console.warn("Failed to determine letter spacing", error);
674
+ }
675
+ }
676
+ try {
677
+ // Walk up from the selection's start container to find the nearest
678
+ // ancestor carrying a `text-{token}` class; that token (e.g.
679
+ // "rose-500", "white") is the active color. queryCommandValue is no
680
+ // longer used because color is applied via class swaps, not foreColor.
681
+ const sel = window.getSelection();
682
+ let startEl = null;
683
+ if (sel && sel.rangeCount > 0) {
684
+ let node = sel.getRangeAt(0).startContainer;
685
+ if (node && node.nodeType === Node.TEXT_NODE)
686
+ node = node.parentElement;
687
+ if (node instanceof HTMLElement)
688
+ startEl = node;
258
689
  }
690
+ textColor = matchTextColorClass(startEl, editorRef.current);
259
691
  }
260
692
  catch (error) {
261
693
  if (process.env.NODE_ENV !== 'production') {
262
- console.warn("queryCommandValue foreColor failed", error);
694
+ console.warn("Failed to determine text color", error);
263
695
  }
264
696
  }
265
697
  setFormattingState({
@@ -268,18 +700,39 @@ const RichTextEditor = React__default.forwardRef(({ size = "md", state = "defaul
268
700
  underline,
269
701
  textAlign,
270
702
  fontSize,
703
+ fontWeight,
704
+ fontFamily,
705
+ lineHeight,
706
+ letterSpacing,
271
707
  textColor,
272
708
  });
273
- }, [getCurrentFontSize, isDisabled]);
709
+ }, [
710
+ getCurrentFontSize,
711
+ getCurrentFontWeight,
712
+ getCurrentFontFamily,
713
+ getCurrentLineHeight,
714
+ getCurrentLetterSpacing,
715
+ isDisabled,
716
+ ]);
274
717
  const handleContentChange = useCallback(() => {
275
718
  if (!editorRef.current || !onChange)
276
719
  return;
277
- onChange(editorRef.current.innerHTML);
278
- }, [onChange]);
720
+ const raw = editorRef.current.innerHTML;
721
+ const clean = sanitizeHtml(raw);
722
+ // If sanitizer stripped something (e.g. pasted <script> or on*= handlers),
723
+ // reconcile the DOM so what's rendered matches what we emit.
724
+ if (clean !== raw) {
725
+ editorRef.current.innerHTML = clean;
726
+ }
727
+ onChange(clean);
728
+ }, [onChange, sanitizeHtml]);
279
729
  const execEditorCommand = useCallback((command, value) => {
280
730
  if (isDisabled || !editorRef.current)
281
731
  return;
282
732
  focusEditor();
733
+ // Snapshot before mutating so bold/italic/foreColor/justify/… land on
734
+ // the same undo stack as direct-DOM style ops and typing.
735
+ pushHistory("op");
283
736
  try {
284
737
  document.execCommand(command, false, value);
285
738
  }
@@ -292,66 +745,236 @@ const RichTextEditor = React__default.forwardRef(({ size = "md", state = "defaul
292
745
  updateFormattingState();
293
746
  handleContentChange();
294
747
  });
295
- }, [focusEditor, handleContentChange, isDisabled, updateFormattingState]);
296
- const normalizeFontSizeSelection = useCallback((sizeKey) => {
748
+ }, [focusEditor, handleContentChange, isDisabled, pushHistory, updateFormattingState]);
749
+ const handleUndo = useCallback((event) => {
750
+ event === null || event === void 0 ? void 0 : event.preventDefault();
751
+ event === null || event === void 0 ? void 0 : event.stopPropagation();
752
+ const stack = historyRef.current;
753
+ if (stack.undo.length === 0 || !editorRef.current)
754
+ return;
755
+ const previous = stack.undo.pop();
756
+ stack.redo.push(editorRef.current.innerHTML);
757
+ // Reset the typing-coalesce window so the next keystroke after an
758
+ // undo always starts a fresh entry.
759
+ stack.lastPushKind = null;
760
+ editorRef.current.innerHTML = sanitizeHtml(previous);
761
+ requestAnimationFrame(() => {
762
+ updateFormattingState();
763
+ handleContentChange();
764
+ });
765
+ }, [handleContentChange, sanitizeHtml, updateFormattingState]);
766
+ const handleRedo = useCallback((event) => {
767
+ event === null || event === void 0 ? void 0 : event.preventDefault();
768
+ event === null || event === void 0 ? void 0 : event.stopPropagation();
769
+ const stack = historyRef.current;
770
+ if (stack.redo.length === 0 || !editorRef.current)
771
+ return;
772
+ const next = stack.redo.pop();
773
+ stack.undo.push(editorRef.current.innerHTML);
774
+ stack.lastPushKind = null;
775
+ editorRef.current.innerHTML = sanitizeHtml(next);
776
+ requestAnimationFrame(() => {
777
+ updateFormattingState();
778
+ handleContentChange();
779
+ });
780
+ }, [handleContentChange, sanitizeHtml, updateFormattingState]);
781
+ const applyStyleToSelection = useCallback((apply) => {
782
+ var _a, _b, _c;
297
783
  if (!editorRef.current)
298
784
  return;
299
- const option = getFontSizeOption(sizeKey);
300
785
  const selection = window.getSelection();
301
786
  if (!selection || selection.rangeCount === 0)
302
787
  return;
303
788
  const range = selection.getRangeAt(0);
304
- const value = option.value;
305
789
  if (selection.isCollapsed) {
306
790
  let node = selection.anchorNode;
307
- if (node && node.nodeType === Node.TEXT_NODE) {
791
+ if (node && node.nodeType === Node.TEXT_NODE)
308
792
  node = node.parentElement;
309
- }
310
793
  while (node && node !== editorRef.current) {
311
794
  if (node instanceof HTMLElement) {
312
- node.style.fontSize = value;
313
- if (node.tagName.toLowerCase() === "font") {
314
- node.removeAttribute("size");
315
- }
795
+ apply(node);
316
796
  break;
317
797
  }
318
798
  node = node.parentElement;
319
799
  }
320
800
  return;
321
801
  }
802
+ // Non-collapsed: try to wrap just the selected range in a styled span so
803
+ // only the selected text changes. surroundContents works when the range
804
+ // doesn't cross element boundaries (the common case for inline selections).
805
+ const span = document.createElement("span");
806
+ apply(span);
807
+ try {
808
+ range.surroundContents(span);
809
+ selection.removeAllRanges();
810
+ const restored = document.createRange();
811
+ restored.selectNodeContents(span);
812
+ selection.addRange(restored);
813
+ return;
814
+ }
815
+ catch (_d) {
816
+ // Range crosses element boundaries — fall through to per-parent walker.
817
+ }
818
+ // Cross-element fallback: split each intersecting text node at the
819
+ // range boundaries so only the selected characters end up wrapped.
820
+ // Collect first — splitText() mutates the tree and breaks live walking.
821
+ const startContainer = range.startContainer;
822
+ const startOffset = range.startOffset;
823
+ const endContainer = range.endContainer;
824
+ const endOffset = range.endOffset;
825
+ const textNodes = [];
322
826
  const walker = document.createTreeWalker(range.commonAncestorContainer, NodeFilter.SHOW_TEXT, {
323
- acceptNode: (node) => range.intersectsNode(node) ? NodeFilter.FILTER_ACCEPT : NodeFilter.FILTER_REJECT,
827
+ acceptNode: (n) => range.intersectsNode(n) ? NodeFilter.FILTER_ACCEPT : NodeFilter.FILTER_REJECT,
324
828
  });
325
- const updated = new Set();
326
829
  let current;
327
- while ((current = walker.nextNode())) {
328
- const parent = current.parentElement;
329
- if (!parent || !editorRef.current.contains(parent))
830
+ while ((current = walker.nextNode()))
831
+ textNodes.push(current);
832
+ const editor = editorRef.current;
833
+ let firstWrap = null;
834
+ let lastWrap = null;
835
+ for (const textNode of textNodes) {
836
+ if (!editor.contains(textNode))
837
+ continue;
838
+ // Trim leading portion when range starts inside this text node
839
+ let target = textNode;
840
+ if (textNode === startContainer && startOffset > 0) {
841
+ target = textNode.splitText(startOffset);
842
+ }
843
+ // Trim trailing portion when range ends inside this text node
844
+ if (textNode === endContainer) {
845
+ const endInTarget = textNode === startContainer ? endOffset - startOffset : endOffset;
846
+ if (endInTarget < target.length) {
847
+ target.splitText(endInTarget);
848
+ }
849
+ }
850
+ // Wrap the precise text fragment in a styled span
851
+ const wrap = document.createElement("span");
852
+ apply(wrap);
853
+ (_a = target.parentNode) === null || _a === void 0 ? void 0 : _a.insertBefore(wrap, target);
854
+ wrap.appendChild(target);
855
+ if (!firstWrap)
856
+ firstWrap = wrap;
857
+ lastWrap = wrap;
858
+ }
859
+ // Restore the visible selection across the wrapped fragments so the
860
+ // user doesn't have to re-highlight before chaining another action.
861
+ if (firstWrap && lastWrap) {
862
+ selection.removeAllRanges();
863
+ const restored = document.createRange();
864
+ restored.setStartBefore((_b = firstWrap.firstChild) !== null && _b !== void 0 ? _b : firstWrap);
865
+ restored.setEndAfter((_c = lastWrap.lastChild) !== null && _c !== void 0 ? _c : lastWrap);
866
+ selection.addRange(restored);
867
+ }
868
+ }, []);
869
+ /**
870
+ * Strip a redundant class from any element whose every non-whitespace text
871
+ * descendant already sits under a closer descendant carrying a class from
872
+ * the same group. The outer declaration is dead weight at that point —
873
+ * leaving it in place causes nested wrappers to win on properties whose
874
+ * line box height (e.g. `text-7xl`'s `line-height: 1`) is computed from the
875
+ * outer's own font-size, regardless of what the inner element declares.
876
+ * After stripping, span/font wrappers that are now attribute-less are
877
+ * unwrapped so we don't accumulate empty markup over time.
878
+ */
879
+ const flattenClassGroup = useCallback((classes) => {
880
+ if (!editorRef.current || classes.length === 0)
881
+ return;
882
+ const editor = editorRef.current;
883
+ const selector = classes.map((c) => `.${c}`).join(",");
884
+ const candidates = Array.from(editor.querySelectorAll(selector));
885
+ for (const ancestor of candidates) {
886
+ const ancestorClass = classes.find((c) => ancestor.classList.contains(c));
887
+ if (!ancestorClass)
330
888
  continue;
331
- if (updated.has(parent))
889
+ const walker = document.createTreeWalker(ancestor, NodeFilter.SHOW_TEXT);
890
+ let everyTextHasCloser = true;
891
+ let sawAnyText = false;
892
+ let textNode;
893
+ while ((textNode = walker.nextNode())) {
894
+ const data = textNode.data;
895
+ if (!data || !data.trim())
896
+ continue;
897
+ sawAnyText = true;
898
+ let p = textNode.parentElement;
899
+ let foundCloser = false;
900
+ while (p && p !== ancestor) {
901
+ if (classes.some((c) => p.classList.contains(c))) {
902
+ foundCloser = true;
903
+ break;
904
+ }
905
+ p = p.parentElement;
906
+ }
907
+ if (!foundCloser) {
908
+ everyTextHasCloser = false;
909
+ break;
910
+ }
911
+ }
912
+ if (!sawAnyText || !everyTextHasCloser)
332
913
  continue;
333
- parent.style.fontSize = value;
334
- if (parent.tagName.toLowerCase() === "font") {
335
- parent.removeAttribute("size");
914
+ ancestor.classList.remove(ancestorClass);
915
+ if (ancestor.classList.length === 0)
916
+ ancestor.removeAttribute("class");
917
+ const tag = ancestor.tagName.toLowerCase();
918
+ if ((tag === "span" || tag === "font") &&
919
+ ancestor.attributes.length === 0 &&
920
+ ancestor.parentNode) {
921
+ const parent = ancestor.parentNode;
922
+ while (ancestor.firstChild)
923
+ parent.insertBefore(ancestor.firstChild, ancestor);
924
+ parent.removeChild(ancestor);
336
925
  }
337
- updated.add(parent);
338
926
  }
339
927
  }, []);
340
- const handleUndo = useCallback((event) => {
341
- event === null || event === void 0 ? void 0 : event.preventDefault();
342
- event === null || event === void 0 ? void 0 : event.stopPropagation();
343
- execEditorCommand("undo");
344
- }, [execEditorCommand]);
345
- const handleRedo = useCallback((event) => {
346
- event === null || event === void 0 ? void 0 : event.preventDefault();
347
- event === null || event === void 0 ? void 0 : event.stopPropagation();
348
- execEditorCommand("redo");
349
- }, [execEditorCommand]);
928
+ /**
929
+ * Generic class-swap helper. Wraps the selected text in a span carrying
930
+ * `nextClass` (also stripping any sibling class from the same group on
931
+ * that wrap, so we never end up with `text-sm text-7xl`), then runs a
932
+ * flatten pass over the editor to collapse newly-redundant outer wrappers.
933
+ */
934
+ const applyClassSwap = useCallback((group, nextClass) => {
935
+ applyStyleToSelection((el) => {
936
+ for (const cls of group) {
937
+ if (cls !== nextClass)
938
+ el.classList.remove(cls);
939
+ }
940
+ el.classList.add(nextClass);
941
+ });
942
+ flattenClassGroup(group);
943
+ }, [applyStyleToSelection, flattenClassGroup]);
350
944
  const handleBold = useCallback((event) => {
351
945
  event === null || event === void 0 ? void 0 : event.preventDefault();
352
946
  event === null || event === void 0 ? void 0 : event.stopPropagation();
353
- execEditorCommand("bold");
354
- }, [execEditorCommand]);
947
+ if (isDisabled || !editorRef.current)
948
+ return;
949
+ focusEditor();
950
+ const selection = window.getSelection();
951
+ if (!selection || selection.rangeCount === 0)
952
+ return;
953
+ pushHistory();
954
+ // Bold lives in the font-weight class group: ON → font-bold,
955
+ // OFF → font-normal. The toolbar Bold button and the Weight=Bold
956
+ // dropdown entry share the same underlying class, so they stay in
957
+ // sync automatically — toggling one lights up the other.
958
+ const next = formattingState.bold ? "font-normal" : "font-bold";
959
+ applyClassSwap(FONT_WEIGHT_CLASSES, next);
960
+ requestAnimationFrame(() => {
961
+ updateFormattingState();
962
+ handleContentChange();
963
+ });
964
+ }, [
965
+ applyClassSwap,
966
+ focusEditor,
967
+ formattingState.bold,
968
+ handleContentChange,
969
+ isDisabled,
970
+ pushHistory,
971
+ updateFormattingState,
972
+ ]);
973
+ // Italic and underline route through execCommand because it produces
974
+ // semantic <em>/<u> tags, handles toggle-on/off (including unwrap) without
975
+ // a hand-rolled negation-class scheme, and the editor's CSS already
976
+ // styles those tags via descendant selectors. execEditorCommand
977
+ // pre-snapshots history so undo/redo ordering is preserved.
355
978
  const handleItalic = useCallback((event) => {
356
979
  event === null || event === void 0 ? void 0 : event.preventDefault();
357
980
  event === null || event === void 0 ? void 0 : event.stopPropagation();
@@ -366,47 +989,264 @@ const RichTextEditor = React__default.forwardRef(({ size = "md", state = "defaul
366
989
  if (isDisabled || !editorRef.current)
367
990
  return;
368
991
  focusEditor();
369
- try {
370
- document.execCommand("styleWithCSS", false, "true");
992
+ const option = getFontSizeOption(sizeKey);
993
+ const selection = window.getSelection();
994
+ if (!selection || selection.rangeCount === 0) {
995
+ closeAllPickers();
996
+ return;
371
997
  }
372
- catch (error) {
373
- if (process.env.NODE_ENV !== 'production') {
374
- console.warn("styleWithCSS command failed", error);
998
+ pushHistory();
999
+ // Tailwind's `text-*` utilities bundle font-size + a matching
1000
+ // line-height in one rule, so swapping the size class swaps both —
1001
+ // no separate flattening pass needed for the line-height.
1002
+ applyClassSwap(FONT_SIZE_CLASSES, option.className);
1003
+ requestAnimationFrame(() => {
1004
+ updateFormattingState();
1005
+ handleContentChange();
1006
+ });
1007
+ closeAllPickers();
1008
+ }, [
1009
+ applyClassSwap,
1010
+ closeAllPickers,
1011
+ focusEditor,
1012
+ handleContentChange,
1013
+ isDisabled,
1014
+ pushHistory,
1015
+ updateFormattingState,
1016
+ ]);
1017
+ const applyToBlockAncestors = useCallback((apply) => {
1018
+ if (!editorRef.current)
1019
+ return;
1020
+ const selection = window.getSelection();
1021
+ if (!selection || selection.rangeCount === 0)
1022
+ return;
1023
+ const editor = editorRef.current;
1024
+ // Normalize: ensure no text node or inline element is a *direct*
1025
+ // child of the editor. Otherwise `findBlock` would fall back to the
1026
+ // editor itself, and any class set on it would live on the live DOM
1027
+ // but never serialize through `editor.innerHTML` — line-height
1028
+ // changes would silently disappear from saved HTML. Wrap each
1029
+ // contiguous run of inline-or-text top-level children in a fresh
1030
+ // `<div>`. Idempotent: blocks that are already block-level are left
1031
+ // alone, so calling this on every block-level mutation is cheap.
1032
+ const isInlineChild = (node) => {
1033
+ if (node.nodeType === Node.TEXT_NODE)
1034
+ return true;
1035
+ if (node instanceof HTMLElement) {
1036
+ const d = window.getComputedStyle(node).display;
1037
+ return d === "inline" || d === "inline-block";
1038
+ }
1039
+ return false;
1040
+ };
1041
+ const groups = [];
1042
+ let currentGroup = null;
1043
+ for (const child of Array.from(editor.childNodes)) {
1044
+ if (isInlineChild(child)) {
1045
+ if (!currentGroup) {
1046
+ currentGroup = [];
1047
+ groups.push(currentGroup);
1048
+ }
1049
+ currentGroup.push(child);
1050
+ }
1051
+ else {
1052
+ currentGroup = null;
375
1053
  }
376
1054
  }
377
- try {
378
- document.execCommand("fontSize", false, FONT_SIZE_COMMAND_VALUE[sizeKey]);
1055
+ for (const group of groups) {
1056
+ if (group.length === 0)
1057
+ continue;
1058
+ const wrap = document.createElement("div");
1059
+ editor.insertBefore(wrap, group[0]);
1060
+ for (const node of group)
1061
+ wrap.appendChild(node);
379
1062
  }
380
- catch (error) {
381
- if (process.env.NODE_ENV !== 'production') {
382
- console.warn("fontSize command failed", error);
1063
+ // Re-read range after potential mutations — Range objects survive
1064
+ // moves but offsets into reparented text nodes stay valid, so
1065
+ // `selection.getRangeAt(0)` still points at the same characters.
1066
+ const range = selection.getRangeAt(0);
1067
+ const findBlock = (node) => {
1068
+ let n = node;
1069
+ if (n && n.nodeType === Node.TEXT_NODE)
1070
+ n = n.parentElement;
1071
+ while (n && n !== editor && editor.contains(n)) {
1072
+ if (n instanceof HTMLElement) {
1073
+ const d = window.getComputedStyle(n).display;
1074
+ if (d === "block" || d === "list-item" || d === "table-cell" || d === "flex" || d === "grid") {
1075
+ return n;
1076
+ }
1077
+ }
1078
+ n = n.parentElement;
383
1079
  }
1080
+ // After normalization above, an inline node always has a non-editor
1081
+ // block ancestor; this branch is now only reached for malformed
1082
+ // cases. Returning null is safer than returning the editor (which
1083
+ // wouldn't serialize anyway).
1084
+ return null;
1085
+ };
1086
+ const blocks = new Set();
1087
+ if (selection.isCollapsed) {
1088
+ const block = findBlock(range.startContainer);
1089
+ if (block)
1090
+ blocks.add(block);
384
1091
  }
385
- normalizeFontSizeSelection(sizeKey);
386
- try {
387
- document.execCommand("styleWithCSS", false, "false");
1092
+ else if (range.commonAncestorContainer.nodeType === Node.TEXT_NODE) {
1093
+ const block = findBlock(range.commonAncestorContainer);
1094
+ if (block)
1095
+ blocks.add(block);
388
1096
  }
389
- catch (error) {
390
- // Some browsers do not support toggling this flag; ignore.
1097
+ else {
1098
+ const walker = document.createTreeWalker(range.commonAncestorContainer, NodeFilter.SHOW_TEXT, {
1099
+ acceptNode: (n) => range.intersectsNode(n) ? NodeFilter.FILTER_ACCEPT : NodeFilter.FILTER_REJECT,
1100
+ });
1101
+ let current;
1102
+ while ((current = walker.nextNode())) {
1103
+ const block = findBlock(current);
1104
+ if (block)
1105
+ blocks.add(block);
1106
+ }
391
1107
  }
1108
+ blocks.forEach((b) => apply(b));
1109
+ }, []);
1110
+ const handleFontFamily = useCallback((key) => {
1111
+ if (isDisabled || !editorRef.current)
1112
+ return;
1113
+ focusEditor();
1114
+ const option = fontFamilies.find((opt) => opt.key === key);
1115
+ if (!option)
1116
+ return;
1117
+ if (loadFontsOnDemand && option.family) {
1118
+ loadGoogleFont(option.family, option.weights);
1119
+ }
1120
+ pushHistory();
1121
+ applyStyleToSelection((el) => {
1122
+ el.style.fontFamily = option.stack;
1123
+ });
392
1124
  requestAnimationFrame(() => {
393
1125
  updateFormattingState();
394
1126
  handleContentChange();
395
1127
  });
396
- setShowFontSizePicker(false);
397
- setShowColorPicker(false);
1128
+ closeAllPickers();
398
1129
  }, [
1130
+ applyStyleToSelection,
1131
+ closeAllPickers,
399
1132
  focusEditor,
1133
+ fontFamilies,
400
1134
  handleContentChange,
401
1135
  isDisabled,
402
- normalizeFontSizeSelection,
1136
+ loadFontsOnDemand,
1137
+ pushHistory,
403
1138
  updateFormattingState,
404
1139
  ]);
405
- const handleTextColor = useCallback((color) => {
406
- execEditorCommand("foreColor", color);
407
- setShowColorPicker(false);
408
- setShowFontSizePicker(false);
409
- }, [execEditorCommand]);
1140
+ const handleFontWeight = useCallback((key) => {
1141
+ if (isDisabled || !editorRef.current)
1142
+ return;
1143
+ focusEditor();
1144
+ const option = getFontWeightOption(key);
1145
+ pushHistory();
1146
+ applyClassSwap(FONT_WEIGHT_CLASSES, option.className);
1147
+ requestAnimationFrame(() => {
1148
+ updateFormattingState();
1149
+ handleContentChange();
1150
+ });
1151
+ closeAllPickers();
1152
+ }, [
1153
+ applyClassSwap,
1154
+ closeAllPickers,
1155
+ focusEditor,
1156
+ handleContentChange,
1157
+ isDisabled,
1158
+ pushHistory,
1159
+ updateFormattingState,
1160
+ ]);
1161
+ const handleLineHeight = useCallback((key) => {
1162
+ if (isDisabled || !editorRef.current)
1163
+ return;
1164
+ focusEditor();
1165
+ const option = getLineHeightOption(key);
1166
+ pushHistory();
1167
+ // Line height is paragraph-level, so swap the `leading-*` class on the
1168
+ // block ancestors that contain the selection rather than wrapping in a
1169
+ // span. Each block carries at most one `leading-*` class — clear any
1170
+ // existing one first, then add the new one.
1171
+ applyToBlockAncestors((el) => {
1172
+ for (const cls of LINE_HEIGHT_CLASSES) {
1173
+ if (cls !== option.className)
1174
+ el.classList.remove(cls);
1175
+ }
1176
+ el.classList.add(option.className);
1177
+ });
1178
+ requestAnimationFrame(() => {
1179
+ updateFormattingState();
1180
+ handleContentChange();
1181
+ });
1182
+ closeAllPickers();
1183
+ }, [
1184
+ applyToBlockAncestors,
1185
+ closeAllPickers,
1186
+ focusEditor,
1187
+ handleContentChange,
1188
+ isDisabled,
1189
+ pushHistory,
1190
+ updateFormattingState,
1191
+ ]);
1192
+ const handleLetterSpacing = useCallback((key) => {
1193
+ if (isDisabled || !editorRef.current)
1194
+ return;
1195
+ focusEditor();
1196
+ const option = getLetterSpacingOption(key);
1197
+ pushHistory();
1198
+ applyClassSwap(LETTER_SPACING_CLASSES, option.className);
1199
+ requestAnimationFrame(() => {
1200
+ updateFormattingState();
1201
+ handleContentChange();
1202
+ });
1203
+ closeAllPickers();
1204
+ }, [
1205
+ applyClassSwap,
1206
+ closeAllPickers,
1207
+ focusEditor,
1208
+ handleContentChange,
1209
+ isDisabled,
1210
+ pushHistory,
1211
+ updateFormattingState,
1212
+ ]);
1213
+ const handleTextColor = useCallback((token) => {
1214
+ if (isDisabled || !editorRef.current || !token)
1215
+ return;
1216
+ focusEditor();
1217
+ const selection = window.getSelection();
1218
+ if (!selection || selection.rangeCount === 0) {
1219
+ closeAllPickers();
1220
+ return;
1221
+ }
1222
+ pushHistory();
1223
+ applyClassSwap(TEXT_COLOR_CLASSES, `text-${token}`);
1224
+ addRecentColor(token);
1225
+ requestAnimationFrame(() => {
1226
+ updateFormattingState();
1227
+ handleContentChange();
1228
+ });
1229
+ closeAllPickers();
1230
+ }, [
1231
+ addRecentColor,
1232
+ applyClassSwap,
1233
+ closeAllPickers,
1234
+ focusEditor,
1235
+ handleContentChange,
1236
+ isDisabled,
1237
+ pushHistory,
1238
+ updateFormattingState,
1239
+ ]);
1240
+ const handleMouseDown = useCallback((event) => {
1241
+ event.preventDefault();
1242
+ focusEditor();
1243
+ }, [focusEditor]);
1244
+ const fontSizeAnimations = useMemo(() => createDropdownAnimations(fontSizeIsFlipped), [fontSizeIsFlipped]);
1245
+ const fontWeightAnimations = useMemo(() => createDropdownAnimations(fontWeightIsFlipped), [fontWeightIsFlipped]);
1246
+ const fontFamilyAnimations = useMemo(() => createDropdownAnimations(fontFamilyIsFlipped), [fontFamilyIsFlipped]);
1247
+ const lineHeightAnimations = useMemo(() => createDropdownAnimations(lineHeightIsFlipped), [lineHeightIsFlipped]);
1248
+ const letterSpacingAnimations = useMemo(() => createDropdownAnimations(letterSpacingIsFlipped), [letterSpacingIsFlipped]);
1249
+ const colorAnimations = useMemo(() => createDropdownAnimations(colorIsFlipped), [colorIsFlipped]);
410
1250
  const handleAlign = useCallback((alignment) => {
411
1251
  const commandMap = {
412
1252
  left: "justifyLeft",
@@ -416,6 +1256,7 @@ const RichTextEditor = React__default.forwardRef(({ size = "md", state = "defaul
416
1256
  execEditorCommand(commandMap[alignment]);
417
1257
  }, [execEditorCommand]);
418
1258
  const handleSelection = useCallback(() => {
1259
+ var _a;
419
1260
  if (!editorRef.current || isDisabled)
420
1261
  return;
421
1262
  updateFormattingState();
@@ -437,7 +1278,12 @@ const RichTextEditor = React__default.forwardRef(({ size = "md", state = "defaul
437
1278
  setShowToolbar(false);
438
1279
  return;
439
1280
  }
440
- const toolbarWidth = 200;
1281
+ // Measure the actual toolbar width — the floating toolbar grows with
1282
+ // the active control set (font family, font size, …) and a static
1283
+ // 200 px constant clipped it off-canvas at the editor's right edge.
1284
+ // offsetWidth is 0 while the toolbar is unmounted via AnimatePresence;
1285
+ // fall back to a realistic default for the very first frame.
1286
+ const toolbarWidth = ((_a = toolbarRef.current) === null || _a === void 0 ? void 0 : _a.offsetWidth) || 320;
441
1287
  const left = Math.max(10, Math.min(rect.left - editorRect.left + rect.width / 2 - toolbarWidth / 2, editorRect.width - toolbarWidth - 10));
442
1288
  setToolbarPosition({ top: rect.top - editorRect.top - 50, left });
443
1289
  setShowToolbar(true);
@@ -450,11 +1296,42 @@ const RichTextEditor = React__default.forwardRef(({ size = "md", state = "defaul
450
1296
  handleContentChange();
451
1297
  updateFormattingState();
452
1298
  };
1299
+ // beforeinput fires synchronously *before* the DOM mutation, so
1300
+ // editorRef.current.innerHTML is still the pre-keystroke snapshot —
1301
+ // exactly what undo needs. Coalescing in pushHistory groups successive
1302
+ // keystrokes into one undo entry per ~500 ms run.
1303
+ const handleBeforeInput = () => {
1304
+ pushHistory("typing");
1305
+ };
1306
+ // Intercept native undo/redo shortcuts so the browser's contentEditable
1307
+ // stack doesn't drift out of sync with our linear history. Without this
1308
+ // the browser would still honor Cmd/Ctrl+Z on its own internal stack.
1309
+ const handleKeyDown = (event) => {
1310
+ const mod = event.metaKey || event.ctrlKey;
1311
+ if (!mod)
1312
+ return;
1313
+ const key = event.key.toLowerCase();
1314
+ if (key === "z") {
1315
+ event.preventDefault();
1316
+ if (event.shiftKey)
1317
+ handleRedo(event);
1318
+ else
1319
+ handleUndo(event);
1320
+ }
1321
+ else if (key === "y" && !event.shiftKey) {
1322
+ event.preventDefault();
1323
+ handleRedo(event);
1324
+ }
1325
+ };
453
1326
  editor.addEventListener("input", handleInput);
1327
+ editor.addEventListener("beforeinput", handleBeforeInput);
1328
+ editor.addEventListener("keydown", handleKeyDown);
454
1329
  return () => {
455
1330
  editor.removeEventListener("input", handleInput);
1331
+ editor.removeEventListener("beforeinput", handleBeforeInput);
1332
+ editor.removeEventListener("keydown", handleKeyDown);
456
1333
  };
457
- }, [handleContentChange, updateFormattingState]);
1334
+ }, [handleContentChange, handleRedo, handleUndo, pushHistory, updateFormattingState]);
458
1335
  useEffect(() => {
459
1336
  const handleSelectionChange = () => {
460
1337
  if (!editorRef.current)
@@ -477,47 +1354,73 @@ const RichTextEditor = React__default.forwardRef(({ size = "md", state = "defaul
477
1354
  }, [handleSelection, updateFormattingState]);
478
1355
  useEffect(() => {
479
1356
  const handleClickOutside = (event) => {
480
- var _a, _b, _c, _d;
1357
+ var _a, _b, _c, _d, _e, _f, _g, _h;
481
1358
  const target = event.target;
482
1359
  const isInEditor = (_a = editorRef.current) === null || _a === void 0 ? void 0 : _a.contains(target);
483
1360
  const isInToolbar = (_b = toolbarRef.current) === null || _b === void 0 ? void 0 : _b.contains(target);
484
1361
  const isInFontSizeDropdown = (_c = fontSizePortalContentRef.current) === null || _c === void 0 ? void 0 : _c.contains(target);
485
- const isInColorDropdown = (_d = colorPortalContentRef.current) === null || _d === void 0 ? void 0 : _d.contains(target);
486
- if (!isInEditor && !isInToolbar && !isInFontSizeDropdown && !isInColorDropdown) {
1362
+ const isInFontWeightDropdown = (_d = fontWeightPortalContentRef.current) === null || _d === void 0 ? void 0 : _d.contains(target);
1363
+ const isInFontFamilyDropdown = (_e = fontFamilyPortalContentRef.current) === null || _e === void 0 ? void 0 : _e.contains(target);
1364
+ const isInLineHeightDropdown = (_f = lineHeightPortalContentRef.current) === null || _f === void 0 ? void 0 : _f.contains(target);
1365
+ const isInLetterSpacingDropdown = (_g = letterSpacingPortalContentRef.current) === null || _g === void 0 ? void 0 : _g.contains(target);
1366
+ const isInColorDropdown = (_h = colorPortalContentRef.current) === null || _h === void 0 ? void 0 : _h.contains(target);
1367
+ const isInAnyDropdown = isInFontSizeDropdown ||
1368
+ isInFontWeightDropdown ||
1369
+ isInFontFamilyDropdown ||
1370
+ isInLineHeightDropdown ||
1371
+ isInLetterSpacingDropdown ||
1372
+ isInColorDropdown;
1373
+ if (!isInEditor && !isInToolbar && !isInAnyDropdown) {
487
1374
  if (toolbarConfig.position === "floating") {
488
1375
  setShowToolbar(false);
489
1376
  }
490
- setShowColorPicker(false);
491
- setShowFontSizePicker(false);
492
- }
493
- else if (isInToolbar || isInFontSizeDropdown || isInColorDropdown) {
494
- const colorMatch = target === null || target === void 0 ? void 0 : target.closest("[data-tool=\"textColor\"]");
495
- const isColorRelated = Boolean(colorMatch) || isInColorDropdown;
496
- const fontSizeMatch = target === null || target === void 0 ? void 0 : target.closest("[data-tool=\"fontSize\"]");
497
- const isFontSizeRelated = isInFontSizeDropdown || Boolean(fontSizeMatch);
498
- if (!isColorRelated) {
499
- setShowColorPicker(false);
500
- }
501
- if (!isFontSizeRelated) {
1377
+ closeAllPickers();
1378
+ }
1379
+ else if (isInToolbar || isInAnyDropdown) {
1380
+ const targetEl = target;
1381
+ const isFontSizeRelated = isInFontSizeDropdown || Boolean(targetEl === null || targetEl === void 0 ? void 0 : targetEl.closest('[data-tool="fontSize"]'));
1382
+ const isFontWeightRelated = isInFontWeightDropdown || Boolean(targetEl === null || targetEl === void 0 ? void 0 : targetEl.closest('[data-tool="fontWeight"]'));
1383
+ const isFontFamilyRelated = isInFontFamilyDropdown || Boolean(targetEl === null || targetEl === void 0 ? void 0 : targetEl.closest('[data-tool="fontFamily"]'));
1384
+ const isLineHeightRelated = isInLineHeightDropdown || Boolean(targetEl === null || targetEl === void 0 ? void 0 : targetEl.closest('[data-tool="lineHeight"]'));
1385
+ const isLetterSpacingRelated = isInLetterSpacingDropdown ||
1386
+ Boolean(targetEl === null || targetEl === void 0 ? void 0 : targetEl.closest('[data-tool="letterSpacing"]'));
1387
+ const isColorRelated = isInColorDropdown || Boolean(targetEl === null || targetEl === void 0 ? void 0 : targetEl.closest('[data-tool="textColor"]'));
1388
+ if (!isFontSizeRelated)
502
1389
  setShowFontSizePicker(false);
503
- }
1390
+ if (!isFontWeightRelated)
1391
+ setShowFontWeightPicker(false);
1392
+ if (!isFontFamilyRelated)
1393
+ setShowFontFamilyPicker(false);
1394
+ if (!isLineHeightRelated)
1395
+ setShowLineHeightPicker(false);
1396
+ if (!isLetterSpacingRelated)
1397
+ setShowLetterSpacingPicker(false);
1398
+ if (!isColorRelated)
1399
+ setShowColorPicker(false);
504
1400
  }
505
1401
  else if (isInEditor) {
506
- setShowColorPicker(false);
507
- setShowFontSizePicker(false);
1402
+ closeAllPickers();
508
1403
  }
509
1404
  };
510
1405
  document.addEventListener("mousedown", handleClickOutside);
511
1406
  return () => document.removeEventListener("mousedown", handleClickOutside);
512
- }, [toolbarConfig.position]);
1407
+ }, [closeAllPickers, toolbarConfig.position]);
513
1408
  useEffect(() => {
514
1409
  if (editorRef.current && value !== editorRef.current.innerHTML) {
515
- editorRef.current.innerHTML = value;
1410
+ editorRef.current.innerHTML = sanitizeHtml(value);
1411
+ // External `value` change — flush undo history. Snapshots taken
1412
+ // from the previous document point at HTML that no longer matches
1413
+ // anything reachable via the new value, so leaving them in place
1414
+ // would let Undo restore content from a prior session/document.
1415
+ historyRef.current.undo = [];
1416
+ historyRef.current.redo = [];
1417
+ historyRef.current.lastPushKind = null;
1418
+ historyRef.current.lastPushAt = 0;
516
1419
  updateFormattingState();
517
1420
  }
518
- }, [updateFormattingState, value]);
519
- const renderToolbarTool = (tool, index) => {
520
- var _a, _b;
1421
+ }, [updateFormattingState, value, sanitizeHtml]);
1422
+ const renderToolbarTool = (tool, toolKey) => {
1423
+ var _a;
521
1424
  const isActive = tool === "bold"
522
1425
  ? formattingState.bold
523
1426
  : tool === "italic"
@@ -526,141 +1429,253 @@ const RichTextEditor = React__default.forwardRef(({ size = "md", state = "defaul
526
1429
  ? formattingState.underline
527
1430
  : tool === "fontSize"
528
1431
  ? formattingState.fontSize !== DEFAULT_FORMATTING_STATE.fontSize
529
- : tool === "alignLeft"
530
- ? formattingState.textAlign === "left"
531
- : tool === "alignCenter"
532
- ? formattingState.textAlign === "center"
533
- : tool === "alignRight"
534
- ? formattingState.textAlign === "right"
535
- : false;
536
- const isFloatingToolbar = toolbarConfig.position === "floating";
537
- const handleMouseDown = (event) => {
538
- event.preventDefault();
539
- focusEditor();
540
- };
1432
+ : tool === "fontWeight"
1433
+ ? formattingState.fontWeight !== DEFAULT_FORMATTING_STATE.fontWeight
1434
+ : tool === "fontFamily"
1435
+ ? formattingState.fontFamily !== DEFAULT_FORMATTING_STATE.fontFamily
1436
+ : tool === "lineHeight"
1437
+ ? formattingState.lineHeight !== DEFAULT_FORMATTING_STATE.lineHeight
1438
+ : tool === "letterSpacing"
1439
+ ? formattingState.letterSpacing !== DEFAULT_FORMATTING_STATE.letterSpacing
1440
+ : tool === "alignLeft"
1441
+ ? formattingState.textAlign === "left"
1442
+ : tool === "alignCenter"
1443
+ ? formattingState.textAlign === "center"
1444
+ : tool === "alignRight"
1445
+ ? formattingState.textAlign === "right"
1446
+ : false;
541
1447
  switch (tool) {
542
1448
  case "bold":
543
- return (jsx(Button, { size: "sm", color: "neutral", variant: "ghost", iconOnly: true, className: cn(themeStyles.toolbarButtonStyle), "data-state": isActive ? "active" : "inactive", "data-pressed": isActive ? "true" : "false", onMouseDown: handleMouseDown, onClick: handleBold, disabled: isDisabled, "aria-label": "Bold", "aria-pressed": isActive ? "true" : "false", children: jsx(BoldIcon, { className: "w-4 h-4" }) }, index));
1449
+ return (jsx(Button, { size: "sm", color: "mono", variant: "soft", iconOnly: true, className: cn(themeStyles.toolbarButtonStyle), "data-state": isActive ? "active" : "inactive", onMouseDown: handleMouseDown, onClick: handleBold, disabled: isDisabled, "aria-label": "Bold", "aria-pressed": isActive ? "true" : "false", children: jsx(TextB, { className: "size-4" }) }, toolKey));
544
1450
  case "italic":
545
- return (jsx(Button, { size: "sm", color: "neutral", variant: "ghost", iconOnly: true, className: cn(themeStyles.toolbarButtonStyle), "data-state": isActive ? "active" : "inactive", "data-pressed": isActive ? "true" : "false", onMouseDown: handleMouseDown, onClick: handleItalic, disabled: isDisabled, "aria-label": "Italic", "aria-pressed": isActive ? "true" : "false", children: jsx(ItalicIcon, { className: "w-4 h-4" }) }, index));
1451
+ return (jsx(Button, { size: "sm", color: "mono", variant: "soft", iconOnly: true, className: cn(themeStyles.toolbarButtonStyle), "data-state": isActive ? "active" : "inactive", onMouseDown: handleMouseDown, onClick: handleItalic, disabled: isDisabled, "aria-label": "Italic", "aria-pressed": isActive ? "true" : "false", children: jsx(TextItalic, { className: "size-4" }) }, toolKey));
546
1452
  case "underline":
547
- return (jsx(Button, { size: "sm", color: "neutral", variant: "ghost", iconOnly: true, className: cn(themeStyles.toolbarButtonStyle), "data-state": isActive ? "active" : "inactive", "data-pressed": isActive ? "true" : "false", onMouseDown: handleMouseDown, onClick: handleUnderline, disabled: isDisabled, "aria-label": "Underline", "aria-pressed": isActive ? "true" : "false", children: jsx(UnderlineIcon, { className: "w-4 h-4" }) }, index));
1453
+ return (jsx(Button, { size: "sm", color: "mono", variant: "soft", iconOnly: true, className: cn(themeStyles.toolbarButtonStyle), "data-state": isActive ? "active" : "inactive", onMouseDown: handleMouseDown, onClick: handleUnderline, disabled: isDisabled, "aria-label": "Underline", "aria-pressed": isActive ? "true" : "false", children: jsx(TextUnderline, { className: "size-4" }) }, toolKey));
1454
+ case "fontFamily": {
1455
+ // The `fontFamily` tool is opt-in via toolbar config, but
1456
+ // `fontFamilies` is also a public prop — if a consumer passes an
1457
+ // empty array the dropdown has nothing to show and the trigger
1458
+ // can't compute a current option to display. Skip rendering the
1459
+ // tool entirely in that case rather than crashing on undefined.
1460
+ if (fontFamilies.length === 0) {
1461
+ if (process.env.NODE_ENV !== "production") {
1462
+ console.warn("[RichTextEditor]: `fontFamily` toolbar tool was requested but `fontFamilies` is empty — the tool will not render. Either remove `fontFamily` from toolbar.tools or supply at least one option.");
1463
+ }
1464
+ return null;
1465
+ }
1466
+ const currentOption = (_a = fontFamilies.find((opt) => opt.key === formattingState.fontFamily)) !== null && _a !== void 0 ? _a : fontFamilies[0];
1467
+ const portalStyle = {
1468
+ position: "fixed",
1469
+ top: fontFamilyPortalPosition.top,
1470
+ left: fontFamilyPortalPosition.left,
1471
+ zIndex: 1000,
1472
+ ...fontFamilyPortalCssVars,
1473
+ };
1474
+ const renderedDropdown = isClient
1475
+ ? createPortal(jsx(AnimatePresence, { mode: "wait", children: showFontFamilyPicker && (jsx(motion.div, { ref: (el) => {
1476
+ fontFamilyPortalContentRef.current = el;
1477
+ }, "data-flikkui-portal": "", role: "listbox", className: cn(surfaceClasses(surfaceLevel, { translucent: true, shadow: false }), themeStyles.dropdownStyle), style: portalStyle, variants: shouldReduceMotion ? undefined : fontFamilyAnimations, initial: "initial", animate: fontFamilyPortalReady ? "visible" : "initial", exit: "exit", children: jsx(SurfaceProvider, { level: surfaceLevel, children: fontFamilies.map((option) => {
1478
+ const selected = option.key === formattingState.fontFamily;
1479
+ return (jsx("button", { className: themeStyles.dropdownItemStyle, "data-active": selected ? "true" : "false", onMouseDown: (event) => {
1480
+ event.preventDefault();
1481
+ focusEditor();
1482
+ }, onClick: (event) => {
1483
+ event.preventDefault();
1484
+ event.stopPropagation();
1485
+ handleFontFamily(option.key);
1486
+ }, role: "option", "aria-selected": selected, children: jsxs("span", { className: "flex items-center justify-between gap-3", children: [jsx("span", { className: "text-sm", style: { fontFamily: option.stack || undefined }, children: option.label }), option.family && (jsx("span", { className: "text-xs text-[var(--color-text-muted)]", children: "Google" }))] }) }, option.key));
1487
+ }) }) })) }), document.body)
1488
+ : null;
1489
+ return (jsxs("div", { className: "relative", "data-tool": "fontFamily", children: [jsx(Button, { ref: fontFamilyTriggerRef, size: "sm", color: "mono", variant: "soft", className: cn(themeStyles.toolbarButtonStyle, "!justify-start !w-auto px-2 min-w-[4rem] gap-1"), "data-state": isActive ? "active" : "inactive", onMouseDown: handleMouseDown, onClick: (event) => {
1490
+ event.preventDefault();
1491
+ event.stopPropagation();
1492
+ focusEditor();
1493
+ togglePicker("fontFamily");
1494
+ }, disabled: isDisabled, "aria-label": `Font family (${currentOption.label})`, "aria-expanded": showFontFamilyPicker, "aria-haspopup": "listbox", children: jsx("span", { className: "text-sm font-medium truncate text-left max-w-[5.5rem] block", style: { fontFamily: currentOption.stack || undefined }, children: currentOption.label }) }), renderedDropdown] }, toolKey));
1495
+ }
1496
+ case "fontWeight": {
1497
+ const currentOption = getFontWeightOption(formattingState.fontWeight);
1498
+ const portalStyle = {
1499
+ position: "fixed",
1500
+ top: fontWeightPortalPosition.top,
1501
+ left: fontWeightPortalPosition.left,
1502
+ zIndex: 1000,
1503
+ ...fontWeightPortalCssVars,
1504
+ };
1505
+ const renderedDropdown = isClient
1506
+ ? createPortal(jsx(AnimatePresence, { mode: "wait", children: showFontWeightPicker && (jsx(motion.div, { ref: (el) => {
1507
+ fontWeightPortalContentRef.current = el;
1508
+ }, "data-flikkui-portal": "", role: "listbox", className: cn(surfaceClasses(surfaceLevel, { translucent: true, shadow: false }), themeStyles.dropdownStyle), style: portalStyle, variants: shouldReduceMotion ? undefined : fontWeightAnimations, initial: "initial", animate: fontWeightPortalReady ? "visible" : "initial", exit: "exit", children: jsx(SurfaceProvider, { level: surfaceLevel, children: FONT_WEIGHT_OPTIONS.map((option) => {
1509
+ const selected = option.key === formattingState.fontWeight;
1510
+ return (jsx("button", { className: themeStyles.dropdownItemStyle, "data-active": selected ? "true" : "false", onMouseDown: (event) => {
1511
+ event.preventDefault();
1512
+ focusEditor();
1513
+ }, onClick: (event) => {
1514
+ event.preventDefault();
1515
+ event.stopPropagation();
1516
+ handleFontWeight(option.key);
1517
+ }, role: "option", "aria-selected": selected, children: jsxs("span", { className: "flex items-center justify-between gap-3", children: [jsx("span", { className: "text-sm", style: { fontWeight: option.value }, children: option.label }), jsx("span", { className: "text-sm text-[var(--color-text-muted)]", children: option.value })] }) }, option.key));
1518
+ }) }) })) }), document.body)
1519
+ : null;
1520
+ return (jsxs("div", { className: "relative", "data-tool": "fontWeight", children: [jsx(Button, { ref: fontWeightTriggerRef, size: "sm", color: "mono", variant: "soft", iconOnly: true, className: cn(themeStyles.toolbarButtonStyle), "data-state": isActive ? "active" : "inactive", onMouseDown: handleMouseDown, onClick: (event) => {
1521
+ event.preventDefault();
1522
+ event.stopPropagation();
1523
+ focusEditor();
1524
+ togglePicker("fontWeight");
1525
+ }, disabled: isDisabled, "aria-label": `Font weight (${currentOption.label})`, "aria-expanded": showFontWeightPicker, "aria-haspopup": "listbox", children: jsx(TextB, { className: "w-4 h-4" }) }), renderedDropdown] }, toolKey));
1526
+ }
548
1527
  case "fontSize": {
549
1528
  const currentOption = getFontSizeOption(formattingState.fontSize);
550
- const dropdownClassName = themeStyles.dropdownStyle;
551
- const fontSizeAnimations = createDropdownAnimations(fontSizeIsFlipped);
552
- const dropdownList = (jsx("div", { className: dropdownClassName, role: "listbox", children: FONT_SIZE_OPTIONS.map((option) => (jsx("button", { className: cn(themeStyles.dropdownItemStyle, option.key === formattingState.fontSize
553
- ? "bg-[var(--color-primary-50)] text-[var(--color-primary-900)]"
554
- : undefined), "data-active": option.key === formattingState.fontSize ? "true" : "false", onMouseDown: (event) => {
555
- event.preventDefault();
556
- focusEditor();
557
- }, onClick: (event) => {
558
- event.preventDefault();
559
- event.stopPropagation();
560
- handleFontSize(option.key);
561
- }, role: "option", "aria-selected": option.key === formattingState.fontSize, children: jsxs("span", { className: "flex items-center justify-between gap-3", children: [jsx("span", { className: "uppercase text-xs font-medium", children: option.label }), jsxs("span", { className: "text-xs text-[var(--color-text-muted)]", children: [option.px, "px"] })] }) }, option.key))) }));
562
- let renderedDropdown = null;
563
- if (isFloatingToolbar && isClient) {
564
- const triggerWidth = (_a = fontSizeTriggerRef.current) === null || _a === void 0 ? void 0 : _a.getBoundingClientRect().width;
565
- const computedWidth = fontSizePortalPosition.width || triggerWidth || undefined;
566
- const dropdownStyle = {
567
- position: "fixed",
568
- top: fontSizePortalPosition.top,
569
- left: fontSizePortalPosition.left,
570
- zIndex: 1000,
571
- ...fontSizePortalCssVars,
572
- };
573
- if (computedWidth) {
574
- dropdownStyle.minWidth = computedWidth;
575
- dropdownStyle.width = computedWidth;
576
- }
577
- renderedDropdown = createPortal(jsx(AnimatePresence, { mode: "wait", children: showFontSizePicker && (jsx(motion.div, { ref: (el) => {
1529
+ const portalStyle = {
1530
+ position: "fixed",
1531
+ top: fontSizePortalPosition.top,
1532
+ left: fontSizePortalPosition.left,
1533
+ zIndex: 1000,
1534
+ ...fontSizePortalCssVars,
1535
+ };
1536
+ const renderedDropdown = isClient
1537
+ ? createPortal(jsx(AnimatePresence, { mode: "wait", children: showFontSizePicker && (jsx(motion.div, { ref: (el) => {
578
1538
  fontSizePortalContentRef.current = el;
579
- }, style: dropdownStyle, variants: shouldReduceMotion ? undefined : fontSizeAnimations, initial: "initial", animate: fontSizePortalReady ? "visible" : "initial", exit: "exit", children: dropdownList })) }), document.body);
580
- }
581
- else {
582
- renderedDropdown = showFontSizePicker ? dropdownList : null;
583
- if (!showFontSizePicker) {
584
- fontSizePortalContentRef.current = null;
585
- }
586
- }
587
- return (jsxs("div", { className: "relative", "data-tool": "fontSize", children: [jsx(Button, { ref: fontSizeTriggerRef, size: "sm", color: "neutral", variant: "ghost", className: cn(themeStyles.toolbarButtonStyle, "px-2 min-w-[3rem] gap-1"), "data-state": isActive ? "active" : "inactive", "data-pressed": isActive ? "true" : "false", onMouseDown: handleMouseDown, onClick: (event) => {
1539
+ }, "data-flikkui-portal": "", role: "listbox", className: cn(surfaceClasses(surfaceLevel, { translucent: true, shadow: false }), themeStyles.dropdownStyle), style: portalStyle, variants: shouldReduceMotion ? undefined : fontSizeAnimations, initial: "initial", animate: fontSizePortalReady ? "visible" : "initial", exit: "exit", children: jsx(SurfaceProvider, { level: surfaceLevel, children: FONT_SIZE_OPTIONS.map((option) => {
1540
+ const selected = option.key === formattingState.fontSize;
1541
+ return (jsx("button", { className: themeStyles.dropdownItemStyle, "data-active": selected ? "true" : "false", onMouseDown: (event) => {
1542
+ event.preventDefault();
1543
+ focusEditor();
1544
+ }, onClick: (event) => {
1545
+ event.preventDefault();
1546
+ event.stopPropagation();
1547
+ handleFontSize(option.key);
1548
+ }, role: "option", "aria-selected": selected, children: jsxs("span", { className: "flex items-center justify-between gap-3", children: [jsx("span", { className: "uppercase text-sm font-medium", children: option.label }), jsxs("span", { className: "text-sm text-[var(--color-text-muted)]", children: [option.px, "px"] })] }) }, option.key));
1549
+ }) }) })) }), document.body)
1550
+ : null;
1551
+ return (jsxs("div", { className: "relative", "data-tool": "fontSize", children: [jsx(Button, { ref: fontSizeTriggerRef, size: "sm", color: "mono", variant: "soft", className: cn(themeStyles.toolbarButtonStyle, "px-2 min-w-[3rem] gap-1"), "data-state": isActive ? "active" : "inactive", onMouseDown: handleMouseDown, onClick: (event) => {
588
1552
  event.preventDefault();
589
1553
  event.stopPropagation();
590
1554
  focusEditor();
591
- setShowFontSizePicker((previous) => !previous);
592
- setShowColorPicker(false);
593
- }, disabled: isDisabled, "aria-label": "Font size", "aria-expanded": showFontSizePicker, "aria-haspopup": "listbox", children: jsx("span", { className: "text-xs font-medium tracking-wide uppercase", children: currentOption.label }) }), toolbarConfig.position === "floating" ? null : renderedDropdown, toolbarConfig.position === "floating" ? renderedDropdown : null] }, index));
594
- }
595
- case "textColor":
596
- {
597
- const colorDropdownClassName = cn(themeStyles.dropdownStyle, themeStyles.colorPickerStyle);
598
- const colorAnimations = createDropdownAnimations(colorIsFlipped);
599
- const colorDropdownList = (jsx("div", { className: cn(colorDropdownClassName, "p-2"), children: colorOptions.map((color) => (jsx("button", { className: themeStyles.colorSwatchStyle, style: { backgroundColor: color.value }, onMouseDown: (event) => {
1555
+ togglePicker("fontSize");
1556
+ }, disabled: isDisabled, "aria-label": "Font size", "aria-expanded": showFontSizePicker, "aria-haspopup": "listbox", children: jsx("span", { className: "text-sm font-medium tracking-wide uppercase", children: currentOption.label }) }), renderedDropdown] }, toolKey));
1557
+ }
1558
+ case "lineHeight": {
1559
+ const currentOption = getLineHeightOption(formattingState.lineHeight);
1560
+ const portalStyle = {
1561
+ position: "fixed",
1562
+ top: lineHeightPortalPosition.top,
1563
+ left: lineHeightPortalPosition.left,
1564
+ zIndex: 1000,
1565
+ ...lineHeightPortalCssVars,
1566
+ };
1567
+ const renderedDropdown = isClient
1568
+ ? createPortal(jsx(AnimatePresence, { mode: "wait", children: showLineHeightPicker && (jsx(motion.div, { ref: (el) => {
1569
+ lineHeightPortalContentRef.current = el;
1570
+ }, "data-flikkui-portal": "", role: "listbox", className: cn(surfaceClasses(surfaceLevel, { translucent: true, shadow: false }), themeStyles.dropdownStyle), style: portalStyle, variants: shouldReduceMotion ? undefined : lineHeightAnimations, initial: "initial", animate: lineHeightPortalReady ? "visible" : "initial", exit: "exit", children: jsx(SurfaceProvider, { level: surfaceLevel, children: LINE_HEIGHT_OPTIONS.map((option) => {
1571
+ const selected = option.key === formattingState.lineHeight;
1572
+ return (jsx("button", { className: themeStyles.dropdownItemStyle, "data-active": selected ? "true" : "false", onMouseDown: (event) => {
1573
+ event.preventDefault();
1574
+ focusEditor();
1575
+ }, onClick: (event) => {
1576
+ event.preventDefault();
1577
+ event.stopPropagation();
1578
+ handleLineHeight(option.key);
1579
+ }, role: "option", "aria-selected": selected, children: jsxs("span", { className: "flex items-center justify-between gap-3", children: [jsx("span", { className: "text-sm font-medium", children: option.label }), jsx("span", { className: "text-sm text-[var(--color-text-muted)]", children: option.value })] }) }, option.key));
1580
+ }) }) })) }), document.body)
1581
+ : null;
1582
+ return (jsxs("div", { className: "relative", "data-tool": "lineHeight", children: [jsx(Button, { ref: lineHeightTriggerRef, size: "sm", color: "mono", variant: "soft", iconOnly: true, className: cn(themeStyles.toolbarButtonStyle), "data-state": isActive ? "active" : "inactive", onMouseDown: handleMouseDown, onClick: (event) => {
600
1583
  event.preventDefault();
1584
+ event.stopPropagation();
601
1585
  focusEditor();
602
- }, onClick: (event) => {
1586
+ togglePicker("lineHeight");
1587
+ }, disabled: isDisabled, "aria-label": `Line height (${currentOption.label})`, "aria-expanded": showLineHeightPicker, "aria-haspopup": "listbox", children: jsx(ArrowsDownUp, { className: "w-4 h-4" }) }), renderedDropdown] }, toolKey));
1588
+ }
1589
+ case "letterSpacing": {
1590
+ const currentOption = getLetterSpacingOption(formattingState.letterSpacing);
1591
+ const portalStyle = {
1592
+ position: "fixed",
1593
+ top: letterSpacingPortalPosition.top,
1594
+ left: letterSpacingPortalPosition.left,
1595
+ zIndex: 1000,
1596
+ ...letterSpacingPortalCssVars,
1597
+ };
1598
+ const renderedDropdown = isClient
1599
+ ? createPortal(jsx(AnimatePresence, { mode: "wait", children: showLetterSpacingPicker && (jsx(motion.div, { ref: (el) => {
1600
+ letterSpacingPortalContentRef.current = el;
1601
+ }, "data-flikkui-portal": "", role: "listbox", className: cn(surfaceClasses(surfaceLevel, { translucent: true, shadow: false }), themeStyles.dropdownStyle), style: portalStyle, variants: shouldReduceMotion ? undefined : letterSpacingAnimations, initial: "initial", animate: letterSpacingPortalReady ? "visible" : "initial", exit: "exit", children: jsx(SurfaceProvider, { level: surfaceLevel, children: LETTER_SPACING_OPTIONS.map((option) => {
1602
+ const selected = option.key === formattingState.letterSpacing;
1603
+ return (jsx("button", { className: themeStyles.dropdownItemStyle, "data-active": selected ? "true" : "false", onMouseDown: (event) => {
1604
+ event.preventDefault();
1605
+ focusEditor();
1606
+ }, onClick: (event) => {
1607
+ event.preventDefault();
1608
+ event.stopPropagation();
1609
+ handleLetterSpacing(option.key);
1610
+ }, role: "option", "aria-selected": selected, children: jsxs("span", { className: "flex items-center justify-between gap-3", children: [jsx("span", { className: "text-sm font-medium", children: option.label }), jsx("span", { className: "text-sm text-[var(--color-text-muted)]", children: option.value })] }) }, option.key));
1611
+ }) }) })) }), document.body)
1612
+ : null;
1613
+ return (jsxs("div", { className: "relative", "data-tool": "letterSpacing", children: [jsx(Button, { ref: letterSpacingTriggerRef, size: "sm", color: "mono", variant: "soft", iconOnly: true, className: cn(themeStyles.toolbarButtonStyle), "data-state": isActive ? "active" : "inactive", onMouseDown: handleMouseDown, onClick: (event) => {
603
1614
  event.preventDefault();
604
1615
  event.stopPropagation();
605
- handleTextColor(color.value);
606
- }, "aria-label": `Set text color to ${color.label}` }, color.value))) }));
607
- let renderedColorDropdown = null;
608
- if (isFloatingToolbar && isClient) {
609
- const triggerWidth = (_b = colorTriggerRef.current) === null || _b === void 0 ? void 0 : _b.getBoundingClientRect().width;
610
- const computedWidth = colorPortalPosition.width || triggerWidth || undefined;
611
- const dropdownStyle = {
612
- position: "fixed",
613
- top: colorPortalPosition.top,
614
- left: colorPortalPosition.left,
615
- zIndex: 1000,
616
- ...colorPortalCssVars,
617
- };
618
- if (computedWidth) {
619
- dropdownStyle.minWidth = computedWidth;
620
- dropdownStyle.width = computedWidth;
621
- }
622
- renderedColorDropdown = createPortal(jsx(AnimatePresence, { mode: "wait", children: showColorPicker && (jsx(motion.div, { ref: (el) => {
623
- colorPortalContentRef.current = el;
624
- }, style: dropdownStyle, variants: shouldReduceMotion ? undefined : colorAnimations, initial: "initial", animate: colorPortalReady ? "visible" : "initial", exit: "exit", children: colorDropdownList })) }), document.body);
625
- }
626
- else {
627
- renderedColorDropdown = showColorPicker ? colorDropdownList : null;
628
- if (!showColorPicker) {
629
- colorPortalContentRef.current = null;
630
- }
631
- }
632
- return (jsxs("div", { className: "relative", "data-tool": "textColor", children: [jsx(Button, { ref: colorTriggerRef, size: "sm", color: "neutral", variant: "ghost", iconOnly: true, className: cn(themeStyles.toolbarButtonStyle), onMouseDown: handleMouseDown, onClick: (event) => {
633
- event.preventDefault();
634
- event.stopPropagation();
635
- focusEditor();
636
- setShowFontSizePicker(false);
637
- setShowColorPicker((previous) => !previous);
638
- }, disabled: isDisabled, "aria-label": "Text Color", "aria-expanded": showColorPicker, children: jsx(PaintBrushIcon, { className: "w-4 h-4" }) }), isFloatingToolbar ? null : renderedColorDropdown, isFloatingToolbar ? renderedColorDropdown : null] }, index));
639
- }
1616
+ focusEditor();
1617
+ togglePicker("letterSpacing");
1618
+ }, disabled: isDisabled, "aria-label": `Letter spacing (${currentOption.label})`, "aria-expanded": showLetterSpacingPicker, "aria-haspopup": "listbox", children: jsx(ArrowsLeftRight, { className: "w-4 h-4" }) }), renderedDropdown] }, toolKey));
1619
+ }
1620
+ case "textColor": {
1621
+ const portalStyle = {
1622
+ position: "fixed",
1623
+ top: colorPortalPosition.top,
1624
+ left: colorPortalPosition.left,
1625
+ zIndex: 1000,
1626
+ ...colorPortalCssVars,
1627
+ };
1628
+ const currentToken = formattingState.textColor;
1629
+ // `bgValue` paints the swatch (resolved hex/oklch); `token` is the
1630
+ // Tailwind shade fragment (`rose-500`, `white`, …) used to build
1631
+ // the `text-{token}` class applied to the editor content.
1632
+ const renderSwatch = (bgValue, token, label) => {
1633
+ const isActiveSwatch = token === currentToken;
1634
+ return (jsx("button", { className: themeStyles.colorSwatchStyle, style: { backgroundColor: bgValue }, "data-active": isActiveSwatch ? "true" : "false", onMouseDown: (event) => {
1635
+ event.preventDefault();
1636
+ focusEditor();
1637
+ }, onClick: (event) => {
1638
+ event.preventDefault();
1639
+ event.stopPropagation();
1640
+ handleTextColor(token);
1641
+ }, "aria-label": `Set text color to ${label}` }, `swatch-${label}`));
1642
+ };
1643
+ const renderedColorDropdown = isClient
1644
+ ? createPortal(jsx(AnimatePresence, { mode: "wait", children: showColorPicker && (jsx(motion.div, { ref: (el) => {
1645
+ colorPortalContentRef.current = el;
1646
+ }, "data-flikkui-portal": "", className: cn(surfaceClasses(surfaceLevel, { translucent: true, shadow: false }), themeStyles.dropdownStyle, "!max-h-none !overflow-visible"), style: portalStyle, variants: shouldReduceMotion ? undefined : colorAnimations, initial: "initial", animate: colorPortalReady ? "visible" : "initial", exit: "exit", children: jsx(SurfaceProvider, { level: surfaceLevel, children: jsx(ScrollArea, { type: "none", className: "max-h-[20rem]", children: jsxs("div", { className: themeStyles.colorPickerStyle, children: [recentColors.length > 0 && (jsxs("div", { className: "flex flex-col gap-1 pb-2 mb-1 border-b border-[var(--color-border)]", children: [jsx("span", { className: "text-[11px] font-medium uppercase tracking-wide text-[var(--color-text-muted)]", children: "Recent" }), jsx("div", { className: "flex gap-0.5", children: recentColors.map((token) => renderSwatch(resolveTailwindColor(token), token, `recent ${token}`)) })] })), jsxs("div", { className: "flex flex-col gap-1", children: [jsx("span", { className: "text-[11px] font-medium uppercase tracking-wide text-[var(--color-text-muted)]", children: "Mono" }), jsx("div", { className: "flex gap-0.5", children: MONO_COLORS.map((color) => renderSwatch(color.value, color.token, color.name)) }), jsx("span", { className: "mt-2 text-[11px] font-medium uppercase tracking-wide text-[var(--color-text-muted)]", children: "Spectrum" }), TAILWIND_COLOR_FAMILIES.map((family) => (jsx("div", { className: "flex gap-0.5", children: getTailwindShadeTokens(family).map((token) => renderSwatch(resolveTailwindColor(token), token, token)) }, family)))] })] }) }) }) })) }), document.body)
1647
+ : null;
1648
+ return (jsxs("div", { className: "relative", "data-tool": "textColor", children: [jsx(Button, { ref: colorTriggerRef, size: "sm", color: "mono", variant: "soft", iconOnly: true, className: cn(themeStyles.toolbarButtonStyle), onMouseDown: handleMouseDown, onClick: (event) => {
1649
+ event.preventDefault();
1650
+ event.stopPropagation();
1651
+ focusEditor();
1652
+ togglePicker("color");
1653
+ }, disabled: isDisabled, "aria-label": "Text Color", "aria-expanded": showColorPicker, children: jsx(PaintBrush, { className: "w-4 h-4" }) }), renderedColorDropdown] }, toolKey));
1654
+ }
640
1655
  case "alignLeft":
641
- return (jsx(Button, { size: "sm", color: "neutral", variant: "ghost", iconOnly: true, className: cn(themeStyles.toolbarButtonStyle), "data-state": isActive ? "active" : "inactive", "data-pressed": isActive ? "true" : "false", onMouseDown: handleMouseDown, onClick: (event) => {
1656
+ return (jsx(Button, { size: "sm", color: "mono", variant: "soft", iconOnly: true, className: cn(themeStyles.toolbarButtonStyle), "data-state": isActive ? "active" : "inactive", onMouseDown: handleMouseDown, onClick: (event) => {
642
1657
  event.preventDefault();
643
1658
  event.stopPropagation();
644
1659
  handleAlign("left");
645
- }, disabled: isDisabled, "aria-label": "Align Left", "aria-pressed": isActive ? "true" : "false", children: jsx(Bars3BottomLeftIcon, { className: "w-4 h-4" }) }, index));
1660
+ }, disabled: isDisabled, "aria-label": "Align Left", "aria-pressed": isActive ? "true" : "false", children: jsx(TextAlignLeft, { className: "w-4 h-4" }) }, toolKey));
646
1661
  case "alignCenter":
647
- return (jsx(Button, { size: "sm", color: "neutral", variant: "ghost", iconOnly: true, className: cn(themeStyles.toolbarButtonStyle), "data-state": isActive ? "active" : "inactive", "data-pressed": isActive ? "true" : "false", onMouseDown: handleMouseDown, onClick: (event) => {
1662
+ return (jsx(Button, { size: "sm", color: "mono", variant: "soft", iconOnly: true, className: cn(themeStyles.toolbarButtonStyle), "data-state": isActive ? "active" : "inactive", onMouseDown: handleMouseDown, onClick: (event) => {
648
1663
  event.preventDefault();
649
1664
  event.stopPropagation();
650
1665
  handleAlign("center");
651
- }, disabled: isDisabled, "aria-label": "Align Center", "aria-pressed": isActive ? "true" : "false", children: jsx(Bars3Icon, { className: "w-4 h-4" }) }, index));
1666
+ }, disabled: isDisabled, "aria-label": "Align Center", "aria-pressed": isActive ? "true" : "false", children: jsx(List, { className: "w-4 h-4" }) }, toolKey));
652
1667
  case "alignRight":
653
- return (jsx(Button, { size: "sm", color: "neutral", variant: "ghost", iconOnly: true, className: cn(themeStyles.toolbarButtonStyle), "data-state": isActive ? "active" : "inactive", "data-pressed": isActive ? "true" : "false", onMouseDown: handleMouseDown, onClick: (event) => {
1668
+ return (jsx(Button, { size: "sm", color: "mono", variant: "soft", iconOnly: true, className: cn(themeStyles.toolbarButtonStyle), "data-state": isActive ? "active" : "inactive", onMouseDown: handleMouseDown, onClick: (event) => {
654
1669
  event.preventDefault();
655
1670
  event.stopPropagation();
656
1671
  handleAlign("right");
657
- }, disabled: isDisabled, "aria-label": "Align Right", "aria-pressed": isActive ? "true" : "false", children: jsx(Bars3BottomRightIcon, { className: "w-4 h-4" }) }, index));
1672
+ }, disabled: isDisabled, "aria-label": "Align Right", "aria-pressed": isActive ? "true" : "false", children: jsx(TextAlignRight, { className: "w-4 h-4" }) }, toolKey));
658
1673
  case "undo":
659
- return (jsx(Button, { size: "sm", color: "neutral", variant: "ghost", iconOnly: true, className: cn(themeStyles.toolbarButtonStyle), onMouseDown: handleMouseDown, onClick: handleUndo, disabled: isDisabled, "aria-label": "Undo", children: jsx(ArrowUturnLeftIcon, { className: "w-4 h-4" }) }, index));
1674
+ return (jsx(Button, { size: "sm", color: "mono", variant: "soft", iconOnly: true, className: cn(themeStyles.toolbarButtonStyle), onMouseDown: handleMouseDown, onClick: handleUndo, disabled: isDisabled, "aria-label": "Undo", children: jsx(ArrowUUpLeft, { className: "w-4 h-4" }) }, toolKey));
660
1675
  case "redo":
661
- return (jsx(Button, { size: "sm", color: "neutral", variant: "ghost", iconOnly: true, className: cn(themeStyles.toolbarButtonStyle), onMouseDown: handleMouseDown, onClick: handleRedo, disabled: isDisabled, "aria-label": "Redo", children: jsx(ArrowUturnRightIcon, { className: "w-4 h-4" }) }, index));
1676
+ return (jsx(Button, { size: "sm", color: "mono", variant: "soft", iconOnly: true, className: cn(themeStyles.toolbarButtonStyle), onMouseDown: handleMouseDown, onClick: handleRedo, disabled: isDisabled, "aria-label": "Redo", children: jsx(ArrowUUpRight, { className: "w-4 h-4" }) }, toolKey));
662
1677
  case "separator":
663
- return jsx("div", { className: themeStyles.separatorStyle }, index);
1678
+ return jsx("div", { className: themeStyles.separatorStyle }, toolKey);
664
1679
  default:
665
1680
  return null;
666
1681
  }
@@ -668,14 +1683,13 @@ const RichTextEditor = React__default.forwardRef(({ size = "md", state = "defaul
668
1683
  const renderToolbar = () => {
669
1684
  if (!toolbarConfig.show || !toolbarConfig.tools)
670
1685
  return null;
671
- const toolbarClass = cn(themeStyles.toolbarStyle, toolbarConfig.className);
672
- const toolbarContent = (jsx("div", { ref: toolbarRef, className: toolbarClass, children: toolbarConfig.tools.map((tool, index) => renderToolbarTool(tool, index)) }));
1686
+ const tools = toolbarConfig.tools.map((tool, index) => renderToolbarTool(tool, `${tool}-${index}`));
673
1687
  if (toolbarConfig.position === "floating") {
674
- return (jsx(AnimatePresence, { mode: "wait", children: showToolbar && (jsx(motion.div, { variants: shouldReduceMotion ? undefined : floatingToolbarVariants, initial: "initial", animate: "animate", exit: "exit", className: "bg-white/70 backdrop-blur-sm shadow-2xl rounded-xl border border-[var(--color-border)] overflow-hidden", style: { position: "absolute", top: toolbarPosition.top, left: toolbarPosition.left, zIndex: 50 }, children: toolbarContent }, "floating-toolbar")) }));
1688
+ return (jsx(AnimatePresence, { mode: "wait", children: showToolbar && (jsx(motion.div, { ref: toolbarRef, variants: shouldReduceMotion ? undefined : floatingToolbarVariants, initial: "initial", animate: "animate", exit: "exit", className: cn(surfaceClasses(surfaceLevel, { translucent: true }), themeStyles.floatingToolbarStyle, toolbarConfig.className), style: { position: "absolute", top: toolbarPosition.top, left: toolbarPosition.left, zIndex: 50 }, children: jsx(SurfaceProvider, { level: surfaceLevel, children: tools }) }, "floating-toolbar")) }));
675
1689
  }
676
- return toolbarContent;
1690
+ return (jsx("div", { ref: toolbarRef, className: cn(themeStyles.toolbarStyle, toolbarConfig.className), children: tools }));
677
1691
  };
678
- return (jsxs("div", { className: cn(themeStyles.wrapperStyle, className), ...props, children: [label && (jsx("div", { className: "mb-1", children: jsx(FormLabel, { htmlFor: editorId, className: labelClassName, state: state, required: required, children: label }) })), jsxs("div", { className: "relative", children: [jsxs("div", { className: cn(themeStyles.containerStyle, themeStyles.states[state], themeStyles.sizes[size]), "data-state": getDataState(), children: [toolbarConfig.position === "top" && renderToolbar(), jsx("div", { ref: (el) => {
1692
+ return (jsxs("div", { className: cn(themeStyles.wrapperStyle, className), ...props, children: [label && (typeof label === 'string' ? (jsx("div", { className: "mb-1", children: jsx(FormLabel, { htmlFor: editorId, className: labelClassName, state: state, required: required, children: label }) })) : (label)), jsxs("div", { className: "relative", children: [jsxs("div", { className: cn(themeStyles.containerStyle, themeStyles.states[state], themeStyles.sizes[size]), "data-state": getDataState(), children: [toolbarConfig.position === "top" && renderToolbar(), jsx("div", { ref: (el) => {
679
1693
  if (el) {
680
1694
  editorRef.current = el;
681
1695
  if (typeof ref === "function") {
@@ -693,10 +1707,9 @@ const RichTextEditor = React__default.forwardRef(({ size = "md", state = "defaul
693
1707
  if (toolbarConfig.position === "floating") {
694
1708
  setShowToolbar(false);
695
1709
  }
696
- setShowColorPicker(false);
697
- setShowFontSizePicker(false);
698
- }, "aria-invalid": isInvalid, "aria-required": required, role: "textbox", "aria-multiline": "true", "aria-label": label || "Rich text editor", suppressContentEditableWarning: true })] }), toolbarConfig.position === "floating" && renderToolbar()] }), helperText && (jsx("div", { className: cn(themeStyles.helperText, helperTextClassName), children: helperText }))] }));
1710
+ closeAllPickers();
1711
+ }, "aria-invalid": isInvalid, "aria-required": required, "aria-describedby": displayedMessage ? messageId : undefined, role: "textbox", "aria-multiline": "true", "aria-label": typeof label === 'string' ? label : "Rich text editor", suppressContentEditableWarning: true })] }), toolbarConfig.position === "floating" && renderToolbar()] }), displayedMessage && (typeof displayedMessage === 'string' ? (jsx("div", { id: messageId, role: isInvalid ? "alert" : undefined, className: cn(themeStyles.helperText, helperTextClassName), children: displayedMessage })) : (displayedMessage))] }));
699
1712
  });
700
1713
  RichTextEditor.displayName = "RichTextEditor";
701
1714
 
702
- export { RichTextEditor };
1715
+ export { DEFAULT_FONT_FAMILY_OPTIONS, RichTextEditor, loadGoogleFont };