@flikk/ui 1.0.0-beta.13 → 1.0.0-beta.15

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 (283) hide show
  1. package/dist/components/ai/CodeBlock/CodeBlock.theme.js +1 -1
  2. package/dist/components/ai/PromptInput/PromptInput.js +4 -2
  3. package/dist/components/ai/PromptInput/VoiceRecorder.js +1 -1
  4. package/dist/components/ai/PromptSuggestions/PromptSuggestion.theme.js +4 -4
  5. package/dist/components/ai/StreamingResponse/StreamingResponse.js +6 -0
  6. package/dist/components/ai/ThinkingIndicator/ThinkingIndicator.js +3 -14
  7. package/dist/components/ai/index.d.ts +0 -5
  8. package/dist/components/ai/index.js +8 -4
  9. package/dist/components/charts/DonutChart/DonutChart.js +1 -1
  10. package/dist/components/charts/DonutChart/MultiSegmentDonutChart.js +1 -1
  11. package/dist/components/charts/FunnelChart/FunnelChart.js +2 -2
  12. package/dist/components/charts/shared/ChartLegend/ChartLegend.types.d.ts +13 -1
  13. package/dist/components/charts/shared/ChartLegend/ChartLegendContent.js +1 -1
  14. package/dist/components/charts/shared/ChartTooltip/ChartTooltip.types.d.ts +13 -2
  15. package/dist/components/core/Accordion/AccordionItem.js +1 -1
  16. package/dist/components/core/Accordion/AccordionTrigger.js +1 -1
  17. package/dist/components/core/Alert/Alert.animations.d.ts +11 -0
  18. package/dist/components/core/Alert/Alert.animations.js +44 -0
  19. package/dist/components/core/Alert/Alert.js +16 -3
  20. package/dist/components/core/Avatar/Avatar.js +12 -7
  21. package/dist/components/core/Avatar/Avatar.theme.d.ts +4 -6
  22. package/dist/components/core/Avatar/Avatar.theme.js +22 -12
  23. package/dist/components/core/Avatar/Avatar.types.d.ts +9 -0
  24. package/dist/components/core/AvatarGroup/AvatarGroup.animations.js +2 -2
  25. package/dist/components/core/AvatarGroup/AvatarGroup.js +1 -2
  26. package/dist/components/core/AvatarGroup/AvatarGroup.theme.js +1 -1
  27. package/dist/components/core/Badge/Badge.animations.js +1 -1
  28. package/dist/components/core/Badge/Badge.js +26 -50
  29. package/dist/components/core/Badge/Badge.theme.js +49 -63
  30. package/dist/components/core/Badge/Badge.types.d.ts +6 -30
  31. package/dist/components/core/Button/Button.js +2 -2
  32. package/dist/components/core/Button/Button.ripple.js +1 -1
  33. package/dist/components/core/Button/Button.theme.d.ts +1 -1
  34. package/dist/components/core/Button/Button.theme.js +5 -5
  35. package/dist/components/core/Button/Button.types.d.ts +1 -1
  36. package/dist/components/core/ButtonGroup/ButtonGroup.theme.js +6 -6
  37. package/dist/components/core/ButtonGroup/ButtonGroupText.js +1 -3
  38. package/dist/components/core/Calendar/Calendar.js +29 -3
  39. package/dist/components/core/Calendar/Calendar.theme.js +11 -7
  40. package/dist/components/core/Calendar/Calendar.types.d.ts +3 -0
  41. package/dist/components/core/Calendar/CalendarMini/CalendarMini.js +2 -2
  42. package/dist/components/core/Carousel/CarouselBody.js +0 -1
  43. package/dist/components/core/CommandPalette/CommandItem.js +1 -1
  44. package/dist/components/core/CommandPalette/CommandPalette.js +6 -4
  45. package/dist/components/core/CommandPalette/CommandPalette.theme.js +1 -0
  46. package/dist/components/core/CommandPalette/CommandPalette.types.d.ts +6 -0
  47. package/dist/components/core/ContextMenu/ContextMenu.js +5 -4
  48. package/dist/components/core/ContextMenu/ContextMenuTrigger.js +5 -6
  49. package/dist/components/core/Drawer/Drawer.d.ts +1 -1
  50. package/dist/components/core/Drawer/Drawer.js +25 -2
  51. package/dist/components/core/Drawer/Drawer.theme.js +2 -2
  52. package/dist/components/core/Drawer/Drawer.types.d.ts +6 -0
  53. package/dist/components/core/Drawer/DrawerHeader.js +1 -1
  54. package/dist/components/core/Dropdown/Dropdown.d.ts +1 -1
  55. package/dist/components/core/Dropdown/Dropdown.js +5 -1
  56. package/dist/components/core/Dropdown/Dropdown.types.d.ts +1 -0
  57. package/dist/components/core/Dropdown/DropdownItem.js +1 -1
  58. package/dist/components/core/Dropdown/DropdownMenu.js +4 -4
  59. package/dist/components/core/Dropdown/DropdownSection.js +1 -1
  60. package/dist/components/core/Dropdown/DropdownSeparator.js +1 -1
  61. package/dist/components/core/Dropdown/DropdownTrigger.d.ts +6 -1
  62. package/dist/components/core/Dropdown/DropdownTrigger.js +10 -8
  63. package/dist/components/core/Kbd/Kbd.theme.js +3 -3
  64. package/dist/components/core/Link/Link.js +4 -2
  65. package/dist/components/core/Message/Message.d.ts +9 -0
  66. package/dist/components/core/Message/Message.js +44 -3
  67. package/dist/components/core/Message/Message.theme.js +22 -0
  68. package/dist/components/core/Message/Message.types.d.ts +115 -0
  69. package/dist/components/core/Message/MessageAudio.d.ts +8 -0
  70. package/dist/components/core/Message/MessageAudio.js +11 -0
  71. package/dist/components/core/Message/MessageContext.d.ts +3 -1
  72. package/dist/components/core/Message/MessageDateDivider.d.ts +6 -0
  73. package/dist/components/core/Message/MessageDateDivider.js +10 -0
  74. package/dist/components/core/Message/MessageFile.d.ts +9 -0
  75. package/dist/components/core/Message/MessageFile.js +15 -0
  76. package/dist/components/core/Message/MessageImage.d.ts +11 -0
  77. package/dist/components/core/Message/MessageImage.js +13 -0
  78. package/dist/components/core/Message/MessageLink.d.ts +10 -0
  79. package/dist/components/core/Message/MessageLink.js +15 -0
  80. package/dist/components/core/Message/MessageReactions.d.ts +8 -0
  81. package/dist/components/core/Message/MessageReactions.js +12 -0
  82. package/dist/components/core/Message/MessageReply.d.ts +8 -0
  83. package/dist/components/core/Message/MessageReply.js +10 -0
  84. package/dist/components/core/Message/MessageSenderName.d.ts +6 -0
  85. package/dist/components/core/Message/MessageSenderName.js +10 -0
  86. package/dist/components/core/Message/MessageStatusIndicator.d.ts +9 -0
  87. package/dist/components/core/Message/MessageStatusIndicator.js +45 -0
  88. package/dist/components/core/Message/index.d.ts +19 -1
  89. package/dist/components/core/Modal/Modal.animations.d.ts +1 -0
  90. package/dist/components/core/Modal/Modal.animations.js +14 -11
  91. package/dist/components/core/Modal/ModalHeader.js +1 -1
  92. package/dist/components/core/NavItem/NavItem.js +100 -52
  93. package/dist/components/core/NavItem/NavItem.theme.js +6 -3
  94. package/dist/components/core/NavItem/NavItem.types.d.ts +44 -30
  95. package/dist/components/core/NavItem/index.d.ts +1 -1
  96. package/dist/components/core/Pagination/Pagination.theme.js +1 -1
  97. package/dist/components/core/Pill/Pill.theme.js +1 -1
  98. package/dist/components/core/Popover/Popover.d.ts +1 -1
  99. package/dist/components/core/Popover/PopoverBody.js +2 -2
  100. package/dist/components/core/Popover/PopoverTrigger.d.ts +1 -1
  101. package/dist/components/core/Popover/PopoverTrigger.js +11 -11
  102. package/dist/components/core/Progress/Progress.d.ts +9 -8
  103. package/dist/components/core/Progress/Progress.js +16 -16
  104. package/dist/components/core/Progress/Progress.theme.js +5 -16
  105. package/dist/components/core/Progress/Progress.types.d.ts +2 -20
  106. package/dist/components/core/Progress/index.d.ts +1 -1
  107. package/dist/components/core/ScrollArea/ScrollArea.js +49 -7
  108. package/dist/components/core/ScrollArea/ScrollArea.types.d.ts +12 -3
  109. package/dist/components/core/ScrollArea/index.d.ts +1 -1
  110. package/dist/components/core/Segmented/SegmentedItem.js +1 -1
  111. package/dist/components/core/Sidebar/Sidebar.d.ts +11 -1
  112. package/dist/components/core/Sidebar/Sidebar.js +51 -17
  113. package/dist/components/core/Sidebar/Sidebar.theme.js +9 -7
  114. package/dist/components/core/Sidebar/Sidebar.types.d.ts +57 -0
  115. package/dist/components/core/Sidebar/SidebarContent.js +3 -1
  116. package/dist/components/core/Sidebar/SidebarContext.d.ts +14 -0
  117. package/dist/components/core/Sidebar/SidebarContext.js +63 -11
  118. package/dist/components/core/Sidebar/SidebarFooter.js +3 -1
  119. package/dist/components/core/Sidebar/SidebarHeader.js +6 -2
  120. package/dist/components/core/Sidebar/SidebarMobileTrigger.d.ts +3 -0
  121. package/dist/components/core/Sidebar/SidebarMobileTrigger.js +29 -0
  122. package/dist/components/core/Sidebar/SidebarNav.js +3 -2
  123. package/dist/components/core/Sidebar/SidebarNavGroup.js +4 -2
  124. package/dist/components/core/Sidebar/SidebarToggle.js +2 -1
  125. package/dist/components/core/Sidebar/SidebarUserProfile.d.ts +3 -0
  126. package/dist/components/core/Sidebar/SidebarUserProfile.js +35 -0
  127. package/dist/components/core/Sidebar/index.d.ts +3 -1
  128. package/dist/components/core/SocialIcon/SocialIcon.js +1 -1
  129. package/dist/components/core/Sortable/Sortable.js +2 -2
  130. package/dist/components/core/Sortable/Sortable.theme.js +1 -1
  131. package/dist/components/core/Sortable/Sortable.types.d.ts +7 -5
  132. package/dist/components/core/Tabs/Tabs.theme.d.ts +1 -1
  133. package/dist/components/core/Tabs/Tabs.theme.js +3 -3
  134. package/dist/components/core/Tabs/TabsBody.js +1 -1
  135. package/dist/components/core/Tabs/TabsTrigger.js +1 -1
  136. package/dist/components/core/Tag/Tag.js +2 -2
  137. package/dist/components/core/Toast/Toast.d.ts +2 -2
  138. package/dist/components/core/Toast/Toast.js +30 -21
  139. package/dist/components/core/Toast/Toast.theme.js +4 -9
  140. package/dist/components/core/Toast/Toast.types.d.ts +4 -21
  141. package/dist/components/core/Toast/index.d.ts +1 -1
  142. package/dist/components/core/Tooltip/Tooltip.js +1 -1
  143. package/dist/components/core/Tooltip/Tooltip.theme.js +1 -1
  144. package/dist/components/core/index.js +11 -0
  145. package/dist/components/data-display/GanttChart/GanttChart.types.d.ts +2 -2
  146. package/dist/components/data-display/GanttChart/GanttToolbar.js +1 -1
  147. package/dist/components/data-display/Table/Table.types.d.ts +8 -8
  148. package/dist/components/effects/CustomCursor/CustomCursor.js +2 -2
  149. package/dist/components/effects/GlassSurface/GlassSurface.d.ts +1 -1
  150. package/dist/components/effects/GlassSurface/GlassSurface.js +12 -4
  151. package/dist/components/effects/InteractiveCharacters/InteractiveCharacters.animations.d.ts +39 -0
  152. package/dist/components/effects/InteractiveCharacters/InteractiveCharacters.animations.js +98 -0
  153. package/dist/components/effects/InteractiveCharacters/InteractiveCharacters.d.ts +3 -0
  154. package/dist/components/effects/InteractiveCharacters/InteractiveCharacters.js +104 -0
  155. package/dist/components/effects/InteractiveCharacters/InteractiveCharacters.types.d.ts +30 -0
  156. package/dist/components/effects/InteractiveCharacters/characters/BlobCharacter.d.ts +3 -0
  157. package/dist/components/effects/InteractiveCharacters/characters/BlobCharacter.js +36 -0
  158. package/dist/components/effects/InteractiveCharacters/characters/SmallCharacter.d.ts +3 -0
  159. package/dist/components/effects/InteractiveCharacters/characters/SmallCharacter.js +36 -0
  160. package/dist/components/effects/InteractiveCharacters/characters/TallCharacter.d.ts +3 -0
  161. package/dist/components/effects/InteractiveCharacters/characters/TallCharacter.js +37 -0
  162. package/dist/components/effects/InteractiveCharacters/hooks/useBlink.d.ts +14 -0
  163. package/dist/components/effects/InteractiveCharacters/hooks/useBlink.js +41 -0
  164. package/dist/components/effects/InteractiveCharacters/hooks/useIdleAnimation.d.ts +25 -0
  165. package/dist/components/effects/InteractiveCharacters/hooks/useIdleAnimation.js +84 -0
  166. package/dist/components/effects/InteractiveCharacters/hooks/useMouseTracking.d.ts +18 -0
  167. package/dist/components/effects/InteractiveCharacters/hooks/useMouseTracking.js +35 -0
  168. package/dist/components/effects/InteractiveCharacters/index.d.ts +2 -0
  169. package/dist/components/effects/MorphingText/MorphingText.d.ts +1 -1
  170. package/dist/components/effects/MorphingText/MorphingText.js +6 -5
  171. package/dist/components/effects/Neumorphic/InsetCircleButton.d.ts +9 -0
  172. package/dist/components/effects/Neumorphic/InsetCircleButton.js +10 -0
  173. package/dist/components/effects/Neumorphic/InsetPill.d.ts +7 -0
  174. package/dist/components/effects/Neumorphic/InsetPill.js +7 -0
  175. package/dist/components/effects/Neumorphic/index.d.ts +4 -0
  176. package/dist/components/effects/NoiseOverlay/NoiseOverlay.d.ts +1 -1
  177. package/dist/components/effects/NoiseOverlay/NoiseOverlay.js +4 -4
  178. package/dist/components/effects/Overlay/Overlay.js +6 -4
  179. package/dist/components/effects/PageTransition/PageTransition.animations.d.ts +8 -0
  180. package/dist/components/effects/PageTransition/PageTransition.animations.js +53 -0
  181. package/dist/components/effects/PageTransition/PageTransition.d.ts +3 -0
  182. package/dist/components/effects/PageTransition/PageTransition.js +71 -0
  183. package/dist/components/effects/PageTransition/PageTransition.types.d.ts +15 -0
  184. package/dist/components/effects/PageTransition/index.d.ts +2 -0
  185. package/dist/components/effects/index.d.ts +6 -0
  186. package/dist/components/effects/index.js +4 -0
  187. package/dist/components/forms/Checkbox/Checkbox.animations.d.ts +14 -0
  188. package/dist/components/forms/Checkbox/Checkbox.animations.js +53 -0
  189. package/dist/components/forms/Checkbox/Checkbox.js +4 -2
  190. package/dist/components/forms/Checkbox/Checkbox.theme.js +3 -3
  191. package/dist/components/forms/ColorPicker/ColorPicker.types.d.ts +1 -1
  192. package/dist/components/forms/ColorPicker/ColorPickerBody.js +3 -3
  193. package/dist/components/forms/Combobox/Combobox.js +5 -3
  194. package/dist/components/forms/DatePicker/DatePickerBody.js +1 -1
  195. package/dist/components/forms/DateRangePicker/DateRangePicker.animations.d.ts +1 -0
  196. package/dist/components/forms/DateRangePicker/DateRangePicker.d.ts +37 -0
  197. package/dist/components/forms/DateRangePicker/DateRangePicker.js +110 -0
  198. package/dist/components/forms/DateRangePicker/DateRangePicker.theme.d.ts +5 -0
  199. package/dist/components/forms/DateRangePicker/DateRangePicker.theme.js +52 -0
  200. package/dist/components/forms/DateRangePicker/DateRangePicker.types.d.ts +154 -0
  201. package/dist/components/forms/DateRangePicker/DateRangePickerBody.d.ts +6 -0
  202. package/dist/components/forms/DateRangePicker/DateRangePickerBody.js +208 -0
  203. package/dist/components/forms/DateRangePicker/DateRangePickerPresets.d.ts +6 -0
  204. package/dist/components/forms/DateRangePicker/DateRangePickerPresets.js +41 -0
  205. package/dist/components/forms/DateRangePicker/DateRangePickerTrigger.d.ts +6 -0
  206. package/dist/components/forms/DateRangePicker/DateRangePickerTrigger.js +32 -0
  207. package/dist/components/forms/DateRangePicker/dateRangePresets.d.ts +5 -0
  208. package/dist/components/forms/DateRangePicker/dateRangePresets.js +59 -0
  209. package/dist/components/forms/DateRangePicker/index.d.ts +4 -0
  210. package/dist/components/forms/FileUpload/FileUploadProgress.animations.d.ts +36 -0
  211. package/dist/components/forms/FileUpload/FileUploadProgress.animations.js +22 -0
  212. package/dist/components/forms/FileUpload/FileUploadProgress.d.ts +3 -0
  213. package/dist/components/forms/FileUpload/FileUploadProgress.js +111 -0
  214. package/dist/components/forms/FileUpload/FileUploadProgress.theme.d.ts +19 -0
  215. package/dist/components/forms/FileUpload/FileUploadProgress.theme.js +27 -0
  216. package/dist/components/forms/FileUpload/FileUploadProgress.types.d.ts +33 -0
  217. package/dist/components/forms/FileUpload/index.d.ts +3 -0
  218. package/dist/components/forms/Input/Input.js +8 -13
  219. package/dist/components/forms/Input/Input.types.d.ts +6 -0
  220. package/dist/components/forms/InputAddress/InputAddress.theme.js +1 -1
  221. package/dist/components/forms/InputCounter/InputCounter.js +1 -1
  222. package/dist/components/forms/InputCreditCard/InputCreditCard.theme.js +1 -1
  223. package/dist/components/forms/InputOTP/InputOTP.theme.js +1 -1
  224. package/dist/components/forms/Radio/Radio.animations.d.ts +10 -0
  225. package/dist/components/forms/Radio/Radio.animations.js +33 -0
  226. package/dist/components/forms/Radio/Radio.js +11 -2
  227. package/dist/components/forms/Radio/Radio.theme.js +3 -3
  228. package/dist/components/forms/RichTextEditor/RichTextEditor.js +23 -14
  229. package/dist/components/forms/RichTextEditor/RichTextEditor.theme.js +2 -2
  230. package/dist/components/forms/RichTextEditor/RichTextEditor.types.d.ts +11 -0
  231. package/dist/components/forms/Select/Select.d.ts +1 -1
  232. package/dist/components/forms/Select/Select.js +7 -7
  233. package/dist/components/forms/Select/Select.types.d.ts +3 -3
  234. package/dist/components/forms/SelectableCard/SelectableCard.js +1 -1
  235. package/dist/components/forms/Slider/Slider.theme.js +1 -1
  236. package/dist/components/forms/Switch/Switch.theme.js +3 -3
  237. package/dist/components/forms/forms.theme.js +1 -1
  238. package/dist/components/forms/index.d.ts +6 -0
  239. package/dist/components/forms/index.js +8 -0
  240. package/dist/hooks/index.d.ts +1 -0
  241. package/dist/hooks/useMediaQuery.d.ts +5 -0
  242. package/dist/hooks/useMediaQuery.js +21 -0
  243. package/dist/index.js +23 -0
  244. package/dist/styles.css +1 -1
  245. package/dist/utils/dateUtils.js +56 -5
  246. package/dist/utils/formatUtils.d.ts +10 -0
  247. package/dist/utils/formatUtils.js +24 -0
  248. package/dist/utils/index.d.ts +1 -1
  249. package/package.json +12 -4
  250. package/src/global.scss +320 -39
  251. package/src/styles/theme.css +151 -62
  252. package/src/theme-plugin.css +13 -0
  253. package/dist/components/ai/ApprovalCard/ApprovalCard.d.ts +0 -3
  254. package/dist/components/ai/ApprovalCard/ApprovalCard.js +0 -16
  255. package/dist/components/ai/ApprovalCard/ApprovalCard.theme.d.ts +0 -13
  256. package/dist/components/ai/ApprovalCard/ApprovalCard.theme.js +0 -15
  257. package/dist/components/ai/ApprovalCard/ApprovalCard.types.d.ts +0 -43
  258. package/dist/components/ai/ApprovalCard/index.d.ts +0 -2
  259. package/dist/components/ai/MessageHistory/MessageHistory.d.ts +0 -18
  260. package/dist/components/ai/MessageHistory/MessageHistory.js +0 -98
  261. package/dist/components/ai/MessageHistory/MessageHistory.theme.d.ts +0 -2
  262. package/dist/components/ai/MessageHistory/MessageHistory.theme.js +0 -8
  263. package/dist/components/ai/MessageHistory/MessageHistory.types.d.ts +0 -94
  264. package/dist/components/ai/MessageHistory/index.d.ts +0 -3
  265. package/dist/icons/Icon.d.ts +0 -24
  266. package/dist/icons/Icon.js +0 -30
  267. package/dist/icons/Index.d.ts +0 -16
  268. package/dist/icons/core/ChevronUpDown.d.ts +0 -1
  269. package/dist/icons/core/ChevronUpDown.js +0 -7
  270. package/dist/icons/core/DollarIcon.d.ts +0 -1
  271. package/dist/icons/core/DollarIcon.js +0 -5
  272. package/dist/icons/core/LockIcon.d.ts +0 -1
  273. package/dist/icons/core/LockIcon.js +0 -5
  274. package/dist/icons/core/MinusIcon.d.ts +0 -1
  275. package/dist/icons/core/MinusIcon.js +0 -7
  276. package/dist/icons/core/PlusIcon.d.ts +0 -1
  277. package/dist/icons/core/PlusIcon.js +0 -7
  278. package/dist/icons/core/SearchIcon.d.ts +0 -1
  279. package/dist/icons/core/SearchIcon.js +0 -7
  280. package/dist/icons/core/TickIcon.d.ts +0 -1
  281. package/dist/icons/core/TickIcon.js +0 -5
  282. package/dist/icons/core/User.d.ts +0 -1
  283. package/dist/utils/useClickOutside.d.ts +0 -1
@@ -47,18 +47,18 @@
47
47
  --color-danger: var(--color-danger-600);
48
48
  --color-danger-contrast: var(--color-neutral-50);
49
49
 
50
- /* Success color palette - Tailwind v4 green */
51
- --color-success-50: oklch(0.982 0.018 155.826);
52
- --color-success-100: oklch(0.962 0.044 156.743);
53
- --color-success-200: oklch(0.925 0.084 155.995);
54
- --color-success-300: oklch(0.871 0.15 154.449);
55
- --color-success-400: oklch(0.792 0.209 151.711);
56
- --color-success-500: oklch(0.723 0.219 149.579);
57
- --color-success-600: oklch(0.627 0.194 149.214);
58
- --color-success-700: oklch(0.527 0.154 150.069);
59
- --color-success-800: oklch(0.448 0.119 151.328);
60
- --color-success-900: oklch(0.393 0.095 152.535);
61
- --color-success-950: oklch(0.266 0.065 152.934);
50
+ /* Success color palette - Tailwind v4 teal */
51
+ --color-success-50: oklch(0.984 0.014 180.72);
52
+ --color-success-100: oklch(0.953 0.051 180.801);
53
+ --color-success-200: oklch(0.91 0.096 180.426);
54
+ --color-success-300: oklch(0.855 0.138 181.071);
55
+ --color-success-400: oklch(0.777 0.152 181.912);
56
+ --color-success-500: oklch(0.704 0.14 182.503);
57
+ --color-success-600: oklch(0.6 0.118 184.704);
58
+ --color-success-700: oklch(0.511 0.096 186.391);
59
+ --color-success-800: oklch(0.437 0.078 188.216);
60
+ --color-success-900: oklch(0.386 0.063 188.416);
61
+ --color-success-950: oklch(0.277 0.046 192.524);
62
62
 
63
63
  --color-success: var(--color-success-600);
64
64
  --color-success-contrast: var(--color-neutral-50);
@@ -93,7 +93,7 @@
93
93
  --color-surface: oklch(100% 0 0);
94
94
  --color-chart-track: rgba(0, 0, 0, 0.06);
95
95
  --color-background: oklch(98.5% 0.002 247.839);
96
- --color-background-secondary: oklch(95% 0.002 247.839);
96
+ --color-background-secondary: oklch(98.5% 0 0);
97
97
  --color-background-tertiary: oklch(90% 0.002 247.839);
98
98
  --color-background-quaternary: oklch(85% 0.002 247.839);
99
99
  --color-background-quinary: oklch(80% 0.002 247.839);
@@ -121,27 +121,27 @@
121
121
  --font-weight-bold: 700;
122
122
  --font-weight-extrabold: 800;
123
123
 
124
- /* Form element variables with explicit values that match Tailwind's scale */
125
- --form-min-h-sm: 2rem; /* 32px = h-8 in Tailwind */
126
- --form-min-h-md: 2.5rem; /* 40px = h-10 in Tailwind */
127
- --form-min-h-lg: 3rem; /* 48px = h-12 in Tailwind */
124
+ /* Form element variables fixed px so they don't scale with root font-size */
125
+ --form-min-h-sm: 32px; /* h-8 in Tailwind */
126
+ --form-min-h-md: 40px; /* h-10 in Tailwind */
127
+ --form-min-h-lg: 48px; /* h-12 in Tailwind */
128
128
 
129
- --form-label-pb: 0.5rem; /* 8px = pb-2 in Tailwind */
129
+ --form-label-pb: 8px; /* pb-2 in Tailwind */
130
130
 
131
- --form-px-sm: 0.75rem; /* 12px = px-3 in Tailwind */
132
- --form-px-md: 0.875rem; /* 14px = px-3.5 in Tailwind */
133
- --form-px-lg: 1rem; /* 16px = px-4 in Tailwind */
131
+ --form-px-sm: 12px; /* px-3 in Tailwind */
132
+ --form-px-md: 14px; /* px-3.5 in Tailwind */
133
+ --form-px-lg: 16px; /* px-4 in Tailwind */
134
134
 
135
- --form-py-sm: 0.5rem; /* 0.5rem 8px = py-1 in Tailwind */
136
- --form-py-md: 0.625rem; /* 0.625rem 10px = py-2 in Tailwind */
137
- --form-py-lg: 0.75rem; /* 0.75rem 12px = py-3 in Tailwind */
135
+ --form-py-sm: 8px; /* py-1 in Tailwind */
136
+ --form-py-md: 10px; /* py-2 in Tailwind */
137
+ --form-py-lg: 12px; /* py-3 in Tailwind */
138
138
 
139
139
  /* ============================================
140
140
  BORDER RADIUS SYSTEM
141
141
  Change --radius-base to adjust the entire UI.
142
142
  Individual --*-radius variables can be overridden independently.
143
143
  ============================================ */
144
- --radius-base: 0.5rem; /* 8px - Base radius token */
144
+ --radius-base: 8px; /* Base radius token */
145
145
 
146
146
  /* Forms & Controls (1x base = 8px) */
147
147
  --form-radius: var(--radius-base);
@@ -159,8 +159,8 @@
159
159
  --metric-radius: calc(var(--radius-base) * 2);
160
160
 
161
161
  /* Surfaces (3x base = 24px) */
162
- --card-radius: calc(var(--radius-base) * 3);
163
- --modal-radius: calc(var(--radius-base) * 3);
162
+ --card-radius: calc(var(--radius-base) * 1.5);
163
+ --modal-radius: calc(var(--radius-base) * 1.5);
164
164
 
165
165
  /* Special shapes - not part of scale */
166
166
  --segmented-radius: var(--form-radius);
@@ -181,18 +181,18 @@
181
181
  --button-min-h-md: var(--form-min-h-md);
182
182
  --button-min-h-lg: var(--form-min-h-lg);
183
183
 
184
- /* Button padding */
185
- --button-px-sm: 0.75rem; /* 12px */
186
- --button-py-sm: 0; /* 6px */
187
- --button-px-md: 0.875rem; /* 14px */
188
- --button-py-md: 0; /* 10px */
189
- --button-px-lg: 1.25rem; /* 20px */
190
- --button-py-lg: 0; /* 12px */
184
+ /* Button padding — fixed px */
185
+ --button-px-sm: 12px;
186
+ --button-py-sm: 0;
187
+ --button-px-md: 14px;
188
+ --button-py-md: 0;
189
+ --button-px-lg: 20px;
190
+ --button-py-lg: 0;
191
191
 
192
- /* Button icon-only padding */
193
- --button-icon-p-sm: 0.375rem; /* 6px */
194
- --button-icon-p-md: 0.5rem; /* 8px */
195
- --button-icon-p-lg: 0.625rem; /* 10px */
192
+ /* Button icon-only padding — fixed px */
193
+ --button-icon-p-sm: 6px;
194
+ --button-icon-p-md: 8px;
195
+ --button-icon-p-lg: 10px;
196
196
 
197
197
  /* Button icon-only sizes */
198
198
  --button-icon-size-sm: var(--form-min-h-sm);
@@ -200,7 +200,7 @@
200
200
  --button-icon-size-lg: var(--form-min-h-lg);
201
201
 
202
202
  /* Badge variables */
203
- --badge-radius: var(--form-radius);
203
+ --badge-radius: 6px;
204
204
 
205
205
  /* Segmented variables - now defined in radius system above */
206
206
  --segmented-min-h-sm: var(--form-min-h-sm);
@@ -244,12 +244,12 @@
244
244
  --chat-bubble-border-sender: rgba(255, 255, 255, 0.4);
245
245
  --chat-bubble-border-receiver: rgba(255, 255, 255, 1);
246
246
 
247
- /* Avatar variables */
248
- --avatar-size-xs: 1.5rem; /* 24px = size-6 in Tailwind */
249
- --avatar-size-sm: 2rem; /* 32px = size-8 in Tailwind */
250
- --avatar-size-md: 2.5rem; /* 40px = size-10 in Tailwind */
251
- --avatar-size-lg: 3rem; /* 48px = size-12 in Tailwind */
252
- --avatar-size-xl: 4rem; /* 64px = size-16 in Tailwind */
247
+ /* Avatar variables — fixed px */
248
+ --avatar-size-xs: 24px; /* size-6 in Tailwind */
249
+ --avatar-size-sm: 32px; /* size-8 in Tailwind */
250
+ --avatar-size-md: 40px; /* size-10 in Tailwind */
251
+ --avatar-size-lg: 48px; /* size-12 in Tailwind */
252
+ --avatar-size-xl: 64px; /* size-16 in Tailwind */
253
253
 
254
254
  /* Avatar radius - now defined in radius system above */
255
255
 
@@ -257,32 +257,32 @@
257
257
  --carousel-container-width: 100%; /* Full width container */
258
258
  --carousel-slide-width: 66vw; /* Default slide width - can be overridden */
259
259
  --carousel-slide-height: 44rem; /* 384px = h-96 */
260
- --carousel-slide-gap: 1rem; /* 16px gap between slides */
261
- --carousel-controls-size: 3rem; /* 48px control button size */
262
- --carousel-controls-offset: 1rem; /* Distance from edge */
260
+ --carousel-slide-gap: 16px; /* gap between slides */
261
+ --carousel-controls-size: 48px; /* control button size */
262
+ --carousel-controls-offset: 16px; /* distance from edge */
263
263
 
264
264
  /* Popover variables - radius now defined in radius system above */
265
265
  --popover-shadow:
266
266
  0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1);
267
267
  --popover-border-width: 1px;
268
268
  --popover-backdrop-opacity: 0.5;
269
- --popover-offset-sm: 0.5rem;
270
- --popover-offset-md: 0.5rem;
271
- --popover-offset-lg: 0.75rem;
272
- --popover-max-width-sm: 16rem;
273
- --popover-max-width-md: 24rem;
274
- --popover-max-width-lg: 32rem;
275
- --popover-padding-sm: 0.75rem;
276
- --popover-padding-md: 0.75rem;
277
- --popover-padding-lg: 1rem;
269
+ --popover-offset-sm: 8px;
270
+ --popover-offset-md: 8px;
271
+ --popover-offset-lg: 12px;
272
+ --popover-max-width-sm: 256px;
273
+ --popover-max-width-md: 384px;
274
+ --popover-max-width-lg: 512px;
275
+ --popover-padding-sm: 12px;
276
+ --popover-padding-md: 12px;
277
+ --popover-padding-lg: 16px;
278
278
 
279
279
  /* NavItem variables */
280
280
  --nav-item-radius: var(--radius-base);
281
- --nav-item-min-h: 2.5rem; /* 40px = h-10 in Tailwind */
281
+ --nav-item-min-h: 40px; /* h-10 in Tailwind */
282
282
 
283
- /* NavItem padding */
284
- --nav-item-px: 0.75rem; /* 12px = px-3 in Tailwind */
285
- --nav-item-py: 0.625rem; /* 10px = py-2.5 in Tailwind */
283
+ /* NavItem padding — fixed px */
284
+ --nav-item-px: 12px; /* px-3 in Tailwind */
285
+ --nav-item-py: 10px; /* py-2.5 in Tailwind */
286
286
 
287
287
  /* Modal and Drawer */
288
288
  --overlay-bg: rgba(0, 0, 0, 0.65);
@@ -296,6 +296,50 @@
296
296
  --shadow-color-warning: var(--color-warning);
297
297
  --shadow-color-danger: var(--color-danger);
298
298
  --shadow-color-secondary: var(--color-secondary);
299
+
300
+ /* Neumorphic tokens — light mode (multi-layer realistic) */
301
+ --neu-raised-shadow:
302
+ 1px 1px 2px rgba(0, 0, 0, 0.04), 3px 3px 6px rgba(0, 0, 0, 0.06),
303
+ 6px 6px 14px rgba(0, 0, 0, 0.08), 12px 12px 28px rgba(0, 0, 0, 0.04),
304
+ -1px -1px 2px rgba(255, 255, 255, 0.5),
305
+ -3px -3px 6px rgba(255, 255, 255, 0.5),
306
+ -6px -6px 14px rgba(255, 255, 255, 0.3),
307
+ inset 0 1px 0 rgba(255, 255, 255, 0.6), inset 0 -1px 0 rgba(0, 0, 0, 0.04);
308
+ --neu-inset-shadow:
309
+ inset 1px 1px 2px rgba(0, 0, 0, 0.06),
310
+ inset 2px 2px 4px rgba(0, 0, 0, 0.06),
311
+ inset 4px 4px 8px rgba(0, 0, 0, 0.05),
312
+ inset 8px 8px 16px rgba(0, 0, 0, 0.03),
313
+ inset -1px -1px 2px rgba(255, 255, 255, 0.5),
314
+ inset -3px -3px 6px rgba(255, 255, 255, 0.4),
315
+ inset -6px -6px 12px rgba(255, 255, 255, 0.2),
316
+ 0 1px 0 rgba(255, 255, 255, 0.5);
317
+ --neu-circle-groove-shadow:
318
+ inset 0.5px 0.5px 1px rgba(0, 0, 0, 0.08),
319
+ inset 1px 1px 3px rgba(0, 0, 0, 0.08),
320
+ inset 2px 2px 5px rgba(0, 0, 0, 0.04), 0.5px 0.5px 1px rgba(0, 0, 0, 0.4),
321
+ 1px 1px 2px rgba(0, 0, 0, 0.3);
322
+ --neu-circle-disc-shadow:
323
+ inset 0.5px 0.5px 1px rgba(0, 0, 0, 0.05),
324
+ inset 1px 1px 3px rgba(0, 0, 0, 0.04),
325
+ inset -0.5px -0.5px 1px rgba(255, 255, 255, 0.4),
326
+ inset -1px -1px 2px rgba(255, 255, 255, 0.3), 0 1px 2px rgba(0, 0, 0, 0.06),
327
+ 0 2px 4px rgba(0, 0, 0, 0.04);
328
+ --neu-raised-border: linear-gradient(
329
+ 145deg,
330
+ rgba(255, 255, 255, 0.7) 0%,
331
+ rgba(255, 255, 255, 0.35) 30%,
332
+ transparent 50%,
333
+ rgba(0, 0, 0, 0.06) 100%
334
+ );
335
+ --neu-inset-border: linear-gradient(
336
+ 180deg,
337
+ rgba(0, 0, 0, 0.1) 0%,
338
+ rgba(0, 0, 0, 0.04) 25%,
339
+ rgba(255, 255, 255, 0.15) 50%,
340
+ rgba(255, 255, 255, 0.35) 75%,
341
+ rgba(255, 255, 255, 0.5) 100%
342
+ );
299
343
  }
300
344
 
301
345
  /* ============================================
@@ -321,7 +365,7 @@
321
365
  --color-text-inverse: var(--color-neutral-950);
322
366
 
323
367
  /* Base theme colors */
324
- --color-primary: var(--color-primary-400);
368
+ --color-primary: var(--color-primary-600);
325
369
  --color-success: var(--color-success-400);
326
370
  --color-warning: var(--color-warning-400);
327
371
  --color-danger: var(--color-danger-400);
@@ -370,5 +414,50 @@
370
414
  --ui-scrollbar-thumb-active: rgb(75 85 99);
371
415
  --ui-scrollbar-track-rest: transparent;
372
416
  --ui-scrollbar-track-active: rgba(55, 65, 81, 0.1);
417
+
418
+ /* Neumorphic tokens — dark mode (multi-layer realistic) */
419
+ --neu-raised-shadow:
420
+ 1px 1px 2px rgba(0, 0, 0, 0.2), 3px 3px 6px rgba(0, 0, 0, 0.25),
421
+ 6px 6px 14px rgba(0, 0, 0, 0.2), 12px 12px 28px rgba(0, 0, 0, 0.1),
422
+ -1px -1px 2px rgba(255, 255, 255, 0.02),
423
+ -3px -3px 6px rgba(255, 255, 255, 0.015),
424
+ -6px -6px 14px rgba(255, 255, 255, 0.01),
425
+ inset 0 1px 0 rgba(255, 255, 255, 0.04),
426
+ inset 0 -1px 0 rgba(0, 0, 0, 0.15);
427
+ --neu-inset-shadow:
428
+ inset 1px 1px 2px rgba(0, 0, 0, 0.3),
429
+ inset 2px 2px 4px rgba(0, 0, 0, 0.25),
430
+ inset 4px 4px 8px rgba(0, 0, 0, 0.2),
431
+ inset 8px 8px 16px rgba(0, 0, 0, 0.1),
432
+ inset -1px -1px 2px rgba(255, 255, 255, 0.02),
433
+ inset -3px -3px 6px rgba(255, 255, 255, 0.015),
434
+ 0 1px 0 rgba(255, 255, 255, 0.04);
435
+ --neu-circle-groove-shadow:
436
+ inset 0.5px 0.5px 1px rgba(0, 0, 0, 0.4),
437
+ inset 1px 1px 2px rgba(0, 0, 0, 0.35),
438
+ inset 2px 2px 5px rgba(0, 0, 0, 0.2),
439
+ 0.5px 0.5px 1px rgba(255, 255, 255, 0.04),
440
+ 1px 1px 2px rgba(255, 255, 255, 0.03);
441
+ --neu-circle-disc-shadow:
442
+ inset 0.5px 0.5px 1px rgba(0, 0, 0, 0.2),
443
+ inset 1px 1px 3px rgba(0, 0, 0, 0.15),
444
+ inset -0.5px -0.5px 1px rgba(255, 255, 255, 0.04),
445
+ inset -1px -1px 2px rgba(255, 255, 255, 0.03),
446
+ 0 1px 2px rgba(0, 0, 0, 0.25), 0 2px 4px rgba(0, 0, 0, 0.2);
447
+ --neu-raised-border: linear-gradient(
448
+ 145deg,
449
+ rgba(255, 255, 255, 0.2) 0%,
450
+ rgba(255, 255, 255, 0.08) 30%,
451
+ transparent 50%,
452
+ rgba(0, 0, 0, 0.12) 100%
453
+ );
454
+ --neu-inset-border: linear-gradient(
455
+ 180deg,
456
+ rgba(0, 0, 0, 0.4) 0%,
457
+ rgba(0, 0, 0, 0.15) 25%,
458
+ rgba(255, 255, 255, 0.03) 50%,
459
+ rgba(255, 255, 255, 0.08) 75%,
460
+ rgba(255, 255, 255, 0.12) 100%
461
+ );
373
462
  }
374
463
  }
@@ -9,3 +9,16 @@
9
9
  --font-weight-bold: 700;
10
10
  --font-weight-extrabold: 800;
11
11
  }
12
+
13
+ /* bg-image arbitrary value support for consumers */
14
+ @utility bg-image-scale-* {
15
+ --bg-image-scale: --value([number]);
16
+ }
17
+
18
+ @utility bg-image-blur-* {
19
+ --bg-image-blur: --value([length]);
20
+ }
21
+
22
+ @utility bg-image-opacity-* {
23
+ --bg-image-opacity: --value([number], [percentage]);
24
+ }
@@ -1,3 +0,0 @@
1
- import React from "react";
2
- import { ApprovalCardProps } from "./ApprovalCard.types";
3
- export declare const ApprovalCard: React.FC<ApprovalCardProps>;
@@ -1,16 +0,0 @@
1
- import { jsx, jsxs } from 'react/jsx-runtime';
2
- import { ExclamationTriangleIcon, CheckCircleIcon } from '@heroicons/react/16/solid';
3
- import { approvalCardTheme } from './ApprovalCard.theme.js';
4
- import { Card } from '../../core/Card/Card.js';
5
- import { Badge } from '../../core/Badge/Badge.js';
6
- import { Button } from '../../core/Button/Button.js';
7
- import 'react';
8
- import { cn } from '../../../utils/cn.js';
9
-
10
- const ApprovalCard = ({ title, subtitle, variant = "default", riskLevel = "medium", onApprove, onDeny, children, isApproving = false, className, }) => {
11
- const riskColor = approvalCardTheme.badgeColors[riskLevel];
12
- const riskIcon = riskLevel === "critical" || riskLevel === "high" ? (jsx(ExclamationTriangleIcon, { className: "" })) : (jsx(CheckCircleIcon, { className: "" }));
13
- return (jsxs(Card, { className: cn(approvalCardTheme.baseStyle, approvalCardTheme.variants[variant], className), children: [jsx(Card.Header, { children: jsx("div", { className: "flex flex-col items-start", children: jsxs(Badge, { variant: "outline", color: riskColor, size: "sm", iconStart: riskIcon, className: "font-semibold shadow", children: [riskLevel.toUpperCase(), " RISK"] }) }) }), jsxs(Card.Body, { className: "space-y-3", children: [jsxs("div", { className: "space-y-1", children: [jsx(Card.Title, { className: "", children: title }), subtitle && (jsx("p", { className: "text-sm md:text-base text-[var(--color-text-secondary)]/80", children: subtitle }))] }), children && (jsx("div", { className: "bg-[var(--color-background-secondary)] rounded-md p-3 text-sm font-mono border border-[var(--color-border)] overflow-x-auto", children: children }))] }), jsxs(Card.Footer, { className: "justify-end gap-2 mt-3", children: [jsx(Button, { variant: "outline", color: "neutral", size: "sm", onClick: onDeny, children: "Deny" }), jsx(Button, { color: riskColor, size: "sm", state: isApproving ? "loading" : "default", onClick: onApprove, children: "Approve" })] })] }));
14
- };
15
-
16
- export { ApprovalCard };
@@ -1,13 +0,0 @@
1
- export declare const approvalCardTheme: {
2
- baseStyle: string;
3
- variants: {
4
- default: string;
5
- glass: string;
6
- };
7
- badgeColors: {
8
- readonly low: "success";
9
- readonly medium: "warning";
10
- readonly high: "danger";
11
- readonly critical: "danger";
12
- };
13
- };
@@ -1,15 +0,0 @@
1
- const approvalCardTheme = {
2
- baseStyle: "overflow-hidden",
3
- variants: {
4
- default: "border border-[var(--color-border)] bg-white dark:bg-[var(--color-background-secondary)]",
5
- glass: "glass-effect",
6
- },
7
- badgeColors: {
8
- low: "success",
9
- medium: "warning",
10
- high: "danger",
11
- critical: "danger",
12
- },
13
- };
14
-
15
- export { approvalCardTheme };
@@ -1,43 +0,0 @@
1
- import { ReactNode } from "react";
2
- export type ApprovalRiskLevel = "low" | "medium" | "high" | "critical";
3
- export type ApprovalCardVariant = "default" | "glass";
4
- export interface ApprovalCardProps {
5
- /**
6
- * Title of the approval request
7
- */
8
- title: string;
9
- /**
10
- * Subtitle or context for the user
11
- */
12
- subtitle?: string;
13
- /**
14
- * Risk level determining visual severity
15
- * @default "medium"
16
- */
17
- riskLevel?: ApprovalRiskLevel;
18
- /**
19
- * Visual style variant
20
- * @default "default"
21
- */
22
- variant?: ApprovalCardVariant;
23
- /**
24
- * Callback when user approves the action
25
- */
26
- onApprove: () => void;
27
- /**
28
- * Callback when user denies/cancels the action
29
- */
30
- onDeny: () => void;
31
- /**
32
- * Optional payload to display (e.g. code snippet, JSON)
33
- */
34
- children?: ReactNode;
35
- /**
36
- * Loading state for the approve button
37
- */
38
- isApproving?: boolean;
39
- /**
40
- * Additional class names
41
- */
42
- className?: string;
43
- }
@@ -1,2 +0,0 @@
1
- export * from "./ApprovalCard";
2
- export * from "./ApprovalCard.types";
@@ -1,18 +0,0 @@
1
- import React from "react";
2
- import { MessageHistoryProps } from "./MessageHistory.types";
3
- /**
4
- * MessageHistory - Virtualized message container with auto-scroll
5
- *
6
- * Displays a scrollable list of chat messages with support for
7
- * auto-scrolling on new messages and optional virtualization.
8
- *
9
- * @example
10
- * ```tsx
11
- * <MessageHistory
12
- * messages={messages}
13
- * virtualizeThreshold={50}
14
- * autoScroll
15
- * />
16
- * ```
17
- */
18
- export declare const MessageHistory: React.ForwardRefExoticComponent<MessageHistoryProps & React.RefAttributes<HTMLDivElement>>;
@@ -1,98 +0,0 @@
1
- import { jsx } from 'react/jsx-runtime';
2
- import React__default, { useRef, useCallback, useEffect, useMemo } from 'react';
3
- import { messageHistoryTheme } from './MessageHistory.theme.js';
4
- import { Message } from '../../core/Message/Message.js';
5
- import '../../core/Message/TypeWriter.js';
6
- import '../../core/Message/MessageBody.js';
7
- import { cn } from '../../../utils/cn.js';
8
-
9
- /**
10
- * MessageHistory - Virtualized message container with auto-scroll
11
- *
12
- * Displays a scrollable list of chat messages with support for
13
- * auto-scrolling on new messages and optional virtualization.
14
- *
15
- * @example
16
- * ```tsx
17
- * <MessageHistory
18
- * messages={messages}
19
- * virtualizeThreshold={50}
20
- * autoScroll
21
- * />
22
- * ```
23
- */
24
- const MessageHistory = React__default.forwardRef(({ messages, virtualizeThreshold = 50, autoScroll = true, showTimestamps = true, renderMessage, onCopyMessage, onRegenerateMessage, className, theme: customTheme = {}, ...props }, ref) => {
25
- const scrollRef = useRef(null);
26
- const lastMessageCountRef = useRef(0);
27
- const userHasScrolledRef = useRef(false);
28
- // Determine if virtualization should be enabled
29
- const shouldVirtualize = messages.length > virtualizeThreshold;
30
- // For simple virtualization, track visible range
31
- const [visibleRange, setVisibleRange] = React__default.useState({
32
- start: 0,
33
- end: 50,
34
- });
35
- // Merge theme
36
- const containerStyle = customTheme.containerStyle || messageHistoryTheme.containerStyle;
37
- const scrollAreaStyle = customTheme.scrollAreaStyle || messageHistoryTheme.scrollAreaStyle;
38
- const messageListStyle = customTheme.messageListStyle || messageHistoryTheme.messageListStyle;
39
- const emptyStateStyle = customTheme.emptyStateStyle || messageHistoryTheme.emptyStateStyle;
40
- // Scroll to bottom
41
- const scrollToBottom = useCallback(() => {
42
- if (scrollRef.current) {
43
- scrollRef.current.scrollTop = scrollRef.current.scrollHeight;
44
- }
45
- }, []);
46
- // Auto-scroll on new messages
47
- useEffect(() => {
48
- if (autoScroll && messages.length > lastMessageCountRef.current) {
49
- // Only auto-scroll if user hasn't manually scrolled up
50
- if (!userHasScrolledRef.current) {
51
- scrollToBottom();
52
- }
53
- }
54
- lastMessageCountRef.current = messages.length;
55
- }, [messages.length, autoScroll, scrollToBottom]);
56
- // Track user scroll position
57
- const handleScroll = useCallback(() => {
58
- if (!scrollRef.current)
59
- return;
60
- const { scrollTop, scrollHeight, clientHeight } = scrollRef.current;
61
- const isAtBottom = scrollHeight - scrollTop - clientHeight < 100;
62
- userHasScrolledRef.current = !isAtBottom;
63
- // Update visible range for virtualization
64
- if (shouldVirtualize) {
65
- const itemHeight = 100; // Approximate message height
66
- const start = Math.max(0, Math.floor(scrollTop / itemHeight) - 5);
67
- const end = Math.min(messages.length, start + Math.ceil(clientHeight / itemHeight) + 10);
68
- setVisibleRange({ start, end });
69
- }
70
- }, [shouldVirtualize, messages.length]);
71
- // Initial scroll to bottom
72
- useEffect(() => {
73
- scrollToBottom();
74
- }, [scrollToBottom]);
75
- // Get visible messages
76
- const visibleMessages = useMemo(() => {
77
- if (!shouldVirtualize)
78
- return messages;
79
- return messages.slice(visibleRange.start, visibleRange.end);
80
- }, [messages, shouldVirtualize, visibleRange]);
81
- // Default message renderer
82
- const defaultRenderMessage = useCallback((message, index) => (jsx(Message, { role: message.role, content: message.content, timestamp: message.timestamp, avatar: message.avatar, showTimestamp: showTimestamps, isStreaming: message.isStreaming, onCopy: onCopyMessage ? () => onCopyMessage(message) : undefined, onRegenerate: onRegenerateMessage ? () => onRegenerateMessage(message) : undefined }, message.id)), [showTimestamps, onCopyMessage, onRegenerateMessage]);
83
- // Empty state
84
- if (messages.length === 0) {
85
- return (jsx("div", { ref: ref, className: cn(containerStyle, className), ...props, children: jsx("div", { className: emptyStateStyle, children: jsx("p", { children: "No messages yet. Start a conversation!" }) }) }));
86
- }
87
- return (jsx("div", { ref: ref, className: cn(containerStyle, className), ...props, children: jsx("div", { ref: scrollRef, className: scrollAreaStyle, onScroll: handleScroll, role: "log", "aria-label": "Message history", "aria-live": "polite", children: jsx("div", { className: messageListStyle, style: shouldVirtualize
88
- ? {
89
- paddingTop: `${visibleRange.start * 100}px`,
90
- paddingBottom: `${(messages.length - visibleRange.end) * 100}px`,
91
- }
92
- : undefined, children: visibleMessages.map((message, index) => renderMessage
93
- ? renderMessage(message, visibleRange.start + index)
94
- : defaultRenderMessage(message, visibleRange.start + index)) }) }) }));
95
- });
96
- MessageHistory.displayName = "MessageHistory";
97
-
98
- export { MessageHistory };
@@ -1,2 +0,0 @@
1
- import { MessageHistoryTheme } from "./MessageHistory.types";
2
- export declare const messageHistoryTheme: MessageHistoryTheme;
@@ -1,8 +0,0 @@
1
- const messageHistoryTheme = {
2
- containerStyle: "flex flex-col h-full",
3
- scrollAreaStyle: "flex-1 overflow-y-auto scroll-smooth",
4
- messageListStyle: "flex flex-col gap-4 p-4",
5
- emptyStateStyle: "flex items-center justify-center h-full text-[var(--color-text-muted)]",
6
- };
7
-
8
- export { messageHistoryTheme };
@@ -1,94 +0,0 @@
1
- import { ReactNode } from "react";
2
- import { MessageRole, MessageAvatarProps } from "../../core/Message";
3
- /**
4
- * Message data structure for MessageHistory
5
- */
6
- export interface ChatMessageData {
7
- /**
8
- * Unique identifier for the message
9
- */
10
- id: string;
11
- /**
12
- * Role of the message sender
13
- */
14
- role: MessageRole;
15
- /**
16
- * Message content (text or ReactNode)
17
- */
18
- content: ReactNode;
19
- /**
20
- * Timestamp of the message
21
- */
22
- timestamp?: Date | string;
23
- /**
24
- * Avatar configuration
25
- */
26
- avatar?: MessageAvatarProps;
27
- /**
28
- * Whether the message is currently streaming
29
- */
30
- isStreaming?: boolean;
31
- }
32
- /**
33
- * MessageHistory component props
34
- */
35
- export interface MessageHistoryProps extends React.HTMLAttributes<HTMLDivElement> {
36
- /**
37
- * Array of messages to display
38
- */
39
- messages: ChatMessageData[];
40
- /**
41
- * Threshold for enabling virtualization
42
- * When messages.length > virtualizeThreshold, virtualization is enabled
43
- * @default 50
44
- */
45
- virtualizeThreshold?: number;
46
- /**
47
- * Whether to auto-scroll to bottom on new messages
48
- * @default true
49
- */
50
- autoScroll?: boolean;
51
- /**
52
- * Whether to show timestamps
53
- * @default true
54
- */
55
- showTimestamps?: boolean;
56
- /**
57
- * Custom render function for messages
58
- */
59
- renderMessage?: (message: ChatMessageData, index: number) => ReactNode;
60
- /**
61
- * Callback when copy button is clicked
62
- */
63
- onCopyMessage?: (message: ChatMessageData) => void;
64
- /**
65
- * Callback when regenerate button is clicked
66
- */
67
- onRegenerateMessage?: (message: ChatMessageData) => void;
68
- /**
69
- * Additional className
70
- */
71
- className?: string;
72
- /**
73
- * Theme overrides
74
- */
75
- theme?: MessageHistoryThemeOverrides;
76
- }
77
- /**
78
- * Theme configuration
79
- */
80
- export interface MessageHistoryTheme {
81
- containerStyle: string;
82
- scrollAreaStyle: string;
83
- messageListStyle: string;
84
- emptyStateStyle: string;
85
- }
86
- /**
87
- * Theme overrides
88
- */
89
- export interface MessageHistoryThemeOverrides {
90
- containerStyle?: string;
91
- scrollAreaStyle?: string;
92
- messageListStyle?: string;
93
- emptyStateStyle?: string;
94
- }
@@ -1,3 +0,0 @@
1
- export { MessageHistory } from "./MessageHistory";
2
- export { messageHistoryTheme } from "./MessageHistory.theme";
3
- export type { MessageHistoryProps, ChatMessageData, MessageHistoryTheme, MessageHistoryThemeOverrides, } from "./MessageHistory.types";