@flikk/ui 1.0.0-beta.1 → 1.0.0-beta.10

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 (512) hide show
  1. package/dist/components/ai/ApprovalCard/ApprovalCard.js +2 -2
  2. package/dist/components/ai/ApprovalCard/ApprovalCard.types.d.ts +2 -2
  3. package/dist/components/ai/CodeBlock/CodeBlock.theme.js +2 -2
  4. package/dist/components/ai/PromptInput/PromptInput.animations.d.ts +25 -0
  5. package/dist/components/ai/PromptInput/PromptInput.animations.js +61 -0
  6. package/dist/components/ai/PromptInput/PromptInput.js +143 -28
  7. package/dist/components/ai/PromptInput/PromptInput.theme.js +6 -1
  8. package/dist/components/ai/PromptInput/PromptInput.types.d.ts +68 -0
  9. package/dist/components/ai/PromptInput/VoiceRecorder.d.ts +10 -0
  10. package/dist/components/ai/PromptInput/VoiceRecorder.js +181 -0
  11. package/dist/components/ai/PromptInput/VoiceRecorder.types.d.ts +17 -0
  12. package/dist/components/ai/PromptInput/index.d.ts +1 -0
  13. package/dist/components/ai/PromptSuggestions/PromptSuggestion.theme.js +1 -1
  14. package/dist/components/ai/StreamingResponse/MarkdownRenderer.d.ts +5 -2
  15. package/dist/components/ai/StreamingResponse/MarkdownRenderer.js +51 -27
  16. package/dist/components/ai/StreamingResponse/StreamingCursor.d.ts +4 -5
  17. package/dist/components/ai/StreamingResponse/StreamingCursor.js +5 -12
  18. package/dist/components/ai/StreamingResponse/StreamingResponse.animations.d.ts +7 -0
  19. package/dist/components/ai/StreamingResponse/StreamingResponse.animations.js +20 -1
  20. package/dist/components/ai/StreamingResponse/StreamingResponse.js +2 -2
  21. package/dist/components/ai/StreamingResponse/StreamingResponse.theme.js +4 -4
  22. package/dist/components/ai/StreamingResponse/StreamingResponse.types.d.ts +2 -0
  23. package/dist/components/ai/StreamingResponse/WordAnimationContext.d.ts +27 -0
  24. package/dist/components/ai/StreamingResponse/WordAnimationContext.js +134 -0
  25. package/dist/components/ai/StreamingResponse/index.d.ts +3 -1
  26. package/dist/components/ai/ThinkingIndicator/ThinkingIndicator.theme.js +2 -2
  27. package/dist/components/ai/TokenCounter/TokenCounter.theme.js +6 -6
  28. package/dist/components/ai/index.js +1 -0
  29. package/dist/components/charts/ActivityRings/ActivityRings.js +1 -1
  30. package/dist/components/charts/ActivityRings/ActivityRings.theme.js +2 -2
  31. package/dist/components/charts/BarChart/BarChart.js +3 -3
  32. package/dist/components/charts/ChartContainer.js +1 -1
  33. package/dist/components/charts/ComboChart/ComboChart.js +2 -2
  34. package/dist/components/charts/DonutChart/DonutChart.theme.js +1 -1
  35. package/dist/components/charts/DonutChart/DonutChart.types.d.ts +1 -2
  36. package/dist/components/charts/DonutChart/MultiSegmentDonutChart.js +1 -1
  37. package/dist/components/charts/DonutChart/MultiSegmentDonutChart.theme.js +1 -1
  38. package/dist/components/charts/DonutChart/MultiSegmentDonutChart.types.d.ts +1 -2
  39. package/dist/components/charts/FunnelChart/FunnelChart.js +7 -7
  40. package/dist/components/charts/Heatmap/Heatmap.theme.js +1 -1
  41. package/dist/components/charts/Heatmap/HeatmapCell.js +1 -1
  42. package/dist/components/charts/Heatmap/HeatmapLegend.js +1 -1
  43. package/dist/components/charts/RadarChart/RadarChart.theme.js +2 -2
  44. package/dist/components/charts/ScatterPlot/ScatterPlot.js +1 -1
  45. package/dist/components/charts/ScatterPlot/ScatterPlot.theme.js +2 -2
  46. package/dist/components/charts/StackedBarChart/StackedBarChart.js +2 -2
  47. package/dist/components/charts/shared/ChartErrorBoundary/ChartErrorBoundary.js +1 -1
  48. package/dist/components/charts/shared/ChartLegend/ChartLegendContent.js +1 -1
  49. package/dist/components/charts/shared/ChartText/ChartText.js +1 -1
  50. package/dist/components/charts/shared/ChartText/ChartText.theme.js +1 -1
  51. package/dist/components/charts/shared/ChartTooltip/ChartTooltip.theme.js +4 -4
  52. package/dist/components/core/Accordion/Accordion.theme.js +2 -2
  53. package/dist/components/core/Alert/Alert.js +3 -2
  54. package/dist/components/core/Alert/Alert.theme.js +4 -8
  55. package/dist/components/core/Alert/Alert.types.d.ts +4 -3
  56. package/dist/components/core/AlertDialog/AlertDialog.d.ts +1 -1
  57. package/dist/components/core/AlertDialog/AlertDialog.js +2 -2
  58. package/dist/components/core/AlertDialog/AlertDialog.types.d.ts +2 -2
  59. package/dist/components/core/Avatar/Avatar.theme.js +5 -5
  60. package/dist/components/core/AvatarGroup/AvatarGroup.theme.js +1 -1
  61. package/dist/components/core/Badge/Badge.d.ts +1 -1
  62. package/dist/components/core/Badge/Badge.js +11 -9
  63. package/dist/components/core/Badge/Badge.theme.js +24 -20
  64. package/dist/components/core/Badge/Badge.types.d.ts +10 -5
  65. package/dist/components/core/Breadcrumbs/Breadcrumbs.js +1 -1
  66. package/dist/components/core/Button/Button.d.ts +1 -1
  67. package/dist/components/core/Button/Button.theme.js +46 -41
  68. package/dist/components/core/Button/Button.types.d.ts +3 -3
  69. package/dist/components/core/ButtonGroup/ButtonGroup.theme.js +1 -1
  70. package/dist/components/core/Calendar/Calendar.js +1 -1
  71. package/dist/components/core/Calendar/Calendar.theme.js +9 -9
  72. package/dist/components/core/Calendar/CalendarMini/CalendarMini.js +1 -1
  73. package/dist/components/core/Card/Card.d.ts +2 -2
  74. package/dist/components/core/Card/Card.js +6 -7
  75. package/dist/components/core/Card/Card.theme.js +6 -6
  76. package/dist/components/core/Card/Card.types.d.ts +5 -20
  77. package/dist/components/core/Card/CardSubtitle.d.ts +3 -0
  78. package/dist/components/core/Card/CardSubtitle.js +11 -0
  79. package/dist/components/core/Card/index.d.ts +2 -2
  80. package/dist/components/core/CommandPalette/CommandItem.d.ts +1 -1
  81. package/dist/components/core/CommandPalette/CommandItem.js +2 -2
  82. package/dist/components/core/CommandPalette/CommandPalette.js +2 -2
  83. package/dist/components/core/CommandPalette/CommandPalette.theme.js +6 -6
  84. package/dist/components/core/CommandPalette/CommandPalette.types.d.ts +2 -2
  85. package/dist/components/core/ContextMenu/ContextMenu.theme.js +3 -3
  86. package/dist/components/core/ContextMenu/ContextMenu.types.d.ts +1 -1
  87. package/dist/components/core/ContextMenu/ContextMenuItem.js +3 -3
  88. package/dist/components/core/Drawer/Drawer.d.ts +13 -1
  89. package/dist/components/core/Drawer/Drawer.js +23 -10
  90. package/dist/components/core/Drawer/Drawer.theme.js +2 -2
  91. package/dist/components/core/Drawer/Drawer.types.d.ts +21 -4
  92. package/dist/components/core/Drawer/DrawerHeader.d.ts +5 -0
  93. package/dist/components/core/Drawer/DrawerHeader.js +14 -0
  94. package/dist/components/core/Drawer/DrawerSubtitle.d.ts +5 -0
  95. package/dist/components/core/Drawer/DrawerSubtitle.js +11 -0
  96. package/dist/components/core/Drawer/DrawerTitle.d.ts +5 -0
  97. package/dist/components/core/Drawer/DrawerTitle.js +11 -0
  98. package/dist/components/core/Drawer/index.d.ts +1 -1
  99. package/dist/components/core/Dropdown/Dropdown.theme.js +1 -1
  100. package/dist/components/core/Dropdown/Dropdown.types.d.ts +4 -4
  101. package/dist/components/core/Dropdown/DropdownItem.js +2 -2
  102. package/dist/components/core/Dropdown/DropdownMenu.js +1 -0
  103. package/dist/components/core/Empty/Empty.js +2 -2
  104. package/dist/components/core/Empty/Empty.theme.d.ts +1 -1
  105. package/dist/components/core/Empty/Empty.theme.js +3 -3
  106. package/dist/components/core/Empty/Empty.types.d.ts +2 -2
  107. package/dist/components/core/Kbd/Kbd.theme.js +3 -3
  108. package/dist/components/core/Link/Link.d.ts +1 -1
  109. package/dist/components/core/Link/Link.types.d.ts +2 -2
  110. package/dist/components/core/Loader/Loader.theme.js +1 -1
  111. package/dist/components/core/MenuItem/MenuItem.js +2 -2
  112. package/dist/components/core/MenuItem/MenuItem.theme.d.ts +1 -2
  113. package/dist/components/core/MenuItem/MenuItem.theme.js +9 -11
  114. package/dist/components/core/MenuItem/MenuItem.types.d.ts +1 -1
  115. package/dist/components/core/Message/Message.d.ts +3 -2
  116. package/dist/components/core/Message/Message.js +30 -24
  117. package/dist/components/core/Message/Message.theme.d.ts +1 -1
  118. package/dist/components/core/Message/Message.theme.js +22 -24
  119. package/dist/components/core/Message/Message.types.d.ts +0 -7
  120. package/dist/components/core/Message/MessageList.animations.d.ts +6 -0
  121. package/dist/components/core/Message/MessageList.animations.js +32 -0
  122. package/dist/components/core/Message/MessageList.d.ts +5 -0
  123. package/dist/components/core/Message/MessageList.js +78 -0
  124. package/dist/components/core/Message/MessageList.theme.d.ts +2 -0
  125. package/dist/components/core/Message/MessageList.theme.js +6 -0
  126. package/dist/components/core/Message/MessageList.types.d.ts +32 -0
  127. package/dist/components/core/Message/index.d.ts +2 -0
  128. package/dist/components/core/Modal/Modal.d.ts +2 -2
  129. package/dist/components/core/Modal/Modal.js +5 -5
  130. package/dist/components/core/Modal/Modal.theme.js +6 -6
  131. package/dist/components/core/Modal/Modal.types.d.ts +4 -4
  132. package/dist/components/core/Modal/ModalSubtitle.d.ts +5 -0
  133. package/dist/components/core/Modal/ModalSubtitle.js +11 -0
  134. package/dist/components/core/ModalStack/ModalStack.animations.js +3 -3
  135. package/dist/components/core/ModalStack/ModalStackModal.js +3 -3
  136. package/dist/components/core/NavItem/NavItem.js +1 -1
  137. package/dist/components/core/NavItem/NavItem.theme.js +1 -1
  138. package/dist/components/core/OfflineIndicator/OfflineIndicator.theme.js +3 -3
  139. package/dist/components/core/PageHeading/PageHeading.d.ts +8 -0
  140. package/dist/components/core/PageHeading/PageHeading.js +28 -0
  141. package/dist/components/core/PageHeading/PageHeading.theme.d.ts +2 -0
  142. package/dist/components/core/PageHeading/PageHeading.theme.js +11 -0
  143. package/dist/components/core/PageHeading/PageHeading.types.d.ts +55 -0
  144. package/dist/components/core/PageHeading/PageHeadingActions.d.ts +3 -0
  145. package/dist/components/core/PageHeading/PageHeadingActions.js +11 -0
  146. package/dist/components/core/PageHeading/PageHeadingBackButton.d.ts +3 -0
  147. package/dist/components/core/PageHeading/PageHeadingBackButton.js +12 -0
  148. package/dist/components/core/PageHeading/PageHeadingIcon.d.ts +3 -0
  149. package/dist/components/core/PageHeading/PageHeadingIcon.js +11 -0
  150. package/dist/components/core/PageHeading/PageHeadingSubtitle.d.ts +3 -0
  151. package/dist/components/core/PageHeading/PageHeadingSubtitle.js +11 -0
  152. package/dist/components/core/PageHeading/PageHeadingTitle.d.ts +3 -0
  153. package/dist/components/core/PageHeading/PageHeadingTitle.js +11 -0
  154. package/dist/components/core/PageHeading/index.d.ts +2 -0
  155. package/dist/components/core/Pagination/Pagination.theme.js +2 -2
  156. package/dist/components/core/Pill/Pill.theme.js +3 -3
  157. package/dist/components/core/Popover/Popover.theme.js +1 -1
  158. package/dist/components/core/Popover/Popover.types.d.ts +6 -0
  159. package/dist/components/core/Popover/PopoverContent.js +8 -2
  160. package/dist/components/core/Progress/Progress.theme.js +10 -7
  161. package/dist/components/core/Progress/Progress.types.d.ts +2 -1
  162. package/dist/components/core/Segmented/Segmented.theme.js +5 -5
  163. package/dist/components/core/Sidebar/Sidebar.js +1 -0
  164. package/dist/components/core/Sidebar/SidebarNavGroup.js +1 -1
  165. package/dist/components/core/SocialIcon/SocialIcon.d.ts +3 -0
  166. package/dist/components/core/SocialIcon/SocialIcon.js +30 -0
  167. package/dist/components/core/SocialIcon/SocialIcon.theme.d.ts +2 -0
  168. package/dist/components/core/SocialIcon/SocialIcon.theme.js +12 -0
  169. package/dist/components/core/SocialIcon/SocialIcon.types.d.ts +18 -0
  170. package/dist/components/core/SocialIcon/index.d.ts +2 -0
  171. package/dist/components/core/SocialIcon/platforms.d.ts +17 -0
  172. package/dist/components/core/SocialIcon/platforms.js +234 -0
  173. package/dist/components/core/Spinner/Spinner.theme.js +3 -5
  174. package/dist/components/core/Spinner/Spinner.types.d.ts +2 -1
  175. package/dist/components/core/Tabs/Tabs.theme.js +2 -2
  176. package/dist/components/core/Tag/Tag.d.ts +2 -2
  177. package/dist/components/core/Tag/Tag.js +21 -4
  178. package/dist/components/core/Tag/Tag.theme.js +12 -4
  179. package/dist/components/core/Tag/Tag.types.d.ts +24 -1
  180. package/dist/components/core/Toast/Toast.js +4 -4
  181. package/dist/components/core/Toast/Toast.theme.js +4 -4
  182. package/dist/components/core/Toast/Toast.types.d.ts +9 -9
  183. package/dist/components/core/Toast/useToast.js +6 -6
  184. package/dist/components/core/Tooltip/Tooltip.theme.js +1 -1
  185. package/dist/components/core/Tree/Tree.theme.js +1 -1
  186. package/dist/components/core/index.d.ts +2 -7
  187. package/dist/components/core/index.js +9 -19
  188. package/dist/components/data-display/DescriptionList/DescriptionList.theme.js +8 -0
  189. package/dist/components/{core → data-display}/Feed/Feed.js +3 -3
  190. package/dist/components/{core → data-display}/Feed/Feed.theme.js +2 -2
  191. package/dist/components/data-display/GanttChart/GanttChart.animations.d.ts +4 -0
  192. package/dist/components/data-display/GanttChart/GanttChart.animations.js +21 -0
  193. package/dist/components/data-display/GanttChart/GanttChart.d.ts +8 -0
  194. package/dist/components/data-display/GanttChart/GanttChart.js +170 -0
  195. package/dist/components/data-display/GanttChart/GanttChart.theme.d.ts +2 -0
  196. package/dist/components/data-display/GanttChart/GanttChart.theme.js +23 -0
  197. package/dist/components/data-display/GanttChart/GanttChart.types.d.ts +162 -0
  198. package/dist/components/data-display/GanttChart/GanttChart.types.js +9 -0
  199. package/dist/components/data-display/GanttChart/GanttChart.utils.d.ts +80 -0
  200. package/dist/components/data-display/GanttChart/GanttChart.utils.js +274 -0
  201. package/dist/components/data-display/GanttChart/GanttChartPanel.d.ts +9 -0
  202. package/dist/components/data-display/GanttChart/GanttChartPanel.js +82 -0
  203. package/dist/components/data-display/GanttChart/GanttDependencyArrows.d.ts +2 -0
  204. package/dist/components/data-display/GanttChart/GanttDependencyArrows.js +35 -0
  205. package/dist/components/data-display/GanttChart/GanttGroupBar.d.ts +8 -0
  206. package/dist/components/data-display/GanttChart/GanttGroupBar.js +26 -0
  207. package/dist/components/data-display/GanttChart/GanttMilestone.d.ts +9 -0
  208. package/dist/components/data-display/GanttChart/GanttMilestone.js +44 -0
  209. package/dist/components/data-display/GanttChart/GanttProgressCircle.d.ts +9 -0
  210. package/dist/components/data-display/GanttChart/GanttProgressCircle.js +11 -0
  211. package/dist/components/data-display/GanttChart/GanttSplitter.d.ts +2 -0
  212. package/dist/components/data-display/GanttChart/GanttSplitter.js +39 -0
  213. package/dist/components/data-display/GanttChart/GanttTableGroupRow.d.ts +7 -0
  214. package/dist/components/data-display/GanttChart/GanttTableGroupRow.js +23 -0
  215. package/dist/components/data-display/GanttChart/GanttTableHeader.d.ts +2 -0
  216. package/dist/components/data-display/GanttChart/GanttTableHeader.js +13 -0
  217. package/dist/components/data-display/GanttChart/GanttTablePanel.d.ts +6 -0
  218. package/dist/components/data-display/GanttChart/GanttTablePanel.js +20 -0
  219. package/dist/components/data-display/GanttChart/GanttTableTaskRow.d.ts +8 -0
  220. package/dist/components/data-display/GanttChart/GanttTableTaskRow.js +30 -0
  221. package/dist/components/data-display/GanttChart/GanttTaskBar.d.ts +9 -0
  222. package/dist/components/data-display/GanttChart/GanttTaskBar.js +206 -0
  223. package/dist/components/data-display/GanttChart/GanttTaskContextMenu.d.ts +8 -0
  224. package/dist/components/data-display/GanttChart/GanttTaskContextMenu.js +17 -0
  225. package/dist/components/data-display/GanttChart/GanttTimelineGrid.d.ts +7 -0
  226. package/dist/components/data-display/GanttChart/GanttTimelineGrid.js +33 -0
  227. package/dist/components/data-display/GanttChart/GanttTimelineHeader.d.ts +8 -0
  228. package/dist/components/data-display/GanttChart/GanttTimelineHeader.js +43 -0
  229. package/dist/components/data-display/GanttChart/GanttToolbar.d.ts +2 -0
  230. package/dist/components/data-display/GanttChart/GanttToolbar.js +28 -0
  231. package/dist/components/data-display/GanttChart/hooks/useGanttDates.d.ts +12 -0
  232. package/dist/components/data-display/GanttChart/hooks/useGanttDates.js +25 -0
  233. package/dist/components/data-display/GanttChart/hooks/useGanttDrag.d.ts +25 -0
  234. package/dist/components/data-display/GanttChart/hooks/useGanttDrag.js +144 -0
  235. package/dist/components/data-display/GanttChart/hooks/useGanttLayout.d.ts +2 -0
  236. package/dist/components/data-display/GanttChart/hooks/useGanttLayout.js +33 -0
  237. package/dist/components/data-display/GanttChart/hooks/useGanttScrollSync.d.ts +6 -0
  238. package/dist/components/data-display/GanttChart/hooks/useGanttScrollSync.js +32 -0
  239. package/dist/components/data-display/GanttChart/index.d.ts +3 -0
  240. package/dist/components/{core → data-display}/KPI/KPI.js +10 -8
  241. package/dist/components/{core → data-display}/KPI/KPI.theme.js +12 -12
  242. package/dist/components/{core → data-display}/KPI/KPI.types.d.ts +6 -5
  243. package/dist/components/{core → data-display}/KPI/index.d.ts +1 -0
  244. package/dist/components/{core → data-display}/Metric/Metric.js +4 -7
  245. package/dist/components/{core → data-display}/Metric/Metric.theme.js +17 -13
  246. package/dist/components/{core → data-display}/Metric/Metric.types.d.ts +8 -7
  247. package/dist/components/{core → data-display}/Table/Table.theme.js +4 -4
  248. package/dist/components/{core → data-display}/Table/TableActions.js +8 -8
  249. package/dist/components/{core → data-display}/Table/TableActionsMenu.js +1 -1
  250. package/dist/components/{core → data-display}/Table/TableColumnManager.js +5 -5
  251. package/dist/components/{core → data-display}/Table/TableFilter.js +6 -6
  252. package/dist/components/{core → data-display}/Table/TableHeader.js +1 -1
  253. package/dist/components/data-display/Table/TablePagination.js +25 -0
  254. package/dist/components/{core → data-display}/Table/TableRow.js +1 -1
  255. package/dist/components/{core → data-display}/Table/TableSelectionHeader.js +2 -2
  256. package/dist/components/{core → data-display}/Timeline/Timeline.theme.js +2 -2
  257. package/dist/components/data-display/index.d.ts +7 -0
  258. package/dist/components/data-display/index.js +20 -0
  259. package/dist/components/effects/3d/index.d.ts +6 -0
  260. package/dist/components/effects/3d/index.js +3 -0
  261. package/dist/components/effects/Aurora/Aurora.d.ts +24 -0
  262. package/dist/components/effects/Aurora/Aurora.js +119 -0
  263. package/dist/components/effects/Aurora/Aurora.types.d.ts +15 -0
  264. package/dist/components/effects/Aurora/index.d.ts +2 -0
  265. package/dist/components/effects/CustomCursor/CustomCursor.d.ts +2 -2
  266. package/dist/components/effects/CustomCursor/CustomCursor.js +1 -1
  267. package/dist/components/effects/CustomCursor/CustomCursor.theme.js +3 -1
  268. package/dist/components/effects/CustomCursor/CustomCursor.types.d.ts +5 -4
  269. package/dist/components/effects/DotPattern/DotPattern.d.ts +18 -0
  270. package/dist/components/effects/DotPattern/DotPattern.js +65 -0
  271. package/dist/components/effects/DotPattern/DotPattern.types.d.ts +47 -0
  272. package/dist/components/effects/DotPattern/index.d.ts +2 -0
  273. package/dist/components/effects/GridPattern/GridPattern.d.ts +18 -0
  274. package/dist/components/effects/GridPattern/GridPattern.js +64 -0
  275. package/dist/components/effects/GridPattern/GridPattern.types.d.ts +47 -0
  276. package/dist/components/effects/GridPattern/index.d.ts +2 -0
  277. package/dist/components/effects/MagneticElement/MagneticElement.d.ts +30 -0
  278. package/dist/components/effects/MagneticElement/MagneticElement.js +110 -0
  279. package/dist/components/effects/MagneticElement/MagneticElement.types.d.ts +44 -0
  280. package/dist/components/effects/MagneticElement/index.d.ts +2 -0
  281. package/dist/components/effects/MorphingText/MorphingText.d.ts +17 -0
  282. package/dist/components/effects/MorphingText/MorphingText.js +91 -0
  283. package/dist/components/effects/MorphingText/MorphingText.types.d.ts +18 -0
  284. package/dist/components/effects/MorphingText/index.d.ts +2 -0
  285. package/dist/components/effects/NoiseOverlay/NoiseOverlay.d.ts +28 -0
  286. package/dist/components/effects/NoiseOverlay/NoiseOverlay.js +61 -0
  287. package/dist/components/effects/NoiseOverlay/NoiseOverlay.types.d.ts +35 -0
  288. package/dist/components/effects/NoiseOverlay/index.d.ts +2 -0
  289. package/dist/components/effects/ParallaxSection/ParallaxSection.d.ts +26 -0
  290. package/dist/components/effects/ParallaxSection/ParallaxSection.js +71 -0
  291. package/dist/components/effects/ParallaxSection/ParallaxSection.types.d.ts +11 -0
  292. package/dist/components/effects/ParallaxSection/index.d.ts +2 -0
  293. package/dist/components/effects/Particles/Particles.d.ts +22 -0
  294. package/dist/components/effects/Particles/Particles.js +33 -0
  295. package/dist/components/effects/Particles/Particles.scene.d.ts +3 -0
  296. package/dist/components/effects/Particles/Particles.scene.js +284 -0
  297. package/dist/components/effects/Particles/Particles.types.d.ts +65 -0
  298. package/dist/components/effects/Particles/index.d.ts +2 -0
  299. package/dist/components/effects/ProgressiveBlur/ProgressiveBlur.d.ts +3 -0
  300. package/dist/components/effects/ProgressiveBlur/ProgressiveBlur.js +75 -0
  301. package/dist/components/effects/ProgressiveBlur/ProgressiveBlur.theme.d.ts +7 -0
  302. package/dist/components/effects/ProgressiveBlur/ProgressiveBlur.theme.js +12 -0
  303. package/dist/components/effects/ProgressiveBlur/ProgressiveBlur.types.d.ts +47 -0
  304. package/dist/components/effects/ProgressiveBlur/index.d.ts +2 -0
  305. package/dist/components/effects/ScrollReveal/ScrollReveal.d.ts +29 -0
  306. package/dist/components/effects/ScrollReveal/ScrollReveal.js +121 -0
  307. package/dist/components/effects/ScrollReveal/ScrollReveal.types.d.ts +25 -0
  308. package/dist/components/effects/ScrollReveal/index.d.ts +2 -0
  309. package/dist/components/effects/Spotlight/Spotlight.d.ts +36 -0
  310. package/dist/components/effects/Spotlight/Spotlight.js +112 -0
  311. package/dist/components/effects/Spotlight/Spotlight.types.d.ts +29 -0
  312. package/dist/components/effects/Spotlight/index.d.ts +2 -0
  313. package/dist/components/effects/StickyScroll/StickyScroll.d.ts +30 -0
  314. package/dist/components/effects/StickyScroll/StickyScroll.js +128 -0
  315. package/dist/components/effects/StickyScroll/StickyScroll.types.d.ts +19 -0
  316. package/dist/components/effects/StickyScroll/index.d.ts +2 -0
  317. package/dist/components/effects/index.d.ts +22 -4
  318. package/dist/components/effects/index.js +11 -2
  319. package/dist/components/forms/Checkbox/Checkbox.d.ts +3 -4
  320. package/dist/components/forms/Checkbox/Checkbox.js +36 -12
  321. package/dist/components/forms/Checkbox/Checkbox.theme.js +9 -5
  322. package/dist/components/forms/Checkbox/Checkbox.types.d.ts +28 -2
  323. package/dist/components/forms/Checkbox/CheckboxContext.d.ts +14 -0
  324. package/dist/components/forms/Checkbox/CheckboxContext.js +12 -0
  325. package/dist/components/forms/Checkbox/CheckboxGroup.d.ts +3 -0
  326. package/dist/components/forms/Checkbox/CheckboxGroup.js +40 -0
  327. package/dist/components/forms/Checkbox/index.d.ts +1 -1
  328. package/dist/components/forms/ColorPicker/ColorPicker.js +1 -1
  329. package/dist/components/forms/ColorPicker/ColorPicker.theme.js +3 -3
  330. package/dist/components/forms/ColorPicker/ColorPickerInput.js +7 -7
  331. package/dist/components/forms/CronInput/CronInput.d.ts +3 -0
  332. package/dist/components/forms/CronInput/CronInput.js +107 -0
  333. package/dist/components/forms/CronInput/CronInput.theme.d.ts +6 -0
  334. package/dist/components/forms/CronInput/CronInput.theme.js +84 -0
  335. package/dist/components/forms/CronInput/CronInput.types.d.ts +98 -0
  336. package/dist/components/forms/CronInput/CronInput.utils.d.ts +67 -0
  337. package/dist/components/forms/CronInput/CronInput.utils.js +505 -0
  338. package/dist/components/forms/CronInput/index.d.ts +4 -0
  339. package/dist/components/forms/DatePicker/DatePicker.theme.js +3 -3
  340. package/dist/components/forms/DatePicker/DatePickerContent.js +1 -1
  341. package/dist/components/forms/FileUpload/FileUpload.js +2 -2
  342. package/dist/components/forms/FileUpload/FileUpload.theme.js +4 -4
  343. package/dist/components/forms/FormLabel/FormLabel.theme.js +1 -1
  344. package/dist/components/forms/Input/Input.theme.js +1 -1
  345. package/dist/components/forms/InputCounter/InputCounter.d.ts +1 -1
  346. package/dist/components/forms/InputCounter/InputCounter.theme.js +1 -1
  347. package/dist/components/forms/InputCounter/InputCounter.types.d.ts +3 -2
  348. package/dist/components/forms/InputOTP/InputOTP.theme.js +2 -2
  349. package/dist/components/forms/InputTag/InputTag.js +1 -1
  350. package/dist/components/forms/Mention/Mention.d.ts +3 -0
  351. package/dist/components/forms/Mention/Mention.js +607 -0
  352. package/dist/components/forms/Mention/Mention.theme.d.ts +6 -0
  353. package/dist/components/forms/Mention/Mention.theme.js +55 -0
  354. package/dist/components/forms/Mention/Mention.types.d.ts +151 -0
  355. package/dist/components/forms/Mention/Mention.utils.d.ts +42 -0
  356. package/dist/components/forms/Mention/Mention.utils.js +285 -0
  357. package/dist/components/forms/Mention/index.d.ts +3 -0
  358. package/dist/components/forms/Radio/Radio.d.ts +3 -4
  359. package/dist/components/forms/Radio/Radio.js +25 -12
  360. package/dist/components/forms/Radio/Radio.theme.js +34 -5
  361. package/dist/components/forms/Radio/Radio.types.d.ts +30 -4
  362. package/dist/components/forms/Radio/RadioContext.d.ts +14 -0
  363. package/dist/components/forms/Radio/RadioContext.js +12 -0
  364. package/dist/components/forms/Radio/RadioGroup.d.ts +3 -0
  365. package/dist/components/forms/Radio/RadioGroup.js +36 -0
  366. package/dist/components/forms/Radio/index.d.ts +1 -1
  367. package/dist/components/forms/RichTextEditor/RichTextEditor.js +2 -2
  368. package/dist/components/forms/RichTextEditor/RichTextEditor.theme.js +1 -1
  369. package/dist/components/forms/Select/Select.theme.js +1 -1
  370. package/dist/components/forms/SelectableCard/SelectableCard.animations.d.ts +2 -0
  371. package/dist/components/forms/SelectableCard/SelectableCard.animations.js +9 -0
  372. package/dist/components/forms/SelectableCard/SelectableCard.d.ts +5 -0
  373. package/dist/components/forms/SelectableCard/SelectableCard.js +58 -0
  374. package/dist/components/forms/SelectableCard/SelectableCard.theme.d.ts +2 -0
  375. package/dist/components/forms/SelectableCard/SelectableCard.theme.js +38 -0
  376. package/dist/components/forms/SelectableCard/SelectableCard.types.d.ts +33 -0
  377. package/dist/components/forms/SelectableCard/SelectableCardContext.d.ts +3 -0
  378. package/dist/components/forms/SelectableCard/SelectableCardContext.js +12 -0
  379. package/dist/components/forms/SelectableCard/SelectableCardGroup.d.ts +3 -0
  380. package/dist/components/forms/SelectableCard/SelectableCardGroup.js +37 -0
  381. package/dist/components/forms/SelectableCard/index.d.ts +3 -0
  382. package/dist/components/forms/Signature/Signature.theme.js +1 -1
  383. package/dist/components/forms/Slider/Slider.theme.js +3 -3
  384. package/dist/components/forms/Switch/Switch.theme.js +1 -1
  385. package/dist/components/forms/TimePicker/TimePicker.theme.js +2 -2
  386. package/dist/components/forms/TransferList/TransferList.animations.d.ts +10 -0
  387. package/dist/components/forms/TransferList/TransferList.animations.js +32 -0
  388. package/dist/components/forms/TransferList/TransferList.d.ts +28 -0
  389. package/dist/components/forms/TransferList/TransferList.js +199 -0
  390. package/dist/components/forms/TransferList/TransferList.theme.d.ts +6 -0
  391. package/dist/components/forms/TransferList/TransferList.theme.js +60 -0
  392. package/dist/components/forms/TransferList/TransferList.types.d.ts +101 -0
  393. package/dist/components/forms/TransferList/index.d.ts +3 -0
  394. package/dist/components/forms/forms.theme.js +6 -6
  395. package/dist/components/forms/index.d.ts +15 -2
  396. package/dist/components/forms/index.js +9 -0
  397. package/dist/components/layout/FormLayout/FormLayout.d.ts +8 -0
  398. package/dist/components/layout/FormLayout/FormLayout.js +22 -0
  399. package/dist/components/layout/FormLayout/FormLayout.theme.d.ts +2 -0
  400. package/dist/components/layout/FormLayout/FormLayout.theme.js +16 -0
  401. package/dist/components/layout/FormLayout/FormLayout.types.d.ts +61 -0
  402. package/dist/components/layout/FormLayout/FormLayoutBody.d.ts +3 -0
  403. package/dist/components/layout/FormLayout/FormLayoutBody.js +13 -0
  404. package/dist/components/layout/FormLayout/FormLayoutFooter.d.ts +3 -0
  405. package/dist/components/layout/FormLayout/FormLayoutFooter.js +12 -0
  406. package/dist/components/layout/FormLayout/FormLayoutHeader.d.ts +3 -0
  407. package/dist/components/layout/FormLayout/FormLayoutHeader.js +12 -0
  408. package/dist/components/layout/FormLayout/FormLayoutSection.d.ts +3 -0
  409. package/dist/components/layout/FormLayout/FormLayoutSection.js +12 -0
  410. package/dist/components/layout/FormLayout/index.d.ts +3 -0
  411. package/dist/components/layout/PageLayout/PageLayout.d.ts +7 -0
  412. package/dist/components/layout/PageLayout/PageLayout.js +33 -0
  413. package/dist/components/layout/PageLayout/PageLayout.theme.d.ts +2 -0
  414. package/dist/components/layout/PageLayout/PageLayout.theme.js +10 -0
  415. package/dist/components/layout/PageLayout/PageLayout.types.d.ts +39 -0
  416. package/dist/components/layout/PageLayout/PageLayoutContent.d.ts +3 -0
  417. package/dist/components/layout/PageLayout/PageLayoutContent.js +12 -0
  418. package/dist/components/layout/PageLayout/PageLayoutHeader.d.ts +3 -0
  419. package/dist/components/layout/PageLayout/PageLayoutHeader.js +12 -0
  420. package/dist/components/layout/PageLayout/PageLayoutSidebar.d.ts +3 -0
  421. package/dist/components/layout/PageLayout/PageLayoutSidebar.js +12 -0
  422. package/dist/components/layout/PageLayout/index.d.ts +3 -0
  423. package/dist/components/layout/index.d.ts +2 -0
  424. package/dist/hooks/useSelectPortal.d.ts +4 -2
  425. package/dist/hooks/useSelectPortal.js +139 -51
  426. package/dist/index.d.ts +2 -0
  427. package/dist/index.js +53 -21
  428. package/dist/styles.css +1 -1
  429. package/dist/utils/colorUtils.d.ts +23 -0
  430. package/dist/utils/colorUtils.js +45 -0
  431. package/dist/utils/dateUtils.d.ts +30 -0
  432. package/dist/utils/dateUtils.js +58 -1
  433. package/dist/utils/index.d.ts +2 -1
  434. package/package.json +38 -26
  435. package/src/global.scss +673 -0
  436. package/src/styles/theme.css +378 -0
  437. package/src/theme-plugin.css +11 -0
  438. package/dist/components/core/Card/CardDescription.d.ts +0 -3
  439. package/dist/components/core/Card/CardDescription.js +0 -11
  440. package/dist/components/core/DescriptionList/DescriptionList.theme.js +0 -8
  441. package/dist/components/core/Modal/ModalDescription.d.ts +0 -5
  442. package/dist/components/core/Modal/ModalDescription.js +0 -11
  443. package/dist/components/core/ProgressiveBlur/ProgressiveBlur.d.ts +0 -34
  444. package/dist/components/core/ProgressiveBlur/ProgressiveBlur.js +0 -218
  445. package/dist/components/core/ProgressiveBlur/ProgressiveBlur.theme.d.ts +0 -9
  446. package/dist/components/core/ProgressiveBlur/ProgressiveBlur.types.d.ts +0 -48
  447. package/dist/components/core/ProgressiveBlur/index.d.ts +0 -2
  448. package/dist/components/core/Table/TablePagination.js +0 -25
  449. /package/dist/components/{core → data-display}/DescriptionList/DescriptionList.d.ts +0 -0
  450. /package/dist/components/{core → data-display}/DescriptionList/DescriptionList.js +0 -0
  451. /package/dist/components/{core → data-display}/DescriptionList/DescriptionList.theme.d.ts +0 -0
  452. /package/dist/components/{core → data-display}/DescriptionList/DescriptionList.types.d.ts +0 -0
  453. /package/dist/components/{core → data-display}/DescriptionList/index.d.ts +0 -0
  454. /package/dist/components/{core → data-display}/Feed/Feed.d.ts +0 -0
  455. /package/dist/components/{core → data-display}/Feed/Feed.theme.d.ts +0 -0
  456. /package/dist/components/{core → data-display}/Feed/Feed.types.d.ts +0 -0
  457. /package/dist/components/{core → data-display}/Feed/index.d.ts +0 -0
  458. /package/dist/components/{core → data-display}/KPI/KPI.d.ts +0 -0
  459. /package/dist/components/{core → data-display}/KPI/KPI.theme.d.ts +0 -0
  460. /package/dist/components/{core → data-display}/Metric/Metric.d.ts +0 -0
  461. /package/dist/components/{core → data-display}/Metric/Metric.theme.d.ts +0 -0
  462. /package/dist/components/{core → data-display}/Metric/index.d.ts +0 -0
  463. /package/dist/components/{core → data-display}/Table/Table.animations.d.ts +0 -0
  464. /package/dist/components/{core → data-display}/Table/Table.animations.js +0 -0
  465. /package/dist/components/{core → data-display}/Table/Table.d.ts +0 -0
  466. /package/dist/components/{core → data-display}/Table/Table.filterUtils.d.ts +0 -0
  467. /package/dist/components/{core → data-display}/Table/Table.filterUtils.js +0 -0
  468. /package/dist/components/{core → data-display}/Table/Table.js +0 -0
  469. /package/dist/components/{core → data-display}/Table/Table.theme.d.ts +0 -0
  470. /package/dist/components/{core → data-display}/Table/Table.types.d.ts +0 -0
  471. /package/dist/components/{core → data-display}/Table/Table.utils.d.ts +0 -0
  472. /package/dist/components/{core → data-display}/Table/Table.utils.js +0 -0
  473. /package/dist/components/{core → data-display}/Table/TableActions.d.ts +0 -0
  474. /package/dist/components/{core → data-display}/Table/TableActionsMenu.d.ts +0 -0
  475. /package/dist/components/{core → data-display}/Table/TableBody.d.ts +0 -0
  476. /package/dist/components/{core → data-display}/Table/TableBody.js +0 -0
  477. /package/dist/components/{core → data-display}/Table/TableCell.d.ts +0 -0
  478. /package/dist/components/{core → data-display}/Table/TableCell.js +0 -0
  479. /package/dist/components/{core → data-display}/Table/TableColumnManager.d.ts +0 -0
  480. /package/dist/components/{core → data-display}/Table/TableDeclarative.d.ts +0 -0
  481. /package/dist/components/{core → data-display}/Table/TableDeclarative.js +0 -0
  482. /package/dist/components/{core → data-display}/Table/TableFilter.d.ts +0 -0
  483. /package/dist/components/{core → data-display}/Table/TableHeader.d.ts +0 -0
  484. /package/dist/components/{core → data-display}/Table/TablePagination.d.ts +0 -0
  485. /package/dist/components/{core → data-display}/Table/TableRow.d.ts +0 -0
  486. /package/dist/components/{core → data-display}/Table/TableSelectionHeader.d.ts +0 -0
  487. /package/dist/components/{core → data-display}/Table/hooks/index.d.ts +0 -0
  488. /package/dist/components/{core → data-display}/Table/hooks/useTableColumns.d.ts +0 -0
  489. /package/dist/components/{core → data-display}/Table/hooks/useTableColumns.js +0 -0
  490. /package/dist/components/{core → data-display}/Table/hooks/useTableExpansion.d.ts +0 -0
  491. /package/dist/components/{core → data-display}/Table/hooks/useTableExpansion.js +0 -0
  492. /package/dist/components/{core → data-display}/Table/hooks/useTableFilter.d.ts +0 -0
  493. /package/dist/components/{core → data-display}/Table/hooks/useTableFilter.js +0 -0
  494. /package/dist/components/{core → data-display}/Table/hooks/useTablePagination.d.ts +0 -0
  495. /package/dist/components/{core → data-display}/Table/hooks/useTablePagination.js +0 -0
  496. /package/dist/components/{core → data-display}/Table/hooks/useTableSelection.d.ts +0 -0
  497. /package/dist/components/{core → data-display}/Table/hooks/useTableSelection.js +0 -0
  498. /package/dist/components/{core → data-display}/Table/index.d.ts +0 -0
  499. /package/dist/components/{core → data-display}/Table/index.js +0 -0
  500. /package/dist/components/{core → data-display}/Timeline/Timeline.animations.d.ts +0 -0
  501. /package/dist/components/{core → data-display}/Timeline/Timeline.animations.js +0 -0
  502. /package/dist/components/{core → data-display}/Timeline/Timeline.d.ts +0 -0
  503. /package/dist/components/{core → data-display}/Timeline/Timeline.js +0 -0
  504. /package/dist/components/{core → data-display}/Timeline/Timeline.theme.d.ts +0 -0
  505. /package/dist/components/{core → data-display}/Timeline/Timeline.types.d.ts +0 -0
  506. /package/dist/components/{core → data-display}/Timeline/TimelineContent.d.ts +0 -0
  507. /package/dist/components/{core → data-display}/Timeline/TimelineContent.js +0 -0
  508. /package/dist/components/{core → data-display}/Timeline/TimelineItem.d.ts +0 -0
  509. /package/dist/components/{core → data-display}/Timeline/TimelineItem.js +0 -0
  510. /package/dist/components/{core → data-display}/Timeline/TimelineMarker.d.ts +0 -0
  511. /package/dist/components/{core → data-display}/Timeline/TimelineMarker.js +0 -0
  512. /package/dist/components/{core → data-display}/Timeline/index.d.ts +0 -0
@@ -0,0 +1,181 @@
1
+ import { jsxs, jsx } from 'react/jsx-runtime';
2
+ import { useState, useRef, useCallback, useEffect } from 'react';
3
+ import { motion } from 'motion/react';
4
+ import { PlayIcon, PauseIcon, CheckIcon } from '@heroicons/react/24/outline';
5
+ import { cn } from '../../../utils/cn.js';
6
+ import { Button } from '../../core/Button/Button.js';
7
+
8
+ /**
9
+ * Format seconds into MM:SS display
10
+ */
11
+ const formatTime = (seconds) => {
12
+ const mins = Math.floor(seconds / 60);
13
+ const secs = seconds % 60;
14
+ return `${mins.toString().padStart(2, "0")}:${secs.toString().padStart(2, "0")}`;
15
+ };
16
+ /**
17
+ * Internal voice recorder sub-component.
18
+ * Handles MediaRecorder lifecycle, timer display, and recording controls.
19
+ *
20
+ * Recording starts immediately on mount.
21
+ * Not exported from the library's public API.
22
+ */
23
+ const VoiceRecorder = ({ onComplete, onCancel, maxDuration, className, }) => {
24
+ const [recordingState, setRecordingState] = useState("idle");
25
+ const [elapsed, setElapsed] = useState(0);
26
+ const mediaRecorderRef = useRef(null);
27
+ const chunksRef = useRef([]);
28
+ const timerRef = useRef(null);
29
+ const streamRef = useRef(null);
30
+ /**
31
+ * Clean up timer
32
+ */
33
+ const clearTimer = useCallback(() => {
34
+ if (timerRef.current) {
35
+ clearInterval(timerRef.current);
36
+ timerRef.current = null;
37
+ }
38
+ }, []);
39
+ /**
40
+ * Stop all media tracks and clean up
41
+ */
42
+ const cleanup = useCallback(() => {
43
+ clearTimer();
44
+ if (mediaRecorderRef.current &&
45
+ mediaRecorderRef.current.state !== "inactive") {
46
+ mediaRecorderRef.current.stop();
47
+ }
48
+ if (streamRef.current) {
49
+ streamRef.current.getTracks().forEach((track) => track.stop());
50
+ streamRef.current = null;
51
+ }
52
+ mediaRecorderRef.current = null;
53
+ }, [clearTimer]);
54
+ /**
55
+ * Start the recording timer
56
+ */
57
+ const startTimer = useCallback(() => {
58
+ clearTimer();
59
+ timerRef.current = setInterval(() => {
60
+ setElapsed((prev) => prev + 1);
61
+ }, 1000);
62
+ }, [clearTimer]);
63
+ /**
64
+ * Start recording immediately on mount
65
+ */
66
+ useEffect(() => {
67
+ let cancelled = false;
68
+ const startRecording = async () => {
69
+ try {
70
+ const stream = await navigator.mediaDevices.getUserMedia({
71
+ audio: true,
72
+ });
73
+ if (cancelled) {
74
+ stream.getTracks().forEach((t) => t.stop());
75
+ return;
76
+ }
77
+ streamRef.current = stream;
78
+ // Choose supported MIME type
79
+ const mimeType = MediaRecorder.isTypeSupported("audio/webm;codecs=opus")
80
+ ? "audio/webm;codecs=opus"
81
+ : MediaRecorder.isTypeSupported("audio/webm")
82
+ ? "audio/webm"
83
+ : "";
84
+ const recorder = new MediaRecorder(stream, mimeType ? { mimeType } : undefined);
85
+ mediaRecorderRef.current = recorder;
86
+ chunksRef.current = [];
87
+ recorder.ondataavailable = (e) => {
88
+ if (e.data.size > 0) {
89
+ chunksRef.current.push(e.data);
90
+ }
91
+ };
92
+ recorder.start(100); // collect data every 100ms
93
+ setRecordingState("recording");
94
+ startTimer();
95
+ }
96
+ catch (_a) {
97
+ if (process.env.NODE_ENV !== "production") {
98
+ // eslint-disable-next-line no-console
99
+ console.warn("[VoiceRecorder] Microphone access denied or unavailable.");
100
+ }
101
+ onCancel();
102
+ }
103
+ };
104
+ startRecording();
105
+ return () => {
106
+ cancelled = true;
107
+ cleanup();
108
+ };
109
+ // Only run on mount/unmount
110
+ // eslint-disable-next-line react-hooks/exhaustive-deps
111
+ }, []);
112
+ /**
113
+ * Auto-stop at max duration
114
+ */
115
+ useEffect(() => {
116
+ if (elapsed >= maxDuration && recordingState === "recording") {
117
+ handleConfirm();
118
+ }
119
+ // eslint-disable-next-line react-hooks/exhaustive-deps
120
+ }, [elapsed, maxDuration, recordingState]);
121
+ /**
122
+ * Handle cancel — stop recording and discard
123
+ */
124
+ const handleCancel = useCallback(() => {
125
+ cleanup();
126
+ chunksRef.current = [];
127
+ setRecordingState("idle");
128
+ onCancel();
129
+ }, [cleanup, onCancel]);
130
+ /**
131
+ * Handle confirm — stop recording and return blob
132
+ */
133
+ const handleConfirm = useCallback(() => {
134
+ if (!mediaRecorderRef.current) {
135
+ onCancel();
136
+ return;
137
+ }
138
+ const recorder = mediaRecorderRef.current;
139
+ recorder.onstop = () => {
140
+ const mimeType = recorder.mimeType || "audio/webm";
141
+ const blob = new Blob(chunksRef.current, { type: mimeType });
142
+ chunksRef.current = [];
143
+ if (streamRef.current) {
144
+ streamRef.current.getTracks().forEach((t) => t.stop());
145
+ streamRef.current = null;
146
+ }
147
+ onComplete(blob);
148
+ };
149
+ clearTimer();
150
+ if (recorder.state !== "inactive") {
151
+ recorder.stop();
152
+ }
153
+ setRecordingState("idle");
154
+ }, [clearTimer, onComplete, onCancel]);
155
+ /**
156
+ * Toggle pause/resume
157
+ */
158
+ const handleTogglePause = useCallback(() => {
159
+ const recorder = mediaRecorderRef.current;
160
+ if (!recorder)
161
+ return;
162
+ if (recordingState === "recording") {
163
+ recorder.pause();
164
+ clearTimer();
165
+ setRecordingState("paused");
166
+ }
167
+ else if (recordingState === "paused") {
168
+ recorder.resume();
169
+ startTimer();
170
+ setRecordingState("recording");
171
+ }
172
+ }, [recordingState, clearTimer, startTimer]);
173
+ return (jsxs("div", { className: cn("flex items-center justify-between w-full", className), children: [jsx(Button, { variant: "ghost", color: "neutral", size: "sm", className: "rounded-full", onClick: handleCancel, "aria-label": "Cancel recording", children: "Cancel" }), jsxs("div", { className: "flex items-center gap-2.5", children: [jsx(motion.div, { className: "size-2.5 rounded-full bg-[var(--color-danger)]", animate: recordingState === "recording"
174
+ ? { opacity: [1, 0.3, 1] }
175
+ : { opacity: 0.5 }, transition: recordingState === "recording"
176
+ ? { duration: 1.2, repeat: Infinity, ease: "easeInOut" }
177
+ : undefined }), jsx("span", { className: "text-lg font-medium tabular-nums text-[var(--color-text-primary)] min-w-[3.5rem] text-center", children: formatTime(elapsed) })] }), jsxs("div", { className: "flex items-center gap-2", children: [jsx(Button, { iconOnly: true, variant: "outline", color: "neutral", size: "sm", className: "rounded-full", onClick: handleTogglePause, "aria-label": recordingState === "paused" ? "Resume recording" : "Pause recording", children: recordingState === "paused" ? (jsx(PlayIcon, { className: "size-4", strokeWidth: 2 })) : (jsx(PauseIcon, { className: "size-4", strokeWidth: 2 })) }), jsx(Button, { iconOnly: true, variant: "filled", color: "primary", size: "sm", className: "rounded-full", onClick: handleConfirm, "aria-label": "Confirm recording", children: jsx(CheckIcon, { className: "size-4", strokeWidth: 2.5 }) })] })] }));
178
+ };
179
+ VoiceRecorder.displayName = "VoiceRecorder";
180
+
181
+ export { VoiceRecorder };
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Recording state machine states
3
+ */
4
+ export type RecordingState = "idle" | "recording" | "paused";
5
+ /**
6
+ * Props for the internal VoiceRecorder sub-component
7
+ */
8
+ export interface VoiceRecorderProps {
9
+ /** Called when user confirms the recording */
10
+ onComplete: (audioBlob: Blob) => void;
11
+ /** Called when user cancels the recording */
12
+ onCancel: () => void;
13
+ /** Maximum recording duration in seconds (auto-stops at limit) */
14
+ maxDuration: number;
15
+ /** Theme class for the recorder container */
16
+ className?: string;
17
+ }
@@ -1,3 +1,4 @@
1
1
  export { PromptInput } from "./PromptInput";
2
2
  export type { PromptInputProps, PromptInputState, PromptInputTheme, PromptInputThemeOverrides, ModelOption, AttachmentItem, AttachmentError, } from "./PromptInput.types";
3
+ export type { RecordingState } from "./VoiceRecorder.types";
3
4
  export { promptInputTheme } from "./PromptInput.theme";
@@ -2,7 +2,7 @@ const promptSuggestionTheme = {
2
2
  baseStyle: "inline-flex items-center gap-2 py-2 px-3.5 rounded-full " +
3
3
  "bg-white dark:bg-[var(--color-background)] " +
4
4
  "border border-[var(--color-border)] " +
5
- "text-sm font-medium text-[var(--color-text-primary)] " +
5
+ "text-base font-medium text-[var(--color-text-primary)] " +
6
6
  "cursor-pointer transition-all duration-300 " +
7
7
  "hover:bg-[var(--color-background-secondary)] dark:hover:bg-[var(--color-background-secondary)] " +
8
8
  "focus:outline-none focus-visible:ring-2 focus-visible:ring-[var(--color-primary)]",
@@ -1,7 +1,8 @@
1
1
  /**
2
2
  * MarkdownRenderer Component
3
3
  * Renders markdown content with syntax highlighting for code blocks
4
- * Supports optional block-level slide-in animations during streaming
4
+ * Supports word-by-word fade-in animation during streaming
5
+ * and an inline cursor that appears at the end of the last text element
5
6
  */
6
7
  import React from 'react';
7
8
  import type { MarkdownOptions } from './StreamingResponse.types';
@@ -16,10 +17,12 @@ export interface MarkdownRendererProps {
16
17
  animated?: boolean;
17
18
  /** Show a blinking cursor at end of content while streaming */
18
19
  showCursor?: boolean;
20
+ /** Number of recent words to animate (default: 6) */
21
+ animateLastN?: number;
19
22
  }
20
23
  /**
21
24
  * MarkdownRenderer component for rendering markdown with syntax highlighting
22
25
  * Supports GitHub Flavored Markdown (tables, task lists, strikethrough, etc.)
23
- * Optionally animates block-level elements during streaming with slide-in effect
26
+ * Animates individual words during streaming with a fade-in + blur effect
24
27
  */
25
28
  export declare const MarkdownRenderer: React.FC<MarkdownRendererProps>;
@@ -1,16 +1,17 @@
1
1
  import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
2
- import { useMemo, useRef } from 'react';
2
+ import React__default, { useMemo, useRef } from 'react';
3
3
  import ReactMarkdown from 'react-markdown';
4
4
  import { Prism } from 'react-syntax-highlighter';
5
5
  import { oneDark, oneLight } from 'react-syntax-highlighter/dist/esm/styles/prism';
6
6
  import remarkGfm from 'remark-gfm';
7
7
  import { useReducedMotion, motion } from 'motion/react';
8
8
  import { blockTransition, blockSlideIn } from './StreamingResponse.animations.js';
9
- import { StreamingCursor } from './StreamingCursor.js';
9
+ import { WordAnimationProvider, useWordAnimation } from './WordAnimationContext.js';
10
10
 
11
11
  /**
12
12
  * Wrapper that optionally animates block-level elements during streaming.
13
13
  * Once an element has animated in, it stays static (no re-animation on re-render).
14
+ * Used for structural elements like code blocks and tables.
14
15
  */
15
16
  const AnimatedBlock = ({ children, animate, className, as = 'div' }) => {
16
17
  const hasAnimatedRef = useRef(false);
@@ -26,15 +27,38 @@ const AnimatedBlock = ({ children, animate, className, as = 'div' }) => {
26
27
  const MotionTag = as === 'p' ? motion.p : motion.div;
27
28
  return (jsx(MotionTag, { variants: blockSlideIn, initial: "hidden", animate: "visible", transition: blockTransition, className: className, children: children }));
28
29
  };
30
+ /**
31
+ * Prose wrapper — uses word-level animation from context for text elements.
32
+ * Falls back to plain rendering when animation is disabled.
33
+ */
34
+ const AnimatedProse = ({ children, className, as: tag = 'p', }) => {
35
+ const wordAnim = useWordAnimation();
36
+ const content = wordAnim ? wordAnim.processChildren(children) : children;
37
+ return React__default.createElement(tag, { className }, content);
38
+ };
39
+ /**
40
+ * Skip counter — counts words in non-prose children to keep counter in sync.
41
+ */
42
+ const SkipWords = ({ children }) => {
43
+ const wordAnim = useWordAnimation();
44
+ if (wordAnim) {
45
+ wordAnim.skipChildren(children);
46
+ }
47
+ return null;
48
+ };
29
49
  /**
30
50
  * MarkdownRenderer component for rendering markdown with syntax highlighting
31
51
  * Supports GitHub Flavored Markdown (tables, task lists, strikethrough, etc.)
32
- * Optionally animates block-level elements during streaming with slide-in effect
52
+ * Animates individual words during streaming with a fade-in + blur effect
33
53
  */
34
- const MarkdownRenderer = ({ content, options = {}, isStreaming = false, animated = true, showCursor = true, }) => {
54
+ const MarkdownRenderer = ({ content, options = {}, isStreaming = false, animated = true, showCursor = true, animateLastN = 6, }) => {
35
55
  const { allowHtml = false, syntaxTheme = 'light', renderCodeBlock } = options;
36
56
  const shouldReduceMotion = useReducedMotion();
37
57
  const shouldAnimate = animated && isStreaming && !shouldReduceMotion;
58
+ // Append cursor character to content so it renders inline within the last element
59
+ const displayContent = isStreaming && showCursor
60
+ ? content + ' ▍'
61
+ : content;
38
62
  const markdownComponents = useMemo(() => ({
39
63
  // Code blocks with syntax highlighting
40
64
  code({ inline, className, children, ...props }) {
@@ -42,59 +66,59 @@ const MarkdownRenderer = ({ content, options = {}, isStreaming = false, animated
42
66
  const language = match ? match[1] : '';
43
67
  // Use custom code block renderer if provided
44
68
  if (!inline && renderCodeBlock && language) {
45
- return (jsx(AnimatedBlock, { animate: shouldAnimate, children: renderCodeBlock(String(children).replace(/\n$/, ''), language) }));
69
+ return (jsxs(AnimatedBlock, { animate: shouldAnimate, children: [jsx(SkipWords, { children: children }), renderCodeBlock(String(children).replace(/\n$/, ''), language)] }));
46
70
  }
47
71
  // Render syntax-highlighted code block
48
72
  if (!inline && language) {
49
- return (jsx(AnimatedBlock, { animate: shouldAnimate, children: jsx(Prism, { style: syntaxTheme === 'dark' ? oneDark : oneLight, language: language, PreTag: "div", className: "rounded-lg my-3", ...props, children: String(children).replace(/\n$/, '') }) }));
73
+ return (jsxs(AnimatedBlock, { animate: shouldAnimate, children: [jsx(SkipWords, { children: children }), jsx(Prism, { style: syntaxTheme === 'dark' ? oneDark : oneLight, language: language, PreTag: "div", className: "rounded-lg my-3", ...props, children: String(children).replace(/\n$/, '') })] }));
50
74
  }
51
- // Inline code
52
- return (jsx("code", { className: "bg-[var(--color-background-tertiary)] text-[var(--color-primary)] px-1.5 py-0.5 rounded text-sm font-mono", ...props, children: children }));
75
+ // Inline code — skip word animation for code tokens
76
+ return (jsxs(Fragment, { children: [jsx(SkipWords, { children: children }), jsx("code", { className: "bg-[var(--color-background-tertiary)] text-[var(--color-primary)] px-1.5 py-0.5 rounded text-base font-mono", ...props, children: children })] }));
53
77
  },
54
- // Paragraphs
78
+ // Paragraphs — word-level animation
55
79
  p({ children }) {
56
- return (jsx(AnimatedBlock, { animate: shouldAnimate, as: "p", className: "mb-3 last:mb-0 text-[var(--color-text-primary)] leading-relaxed", children: children }));
80
+ return (jsx(AnimatedProse, { as: "p", className: "mb-3 last:mb-0 text-[var(--color-text-primary)] leading-relaxed", children: children }));
57
81
  },
58
- // Headings
82
+ // Headings — word-level animation
59
83
  h1({ children }) {
60
- return (jsx(AnimatedBlock, { animate: shouldAnimate, children: jsx("h1", { className: "text-2xl font-bold mb-4 text-[var(--color-text-primary)] border-b border-[var(--color-border)] pb-2", children: children }) }));
84
+ return (jsx(AnimatedProse, { as: "h1", className: "text-2xl font-bold mb-4 text-[var(--color-text-primary)] border-b border-[var(--color-border)] pb-2", children: children }));
61
85
  },
62
86
  h2({ children }) {
63
- return (jsx(AnimatedBlock, { animate: shouldAnimate, children: jsx("h2", { className: "text-xl font-bold mb-3 text-[var(--color-text-primary)] border-b border-[var(--color-border)] pb-2", children: children }) }));
87
+ return (jsx(AnimatedProse, { as: "h2", className: "text-2xl font-bold mb-3 text-[var(--color-text-primary)] border-b border-[var(--color-border)] pb-2", children: children }));
64
88
  },
65
89
  h3({ children }) {
66
- return (jsx(AnimatedBlock, { animate: shouldAnimate, children: jsx("h3", { className: "text-lg font-semibold mb-2 text-[var(--color-text-primary)]", children: children }) }));
90
+ return (jsx(AnimatedProse, { as: "h3", className: "text-xl font-semibold mb-2 text-[var(--color-text-primary)]", children: children }));
67
91
  },
68
92
  h4({ children }) {
69
- return (jsx(AnimatedBlock, { animate: shouldAnimate, children: jsx("h4", { className: "text-base font-semibold mb-2 text-[var(--color-text-primary)]", children: children }) }));
93
+ return (jsx(AnimatedProse, { as: "h4", className: "text-lg font-semibold mb-2 text-[var(--color-text-primary)]", children: children }));
70
94
  },
71
95
  h5({ children }) {
72
- return (jsx(AnimatedBlock, { animate: shouldAnimate, children: jsx("h5", { className: "text-sm font-semibold mb-2 text-[var(--color-text-primary)]", children: children }) }));
96
+ return (jsx(AnimatedProse, { as: "h5", className: "text-base font-semibold mb-2 text-[var(--color-text-primary)]", children: children }));
73
97
  },
74
98
  h6({ children }) {
75
- return (jsx(AnimatedBlock, { animate: shouldAnimate, children: jsx("h6", { className: "text-sm font-semibold mb-2 text-[var(--color-text-secondary)]", children: children }) }));
99
+ return (jsx(AnimatedProse, { as: "h6", className: "text-base font-semibold mb-2 text-[var(--color-text-secondary)]", children: children }));
76
100
  },
77
- // Lists
101
+ // Lists — word-level animation on li
78
102
  ul({ children }) {
79
- return (jsx(AnimatedBlock, { animate: shouldAnimate, children: jsx("ul", { className: "list-disc list-inside mb-3 space-y-1 text-[var(--color-text-primary)]", children: children }) }));
103
+ return (jsx("ul", { className: "list-disc list-inside mb-3 space-y-1 text-[var(--color-text-primary)]", children: children }));
80
104
  },
81
105
  ol({ children }) {
82
- return (jsx(AnimatedBlock, { animate: shouldAnimate, children: jsx("ol", { className: "list-decimal list-inside mb-3 space-y-1 text-[var(--color-text-primary)]", children: children }) }));
106
+ return (jsx("ol", { className: "list-decimal list-inside mb-3 space-y-1 text-[var(--color-text-primary)]", children: children }));
83
107
  },
84
108
  li({ children }) {
85
- return jsx("li", { className: "ml-4", children: children });
109
+ return (jsx(AnimatedProse, { as: "li", className: "ml-4", children: children }));
86
110
  },
87
- // Blockquotes
111
+ // Blockquotes — word-level animation
88
112
  blockquote({ children }) {
89
- return (jsx(AnimatedBlock, { animate: shouldAnimate, children: jsx("blockquote", { className: "border-l-4 border-[var(--color-primary)] pl-4 py-2 my-3 bg-[var(--color-background-secondary)] italic text-[var(--color-text-secondary)]", children: children }) }));
113
+ return (jsx("blockquote", { className: "border-l-4 border-[var(--color-primary)] pl-4 py-2 my-3 bg-[var(--color-background-secondary)] italic text-[var(--color-text-secondary)]", children: children }));
90
114
  },
91
115
  // Links
92
116
  a({ href, children }) {
93
117
  return (jsx("a", { href: href, className: "text-[var(--color-primary)] hover:text-[var(--color-primary-700)] underline transition-colors", target: "_blank", rel: "noopener noreferrer", children: children }));
94
118
  },
95
- // Tables (from remarkGfm)
119
+ // Tables block-level slide-in, skip word animation
96
120
  table({ children }) {
97
- return (jsx(AnimatedBlock, { animate: shouldAnimate, children: jsx("div", { className: "overflow-x-auto my-3", children: jsx("table", { className: "min-w-full border-collapse border border-[var(--color-border)]", children: children }) }) }));
121
+ return (jsxs(AnimatedBlock, { animate: shouldAnimate, children: [jsx(SkipWords, { children: children }), jsx("div", { className: "overflow-x-auto my-3", children: jsx("table", { className: "min-w-full border-collapse border border-[var(--color-border)]", children: children }) })] }));
98
122
  },
99
123
  thead({ children }) {
100
124
  return jsx("thead", { className: "bg-[var(--color-background-secondary)]", children: children });
@@ -115,7 +139,7 @@ const MarkdownRenderer = ({ content, options = {}, isStreaming = false, animated
115
139
  hr() {
116
140
  return jsx("hr", { className: "my-4 border-t border-[var(--color-border)]" });
117
141
  },
118
- // Strong/Bold
142
+ // Strong/Bold — pass through (word animation handles inline elements)
119
143
  strong({ children }) {
120
144
  return jsx("strong", { className: "font-semibold text-[var(--color-text-primary)]", children: children });
121
145
  },
@@ -128,7 +152,7 @@ const MarkdownRenderer = ({ content, options = {}, isStreaming = false, animated
128
152
  return jsx("del", { className: "line-through text-[var(--color-text-secondary)]", children: children });
129
153
  },
130
154
  }), [shouldAnimate, syntaxTheme, renderCodeBlock]);
131
- return (jsxs(Fragment, { children: [jsx(ReactMarkdown, { remarkPlugins: [remarkGfm], skipHtml: !allowHtml, components: markdownComponents, children: content }), jsx(StreamingCursor, { visible: isStreaming && showCursor, enabled: animated })] }));
155
+ return (jsx(WordAnimationProvider, { content: displayContent, enabled: shouldAnimate, animateLastN: animateLastN, hasCursor: isStreaming && showCursor, children: jsx(ReactMarkdown, { remarkPlugins: [remarkGfm], skipHtml: !allowHtml, components: markdownComponents, children: displayContent }) }));
132
156
  };
133
157
  MarkdownRenderer.displayName = 'MarkdownRenderer';
134
158
 
@@ -1,8 +1,8 @@
1
1
  /**
2
2
  * StreamingCursor Component
3
- * Animated blinking cursor shown at the end of streaming text
3
+ * Simple blinking cursor shown at the end of streaming text
4
4
  */
5
- import React from 'react';
5
+ import React from "react";
6
6
  export interface StreamingCursorProps {
7
7
  /** Whether the cursor is visible (typically while streaming) */
8
8
  visible: boolean;
@@ -14,8 +14,7 @@ export interface StreamingCursorProps {
14
14
  className?: string;
15
15
  }
16
16
  /**
17
- * StreamingCursor renders an animated blinking caret
18
- * that indicates active streaming. Automatically respects
19
- * reduced motion preferences.
17
+ * StreamingCursor renders a blinking caret that indicates active streaming.
18
+ * Uses a simple CSS pulse animation — no framer motion, no layout shifts.
20
19
  */
21
20
  export declare const StreamingCursor: React.FC<StreamingCursorProps>;
@@ -1,21 +1,14 @@
1
1
  import { jsx } from 'react/jsx-runtime';
2
- import { useReducedMotion, motion } from 'motion/react';
3
- import { cursorPulse } from './StreamingResponse.animations.js';
4
2
 
5
3
  /**
6
- * StreamingCursor renders an animated blinking caret
7
- * that indicates active streaming. Automatically respects
8
- * reduced motion preferences.
4
+ * StreamingCursor renders a blinking caret that indicates active streaming.
5
+ * Uses a simple CSS pulse animation — no framer motion, no layout shifts.
9
6
  */
10
- const StreamingCursor = ({ visible, enabled = true, cursor = '', className, }) => {
11
- const shouldReduceMotion = useReducedMotion();
7
+ const StreamingCursor = ({ visible, enabled = true, cursor = "", className, }) => {
12
8
  if (!visible)
13
9
  return null;
14
- if (!enabled || shouldReduceMotion) {
15
- return (jsx("span", { className: className || 'text-[var(--color-primary)] font-light ml-0.5', "aria-hidden": "true", children: cursor }));
16
- }
17
- return (jsx(motion.span, { variants: cursorPulse, animate: "pulse", className: className || 'text-[var(--color-primary)] font-light ml-0.5 inline-block', "aria-hidden": "true", children: cursor }));
10
+ return (jsx("span", { className: className || `font-extralight ml-0.5 ${enabled ? "animate-pulse" : ""}`, "aria-hidden": "true", children: cursor }));
18
11
  };
19
- StreamingCursor.displayName = 'StreamingCursor';
12
+ StreamingCursor.displayName = "StreamingCursor";
20
13
 
21
14
  export { StreamingCursor };
@@ -20,6 +20,13 @@ export declare const blockTransition: Transition;
20
20
  * Pulses while streaming is active
21
21
  */
22
22
  export declare const cursorPulse: Variants;
23
+ /**
24
+ * Inline token fade-in animation
25
+ * Used for word-by-word animation inside markdown prose elements
26
+ * No y-movement to prevent layout jitter in inline text
27
+ */
28
+ export declare const inlineTokenFadeIn: Variants;
29
+ export declare const inlineTokenTransition: Transition;
23
30
  /**
24
31
  * Container animation for staggered children
25
32
  */
@@ -54,6 +54,25 @@ const cursorPulse = {
54
54
  },
55
55
  },
56
56
  };
57
+ /**
58
+ * Inline token fade-in animation
59
+ * Used for word-by-word animation inside markdown prose elements
60
+ * No y-movement to prevent layout jitter in inline text
61
+ */
62
+ const inlineTokenFadeIn = {
63
+ hidden: {
64
+ opacity: 0,
65
+ filter: 'blur(3px)',
66
+ },
67
+ visible: {
68
+ opacity: 1,
69
+ filter: 'blur(0px)',
70
+ },
71
+ };
72
+ const inlineTokenTransition = {
73
+ duration: 0.3,
74
+ ease: [0.25, 0.4, 0.55, 1],
75
+ };
57
76
  /**
58
77
  * Container animation for staggered children
59
78
  */
@@ -65,4 +84,4 @@ const staggerContainer = {
65
84
  },
66
85
  };
67
86
 
68
- export { blockSlideIn, blockTransition, cursorPulse, staggerContainer, tokenFadeIn, tokenTransition };
87
+ export { blockSlideIn, blockTransition, cursorPulse, inlineTokenFadeIn, inlineTokenTransition, staggerContainer, tokenFadeIn, tokenTransition };
@@ -32,7 +32,7 @@ onToken, onComplete, onError, onStart, onAbort,
32
32
  // Display options
33
33
  typingSpeed = 100, enableTypewriter = true, enableMarkdown = true, markdownOptions,
34
34
  // Animation
35
- animated = true, showCursor = true,
35
+ animated = true, showCursor = true, animateLastN = 6,
36
36
  // Message component props
37
37
  role = 'assistant', avatar, showTimestamp = true, showActions = true, onCopy, onRegenerate,
38
38
  // Error handling
@@ -65,7 +65,7 @@ className, }) => {
65
65
  }
66
66
  else if (enableMarkdown) {
67
67
  // Render markdown with block-level slide-in animations and streaming cursor
68
- messageContent = (jsx(MarkdownRenderer, { content: accumulatedText, options: markdownOptions, isStreaming: isStreaming, animated: animated, showCursor: showCursor }));
68
+ messageContent = (jsx(MarkdownRenderer, { content: accumulatedText, options: markdownOptions, isStreaming: isStreaming, animated: animated, showCursor: showCursor, animateLastN: animateLastN }));
69
69
  }
70
70
  else if (isStreaming) {
71
71
  // During streaming without markdown: use per-token fade-in animation
@@ -1,9 +1,9 @@
1
1
  const streamingResponseTheme = {
2
2
  errorContainerStyle: "flex items-start gap-3 rounded-[var(--radius-base)] border border-[var(--color-danger-200)] bg-[var(--color-danger-50)] px-4 py-3",
3
- errorTitleStyle: "text-sm font-medium text-[var(--color-danger)]",
4
- errorMessageStyle: "text-sm text-[var(--color-text-secondary)] mt-1",
5
- errorRetryButtonStyle: "mt-2 text-sm font-medium text-[var(--color-danger)] hover:text-[var(--color-danger-700)] transition-colors",
6
- loadingContainerStyle: "flex items-center gap-2 text-[var(--color-text-placeholder)] text-sm",
3
+ errorTitleStyle: "text-base font-medium text-[var(--color-danger)]",
4
+ errorMessageStyle: "text-base text-[var(--color-text-secondary)] mt-1",
5
+ errorRetryButtonStyle: "mt-2 text-base font-medium text-[var(--color-danger)] hover:text-[var(--color-danger-700)] transition-colors",
6
+ loadingContainerStyle: "flex items-center gap-2 text-[var(--color-text-placeholder)] text-base",
7
7
  loadingDotStyle: "w-1.5 h-1.5 rounded-full bg-current animate-pulse",
8
8
  };
9
9
 
@@ -63,6 +63,8 @@ export interface StreamingResponseProps {
63
63
  animated?: boolean;
64
64
  /** Show blinking cursor while streaming (default: true) */
65
65
  showCursor?: boolean;
66
+ /** Number of recent words to animate during streaming (default: 6) */
67
+ animateLastN?: number;
66
68
  /** Message role (default: 'assistant') */
67
69
  role?: MessageRole;
68
70
  /** Avatar configuration */
@@ -0,0 +1,27 @@
1
+ /**
2
+ * WordAnimationContext
3
+ * Provides a global word counter for word-by-word fade-in animation
4
+ * inside markdown-rendered content. Works like AnimatedText but across
5
+ * all markdown elements (paragraphs, headings, lists, blockquotes, etc.).
6
+ */
7
+ import React from 'react';
8
+ interface WordAnimationContextValue {
9
+ /** Process children of a prose element, animating recent words */
10
+ processChildren: (children: React.ReactNode) => React.ReactNode;
11
+ /** Count words in children without animating (for code blocks, tables, etc.) */
12
+ skipChildren: (children: React.ReactNode) => void;
13
+ }
14
+ export declare const useWordAnimation: () => WordAnimationContextValue | null;
15
+ export interface WordAnimationProviderProps {
16
+ children: React.ReactNode;
17
+ /** Full markdown content string — used to compute total word count */
18
+ content: string;
19
+ /** Whether animation is active */
20
+ enabled: boolean;
21
+ /** Number of recent words to animate (older ones render as static text) */
22
+ animateLastN?: number;
23
+ /** Whether cursor is present in content */
24
+ hasCursor?: boolean;
25
+ }
26
+ export declare const WordAnimationProvider: React.FC<WordAnimationProviderProps>;
27
+ export {};