@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
@@ -1,5 +1,3 @@
1
- import { semanticBgColors } from '../../../utils/colorUtils.js';
2
-
3
1
  /**
4
2
  * Default theme configuration for Progress component
5
3
  */
@@ -8,10 +6,10 @@ const progressTheme = {
8
6
  containerStyle: "w-full",
9
7
  // Track (background) styles
10
8
  trackStyle: "relative w-full rounded-full bg-[var(--color-background-tertiary)] overflow-hidden",
11
- // Fill (progress bar) styles
12
- fillStyle: "h-full rounded-full",
9
+ // Fill (progress bar) styles — includes default primary color
10
+ fillStyle: "h-full rounded-full bg-[var(--color-primary)]",
13
11
  // Label text styles
14
- labelStyle: "text-base font-medium text-[var(--color-text-secondary)] tabular-nums min-w-[2.5rem] text-right",
12
+ labelStyle: "text-base font-semibold text-[var(--color-text-secondary)] tabular-nums min-w-[2.5rem] text-right",
15
13
  // Inside label styles (when label is positioned inside the bar)
16
14
  insideLabelStyle: "absolute inset-0 flex items-center justify-center text-sm font-medium text-[var(--color-primary-contrast)] tabular-nums",
17
15
  // Size variants for track height
@@ -20,17 +18,8 @@ const progressTheme = {
20
18
  md: "h-2.5",
21
19
  lg: "h-4",
22
20
  },
23
- // Color variants for the fill
24
- colors: {
25
- neutral: semanticBgColors.neutral + " dark:bg-[var(--color-neutral-500)]",
26
- primary: semanticBgColors.primary + " dark:bg-[var(--color-primary-400)]",
27
- secondary: semanticBgColors.secondary + " dark:bg-[var(--color-secondary-400)]",
28
- success: semanticBgColors.success + " dark:bg-[var(--color-success-400)]",
29
- warning: semanticBgColors.warning + " dark:bg-[var(--color-warning-400)]",
30
- danger: semanticBgColors.danger + " dark:bg-[var(--color-danger-400)]",
31
- },
32
- // Indeterminate animation styles
33
- indeterminateStyle: "animate-[progress-indeterminate_1.5s_ease-in-out_infinite]",
21
+ // Indeterminate animation styles (striped pattern by default)
22
+ indeterminateStyle: "animate-[progress-indeterminate_1.8s_linear_infinite] bg-[repeating-linear-gradient(45deg,var(--color-primary),var(--color-primary)_10px,var(--color-primary-700)_10px,var(--color-primary-700)_20px)]",
34
23
  };
35
24
 
36
25
  export { progressTheme };
@@ -1,7 +1,5 @@
1
1
  import React from "react";
2
- import { SemanticColor } from "../../../utils/colorUtils";
3
2
  export type ProgressSize = "sm" | "md" | "lg";
4
- export type ProgressColor = SemanticColor;
5
3
  export type ProgressLabelPosition = "right" | "top" | "bottom" | "inside";
6
4
  /**
7
5
  * Theme configuration for Progress component
@@ -19,8 +17,6 @@ export interface ProgressTheme {
19
17
  insideLabelStyle: string;
20
18
  /** Size variants for the track height */
21
19
  sizes: Record<ProgressSize, string>;
22
- /** Color variants for the fill */
23
- colors: Record<ProgressColor, string>;
24
20
  /** Indeterminate animation styles */
25
21
  indeterminateStyle: string;
26
22
  }
@@ -34,7 +30,6 @@ export interface ProgressThemeOverrides {
34
30
  labelStyle?: string;
35
31
  insideLabelStyle?: string;
36
32
  sizes?: Partial<Record<ProgressSize, string>>;
37
- colors?: Partial<Record<ProgressColor, string>>;
38
33
  indeterminateStyle?: string;
39
34
  }
40
35
  export interface ProgressProps extends Omit<React.HTMLAttributes<HTMLDivElement>, "children"> {
@@ -48,11 +43,6 @@ export interface ProgressProps extends Omit<React.HTMLAttributes<HTMLDivElement>
48
43
  * @default 'md'
49
44
  */
50
45
  size?: ProgressSize;
51
- /**
52
- * The semantic color of the progress bar
53
- * @default 'primary'
54
- */
55
- color?: ProgressColor;
56
46
  /**
57
47
  * Whether to show the percentage label
58
48
  * @default false
@@ -75,17 +65,9 @@ export interface ProgressProps extends Omit<React.HTMLAttributes<HTMLDivElement>
75
65
  */
76
66
  animated?: boolean;
77
67
  /**
78
- * Additional class name for the track (background) element
79
- */
80
- trackClassName?: string;
81
- /**
82
- * Additional class name for the fill (progress) element
83
- */
84
- fillClassName?: string;
85
- /**
86
- * Additional class name for the container
68
+ * Additional class name for the outer container/track wrapper
87
69
  */
88
- className?: string;
70
+ wrapperClassName?: string;
89
71
  /**
90
72
  * Component-level theme overrides
91
73
  */
@@ -1,2 +1,2 @@
1
1
  export { Progress } from "./Progress";
2
- export type { ProgressProps, ProgressSize, ProgressColor, ProgressLabelPosition, ProgressThemeOverrides, } from "./Progress.types";
2
+ export type { ProgressProps, ProgressSize, ProgressLabelPosition, ProgressThemeOverrides, } from "./Progress.types";
@@ -1,5 +1,5 @@
1
1
  import { jsx } from 'react/jsx-runtime';
2
- import React__default, { useRef, useMemo, useImperativeHandle } from 'react';
2
+ import React__default, { useRef, useMemo, useImperativeHandle, useState, useEffect } from 'react';
3
3
  import { cn } from '../../../utils/cn.js';
4
4
  import { scrollAreaTheme } from './ScrollArea.theme.js';
5
5
  import { useSmoothScroll } from './smooth/useSmoothScroll.js';
@@ -25,7 +25,7 @@ import { useSmoothScroll } from './smooth/useSmoothScroll.js';
25
25
  * </ScrollArea>
26
26
  * ```
27
27
  */
28
- const ScrollArea = React__default.forwardRef(({ children, type = 'hover', orientation = 'vertical', snap, snapAlign = 'start', smooth = false, smoothConfig, onScrollProgress, onPerformanceUpdate, className, theme, ...props }, ref) => {
28
+ const ScrollArea = React__default.forwardRef(({ children, type = 'hover', size = 'default', orientation = 'vertical', snap, snapAlign = 'start', smooth = false, smoothConfig, onScrollProgress, onPerformanceUpdate, className, theme, ...props }, ref) => {
29
29
  // Internal ref for the scrollable element
30
30
  const internalRef = useRef(null);
31
31
  // Determine scroll orientation for smooth scroll
@@ -65,6 +65,26 @@ const ScrollArea = React__default.forwardRef(({ children, type = 'hover', orient
65
65
  }
66
66
  return extendedRef;
67
67
  }, [smooth, smoothAPI]);
68
+ // Scroll-detection state for type='scroll' (overlay scrollbar)
69
+ const [isScrolling, setIsScrolling] = useState(false);
70
+ const scrollTimerRef = useRef(undefined);
71
+ useEffect(() => {
72
+ if (type !== 'scroll')
73
+ return;
74
+ const el = internalRef.current;
75
+ if (!el)
76
+ return;
77
+ const onScroll = () => {
78
+ setIsScrolling(true);
79
+ clearTimeout(scrollTimerRef.current);
80
+ scrollTimerRef.current = setTimeout(() => setIsScrolling(false), 1000);
81
+ };
82
+ el.addEventListener('scroll', onScroll, { passive: true });
83
+ return () => {
84
+ el.removeEventListener('scroll', onScroll);
85
+ clearTimeout(scrollTimerRef.current);
86
+ };
87
+ }, [type]);
68
88
  // Resolve theme with overrides
69
89
  const resolvedTheme = useMemo(() => {
70
90
  var _a, _b, _c;
@@ -75,7 +95,19 @@ const ScrollArea = React__default.forwardRef(({ children, type = 'hover', orient
75
95
  });
76
96
  }, [theme]);
77
97
  // Determine overflow classes based on orientation
98
+ // For type='scroll', use overflow:overlay so scrollbar overlays content
78
99
  const overflowClasses = useMemo(() => {
100
+ if (type === 'scroll') {
101
+ switch (orientation) {
102
+ case 'horizontal':
103
+ return 'overflow-x-[overlay] overflow-y-hidden';
104
+ case 'both':
105
+ return 'overflow-x-[overlay] overflow-y-[overlay]';
106
+ case 'vertical':
107
+ default:
108
+ return 'overflow-y-[overlay] overflow-x-hidden';
109
+ }
110
+ }
79
111
  switch (orientation) {
80
112
  case 'horizontal':
81
113
  return 'overflow-x-auto overflow-y-hidden';
@@ -85,7 +117,7 @@ const ScrollArea = React__default.forwardRef(({ children, type = 'hover', orient
85
117
  default:
86
118
  return 'overflow-y-auto overflow-x-hidden';
87
119
  }
88
- }, [orientation]);
120
+ }, [orientation, type]);
89
121
  // Scroll snap classes
90
122
  // When snap is enabled for horizontal/both, the viewport becomes a flex container
91
123
  // so that items are direct children of the scrollable element (required for snap-align).
@@ -107,9 +139,11 @@ const ScrollArea = React__default.forwardRef(({ children, type = 'hover', orient
107
139
  return `${axisClass} ${strictnessClass} ${alignClass} ${layoutClass}`;
108
140
  }, [snap, orientation, snapAlign]);
109
141
  // Base scrollbar styling classes (shared across all types)
142
+ const scrollbarDimension = size === 'thin'
143
+ ? '[&::-webkit-scrollbar]:w-1 [&::-webkit-scrollbar]:h-1'
144
+ : '[&::-webkit-scrollbar]:w-2 [&::-webkit-scrollbar]:h-2';
110
145
  const scrollbarBase = [
111
- '[&::-webkit-scrollbar]:w-2',
112
- '[&::-webkit-scrollbar]:h-2',
146
+ scrollbarDimension,
113
147
  '[&::-webkit-scrollbar-track]:bg-transparent',
114
148
  '[&::-webkit-scrollbar-thumb]:rounded-full',
115
149
  '[&::-webkit-scrollbar-corner]:bg-transparent',
@@ -124,13 +158,21 @@ const ScrollArea = React__default.forwardRef(({ children, type = 'hover', orient
124
158
  ].join(' ');
125
159
  case 'scroll':
126
160
  return [
127
- '[&::-webkit-scrollbar-thumb]:bg-[var(--color-border)]',
161
+ '[&::-webkit-scrollbar-thumb]:bg-transparent',
162
+ '[&[data-scrolling]::-webkit-scrollbar-thumb]:bg-black/30',
163
+ '[&::-webkit-scrollbar-thumb]:transition-colors',
164
+ '[&::-webkit-scrollbar-thumb]:duration-300',
128
165
  ].join(' ');
129
166
  case 'hover':
130
167
  return [
131
168
  '[&::-webkit-scrollbar-thumb]:bg-transparent',
132
169
  '[&:hover::-webkit-scrollbar-thumb]:bg-[var(--color-border)]',
133
170
  ].join(' ');
171
+ case 'none':
172
+ return [
173
+ '[&::-webkit-scrollbar]:!hidden',
174
+ '[scrollbar-width:none]',
175
+ ].join(' ');
134
176
  case 'auto':
135
177
  default:
136
178
  return [
@@ -138,7 +180,7 @@ const ScrollArea = React__default.forwardRef(({ children, type = 'hover', orient
138
180
  ].join(' ');
139
181
  }
140
182
  }, [type]);
141
- return (jsx("div", { ref: internalRef, className: cn(resolvedTheme.baseStyle, overflowClasses, snapClasses, scrollbarBase, scrollbarVisibility, className), "data-orientation": orientation, "data-type": type, "data-smooth": smooth, ...props, children: children }));
183
+ return (jsx("div", { ref: internalRef, className: cn(resolvedTheme.baseStyle, overflowClasses, snapClasses, scrollbarBase, scrollbarVisibility, className), "data-orientation": orientation, "data-type": type, "data-smooth": smooth, "data-scrolling": isScrolling || undefined, ...props, children: children }));
142
184
  });
143
185
  ScrollArea.displayName = 'ScrollArea';
144
186
 
@@ -4,10 +4,17 @@ import { SmoothScrollConfig, ScrollProgress, PerformanceMetrics } from './smooth
4
4
  * Scrollbar visibility behavior
5
5
  * - 'auto': Standard browser behavior (show when content overflows)
6
6
  * - 'always': Always show scrollbar
7
- * - 'scroll': Always show scrollbar track
7
+ * - 'scroll': Show scrollbar only while actively scrolling (overlay, no track)
8
8
  * - 'hover': Show scrollbar only on hover
9
+ * - 'none': Hide scrollbar completely while keeping scroll functionality
9
10
  */
10
- export type ScrollAreaType = 'auto' | 'always' | 'scroll' | 'hover';
11
+ export type ScrollAreaType = 'auto' | 'always' | 'scroll' | 'hover' | 'none';
12
+ /**
13
+ * Scrollbar size
14
+ * - 'default': 8px scrollbar (w-2/h-2)
15
+ * - 'thin': 4px scrollbar (w-1/h-1)
16
+ */
17
+ export type ScrollAreaSize = 'default' | 'thin';
11
18
  /**
12
19
  * Theme structure for the ScrollArea component
13
20
  */
@@ -29,7 +36,7 @@ export interface ScrollAreaThemeOverrides {
29
36
  */
30
37
  export interface ScrollAreaRef extends HTMLDivElement {
31
38
  /** Programmatically scroll to position with smooth animation */
32
- smoothScrollTo?: (position: number, options?: any) => void;
39
+ smoothScrollTo?: (position: number, options?: import("./smooth/SmoothScrollEngine.types").ScrollToOptions) => void;
33
40
  /** Get current scroll velocity */
34
41
  getScrollVelocity?: () => number;
35
42
  /** Pause smooth scrolling */
@@ -65,6 +72,8 @@ export interface ScrollAreaProps extends HTMLAttributes<HTMLDivElement> {
65
72
  children: ReactNode;
66
73
  /** Scrollbar visibility behavior @default 'hover' */
67
74
  type?: ScrollAreaType;
75
+ /** Scrollbar size @default 'default' */
76
+ size?: ScrollAreaSize;
68
77
  /** Scroll direction @default 'vertical' */
69
78
  orientation?: 'vertical' | 'horizontal' | 'both';
70
79
  /**
@@ -1,5 +1,5 @@
1
1
  export { ScrollArea } from './ScrollArea';
2
- export type { ScrollAreaProps, ScrollAreaRef, ScrollAreaTheme, ScrollAreaThemeOverrides, ScrollAreaType, } from './ScrollArea.types';
2
+ export type { ScrollAreaProps, ScrollAreaRef, ScrollAreaTheme, ScrollAreaThemeOverrides, ScrollAreaType, ScrollAreaSize, } from './ScrollArea.types';
3
3
  export { scrollAreaTheme } from './ScrollArea.theme';
4
4
  export { useSmoothScroll } from './smooth/useSmoothScroll';
5
5
  export type { SmoothScrollAPI, SmoothScrollConfig, ScrollProgress, ScrollToOptions, SnapPoint, EasingFunction, PerformanceMetrics, } from './smooth';
@@ -24,6 +24,6 @@ const SegmentedItem = React__default.forwardRef(({ value, disabled = false, chil
24
24
  ), onClick: handleClick, "data-value": value, "data-selected": isSelected, "data-disabled": isDisabled, ...props, children: children }));
25
25
  });
26
26
  // Set display name for dev tools and Storybook
27
- SegmentedItem.displayName = "SegmentedItem";
27
+ SegmentedItem.displayName = "Segmented.Item";
28
28
 
29
29
  export { SegmentedItem };
@@ -1,3 +1,13 @@
1
1
  import React from "react";
2
2
  import { SidebarProps } from "./Sidebar.types";
3
- export declare const Sidebar: React.ForwardRefExoticComponent<SidebarProps & React.RefAttributes<HTMLDivElement>>;
3
+ export declare const Sidebar: React.ForwardRefExoticComponent<SidebarProps & React.RefAttributes<HTMLDivElement>> & {
4
+ Header: React.ForwardRefExoticComponent<import("./Sidebar.types").SidebarHeaderProps & React.RefAttributes<HTMLDivElement>>;
5
+ Content: React.ForwardRefExoticComponent<import("./Sidebar.types").SidebarContentProps & React.RefAttributes<HTMLDivElement>>;
6
+ Footer: React.ForwardRefExoticComponent<import("./Sidebar.types").SidebarFooterProps & React.RefAttributes<HTMLDivElement>>;
7
+ Nav: React.ForwardRefExoticComponent<import("./Sidebar.types").SidebarNavProps & React.RefAttributes<HTMLDivElement>>;
8
+ NavGroup: React.ForwardRefExoticComponent<import("./Sidebar.types").SidebarNavGroupProps & React.RefAttributes<HTMLDivElement>>;
9
+ Submenu: ({ children, isOpen, className, }: import("./SidebarSubmenu").SidebarSubmenuProps) => import("react/jsx-runtime").JSX.Element;
10
+ Toggle: React.ForwardRefExoticComponent<import("./Sidebar.types").SidebarToggleProps & React.RefAttributes<HTMLButtonElement>>;
11
+ MobileTrigger: React.ForwardRefExoticComponent<import("./Sidebar.types").SidebarMobileTriggerProps & React.RefAttributes<HTMLButtonElement>>;
12
+ UserProfile: React.ForwardRefExoticComponent<import("./Sidebar.types").SidebarUserProfileProps & React.RefAttributes<HTMLDivElement>>;
13
+ };
@@ -1,44 +1,78 @@
1
- import { jsx } from 'react/jsx-runtime';
1
+ import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
2
2
  import React__default, { useMemo } from 'react';
3
3
  import { cn } from '../../../utils/cn.js';
4
- import { motion } from 'motion/react';
4
+ import { motion, AnimatePresence } from 'motion/react';
5
5
  import { sidebarTheme } from './Sidebar.theme.js';
6
6
  import { useSidebarContext, SidebarProvider } from './SidebarContext.js';
7
+ import { SidebarHeader } from './SidebarHeader.js';
8
+ import { SidebarContent } from './SidebarContent.js';
9
+ import { SidebarFooter } from './SidebarFooter.js';
10
+ import { SidebarNav } from './SidebarNav.js';
11
+ import { SidebarNavGroup } from './SidebarNavGroup.js';
12
+ import { SidebarSubmenu } from './SidebarSubmenu.js';
13
+ import { SidebarToggle } from './SidebarToggle.js';
14
+ import { SidebarMobileTrigger } from './SidebarMobileTrigger.js';
15
+ import { SidebarUserProfile } from './SidebarUserProfile.js';
7
16
 
8
17
  const SIDEBAR_TRANSITION = {
9
18
  type: "spring",
10
19
  stiffness: 300,
11
20
  damping: 30,
12
21
  };
13
- const SidebarContainer = React__default.forwardRef(({ side = "left", variant = "sidebar", width, children, className, theme: customTheme = {}, ...props }, ref) => {
22
+ const SidebarDesktop = React__default.forwardRef(({ side = "left", variant = "sidebar", width, children, className, theme: customTheme = {}, ...props }, ref) => {
14
23
  var _a, _b, _c;
15
24
  const context = useSidebarContext();
16
25
  const collapsed = (_a = context === null || context === void 0 ? void 0 : context.collapsed) !== null && _a !== void 0 ? _a : false;
17
- // Default widths
18
26
  const expandedWidth = (width === null || width === void 0 ? void 0 : width.expanded) || ((_b = context === null || context === void 0 ? void 0 : context.width) === null || _b === void 0 ? void 0 : _b.expanded) || 280;
19
- const collapsedWidth = (width === null || width === void 0 ? void 0 : width.collapsed) || ((_c = context === null || context === void 0 ? void 0 : context.width) === null || _c === void 0 ? void 0 : _c.collapsed) || 80;
27
+ const collapsedWidth = (width === null || width === void 0 ? void 0 : width.collapsed) || ((_c = context === null || context === void 0 ? void 0 : context.width) === null || _c === void 0 ? void 0 : _c.collapsed) || 64;
20
28
  const theme = useMemo(() => ({
21
29
  ...sidebarTheme,
22
30
  ...customTheme,
23
- variants: {
24
- ...sidebarTheme.variants,
25
- ...customTheme.variants,
26
- },
27
- sides: {
28
- ...sidebarTheme.sides,
29
- ...customTheme.sides,
30
- },
31
+ variants: { ...sidebarTheme.variants, ...customTheme.variants },
32
+ sides: { ...sidebarTheme.sides, ...customTheme.sides },
31
33
  }), [customTheme]);
34
+ const { onAnimationStart, onAnimationEnd, onDrag, onDragStart, onDragEnd, ...motionSafeProps } = props;
32
35
  const sidebarClasses = cn(theme.baseStyle, theme.variants[variant], theme.sides[side], className);
33
36
  const animateValue = useMemo(() => ({
34
37
  width: collapsed ? collapsedWidth : expandedWidth,
35
38
  maxWidth: "100vw",
36
39
  }), [collapsed, collapsedWidth, expandedWidth]);
37
- return (jsx(motion.div, { ref: ref, className: sidebarClasses, "data-side": side, "data-variant": variant, "data-collapsed": collapsed, initial: false, animate: animateValue, transition: SIDEBAR_TRANSITION, ...props, children: children }));
40
+ return (jsx(motion.div, { ref: ref, className: sidebarClasses, "data-side": side, "data-variant": variant, "data-collapsed": collapsed, initial: false, animate: animateValue, transition: SIDEBAR_TRANSITION, ...motionSafeProps, children: children }));
38
41
  });
39
- const Sidebar = React__default.forwardRef(({ side = "left", variant = "sidebar", defaultCollapsed = false, collapsed: controlledCollapsed, onCollapsedChange, width, children, className, theme: customTheme = {}, ...props }, ref) => {
40
- return (jsx(SidebarProvider, { defaultCollapsed: defaultCollapsed, collapsed: controlledCollapsed, onCollapsedChange: onCollapsedChange, width: width, side: side, variant: variant, children: jsx(SidebarContainer, { ref: ref, className: className, theme: customTheme, side: side, variant: variant, width: width, ...props, children: children }) }));
42
+ SidebarDesktop.displayName = "SidebarDesktop";
43
+ const SidebarMobile = ({ children, className, theme: customTheme = {} }) => {
44
+ const context = useSidebarContext();
45
+ if (!context)
46
+ return null;
47
+ const { isMobileOpen, setMobileOpen } = context;
48
+ const theme = useMemo(() => ({
49
+ ...sidebarTheme,
50
+ ...customTheme,
51
+ }), [customTheme]);
52
+ return (jsx(AnimatePresence, { children: isMobileOpen && (jsxs(Fragment, { children: [jsx(motion.div, { className: cn(theme.mobileBackdrop), initial: { opacity: 0 }, animate: { opacity: 1 }, exit: { opacity: 0 }, transition: { duration: 0.2 }, onClick: () => setMobileOpen(false), "aria-hidden": "true" }), jsx(motion.div, { className: cn(theme.mobileOverlay, className), initial: { opacity: 0, y: 20 }, animate: { opacity: 1, y: 0 }, exit: { opacity: 0, y: 20 }, transition: { type: "spring", stiffness: 400, damping: 35 }, role: "dialog", "aria-modal": "true", "aria-label": "Navigation menu", children: children })] })) }));
53
+ };
54
+ const SidebarContainer = React__default.forwardRef((props, ref) => {
55
+ const context = useSidebarContext();
56
+ if (context === null || context === void 0 ? void 0 : context.isMobile) {
57
+ return (jsx(SidebarMobile, { className: props.className, theme: props.theme, children: props.children }));
58
+ }
59
+ return jsx(SidebarDesktop, { ref: ref, ...props });
60
+ });
61
+ SidebarContainer.displayName = "SidebarContainer";
62
+ const SidebarRoot = React__default.forwardRef(({ side = "left", variant = "sidebar", defaultCollapsed = false, collapsed: controlledCollapsed, onCollapsedChange, mobileBreakpoint, mobileOpen, onMobileOpenChange, width, children, className, theme: customTheme = {}, ...props }, ref) => {
63
+ return (jsx(SidebarProvider, { defaultCollapsed: defaultCollapsed, collapsed: controlledCollapsed, onCollapsedChange: onCollapsedChange, mobileBreakpoint: mobileBreakpoint, mobileOpen: mobileOpen, onMobileOpenChange: onMobileOpenChange, width: width, side: side, variant: variant, children: jsx(SidebarContainer, { ref: ref, className: className, theme: customTheme, side: side, variant: variant, width: width, ...props, children: children }) }));
64
+ });
65
+ SidebarRoot.displayName = "Sidebar";
66
+ const Sidebar = Object.assign(SidebarRoot, {
67
+ Header: SidebarHeader,
68
+ Content: SidebarContent,
69
+ Footer: SidebarFooter,
70
+ Nav: SidebarNav,
71
+ NavGroup: SidebarNavGroup,
72
+ Submenu: SidebarSubmenu,
73
+ Toggle: SidebarToggle,
74
+ MobileTrigger: SidebarMobileTrigger,
75
+ UserProfile: SidebarUserProfile,
41
76
  });
42
- Sidebar.displayName = "Sidebar";
43
77
 
44
78
  export { Sidebar };
@@ -1,16 +1,18 @@
1
1
  const sidebarTheme = {
2
- baseStyle: 'flex flex-col h-full bg-white border-r border-gray-200 overflow-hidden transition-all duration-300 ease-in-out',
2
+ baseStyle: 'flex flex-col h-full bg-[var(--color-background)] overflow-hidden',
3
3
  variants: {
4
4
  sidebar: 'relative',
5
- floating: 'rounded-[var(--radius-base)] shadow-lg border border-gray-200',
6
- inset: 'rounded-[var(--radius-base)] bg-gray-50 border border-gray-200',
5
+ floating: 'rounded-[var(--radius-base)] shadow-lg border border-[var(--color-border)]',
6
+ inset: 'rounded-[var(--radius-base)] bg-[var(--color-background-secondary)] border border-[var(--color-border)]',
7
7
  },
8
8
  sides: {
9
- left: 'border-r',
10
- right: 'border-l',
9
+ left: 'border-r border-[var(--color-border)]',
10
+ right: 'border-l border-[var(--color-border)]',
11
11
  },
12
- collapsed: 'w-20',
13
- expanded: 'w-[280px]', // Using arbitrary value since 280px is not a standard Tailwind width
12
+ collapsed: 'w-16',
13
+ expanded: 'w-[280px]',
14
+ mobileOverlay: 'fixed inset-0 z-50 flex flex-col bg-[var(--color-background)]',
15
+ mobileBackdrop: 'fixed inset-0 z-40 bg-black/50 backdrop-blur-sm',
14
16
  };
15
17
 
16
18
  export { sidebarTheme };
@@ -1,6 +1,7 @@
1
1
  import { ReactNode } from 'react';
2
2
  export type SidebarSide = 'left' | 'right';
3
3
  export type SidebarVariant = 'sidebar' | 'floating' | 'inset';
4
+ export type SidebarUserStatus = 'online' | 'offline' | 'away' | 'busy';
4
5
  export interface SidebarContextValue {
5
6
  collapsed: boolean;
6
7
  setCollapsed: (collapsed: boolean) => void;
@@ -11,6 +12,11 @@ export interface SidebarContextValue {
11
12
  };
12
13
  side: SidebarSide;
13
14
  variant: SidebarVariant;
15
+ /** Whether the sidebar is currently showing as mobile overlay */
16
+ isMobileOpen: boolean;
17
+ setMobileOpen: (open: boolean) => void;
18
+ /** Whether we're below the mobile breakpoint */
19
+ isMobile: boolean;
14
20
  }
15
21
  export interface SidebarProps extends React.HTMLAttributes<HTMLDivElement> {
16
22
  /**
@@ -43,6 +49,19 @@ export interface SidebarProps extends React.HTMLAttributes<HTMLDivElement> {
43
49
  expanded?: number;
44
50
  collapsed?: number;
45
51
  };
52
+ /**
53
+ * Mobile breakpoint in pixels. Below this, sidebar becomes a full-screen overlay.
54
+ * @default 1024
55
+ */
56
+ mobileBreakpoint?: number;
57
+ /**
58
+ * Controlled mobile open state
59
+ */
60
+ mobileOpen?: boolean;
61
+ /**
62
+ * Callback when mobile open state changes
63
+ */
64
+ onMobileOpenChange?: (open: boolean) => void;
46
65
  /**
47
66
  * Children components
48
67
  */
@@ -78,6 +97,12 @@ export interface SidebarFooterProps extends React.HTMLAttributes<HTMLDivElement>
78
97
  children: ReactNode;
79
98
  }
80
99
  export interface SidebarNavProps extends React.HTMLAttributes<HTMLDivElement> {
100
+ /**
101
+ * When true, only one submenu can be open at a time within this nav.
102
+ * Opening a new submenu auto-closes the previously open one.
103
+ * @default false
104
+ */
105
+ accordion?: boolean;
81
106
  children: ReactNode;
82
107
  }
83
108
  export interface SidebarNavGroupProps extends React.HTMLAttributes<HTMLDivElement> {
@@ -105,6 +130,34 @@ export interface SidebarToggleProps extends React.HTMLAttributes<HTMLButtonEleme
105
130
  */
106
131
  collapseIcon?: ReactNode;
107
132
  }
133
+ export interface SidebarMobileTriggerProps extends React.HTMLAttributes<HTMLButtonElement> {
134
+ /**
135
+ * Custom icon for the trigger
136
+ */
137
+ icon?: ReactNode;
138
+ }
139
+ export interface SidebarUserProfileProps extends React.HTMLAttributes<HTMLDivElement> {
140
+ /**
141
+ * User display name
142
+ */
143
+ name: string;
144
+ /**
145
+ * User email
146
+ */
147
+ email?: string;
148
+ /**
149
+ * Avatar image URL
150
+ */
151
+ avatar?: string;
152
+ /**
153
+ * Online status indicator
154
+ */
155
+ status?: SidebarUserStatus;
156
+ /**
157
+ * Content to render when the profile is clicked (e.g. dropdown menu)
158
+ */
159
+ dropdownContent?: ReactNode;
160
+ }
108
161
  export interface SidebarTheme {
109
162
  baseStyle: string;
110
163
  variants: {
@@ -115,6 +168,8 @@ export interface SidebarTheme {
115
168
  };
116
169
  collapsed: string;
117
170
  expanded: string;
171
+ mobileOverlay: string;
172
+ mobileBackdrop: string;
118
173
  }
119
174
  export interface SidebarThemeOverrides {
120
175
  baseStyle?: string;
@@ -126,4 +181,6 @@ export interface SidebarThemeOverrides {
126
181
  }>;
127
182
  collapsed?: string;
128
183
  expanded?: string;
184
+ mobileOverlay?: string;
185
+ mobileBackdrop?: string;
129
186
  }
@@ -6,7 +6,9 @@ import { useSidebarContext } from './SidebarContext.js';
6
6
  const SidebarContent = React__default.forwardRef(({ children, className, ...props }, ref) => {
7
7
  const sidebarContext = useSidebarContext();
8
8
  const collapsed = (sidebarContext === null || sidebarContext === void 0 ? void 0 : sidebarContext.collapsed) || false;
9
- return (jsx("div", { ref: ref, className: cn("flex-1 overflow-y-auto overflow-x-hidden py-2 transition-all duration-200", collapsed ? "px-2" : "px-3", className), ...props, children: children }));
9
+ const isMobile = (sidebarContext === null || sidebarContext === void 0 ? void 0 : sidebarContext.isMobile) || false;
10
+ const isCollapsedView = collapsed && !isMobile;
11
+ return (jsx("div", { ref: ref, className: cn("flex-1 overflow-y-auto overflow-x-hidden py-2 transition-all duration-200", isCollapsedView ? "px-2" : "px-3", className), ...props, children: children }));
10
12
  });
11
13
  SidebarContent.displayName = "SidebarContent";
12
14
 
@@ -1,11 +1,25 @@
1
1
  import React from 'react';
2
2
  import { SidebarContextValue } from './Sidebar.types';
3
3
  export declare const useSidebarContext: () => SidebarContextValue | null;
4
+ /** Accordion nav context: allows SidebarNav to coordinate which submenu is open */
5
+ interface AccordionNavContextValue {
6
+ openId: string | null;
7
+ register: (id: string) => void;
8
+ unregister: (id: string) => void;
9
+ }
10
+ export declare const useAccordionNavContext: () => AccordionNavContextValue | null;
11
+ export declare const AccordionNavProvider: React.FC<{
12
+ children: React.ReactNode;
13
+ accordion?: boolean;
14
+ }>;
4
15
  interface SidebarProviderProps {
5
16
  children: React.ReactNode;
6
17
  defaultCollapsed?: boolean;
7
18
  collapsed?: boolean;
8
19
  onCollapsedChange?: (collapsed: boolean) => void;
20
+ mobileBreakpoint?: number;
21
+ mobileOpen?: boolean;
22
+ onMobileOpenChange?: (open: boolean) => void;
9
23
  width?: {
10
24
  expanded?: number;
11
25
  collapsed?: number;