@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,53 +1,85 @@
1
- import { jsx, jsxs } from 'react/jsx-runtime';
2
- import React__default, { useMemo } from 'react';
1
+ import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
2
+ import React__default, { useId, useState, useCallback, useMemo } from 'react';
3
3
  import { cn } from '../../../utils/cn.js';
4
4
  import { navItemTheme } from './NavItem.theme.js';
5
- import { useSidebarContext } from '../Sidebar/SidebarContext.js';
5
+ import { useSidebarContext, useAccordionNavContext } from '../Sidebar/SidebarContext.js';
6
6
  import { Tooltip } from '../Tooltip/Tooltip.js';
7
7
  import '../Tooltip/Tooltip.animations.js';
8
8
  import { Badge } from '../Badge/Badge.js';
9
9
  import { ChevronDownIcon } from '@heroicons/react/20/solid';
10
+ import { AnimatePresence, motion } from 'motion/react';
10
11
 
11
12
  const NavItem = React__default.forwardRef(({ children, startContent: propStartContent, endContent: propEndContent, icon, // Legacy
12
13
  badge, // Legacy
13
- description, shortcut, href, onClick, active = false, disabled = false, isDisabled: propIsDisabled, isDanger = false, hasSubmenu = false, expanded = false, onToggleExpanded, level = 0, showTooltipWhenCollapsed = true, className, theme: customTheme = {}, ...props }, ref) => {
14
+ notification, description, shortcut, href, onClick, active = false, disabled = false, isDisabled: propIsDisabled, isDanger = false, hasSubmenu: propHasSubmenu = false, expanded: controlledExpanded, onToggleExpanded, items, defaultExpanded = false, level = 0, showTooltipWhenCollapsed = true, className, theme: customTheme = {}, ...props }, ref) => {
14
15
  var _a, _b;
15
16
  const sidebarContext = useSidebarContext();
17
+ const accordionNav = useAccordionNavContext();
18
+ const stableId = useId();
16
19
  const collapsed = (sidebarContext === null || sidebarContext === void 0 ? void 0 : sidebarContext.collapsed) || false;
17
20
  const isInSidebar = !!sidebarContext;
21
+ const isMobile = (sidebarContext === null || sidebarContext === void 0 ? void 0 : sidebarContext.isMobile) || false;
22
+ // Self-managed submenu state
23
+ const [internalExpanded, setInternalExpanded] = useState(defaultExpanded);
24
+ // Determine if this item has a submenu
25
+ const hasSubmenu = propHasSubmenu || (items && items.length > 0);
26
+ // Determine expanded state: controlled vs accordion vs internal
27
+ const isAccordionManaged = !!accordionNav;
28
+ const isControlled = controlledExpanded !== undefined;
29
+ let isExpanded;
30
+ if (isControlled) {
31
+ isExpanded = controlledExpanded;
32
+ }
33
+ else if (isAccordionManaged && hasSubmenu) {
34
+ isExpanded = accordionNav.openId === stableId;
35
+ }
36
+ else {
37
+ isExpanded = internalExpanded;
38
+ }
39
+ const handleToggleExpanded = useCallback(() => {
40
+ if (isControlled) {
41
+ onToggleExpanded === null || onToggleExpanded === void 0 ? void 0 : onToggleExpanded();
42
+ }
43
+ else if (isAccordionManaged) {
44
+ if (isExpanded) {
45
+ accordionNav.unregister(stableId);
46
+ }
47
+ else {
48
+ accordionNav.register(stableId);
49
+ }
50
+ }
51
+ else {
52
+ setInternalExpanded(prev => !prev);
53
+ }
54
+ }, [isControlled, isAccordionManaged, isExpanded, onToggleExpanded, accordionNav, stableId]);
18
55
  // Map legacy props
19
56
  const startContent = propStartContent || icon;
20
57
  const actualIsDisabled = propIsDisabled || disabled;
21
- // Construct end content
58
+ // Build end content
22
59
  let endContent = propEndContent;
23
60
  if (!endContent && badge) {
24
- endContent = (jsx(Badge, { color: "neutral", variant: "ghost", size: "sm", children: badge }));
25
- }
26
- if (!endContent && hasSubmenu) {
27
- endContent = (jsx(ChevronDownIcon, { className: cn("size-4 transition-transform duration-300", expanded && "rotate-180") }));
61
+ endContent = (jsx(Badge, { color: "neutral", variant: "soft", size: "sm", children: badge }));
28
62
  }
63
+ // Notification element
64
+ const notificationElement = useMemo(() => {
65
+ if (notification === undefined || notification === false)
66
+ return null;
67
+ if (notification === true) {
68
+ return (jsx("span", { className: cn(navItemTheme.notificationDot, customTheme.notificationDot) }));
69
+ }
70
+ if (typeof notification === "number" && notification > 0) {
71
+ return (jsx("span", { className: cn(navItemTheme.notificationBadge, customTheme.notificationBadge), children: notification > 99 ? "99+" : notification }));
72
+ }
73
+ return null;
74
+ }, [notification, customTheme.notificationDot, customTheme.notificationBadge]);
29
75
  const theme = useMemo(() => ({
30
76
  ...navItemTheme,
31
77
  ...customTheme,
32
- states: {
33
- ...navItemTheme.states,
34
- ...customTheme.states,
35
- },
36
- iconStates: {
37
- ...navItemTheme.iconStates,
38
- ...customTheme.iconStates,
39
- },
40
- levels: {
41
- ...navItemTheme.levels,
42
- ...customTheme.levels,
43
- },
44
- collapsed: {
45
- ...navItemTheme.collapsed,
46
- ...customTheme.collapsed,
47
- },
48
- danger: customTheme.danger ||
49
- navItemTheme.danger ||
50
- "text-[var(--color-danger)] hover:bg-[var(--color-danger-50)]",
78
+ states: { ...navItemTheme.states, ...customTheme.states },
79
+ iconStates: { ...navItemTheme.iconStates, ...customTheme.iconStates },
80
+ levels: { ...navItemTheme.levels, ...customTheme.levels },
81
+ collapsed: { ...navItemTheme.collapsed, ...customTheme.collapsed },
82
+ danger: customTheme.danger || navItemTheme.danger || "text-[var(--color-danger)] hover:bg-[var(--color-danger-50)]",
51
83
  }), [customTheme]);
52
84
  // Handle click events
53
85
  const handleClick = (e) => {
@@ -55,19 +87,27 @@ description, shortcut, href, onClick, active = false, disabled = false, isDisabl
55
87
  e.preventDefault();
56
88
  return;
57
89
  }
58
- if (hasSubmenu && onToggleExpanded) {
90
+ if (hasSubmenu) {
59
91
  e.preventDefault();
60
- onToggleExpanded();
92
+ handleToggleExpanded();
61
93
  return;
62
94
  }
63
95
  if (onClick) {
64
96
  e.preventDefault();
65
97
  onClick();
98
+ // Close mobile sidebar after clicking a nav item
99
+ if (isMobile && sidebarContext) {
100
+ sidebarContext.setMobileOpen(false);
101
+ }
66
102
  return;
67
103
  }
68
- // If href is provided, let the default navigation happen
104
+ // Close mobile sidebar after navigation
105
+ if (href && isMobile && sidebarContext) {
106
+ sidebarContext.setMobileOpen(false);
107
+ }
69
108
  };
70
109
  const isActive = active;
110
+ const isCollapsedView = isInSidebar && collapsed && !isMobile;
71
111
  // Get state classes
72
112
  const getStateClasses = () => {
73
113
  if (actualIsDisabled)
@@ -78,8 +118,10 @@ description, shortcut, href, onClick, active = false, disabled = false, isDisabl
78
118
  };
79
119
  // Danger overrides
80
120
  const dangerClasses = isDanger ? theme.danger : "";
121
+ // Active indicator
122
+ const activeIndicatorClasses = isActive && level === 0 ? theme.activeIndicator : "";
81
123
  // Build container classes
82
- const containerClasses = cn(theme.baseStyle, getStateClasses(), theme.levels[level], isInSidebar && collapsed && ((_a = theme.collapsed) === null || _a === void 0 ? void 0 : _a.container), dangerClasses, className);
124
+ const containerClasses = cn(theme.baseStyle, getStateClasses(), theme.levels[level], isCollapsedView && ((_a = theme.collapsed) === null || _a === void 0 ? void 0 : _a.container), dangerClasses, activeIndicatorClasses, className);
83
125
  // Get icon state classes
84
126
  const getIconStateClasses = () => {
85
127
  var _a, _b, _c;
@@ -90,35 +132,41 @@ description, shortcut, href, onClick, active = false, disabled = false, isDisabl
90
132
  return (_c = theme.iconStates) === null || _c === void 0 ? void 0 : _c.default;
91
133
  };
92
134
  // Build icon classes
93
- const iconClasses = cn(isInSidebar && collapsed ? (_b = theme.collapsed) === null || _b === void 0 ? void 0 : _b.icon : theme.icon, getIconStateClasses());
135
+ const iconClasses = cn(isCollapsedView ? (_b = theme.collapsed) === null || _b === void 0 ? void 0 : _b.icon : theme.icon, getIconStateClasses());
94
136
  const textClasses = cn(theme.text);
137
+ // Chevron for submenu
138
+ const chevron = hasSubmenu && !isCollapsedView ? (jsx(ChevronDownIcon, { className: cn("size-4 transition-transform duration-200 text-[var(--color-text-muted)]", isExpanded && "rotate-180") })) : null;
95
139
  // Content component
96
- const content = (jsxs("div", { ref: ref, className: containerClasses, role: href ? "link" : "button", tabIndex: actualIsDisabled ? -1 : 0, "aria-disabled": actualIsDisabled, "aria-expanded": hasSubmenu ? expanded : undefined, "data-active": isActive, "data-disabled": actualIsDisabled, "data-level": level, onClick: handleClick, onKeyDown: (e) => {
140
+ const content = (jsxs("div", { ref: ref, className: containerClasses, role: href ? "link" : "button", tabIndex: actualIsDisabled ? -1 : 0, "aria-disabled": actualIsDisabled, "aria-expanded": hasSubmenu ? isExpanded : undefined, "data-active": isActive, "data-disabled": actualIsDisabled, "data-level": level, onClick: handleClick, onKeyDown: (e) => {
97
141
  if (e.key === "Enter" || e.key === " ") {
98
142
  e.preventDefault();
99
143
  handleClick(e);
100
144
  }
101
- }, ...props, children: [startContent && (jsx("div", { className: cn("flex items-center justify-center flex-shrink-0"
102
- // Icon size is handled by icon classes
103
- ), children: React__default.isValidElement(startContent)
104
- ? React__default.cloneElement(startContent, {
105
- className: cn(iconClasses, startContent.props.className),
106
- })
107
- : startContent })), (!isInSidebar || !collapsed) && (jsxs("div", { className: "flex-1 min-w-0", children: [jsxs("div", { className: "flex items-center justify-between gap-2", children: [jsx("span", { className: cn("truncate", textClasses), children: children }), shortcut && (jsx("kbd", { className: "hidden group-hover:inline-block text-sm text-[var(--color-text-muted)] font-sans border border-[var(--color-border)] rounded px-1.5 py-0.5", children: shortcut }))] }), description && (jsx("div", { className: "text-sm text-[var(--color-text-muted)] mt-0.5 truncate", children: description }))] })), endContent && (!isInSidebar || !collapsed) && (jsx("div", { className: "flex items-center justify-center flex-shrink-0", children: endContent })), isInSidebar && collapsed && (jsx("span", { className: "sr-only", children: children }))] }));
145
+ }, ...props, children: [startContent && (jsxs("div", { className: "flex items-center justify-center flex-shrink-0 relative", children: [React__default.isValidElement(startContent)
146
+ ? React__default.cloneElement(startContent, {
147
+ className: cn(iconClasses, startContent.props.className),
148
+ })
149
+ : startContent, isCollapsedView && notificationElement && (jsx("span", { className: "absolute -top-1 -right-1", children: notificationElement }))] })), !isCollapsedView && (jsxs("div", { className: "flex-1 min-w-0", children: [jsxs("div", { className: "flex items-center justify-between gap-2", children: [jsx("span", { className: cn("truncate", textClasses), children: children }), shortcut && (jsx("kbd", { className: "hidden group-hover:inline-block text-sm text-[var(--color-text-muted)] font-sans border border-[var(--color-border)] rounded px-1.5 py-0.5", children: shortcut }))] }), description && (jsx("div", { className: "text-sm text-[var(--color-text-muted)] mt-0.5 truncate", children: description }))] })), !isCollapsedView && (jsxs("div", { className: "flex items-center gap-1.5 flex-shrink-0", children: [notificationElement, endContent, chevron] })), isCollapsedView && (jsx("span", { className: "sr-only", children: children }))] }));
150
+ // Self-contained submenu
151
+ const submenu = hasSubmenu && items && items.length > 0 && !isCollapsedView ? (jsx(AnimatePresence, { initial: false, children: isExpanded && (jsx(motion.div, { initial: "collapsed", animate: "open", exit: "collapsed", variants: {
152
+ open: { opacity: 1, height: "auto" },
153
+ collapsed: { opacity: 0, height: 0 },
154
+ }, transition: { duration: 0.2, ease: "easeInOut" }, className: "overflow-hidden", children: items.map((item, idx) => (jsx(NavItem, { level: Math.min((level + 1), 2), startContent: item.startContent, active: item.active, isDisabled: item.isDisabled, badge: item.badge, notification: item.notification, href: item.href, onClick: item.onClick, children: item.children }, idx))) })) })) : null;
108
155
  // Wrap with link if href is provided
109
- if (href && !actualIsDisabled) {
110
- const LinkContent = (jsx("a", { href: href, className: "block group", children: content }));
111
- // Show tooltip in collapsed sidebar mode
112
- if (isInSidebar && collapsed && showTooltipWhenCollapsed) {
113
- return (jsx(Tooltip, { content: children, placement: "right", children: LinkContent }));
156
+ const renderWrapped = (node) => {
157
+ if (href && !actualIsDisabled) {
158
+ return (jsx("a", { href: href, className: "block group", children: node }));
114
159
  }
115
- return LinkContent;
116
- }
160
+ return node;
161
+ };
117
162
  // Show tooltip in collapsed sidebar mode
118
- if (isInSidebar && collapsed && showTooltipWhenCollapsed) {
119
- return (jsx(Tooltip, { content: children, placement: "right", children: content }));
120
- }
121
- return content;
163
+ const renderWithTooltip = (node) => {
164
+ if (isCollapsedView && showTooltipWhenCollapsed) {
165
+ return (jsx(Tooltip, { content: children, placement: "right", children: node }));
166
+ }
167
+ return node;
168
+ };
169
+ return (jsxs(Fragment, { children: [renderWithTooltip(renderWrapped(content)), submenu] }));
122
170
  });
123
171
  NavItem.displayName = "NavItem";
124
172
 
@@ -1,12 +1,12 @@
1
1
  const navItemTheme = {
2
- baseStyle: "relative flex items-center gap-2 px-2 py-1.5 text-base font-medium cursor-pointer select-none transition-all duration-300 w-full rounded-[var(--nav-item-radius)] outline-none group",
2
+ baseStyle: "relative flex items-center gap-2 px-2 py-1.5 text-base font-medium cursor-pointer select-none transition-all duration-150 w-full rounded-[var(--nav-item-radius)] outline-none focus-visible:ring-2 focus-visible:ring-[var(--color-primary)] group",
3
3
  icon: "size-4 text-[var(--color-text-secondary)]",
4
4
  text: "flex-1 min-w-0 truncate",
5
5
  states: {
6
- default: "text-[var(--color-text-primary)] hover:bg-neutral-100",
6
+ default: "text-[var(--color-text-primary)] hover:bg-[var(--color-background-secondary)]",
7
7
  active: "bg-[var(--color-primary)]/10 text-[var(--color-primary)] font-semibold",
8
8
  disabled: "opacity-60 cursor-not-allowed pointer-events-none text-[var(--color-text-placeholder)]",
9
- hover: "hover:bg-neutral-100",
9
+ hover: "hover:bg-[var(--color-background-secondary)]",
10
10
  },
11
11
  iconStates: {
12
12
  default: "text-[var(--color-text-secondary)] group-hover:text-[var(--color-text-primary)]",
@@ -22,6 +22,9 @@ const navItemTheme = {
22
22
  container: "!gap-0 justify-center p-2 aspect-square",
23
23
  icon: "size-5",
24
24
  },
25
+ activeIndicator: "before:absolute before:left-0 before:top-1/2 before:-translate-y-1/2 before:h-5 before:w-[3px] before:rounded-full before:bg-[var(--color-primary)]",
26
+ notificationDot: "size-2 rounded-full bg-[var(--color-danger)]",
27
+ notificationBadge: "min-w-[18px] h-[18px] px-1 text-[10px] font-semibold rounded-full bg-[var(--color-danger)] text-[var(--color-danger-contrast)] flex items-center justify-center leading-none",
25
28
  };
26
29
 
27
30
  export { navItemTheme };
@@ -1,4 +1,22 @@
1
1
  import { ReactNode } from "react";
2
+ export interface NavItemSubmenuItem {
3
+ /** Label text */
4
+ children: ReactNode;
5
+ /** Link href */
6
+ href?: string;
7
+ /** Click handler */
8
+ onClick?: () => void;
9
+ /** Whether this sub-item is active */
10
+ active?: boolean;
11
+ /** Whether this sub-item is disabled */
12
+ isDisabled?: boolean;
13
+ /** Badge text/number on the sub-item */
14
+ badge?: string | number;
15
+ /** Notification count/dot on the sub-item */
16
+ notification?: number | boolean;
17
+ /** Start content (icon) for the sub-item */
18
+ startContent?: ReactNode;
19
+ }
2
20
  export interface NavItemProps extends React.HTMLAttributes<HTMLDivElement> {
3
21
  /**
4
22
  * Content of the navigation item
@@ -30,6 +48,10 @@ export interface NavItemProps extends React.HTMLAttributes<HTMLDivElement> {
30
48
  * @deprecated Use endContent instead
31
49
  */
32
50
  badge?: string | number;
51
+ /**
52
+ * Notification indicator. Pass a number for a count badge, or true for a dot.
53
+ */
54
+ notification?: number | boolean;
33
55
  /**
34
56
  * Link href (for navigation)
35
57
  */
@@ -58,19 +80,31 @@ export interface NavItemProps extends React.HTMLAttributes<HTMLDivElement> {
58
80
  */
59
81
  isDanger?: boolean;
60
82
  /**
61
- * Whether the item has a submenu
83
+ * Whether the item has a submenu (manual mode).
84
+ * If `items` is provided, this is set automatically.
62
85
  * @default false
63
86
  */
64
87
  hasSubmenu?: boolean;
65
88
  /**
66
- * Whether the submenu is expanded (for multi-level navigation)
89
+ * Whether the submenu is expanded (controlled mode for manual submenus).
67
90
  * @default false
68
91
  */
69
92
  expanded?: boolean;
70
93
  /**
71
- * Callback when submenu is toggled
94
+ * Callback when submenu is toggled (manual mode)
72
95
  */
73
96
  onToggleExpanded?: () => void;
97
+ /**
98
+ * Self-contained submenu items. When provided, NavItem manages its own
99
+ * expand/collapse state internally. Children items automatically get
100
+ * level={parentLevel + 1}.
101
+ */
102
+ items?: NavItemSubmenuItem[];
103
+ /**
104
+ * Whether the self-contained submenu is expanded by default
105
+ * @default false
106
+ */
107
+ defaultExpanded?: boolean;
74
108
  /**
75
109
  * Nesting level for indentation (0, 1, 2)
76
110
  * @default 0
@@ -111,6 +145,10 @@ export interface NavItemTheme {
111
145
  container: string;
112
146
  icon: string;
113
147
  };
148
+ activeIndicator?: string;
149
+ notificationDot?: string;
150
+ notificationBadge?: string;
151
+ danger?: string;
114
152
  }
115
153
  export interface NavItemThemeOverrides {
116
154
  baseStyle?: string;
@@ -137,32 +175,8 @@ export interface NavItemThemeOverrides {
137
175
  container: string;
138
176
  icon: string;
139
177
  }>;
140
- danger?: string;
141
- }
142
- export interface NavItemTheme {
143
- baseStyle: string;
144
- icon: string;
145
- text: string;
146
- states: {
147
- default: string;
148
- active: string;
149
- disabled: string;
150
- hover: string;
151
- };
152
- iconStates?: {
153
- default?: string;
154
- active?: string;
155
- disabled?: string;
156
- hover?: string;
157
- };
158
- levels: {
159
- 0: string;
160
- 1: string;
161
- 2: string;
162
- };
163
- collapsed: {
164
- container: string;
165
- icon: string;
166
- };
178
+ activeIndicator?: string;
179
+ notificationDot?: string;
180
+ notificationBadge?: string;
167
181
  danger?: string;
168
182
  }
@@ -1,2 +1,2 @@
1
1
  export { NavItem } from './NavItem';
2
- export type { NavItemProps, NavItemTheme, NavItemThemeOverrides } from './NavItem.types';
2
+ export type { NavItemProps, NavItemSubmenuItem, NavItemTheme, NavItemThemeOverrides } from './NavItem.types';
@@ -15,7 +15,7 @@ const paginationTheme = {
15
15
  // Base state - dark
16
16
  "dark:bg-[var(--color-neutral-800)] dark:text-[var(--color-neutral-400)] dark:border-transparent " +
17
17
  // Hover state - light
18
- "hover:text-[var(--color-text-primary)] hover:bg-neutral-50 hover:border-[var(--color-border)] " +
18
+ "hover:text-[var(--color-text-primary)] hover:bg-[var(--color-background-secondary)] hover:border-[var(--color-border)] " +
19
19
  // Hover state - dark
20
20
  "dark:hover:bg-[var(--color-neutral-700)] dark:hover:text-[var(--color-neutral-200)] dark:hover:border-[var(--color-neutral-600)] " +
21
21
  // Active state - light
@@ -28,7 +28,7 @@ const pillTheme = {
28
28
  */
29
29
  sizes: {
30
30
  sm: "text-sm px-2 py-0.5 gap-0.5",
31
- md: "text-base px-2.5 py-1 gap-1",
31
+ md: "text-base px-2 py-0.5 gap-1",
32
32
  lg: "text-base px-3 py-1 gap-1.5",
33
33
  },
34
34
  /**
@@ -1,6 +1,6 @@
1
1
  import React from "react";
2
2
  import { PopoverRootProps as PopoverProps } from "./Popover.types";
3
3
  export declare const Popover: (({ children, className, isOpen: controlledIsOpen, defaultIsOpen, onOpenChange, placement, offset, triggerType, closeOnClickOutside, closeOnEsc, preventClose, hasBackdrop, theme: themeOverrides, darkMode, ...props }: PopoverProps) => import("react/jsx-runtime").JSX.Element) & {
4
- Trigger: React.ForwardRefExoticComponent<Omit<import("./Popover.types").PopoverTriggerProps, "ref"> & React.RefAttributes<any>>;
4
+ Trigger: React.ForwardRefExoticComponent<Omit<import("./Popover.types").PopoverTriggerProps, "ref"> & React.RefAttributes<HTMLElement>>;
5
5
  Body: React.ForwardRefExoticComponent<import("./Popover.types").PopoverBodyProps & React.RefAttributes<HTMLDivElement>>;
6
6
  };
@@ -58,7 +58,7 @@ const PopoverBody = React__default.forwardRef(({ children, className, animation
58
58
  const { position, cssVariables, contentRef: portalContentRef, } = useSelectPortal({
59
59
  triggerRef,
60
60
  isOpen: isOpen || false,
61
- placement: placement,
61
+ placement,
62
62
  offset: offset || 8,
63
63
  autoWidth: true,
64
64
  onClose: () => {
@@ -132,7 +132,7 @@ const PopoverBody = React__default.forwardRef(({ children, className, animation
132
132
  return (jsx(Overlay, { ref: handleRef, isOpen: isOpen, onClose: () => {
133
133
  if (!preventClose)
134
134
  onOpenChange(false);
135
- }, closeOnOverlayClick: closeOnClickOutside && !preventClose, closeOnEsc: closeOnEsc && !preventClose, enableScrollLock: false, enableFocusTrap: false, position: "none", role: "dialog", ariaModal: true, contentClassName: contentClasses, contentStyle: contentPositionStyle, animations: animation && !shouldReduceMotion
135
+ }, closeOnOverlayClick: closeOnClickOutside && !preventClose, closeOnEsc: closeOnEsc && !preventClose, enableScrollLock: false, enableFocusTrap: true, position: "none", role: "dialog", ariaModal: true, contentClassName: contentClasses, contentStyle: contentPositionStyle, animations: animation && !shouldReduceMotion
136
136
  ? {
137
137
  overlay: overlayBackdropAnimations,
138
138
  content: overlayContentAnimations,
@@ -1,3 +1,3 @@
1
1
  import React from "react";
2
2
  import { PopoverTriggerProps } from "./Popover.types";
3
- export declare const PopoverTrigger: React.ForwardRefExoticComponent<Omit<PopoverTriggerProps, "ref"> & React.RefAttributes<any>>;
3
+ export declare const PopoverTrigger: React.ForwardRefExoticComponent<Omit<PopoverTriggerProps, "ref"> & React.RefAttributes<HTMLElement>>;
@@ -5,6 +5,7 @@ import { usePopoverContext } from './PopoverContext.js';
5
5
  const PopoverTrigger = React__default.forwardRef(({ children, className, ...props }, ref) => {
6
6
  var _a;
7
7
  const context = usePopoverContext();
8
+ const childElement = children;
8
9
  // Create trigger events based on triggerType
9
10
  const getTriggerEvents = () => {
10
11
  if (context.triggerType === "click") {
@@ -14,7 +15,7 @@ const PopoverTrigger = React__default.forwardRef(({ children, className, ...prop
14
15
  e.preventDefault();
15
16
  context.onOpenChange(!context.isOpen);
16
17
  // Call the original onClick if it exists
17
- (_b = (_a = children.props) === null || _a === void 0 ? void 0 : _a.onClick) === null || _b === void 0 ? void 0 : _b.call(_a, e);
18
+ (_b = (_a = childElement.props) === null || _a === void 0 ? void 0 : _a.onClick) === null || _b === void 0 ? void 0 : _b.call(_a, e);
18
19
  },
19
20
  };
20
21
  }
@@ -24,7 +25,7 @@ const PopoverTrigger = React__default.forwardRef(({ children, className, ...prop
24
25
  var _a, _b;
25
26
  context.onOpenChange(true);
26
27
  // Call the original onMouseEnter if it exists
27
- (_b = (_a = children.props) === null || _a === void 0 ? void 0 : _a.onMouseEnter) === null || _b === void 0 ? void 0 : _b.call(_a, e);
28
+ (_b = (_a = childElement.props) === null || _a === void 0 ? void 0 : _a.onMouseEnter) === null || _b === void 0 ? void 0 : _b.call(_a, e);
28
29
  },
29
30
  onMouseLeave: (e) => {
30
31
  var _a, _b;
@@ -32,43 +33,42 @@ const PopoverTrigger = React__default.forwardRef(({ children, className, ...prop
32
33
  context.onOpenChange(false);
33
34
  }
34
35
  // Call the original onMouseLeave if it exists
35
- (_b = (_a = children.props) === null || _a === void 0 ? void 0 : _a.onMouseLeave) === null || _b === void 0 ? void 0 : _b.call(_a, e);
36
+ (_b = (_a = childElement.props) === null || _a === void 0 ? void 0 : _a.onMouseLeave) === null || _b === void 0 ? void 0 : _b.call(_a, e);
36
37
  },
37
38
  };
38
39
  }
39
40
  return {};
40
41
  };
41
42
  // Merge refs for the trigger element
42
- function setRef(node) {
43
+ function mergeRefs(node) {
43
44
  context.triggerRef.current = node;
44
45
  if (ref) {
45
46
  if (typeof ref === "function")
46
47
  ref(node);
47
- else if (typeof ref === "object")
48
+ else if (typeof ref === "object" && ref)
48
49
  ref.current = node;
49
50
  }
50
- const childRef = children.ref;
51
+ const childRef = childElement.ref;
51
52
  if (childRef) {
52
53
  if (typeof childRef === "function")
53
54
  childRef(node);
54
- else if (typeof childRef === "object")
55
+ else if (typeof childRef === "object" && childRef)
55
56
  childRef.current = node;
56
57
  }
57
58
  }
58
59
  const triggerEvents = getTriggerEvents();
59
- const childElement = children;
60
60
  return React__default.cloneElement(childElement, {
61
- ref: setRef,
61
+ ref: mergeRefs,
62
62
  "aria-expanded": context.isOpen,
63
63
  "aria-haspopup": true,
64
64
  "aria-controls": context.contentId,
65
- className: cn((_a = childElement.props) === null || _a === void 0 ? void 0 : _a.className, className, "popover-trigger"),
65
+ className: cn("popover-trigger", (_a = childElement.props) === null || _a === void 0 ? void 0 : _a.className, className),
66
66
  "data-state": context.isOpen ? "open" : "closed",
67
67
  "data-trigger-type": context.triggerType,
68
68
  ...triggerEvents,
69
69
  ...props,
70
70
  });
71
71
  });
72
- PopoverTrigger.displayName = "PopoverTrigger";
72
+ PopoverTrigger.displayName = "Popover.Trigger";
73
73
 
74
74
  export { PopoverTrigger };
@@ -6,23 +6,24 @@ import { ProgressProps } from "./Progress.types";
6
6
  * Features:
7
7
  * - Determinate mode: Shows specific progress value (0-100)
8
8
  * - Indeterminate mode: Animated loading state when value is undefined
9
- * - Multiple sizes and semantic colors
9
+ * - Multiple sizes with default primary color
10
+ * - className controls the fill bar color (the primary styling target)
11
+ * - wrapperClassName controls the outer container
10
12
  * - Flexible label positioning (right, top, bottom, inside)
11
13
  * - Respects reduced motion preferences
12
- * - Full className override support
13
14
  *
14
15
  * @example
15
- * // Determinate progress
16
- * <Progress value={60} color="primary" />
16
+ * // Default (primary color)
17
+ * <Progress value={60} />
18
+ *
19
+ * // Custom fill color via className
20
+ * <Progress value={70} className="bg-[var(--color-success)]" />
17
21
  *
18
22
  * // With label
19
23
  * <Progress value={75} showLabel labelPosition="right" />
20
24
  *
21
25
  * // Indeterminate (loading)
22
- * <Progress color="primary" />
23
- *
24
- * // Custom label format
25
- * <Progress value={50} showLabel formatLabel={(pct) => `${pct}% complete`} />
26
+ * <Progress />
26
27
  */
27
28
  declare const Progress: React.ForwardRefExoticComponent<ProgressProps & React.RefAttributes<HTMLDivElement>>;
28
29
  export { Progress };
@@ -16,25 +16,26 @@ const PROGRESS_SPRING_TRANSITION = {
16
16
  * Features:
17
17
  * - Determinate mode: Shows specific progress value (0-100)
18
18
  * - Indeterminate mode: Animated loading state when value is undefined
19
- * - Multiple sizes and semantic colors
19
+ * - Multiple sizes with default primary color
20
+ * - className controls the fill bar color (the primary styling target)
21
+ * - wrapperClassName controls the outer container
20
22
  * - Flexible label positioning (right, top, bottom, inside)
21
23
  * - Respects reduced motion preferences
22
- * - Full className override support
23
24
  *
24
25
  * @example
25
- * // Determinate progress
26
- * <Progress value={60} color="primary" />
26
+ * // Default (primary color)
27
+ * <Progress value={60} />
28
+ *
29
+ * // Custom fill color via className
30
+ * <Progress value={70} className="bg-[var(--color-success)]" />
27
31
  *
28
32
  * // With label
29
33
  * <Progress value={75} showLabel labelPosition="right" />
30
34
  *
31
35
  * // Indeterminate (loading)
32
- * <Progress color="primary" />
33
- *
34
- * // Custom label format
35
- * <Progress value={50} showLabel formatLabel={(pct) => `${pct}% complete`} />
36
+ * <Progress />
36
37
  */
37
- const Progress = React__default.forwardRef(({ value, size = "md", color = "primary", showLabel = false, labelPosition = "right", formatLabel, animated = true, trackClassName, fillClassName, className, theme: customTheme, ...props }, ref) => {
38
+ const Progress = React__default.forwardRef(({ value, size = "md", showLabel = false, labelPosition = "right", formatLabel, animated = true, wrapperClassName, className, theme: customTheme, ...props }, ref) => {
38
39
  const shouldReduceMotion = useReducedMotion();
39
40
  // Merge custom theme with default theme
40
41
  const theme = useMemo(() => {
@@ -44,7 +45,6 @@ const Progress = React__default.forwardRef(({ value, size = "md", color = "prima
44
45
  ...progressTheme,
45
46
  ...customTheme,
46
47
  sizes: { ...progressTheme.sizes, ...customTheme.sizes },
47
- colors: { ...progressTheme.colors, ...customTheme.colors },
48
48
  };
49
49
  }, [customTheme]);
50
50
  // Calculate percentage (clamped to 0-100)
@@ -71,7 +71,7 @@ const Progress = React__default.forwardRef(({ value, size = "md", color = "prima
71
71
  case "top":
72
72
  return "flex flex-col gap-1.5";
73
73
  case "bottom":
74
- return "flex flex-col-reverse gap-1.5";
74
+ return "flex flex-col gap-1.5";
75
75
  case "right":
76
76
  return "flex items-center gap-3";
77
77
  case "inside":
@@ -95,14 +95,14 @@ const Progress = React__default.forwardRef(({ value, size = "md", color = "prima
95
95
  : ""), children: label }));
96
96
  };
97
97
  // Track element with optional fill
98
- const renderTrack = () => (jsxs("div", { className: cn(theme.trackStyle, theme.sizes[size], "relative", trackClassName), children: [isIndeterminate ? (
98
+ const renderTrack = () => (jsxs("div", { className: cn(theme.trackStyle, theme.sizes[size], "relative", wrapperClassName), children: [isIndeterminate ? (
99
99
  // Indeterminate animation
100
- jsx("div", { className: cn(theme.fillStyle, theme.colors[color], "w-1/3", theme.indeterminateStyle, fillClassName) })) : shouldAnimate ? (
100
+ jsx("div", { className: cn(theme.fillStyle, "absolute", theme.indeterminateStyle, className) })) : shouldAnimate ? (
101
101
  // Animated determinate progress with spring animation
102
- jsx(motion.div, { className: cn(theme.fillStyle, theme.colors[color], fillClassName), initial: { width: 0 }, animate: { width: `${percentage}%` }, transition: PROGRESS_SPRING_TRANSITION })) : (
102
+ jsx(motion.div, { className: cn(theme.fillStyle, className), initial: { width: 0 }, animate: { width: `${percentage}%` }, transition: PROGRESS_SPRING_TRANSITION })) : (
103
103
  // Static determinate progress
104
- jsx("div", { className: cn(theme.fillStyle, theme.colors[color], fillClassName), style: { width: `${percentage}%` } })), showLabel && labelPosition === "inside" && size === "lg" && !isIndeterminate && (jsx("span", { className: theme.insideLabelStyle, children: label }))] }));
105
- return (jsxs("div", { ref: ref, className: cn(theme.containerStyle, containerLayoutClass, className), role: "progressbar", "aria-valuemin": 0, "aria-valuemax": 100, "aria-valuenow": isIndeterminate ? undefined : percentage, "aria-label": isIndeterminate ? "Loading" : `${percentage}% complete`, ...props, children: [labelPosition === "top" && renderLabel(), labelPosition === "right" ? (jsxs(Fragment, { children: [jsx("div", { className: "flex-1", children: renderTrack() }), renderLabel()] })) : (renderTrack()), labelPosition === "bottom" && renderLabel()] }));
104
+ jsx("div", { className: cn(theme.fillStyle, className), style: { width: `${percentage}%` } })), showLabel && labelPosition === "inside" && size === "lg" && !isIndeterminate && (jsx("span", { className: theme.insideLabelStyle, children: label }))] }));
105
+ return (jsxs("div", { ref: ref, className: cn(theme.containerStyle, containerLayoutClass), role: "progressbar", "aria-valuemin": 0, "aria-valuemax": 100, "aria-valuenow": isIndeterminate ? undefined : percentage, "aria-label": isIndeterminate ? "Loading" : `${percentage}% complete`, ...props, children: [labelPosition === "top" && renderLabel(), labelPosition === "right" ? (jsxs(Fragment, { children: [jsx("div", { className: "flex-1", children: renderTrack() }), renderLabel()] })) : (renderTrack()), labelPosition === "bottom" && renderLabel()] }));
106
106
  });
107
107
  Progress.displayName = "Progress";
108
108