@flikk/ui 1.0.0-beta.21 → 1.0.0-beta.23

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 (198) hide show
  1. package/dist/components/ai/CodeBlock/CodeBlock.theme.js +2 -2
  2. package/dist/components/ai/PromptInput/PromptInput.js +139 -7
  3. package/dist/components/ai/PromptInput/PromptInput.theme.js +3 -3
  4. package/dist/components/ai/PromptInput/VoiceRecorder.js +84 -0
  5. package/dist/components/ai/PromptSuggestions/PromptSuggestion.theme.js +1 -1
  6. package/dist/components/ai/StreamingResponse/StreamingResponse.theme.js +4 -4
  7. package/dist/components/ai/TokenCounter/TokenCounter.theme.js +6 -6
  8. package/dist/components/charts/ActivityRings/ActivityRings.theme.js +2 -2
  9. package/dist/components/charts/DonutChart/DonutChart.theme.js +2 -2
  10. package/dist/components/charts/DonutChart/MultiSegmentDonutChart.theme.js +1 -1
  11. package/dist/components/charts/Heatmap/Heatmap.theme.js +1 -1
  12. package/dist/components/charts/RadarChart/RadarChart.theme.js +2 -2
  13. package/dist/components/charts/ScatterPlot/ScatterPlot.theme.js +2 -2
  14. package/dist/components/charts/shared/ChartText/ChartText.theme.js +1 -1
  15. package/dist/components/charts/shared/ChartTooltip/ChartTooltip.theme.js +4 -4
  16. package/dist/components/core/Alert/Alert.theme.js +1 -1
  17. package/dist/components/core/Avatar/Avatar.theme.js +10 -10
  18. package/dist/components/core/AvatarGroup/AvatarGroup.theme.js +1 -1
  19. package/dist/components/core/Badge/Badge.js +2 -12
  20. package/dist/components/core/Badge/Badge.theme.js +2 -2
  21. package/dist/components/core/Button/Button.theme.js +6 -6
  22. package/dist/components/core/ButtonGroup/ButtonGroup.theme.js +1 -1
  23. package/dist/components/core/Calendar/Calendar.theme.js +5 -5
  24. package/dist/components/core/Card/Card.theme.js +2 -2
  25. package/dist/components/core/CommandPalette/CommandPalette.theme.js +4 -4
  26. package/dist/components/core/Drawer/Drawer.animations.js +5 -4
  27. package/dist/components/core/Drawer/Drawer.theme.js +2 -2
  28. package/dist/components/core/Dropdown/Dropdown.theme.js +1 -1
  29. package/dist/components/core/Empty/Empty.theme.js +2 -2
  30. package/dist/components/core/Icon/Icon.d.ts +3 -0
  31. package/dist/components/core/Icon/Icon.js +70 -0
  32. package/dist/components/core/Icon/Icon.theme.d.ts +2 -0
  33. package/dist/components/core/Icon/Icon.theme.js +19 -0
  34. package/dist/components/core/Icon/Icon.types.d.ts +32 -0
  35. package/dist/components/core/{FileTypeIcon → Icon/data}/fileTypes.d.ts +1 -1
  36. package/dist/components/core/Icon/data/paymentMethods.d.ts +27 -0
  37. package/dist/components/core/Icon/data/paymentMethods.js +169 -0
  38. package/dist/components/core/Icon/index.d.ts +4 -0
  39. package/dist/components/core/Kbd/Kbd.theme.js +2 -2
  40. package/dist/components/core/MenuItem/MenuItem.theme.js +2 -2
  41. package/dist/components/core/Message/Message.theme.js +6 -6
  42. package/dist/components/core/Modal/Modal.animations.js +3 -1
  43. package/dist/components/core/Modal/Modal.theme.js +2 -2
  44. package/dist/components/core/Modal/ModalBody.js +7 -8
  45. package/dist/components/core/NavItem/NavItem.js +16 -6
  46. package/dist/components/core/NavItem/NavItem.theme.js +2 -2
  47. package/dist/components/core/OfflineIndicator/OfflineIndicator.theme.js +2 -2
  48. package/dist/components/core/PageHeading/PageHeading.theme.js +2 -2
  49. package/dist/components/core/Pagination/Pagination.theme.js +2 -2
  50. package/dist/components/core/Pill/Pill.theme.js +3 -3
  51. package/dist/components/core/Progress/Progress.theme.js +2 -2
  52. package/dist/components/core/Segmented/Segmented.theme.js +3 -3
  53. package/dist/components/core/Sidebar/Sidebar.d.ts +1 -0
  54. package/dist/components/core/Sidebar/Sidebar.js +5 -3
  55. package/dist/components/core/Sidebar/Sidebar.types.d.ts +7 -1
  56. package/dist/components/core/Sidebar/SidebarContent.js +1 -1
  57. package/dist/components/core/Sidebar/SidebarFooter.js +1 -1
  58. package/dist/components/core/Sidebar/SidebarHeader.js +5 -2
  59. package/dist/components/core/Sidebar/SidebarLogo.d.ts +3 -0
  60. package/dist/components/core/Sidebar/SidebarLogo.js +17 -0
  61. package/dist/components/core/Sidebar/SidebarNavGroup.js +2 -1
  62. package/dist/components/core/Sidebar/SidebarToggle.js +2 -4
  63. package/dist/components/core/Sidebar/SidebarUserProfile.js +3 -6
  64. package/dist/components/core/Sidebar/index.d.ts +2 -1
  65. package/dist/components/core/Tabs/Tabs.theme.js +2 -2
  66. package/dist/components/core/Tag/Tag.theme.js +2 -2
  67. package/dist/components/core/Toast/Toast.theme.js +2 -2
  68. package/dist/components/core/Tooltip/Tooltip.d.ts +1 -1
  69. package/dist/components/core/Tooltip/Tooltip.js +2 -2
  70. package/dist/components/core/Tooltip/Tooltip.theme.js +1 -1
  71. package/dist/components/core/Tooltip/Tooltip.types.d.ts +5 -1
  72. package/dist/components/core/Tree/Tree.theme.js +1 -1
  73. package/dist/components/core/index.d.ts +1 -2
  74. package/dist/components/core/index.js +3 -2
  75. package/dist/components/data-display/DescriptionList/DescriptionList.theme.js +2 -2
  76. package/dist/components/data-display/Feed/Feed.theme.js +1 -1
  77. package/dist/components/data-display/GanttChart/GanttChart.theme.js +2 -2
  78. package/dist/components/data-display/KPI/KPI.theme.js +9 -9
  79. package/dist/components/data-display/Metric/Metric.theme.js +9 -9
  80. package/dist/components/data-display/Table/Table.animations.js +16 -10
  81. package/dist/components/data-display/Table/Table.filterUtils.js +8 -1
  82. package/dist/components/data-display/Table/Table.js +10 -14
  83. package/dist/components/data-display/Table/Table.theme.js +3 -3
  84. package/dist/components/data-display/Table/Table.types.d.ts +2 -0
  85. package/dist/components/data-display/Table/TableActions.js +3 -3
  86. package/dist/components/data-display/Table/TableActionsMenu.js +2 -3
  87. package/dist/components/data-display/Table/TableCell.js +6 -3
  88. package/dist/components/data-display/Table/TableDeclarative.js +5 -7
  89. package/dist/components/data-display/Table/TableHeader.js +5 -2
  90. package/dist/components/data-display/Table/TablePagination.js +2 -6
  91. package/dist/components/data-display/Table/TableRow.js +2 -6
  92. package/dist/components/data-display/Table/index.js +1 -0
  93. package/dist/components/effects/CustomCursor/CustomCursor.theme.js +1 -1
  94. package/dist/components/effects/Overlay/Overlay.js +50 -21
  95. package/dist/components/forms/Checkbox/Checkbox.theme.js +3 -3
  96. package/dist/components/forms/ColorPicker/ColorPicker.d.ts +5 -9
  97. package/dist/components/forms/ColorPicker/ColorPicker.js +126 -22
  98. package/dist/components/forms/ColorPicker/ColorPicker.theme.js +9 -6
  99. package/dist/components/forms/ColorPicker/ColorPicker.types.d.ts +99 -0
  100. package/dist/components/forms/ColorPicker/ColorPicker2DCanvas.js +43 -6
  101. package/dist/components/forms/ColorPicker/ColorPickerBody.js +1 -1
  102. package/dist/components/forms/ColorPicker/ColorPickerContext.d.ts +4 -0
  103. package/dist/components/forms/ColorPicker/ColorPickerContext.js +12 -0
  104. package/dist/components/forms/ColorPicker/ColorPickerEyeDropper.js +1 -1
  105. package/dist/components/forms/ColorPicker/ColorPickerFormatSelector.js +1 -1
  106. package/dist/components/forms/ColorPicker/ColorPickerGradient.d.ts +7 -0
  107. package/dist/components/forms/ColorPicker/ColorPickerGradient.js +186 -0
  108. package/dist/components/forms/ColorPicker/ColorPickerHeader.d.ts +14 -0
  109. package/dist/components/forms/ColorPicker/ColorPickerHeader.js +31 -0
  110. package/dist/components/forms/ColorPicker/ColorPickerImage.d.ts +6 -0
  111. package/dist/components/forms/ColorPicker/ColorPickerImage.js +154 -0
  112. package/dist/components/forms/ColorPicker/ColorPickerInput.d.ts +0 -4
  113. package/dist/components/forms/ColorPicker/ColorPickerInput.js +53 -61
  114. package/dist/components/forms/ColorPicker/ColorPickerPresets.js +13 -12
  115. package/dist/components/forms/ColorPicker/ColorPickerSavedColors.d.ts +3 -0
  116. package/dist/components/forms/ColorPicker/ColorPickerSavedColors.js +69 -0
  117. package/dist/components/forms/ColorPicker/ColorPickerSliders.d.ts +1 -2
  118. package/dist/components/forms/ColorPicker/ColorPickerSliders.js +84 -23
  119. package/dist/components/forms/ColorPicker/ColorPickerSwatch.d.ts +1 -1
  120. package/dist/components/forms/ColorPicker/ColorPickerSwatch.js +10 -9
  121. package/dist/components/forms/ColorPicker/ColorPickerTrigger.js +7 -3
  122. package/dist/components/forms/ColorPicker/index.d.ts +8 -2
  123. package/dist/components/forms/CronInput/CronInput.theme.js +8 -8
  124. package/dist/components/forms/DatePicker/DatePicker.theme.js +1 -1
  125. package/dist/components/forms/DateRangePicker/DateRangePicker.theme.js +3 -3
  126. package/dist/components/forms/FileUpload/FileUpload.js +85 -0
  127. package/dist/components/forms/FileUpload/FileUpload.theme.js +4 -4
  128. package/dist/components/forms/FileUpload/FileUploadProgress.js +3 -3
  129. package/dist/components/forms/FileUpload/FileUploadProgress.theme.js +2 -2
  130. package/dist/components/forms/FormLabel/FormLabel.theme.js +1 -1
  131. package/dist/components/forms/Input/Input.js +3 -3
  132. package/dist/components/forms/Input/Input.theme.js +1 -1
  133. package/dist/components/forms/Input/Input.types.d.ts +2 -0
  134. package/dist/components/forms/InputCounter/InputCounter.theme.js +1 -1
  135. package/dist/components/forms/InputOTP/InputOTP.theme.js +1 -1
  136. package/dist/components/forms/Mention/Mention.theme.js +3 -3
  137. package/dist/components/forms/Radio/Radio.theme.js +3 -3
  138. package/dist/components/forms/RichTextEditor/RichTextEditor.theme.js +1 -1
  139. package/dist/components/forms/Select/Select.theme.js +1 -1
  140. package/dist/components/forms/SelectableCard/SelectableCard.js +42 -27
  141. package/dist/components/forms/SelectableCard/SelectableCard.theme.js +15 -25
  142. package/dist/components/forms/SelectableCard/SelectableCard.types.d.ts +16 -3
  143. package/dist/components/forms/SelectableCard/SelectableCardContext.d.ts +1 -0
  144. package/dist/components/forms/SelectableCard/SelectableCardContext.js +4 -7
  145. package/dist/components/forms/SelectableCard/SelectableCardGroup.js +31 -10
  146. package/dist/components/forms/SelectableCard/index.d.ts +1 -1
  147. package/dist/components/forms/Signature/Signature.theme.js +1 -1
  148. package/dist/components/forms/Slider/Slider.theme.js +3 -3
  149. package/dist/components/forms/Switch/Switch.theme.js +1 -1
  150. package/dist/components/forms/TimePicker/TimePicker.theme.js +2 -2
  151. package/dist/components/forms/TimePicker/TimePickerContent.js +86 -1
  152. package/dist/components/forms/forms.theme.js +6 -6
  153. package/dist/components/forms/index.js +91 -1
  154. package/dist/components/layout/FormLayout/FormLayout.js +87 -1
  155. package/dist/components/layout/FormLayout/FormLayout.theme.js +2 -2
  156. package/dist/hooks/useOverlay.d.ts +2 -0
  157. package/dist/hooks/useOverlay.js +34 -4
  158. package/dist/index.js +228 -216
  159. package/dist/styles.css +1 -1
  160. package/package.json +3 -1
  161. package/src/global.scss +1 -1
  162. package/dist/bg/bg/1.jpg +0 -0
  163. package/dist/bg/bg/10.jpg +0 -0
  164. package/dist/bg/bg/11.jpg +0 -0
  165. package/dist/bg/bg/14.jpg +0 -0
  166. package/dist/bg/bg/15.jpg +0 -0
  167. package/dist/bg/bg/16.jpg +0 -0
  168. package/dist/bg/bg/17.jpg +0 -0
  169. package/dist/bg/bg/18.jpg +0 -0
  170. package/dist/bg/bg/19.jpg +0 -0
  171. package/dist/bg/bg/2.jpg +0 -0
  172. package/dist/bg/bg/20.jpg +0 -0
  173. package/dist/bg/bg/21.jpg +0 -0
  174. package/dist/bg/bg/22.jpg +0 -0
  175. package/dist/bg/bg/23.jpg +0 -0
  176. package/dist/bg/bg/24.jpg +0 -0
  177. package/dist/bg/bg/3.jpg +0 -0
  178. package/dist/bg/bg/4.jpg +0 -0
  179. package/dist/bg/bg/5.jpg +0 -0
  180. package/dist/bg/bg/6.jpg +0 -0
  181. package/dist/bg/bg/7.jpg +0 -0
  182. package/dist/bg/bg/8.jpg +0 -0
  183. package/dist/bg/bg/9.jpg +0 -0
  184. package/dist/components/core/FileTypeIcon/FileTypeIcon.d.ts +0 -3
  185. package/dist/components/core/FileTypeIcon/FileTypeIcon.js +0 -33
  186. package/dist/components/core/FileTypeIcon/FileTypeIcon.theme.d.ts +0 -2
  187. package/dist/components/core/FileTypeIcon/FileTypeIcon.theme.js +0 -12
  188. package/dist/components/core/FileTypeIcon/FileTypeIcon.types.d.ts +0 -19
  189. package/dist/components/core/FileTypeIcon/index.d.ts +0 -2
  190. package/dist/components/core/SocialIcon/SocialIcon.d.ts +0 -3
  191. package/dist/components/core/SocialIcon/SocialIcon.js +0 -30
  192. package/dist/components/core/SocialIcon/SocialIcon.theme.d.ts +0 -2
  193. package/dist/components/core/SocialIcon/SocialIcon.theme.js +0 -12
  194. package/dist/components/core/SocialIcon/SocialIcon.types.d.ts +0 -18
  195. package/dist/components/core/SocialIcon/index.d.ts +0 -2
  196. /package/dist/components/core/{FileTypeIcon → Icon/data}/fileTypes.js +0 -0
  197. /package/dist/components/core/{SocialIcon → Icon/data}/platforms.d.ts +0 -0
  198. /package/dist/components/core/{SocialIcon → Icon/data}/platforms.js +0 -0
@@ -120,7 +120,6 @@ notification, description, shortcut, href, onClick, active = false, disabled = f
120
120
  const dangerClasses = isDanger ? theme.danger : "";
121
121
  // Active indicator
122
122
  const activeIndicatorClasses = isActive && level === 0 ? theme.activeIndicator : "";
123
- // Build container classes
124
123
  const containerClasses = cn(theme.baseStyle, getStateClasses(), theme.levels[level], isCollapsedView && ((_a = theme.collapsed) === null || _a === void 0 ? void 0 : _a.container), dangerClasses, activeIndicatorClasses, className);
125
124
  // Get icon state classes
126
125
  const getIconStateClasses = () => {
@@ -146,7 +145,16 @@ notification, description, shortcut, href, onClick, active = false, disabled = f
146
145
  ? React__default.cloneElement(startContent, {
147
146
  className: cn(iconClasses, startContent.props.className),
148
147
  })
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 }))] }));
148
+ : startContent, isCollapsedView && notificationElement && (jsx("span", { className: "absolute -top-1 -right-1", children: notificationElement }))] })), jsxs("div", { className: "min-w-0 overflow-hidden", "aria-hidden": isCollapsedView || undefined, style: {
149
+ flex: "1 1 auto",
150
+ maxWidth: isCollapsedView ? 0 : 9999,
151
+ opacity: isCollapsedView ? 0 : 1,
152
+ transition: "max-width 0.18s cubic-bezier(0.4,0,0.2,1), opacity 0.12s ease-out",
153
+ }, 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 }))] }), jsxs("div", { className: "flex items-center gap-1.5 flex-shrink-0 overflow-hidden", style: {
154
+ maxWidth: isCollapsedView ? 0 : 120,
155
+ opacity: isCollapsedView ? 0 : 1,
156
+ transition: "max-width 0.18s cubic-bezier(0.4,0,0.2,1), opacity 0.12s ease-out",
157
+ }, children: [notificationElement, endContent, chevron] }), isCollapsedView && (jsx("span", { className: "sr-only", children: children }))] }));
150
158
  // Self-contained submenu
151
159
  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
160
  open: { opacity: 1, height: "auto" },
@@ -159,12 +167,14 @@ notification, description, shortcut, href, onClick, active = false, disabled = f
159
167
  }
160
168
  return node;
161
169
  };
162
- // Show tooltip in collapsed sidebar mode
170
+ // Always render Tooltip when in a sidebar (keeps tree structure stable across
171
+ // collapse/expand so CSS transitions aren't interrupted by DOM remounts).
172
+ // The tooltip is disabled when not in collapsed view.
163
173
  const renderWithTooltip = (node) => {
164
- if (isCollapsedView && showTooltipWhenCollapsed) {
165
- return (jsx(Tooltip, { content: children, placement: "right", children: node }));
174
+ if (!isInSidebar || !showTooltipWhenCollapsed) {
175
+ return node;
166
176
  }
167
- return node;
177
+ return (jsx(Tooltip, { content: children, placement: "right", disabled: !isCollapsedView, triggerClassName: "block w-full", children: node }));
168
178
  };
169
179
  return (jsxs(Fragment, { children: [renderWithTooltip(renderWrapped(content)), submenu] }));
170
180
  });
@@ -1,5 +1,5 @@
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-150 w-full rounded-[var(--nav-item-radius)] outline-none focus-visible:ring-2 focus-visible:ring-[var(--color-primary)] group",
2
+ baseStyle: "relative flex items-center gap-2 px-2 py-1.5 text-sm font-medium cursor-pointer select-none transition-colors duration-150 w-full rounded-[var(--nav-item-radius)] outline-none focus-visible:ring-2 focus-visible:ring-[var(--color-primary)] group overflow-hidden",
3
3
  icon: "size-4 text-[var(--color-text-secondary)]",
4
4
  text: "flex-1 min-w-0 truncate",
5
5
  states: {
@@ -19,7 +19,7 @@ const navItemTheme = {
19
19
  2: "pl-10",
20
20
  },
21
21
  collapsed: {
22
- container: "!gap-0 justify-center p-2 aspect-square",
22
+ container: "!gap-0 justify-center !p-2",
23
23
  icon: "size-5",
24
24
  },
25
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)]",
@@ -15,8 +15,8 @@ const offlineIndicatorTheme = {
15
15
  offline: "bg-[var(--color-neutral-900)]/90 backdrop-blur-sm text-white",
16
16
  online: "bg-[var(--color-success)]/90 backdrop-blur-sm text-[var(--color-success-contrast)]",
17
17
  icon: "size-4 flex-shrink-0",
18
- message: "text-sm font-medium",
19
- queueCount: "text-sm opacity-80 ml-1",
18
+ message: "text-xs font-medium",
19
+ queueCount: "text-xs opacity-80 ml-1",
20
20
  };
21
21
 
22
22
  export { offlineIndicatorTheme };
@@ -1,8 +1,8 @@
1
1
  const pageHeadingTheme = {
2
2
  baseStyle: "flex flex-col pb-6 mb-6",
3
3
  headerStyle: "flex items-center gap-4",
4
- titleStyle: "text-2xl font-semibold tracking-tight text-[var(--color-text-primary)]",
5
- subtitleStyle: "text-base text-[var(--color-text-muted)] mt-1",
4
+ titleStyle: "text-xl font-semibold tracking-tight text-[var(--color-text-primary)]",
5
+ subtitleStyle: "text-sm text-[var(--color-text-muted)] mt-1",
6
6
  actionsStyle: "sm:ml-auto flex items-center gap-2 shrink-0",
7
7
  iconStyle: "flex items-center justify-center shrink-0 text-[var(--color-text-muted)]",
8
8
  separatorStyle: "border-b border-[var(--color-border)] mt-4",
@@ -26,8 +26,8 @@ const paginationTheme = {
26
26
  "data-[disabled=true]:opacity-50 data-[disabled=true]:cursor-not-allowed data-[disabled=true]:pointer-events-none",
27
27
  // Unified item sizes
28
28
  itemSizes: {
29
- sm: "size-8 min-w-[2rem] text-base",
30
- md: "size-10 min-w-[2.5rem] text-base",
29
+ sm: "size-8 min-w-[2rem] text-sm",
30
+ md: "size-10 min-w-[2.5rem] text-sm",
31
31
  },
32
32
  // Ellipsis styles
33
33
  ellipsisStyle: "inline-flex items-center justify-center font-medium text-[var(--color-text-muted)] dark:text-[var(--color-neutral-500)] cursor-default pointer-events-none",
@@ -27,9 +27,9 @@ const pillTheme = {
27
27
  * Size variants
28
28
  */
29
29
  sizes: {
30
- sm: "text-sm px-2 py-0.5 gap-0.5",
31
- md: "text-base px-2 py-0.5 gap-1",
32
- lg: "text-base px-3 py-1 gap-1.5",
30
+ sm: "text-xs px-2.5 py-0.5 gap-0.5",
31
+ md: "text-sm px-2.5 py-0.5 gap-1",
32
+ lg: "text-sm px-3 py-1 gap-1.5",
33
33
  },
34
34
  /**
35
35
  * Icon sizes for iconStart and CheckIcon
@@ -9,9 +9,9 @@ const progressTheme = {
9
9
  // Fill (progress bar) styles — includes default primary color
10
10
  fillStyle: "h-full rounded-full bg-[var(--color-primary)]",
11
11
  // Label text styles
12
- labelStyle: "text-base font-semibold text-[var(--color-text-secondary)] tabular-nums min-w-[2.5rem] text-right",
12
+ labelStyle: "text-sm font-semibold text-[var(--color-text-secondary)] tabular-nums min-w-[2.5rem] text-right",
13
13
  // Inside label styles (when label is positioned inside the bar)
14
- insideLabelStyle: "absolute inset-0 flex items-center justify-center text-sm font-medium text-[var(--color-primary-contrast)] tabular-nums",
14
+ insideLabelStyle: "absolute inset-0 flex items-center justify-center text-xs font-medium text-[var(--color-primary-contrast)] tabular-nums",
15
15
  // Size variants for track height
16
16
  sizes: {
17
17
  sm: "h-1.5",
@@ -25,9 +25,9 @@ const segmentedItemTheme = {
25
25
  baseStyle: "relative flex min-w-fit flex-1 items-center justify-center transition-all duration-200 rounded-[calc(var(--segmented-radius)-4px)] font-medium cursor-pointer focus:outline-none focus-visible:ring-2 focus-visible:ring-[var(--color-primary-500)] focus-visible:ring-offset-1",
26
26
  // Size variants using CSS variables
27
27
  sizes: {
28
- sm: "text-base px-[var(--segmented-px-sm)]",
29
- md: "text-base px-[var(--segmented-px-md)]",
30
- lg: "text-base px-[var(--segmented-px-lg)]",
28
+ sm: "text-sm px-[var(--segmented-px-sm)]",
29
+ md: "text-sm px-[var(--segmented-px-md)]",
30
+ lg: "text-sm px-[var(--segmented-px-lg)]",
31
31
  },
32
32
  // Selected state
33
33
  selectedStyle: "text-[var(--color-text-primary)] z-10",
@@ -10,4 +10,5 @@ export declare const Sidebar: React.ForwardRefExoticComponent<SidebarProps & Rea
10
10
  Toggle: React.ForwardRefExoticComponent<import("./Sidebar.types").SidebarToggleProps & React.RefAttributes<HTMLButtonElement>>;
11
11
  MobileTrigger: React.ForwardRefExoticComponent<import("./Sidebar.types").SidebarMobileTriggerProps & React.RefAttributes<HTMLButtonElement>>;
12
12
  UserProfile: React.ForwardRefExoticComponent<import("./Sidebar.types").SidebarUserProfileProps & React.RefAttributes<HTMLDivElement>>;
13
+ Logo: React.ForwardRefExoticComponent<import("./Sidebar.types").SidebarLogoProps & React.RefAttributes<HTMLDivElement>>;
13
14
  };
@@ -13,11 +13,12 @@ import { SidebarSubmenu } from './SidebarSubmenu.js';
13
13
  import { SidebarToggle } from './SidebarToggle.js';
14
14
  import { SidebarMobileTrigger } from './SidebarMobileTrigger.js';
15
15
  import { SidebarUserProfile } from './SidebarUserProfile.js';
16
+ import { SidebarLogo } from './SidebarLogo.js';
16
17
 
17
18
  const SIDEBAR_TRANSITION = {
18
- type: "spring",
19
- stiffness: 300,
20
- damping: 30,
19
+ type: "tween",
20
+ duration: 0.22,
21
+ ease: [0.4, 0, 0.2, 1],
21
22
  };
22
23
  const SidebarDesktop = React__default.forwardRef(({ side = "left", variant = "sidebar", width, children, className, theme: customTheme = {}, ...props }, ref) => {
23
24
  var _a, _b, _c;
@@ -73,6 +74,7 @@ const Sidebar = Object.assign(SidebarRoot, {
73
74
  Toggle: SidebarToggle,
74
75
  MobileTrigger: SidebarMobileTrigger,
75
76
  UserProfile: SidebarUserProfile,
77
+ Logo: SidebarLogo,
76
78
  });
77
79
 
78
80
  export { Sidebar };
@@ -1,4 +1,4 @@
1
- import { ReactNode } from 'react';
1
+ import { ReactNode, HTMLAttributes } from 'react';
2
2
  export type SidebarSide = 'left' | 'right';
3
3
  export type SidebarVariant = 'sidebar' | 'floating' | 'inset';
4
4
  export type SidebarUserStatus = 'online' | 'offline' | 'away' | 'busy';
@@ -158,6 +158,12 @@ export interface SidebarUserProfileProps extends React.HTMLAttributes<HTMLDivEle
158
158
  */
159
159
  dropdownContent?: ReactNode;
160
160
  }
161
+ export interface SidebarLogoProps extends HTMLAttributes<HTMLDivElement> {
162
+ /** Always-visible icon/mark (shown in both expanded and collapsed states) */
163
+ icon: ReactNode;
164
+ /** Text shown only when expanded — animates in/out automatically */
165
+ text?: ReactNode;
166
+ }
161
167
  export interface SidebarTheme {
162
168
  baseStyle: string;
163
169
  variants: {
@@ -8,7 +8,7 @@ const SidebarContent = React__default.forwardRef(({ children, className, ...prop
8
8
  const collapsed = (sidebarContext === null || sidebarContext === void 0 ? void 0 : sidebarContext.collapsed) || false;
9
9
  const isMobile = (sidebarContext === null || sidebarContext === void 0 ? void 0 : sidebarContext.isMobile) || false;
10
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 }));
11
+ return (jsx("div", { ref: ref, className: cn("flex-1 overflow-y-auto overflow-x-hidden py-3 transition-all duration-200", isCollapsedView ? "px-2" : "px-2.5", className), ...props, children: children }));
12
12
  });
13
13
  SidebarContent.displayName = "SidebarContent";
14
14
 
@@ -8,7 +8,7 @@ const SidebarFooter = React__default.forwardRef(({ children, className, ...props
8
8
  const collapsed = (sidebarContext === null || sidebarContext === void 0 ? void 0 : sidebarContext.collapsed) || false;
9
9
  const isMobile = (sidebarContext === null || sidebarContext === void 0 ? void 0 : sidebarContext.isMobile) || false;
10
10
  const isCollapsedView = collapsed && !isMobile;
11
- return (jsx("div", { ref: ref, className: cn("flex-shrink-0 border-t border-[var(--color-border)] transition-all duration-200", isCollapsedView ? "p-2 flex justify-center" : "p-4", className), ...props, children: children }));
11
+ return (jsx("div", { ref: ref, className: cn("flex-shrink-0 border-t border-[var(--color-border)] transition-all duration-200", isCollapsedView ? "p-2 flex justify-center" : "p-3", className), ...props, children: children }));
12
12
  });
13
13
  SidebarFooter.displayName = "SidebarFooter";
14
14
 
@@ -1,4 +1,4 @@
1
- import { jsx, jsxs } from 'react/jsx-runtime';
1
+ import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
2
2
  import React__default from 'react';
3
3
  import { XMarkIcon } from '@heroicons/react/24/outline';
4
4
  import { cn } from '../../../utils/cn.js';
@@ -15,7 +15,10 @@ const SidebarHeader = React__default.forwardRef(({ logo, showToggle = true, cust
15
15
  if (children) {
16
16
  return (jsx("div", { ref: ref, className: cn("flex-shrink-0 border-b border-[var(--color-border)]", className), ...props, children: children }));
17
17
  }
18
- return (jsxs("div", { ref: ref, className: cn("flex items-center justify-between flex-shrink-0 h-16 border-b border-[var(--color-border)] transition-all duration-200", collapsed && !isMobile ? "px-3" : "px-4", className), ...props, children: [jsx("div", { className: cn("flex items-center min-w-0 transition-all duration-200", collapsed && !isMobile ? "flex-shrink-0" : "flex-1"), children: logo }), isMobile && isMobileOpen && (jsx(Button, { variant: "soft", size: "sm", className: "size-8 p-0", onClick: () => sidebarContext === null || sidebarContext === void 0 ? void 0 : sidebarContext.setMobileOpen(false), "aria-label": "Close navigation", children: jsx(XMarkIcon, { className: "size-5" }) })), !isMobile && showToggle && (jsx("div", { className: "flex-shrink-0", children: customToggle || jsx(SidebarToggle, {}) }))] }));
18
+ const isCollapsedDesktop = collapsed && !isMobile;
19
+ return (jsx("div", { ref: ref, className: cn("flex items-center flex-shrink-0 h-14 border-b border-[var(--color-border)] overflow-hidden", isCollapsedDesktop ? "justify-center px-2" : "justify-between px-3", className), ...props, children: isCollapsedDesktop ? (
20
+ /* Collapsed: only show the toggle (expand) button centered */
21
+ showToggle && (customToggle || jsx(SidebarToggle, {}))) : (jsxs(Fragment, { children: [jsx("div", { className: "flex items-center min-w-0 flex-1", children: logo }), isMobile && isMobileOpen && (jsx(Button, { variant: "ghost", size: "sm", className: "size-7 p-0 text-[var(--color-text-muted)] hover:text-[var(--color-text-primary)]", onClick: () => sidebarContext === null || sidebarContext === void 0 ? void 0 : sidebarContext.setMobileOpen(false), "aria-label": "Close navigation", children: jsx(XMarkIcon, { className: "size-4" }) })), !isMobile && showToggle && (jsx("div", { className: "flex-shrink-0", children: customToggle || jsx(SidebarToggle, {}) }))] })) }));
19
22
  });
20
23
  SidebarHeader.displayName = "SidebarHeader";
21
24
 
@@ -0,0 +1,3 @@
1
+ import React from "react";
2
+ import { SidebarLogoProps } from "./Sidebar.types";
3
+ export declare const SidebarLogo: React.ForwardRefExoticComponent<SidebarLogoProps & React.RefAttributes<HTMLDivElement>>;
@@ -0,0 +1,17 @@
1
+ import { jsxs, jsx } from 'react/jsx-runtime';
2
+ import React__default from 'react';
3
+ import { cn } from '../../../utils/cn.js';
4
+ import { AnimatePresence, motion } from 'motion/react';
5
+ import { useSidebarContext } from './SidebarContext.js';
6
+
7
+ const SidebarLogo = React__default.forwardRef(({ icon, text, className, ...props }, ref) => {
8
+ var _a, _b;
9
+ const context = useSidebarContext();
10
+ const collapsed = (_a = context === null || context === void 0 ? void 0 : context.collapsed) !== null && _a !== void 0 ? _a : false;
11
+ const isMobile = (_b = context === null || context === void 0 ? void 0 : context.isMobile) !== null && _b !== void 0 ? _b : false;
12
+ const isCollapsedView = collapsed && !isMobile;
13
+ return (jsxs("div", { ref: ref, className: cn("flex items-center gap-2 overflow-hidden", className), ...props, children: [jsx("div", { className: "flex-shrink-0", children: icon }), jsx(AnimatePresence, { initial: false, children: !isCollapsedView && text && (jsx(motion.div, { className: "overflow-hidden whitespace-nowrap", initial: { opacity: 0, x: -8 }, animate: { opacity: 1, x: 0 }, exit: { opacity: 0, x: -8 }, transition: { duration: 0.15, ease: [0.4, 0, 0.2, 1] }, children: typeof text === "string" ? (jsx("span", { className: "text-lg font-bold text-[var(--color-text-primary)]", children: text })) : (text) }, "logo-text")) })] }));
14
+ });
15
+ SidebarLogo.displayName = "SidebarLogo";
16
+
17
+ export { SidebarLogo };
@@ -1,6 +1,7 @@
1
1
  import { jsxs, jsx } from 'react/jsx-runtime';
2
2
  import React__default from 'react';
3
3
  import { cn } from '../../../utils/cn.js';
4
+ import { AnimatePresence, motion } from 'motion/react';
4
5
  import { useSidebarContext } from './SidebarContext.js';
5
6
 
6
7
  const SidebarNavGroup = React__default.forwardRef(({ title, showTitleWhenCollapsed = false, children, className, ...props }, ref) => {
@@ -9,7 +10,7 @@ const SidebarNavGroup = React__default.forwardRef(({ title, showTitleWhenCollaps
9
10
  const isMobile = (sidebarContext === null || sidebarContext === void 0 ? void 0 : sidebarContext.isMobile) || false;
10
11
  const isCollapsedView = collapsed && !isMobile;
11
12
  const showTitle = title && (!isCollapsedView || showTitleWhenCollapsed);
12
- return (jsxs("div", { ref: ref, className: cn("space-y-1", className), ...props, children: [showTitle && (jsx("div", { className: "px-2 py-2", children: jsx("h3", { className: "text-sm font-semibold text-[var(--color-text-muted)] uppercase tracking-wider", children: title }) })), isCollapsedView && !showTitleWhenCollapsed && (jsx("div", { className: "h-px bg-[var(--color-border)] mx-2 my-2" })), jsx("div", { className: "space-y-1", children: children })] }));
13
+ return (jsxs("div", { ref: ref, className: cn("space-y-1", className), ...props, children: [jsx(AnimatePresence, { initial: false, children: showTitle && (jsx(motion.div, { initial: { opacity: 0, height: 0 }, animate: { opacity: 1, height: "auto" }, exit: { opacity: 0, height: 0 }, transition: { duration: 0.15, ease: "easeInOut" }, className: "overflow-hidden", children: jsx("div", { className: "px-2 py-1", children: jsx("h3", { className: "text-xs font-semibold text-[var(--color-text-muted)] uppercase tracking-wider", children: title }) }) }, "title")) }), jsx(AnimatePresence, { initial: false, children: isCollapsedView && !showTitleWhenCollapsed && (jsx(motion.div, { initial: { opacity: 0 }, animate: { opacity: 1 }, exit: { opacity: 0 }, transition: { duration: 0.15 }, className: "h-px bg-[var(--color-border)] mx-2 my-1" }, "sep")) }), jsx("div", { className: "space-y-1", children: children })] }));
13
14
  });
14
15
  SidebarNavGroup.displayName = "SidebarNavGroup";
15
16
 
@@ -1,6 +1,6 @@
1
1
  import { jsx } from 'react/jsx-runtime';
2
2
  import React__default from 'react';
3
- import { ChevronRightIcon, ChevronLeftIcon } from '@heroicons/react/24/outline';
3
+ import { ChevronLeftIcon } from '@heroicons/react/24/outline';
4
4
  import { motion } from 'motion/react';
5
5
  import { cn } from '../../../utils/cn.js';
6
6
  import { useSidebarContext } from './SidebarContext.js';
@@ -20,9 +20,7 @@ const SidebarToggle = React__default.forwardRef(({ expandIcon, collapseIcon, cla
20
20
  onClick === null || onClick === void 0 ? void 0 : onClick(e);
21
21
  };
22
22
  const { onAnimationStart, onAnimationEnd, onDrag, onDragStart, onDragEnd, color: _color, ...buttonProps } = props;
23
- return (jsx(Button, { ref: ref, variant: "soft", size: "sm", className: cn("size-8 p-0", className), onClick: handleClick, "aria-label": collapsed ? "Expand sidebar" : "Collapse sidebar", title: collapsed ? "Expand sidebar" : "Collapse sidebar", ...buttonProps, children: jsx(motion.div, { initial: false, animate: { rotate: collapsed ? 180 : 0 }, transition: { duration: 0.2 }, children: collapsed
24
- ? expandIcon || jsx(ChevronRightIcon, { className: "size-4" })
25
- : collapseIcon || jsx(ChevronLeftIcon, { className: "size-4" }) }) }));
23
+ return (jsx(Button, { ref: ref, variant: "ghost", size: "sm", className: cn("size-7 p-0 text-[var(--color-text-muted)] hover:text-[var(--color-text-primary)] hover:bg-[var(--color-background-secondary)]", className), onClick: handleClick, "aria-label": collapsed ? "Expand sidebar" : "Collapse sidebar", title: collapsed ? "Expand sidebar" : "Collapse sidebar", ...buttonProps, children: jsx(motion.div, { initial: false, animate: { rotate: collapsed ? 180 : 0 }, transition: { duration: 0.22, ease: [0.4, 0, 0.2, 1] }, children: jsx(ChevronLeftIcon, { className: "size-[15px]" }) }) }));
26
24
  });
27
25
  SidebarToggle.displayName = "SidebarToggle";
28
26
 
@@ -1,6 +1,7 @@
1
1
  import { jsxs, jsx } from 'react/jsx-runtime';
2
2
  import React__default from 'react';
3
3
  import { cn } from '../../../utils/cn.js';
4
+ import { AnimatePresence, motion } from 'motion/react';
4
5
  import { useSidebarContext } from './SidebarContext.js';
5
6
  import { Avatar } from '../Avatar/Avatar.js';
6
7
  import { Tooltip } from '../Tooltip/Tooltip.js';
@@ -23,12 +24,8 @@ const SidebarUserProfile = React__default.forwardRef(({ name, email, avatar, sta
23
24
  e.preventDefault();
24
25
  e.currentTarget.click();
25
26
  }
26
- }, ...props, children: [avatarElement, !isCollapsedView && (jsxs("div", { className: "flex-1 min-w-0", children: [jsx("div", { className: "text-sm font-medium text-[var(--color-text-primary)] truncate", children: name }), email && (jsx("div", { className: "text-xs text-[var(--color-text-muted)] truncate", children: email }))] }))] }));
27
- // Tooltip when collapsed
28
- if (isCollapsedView) {
29
- return (jsx(Tooltip, { content: name, placement: "right", children: content }));
30
- }
31
- return content;
27
+ }, ...props, children: [avatarElement, jsx(AnimatePresence, { initial: false, children: !isCollapsedView && (jsxs(motion.div, { className: "flex-1 min-w-0", initial: { opacity: 0 }, animate: { opacity: 1 }, exit: { opacity: 0 }, transition: { duration: 0.12, ease: "easeOut" }, children: [jsx("div", { className: "text-sm font-medium text-[var(--color-text-primary)] truncate", children: name }), email && (jsx("div", { className: "text-xs text-[var(--color-text-muted)] truncate", children: email }))] }, "profile-text")) })] }));
28
+ return (jsx(Tooltip, { content: name, placement: "right", disabled: !isCollapsedView, triggerClassName: "block", children: content }));
32
29
  });
33
30
  SidebarUserProfile.displayName = "SidebarUserProfile";
34
31
 
@@ -8,5 +8,6 @@ export { SidebarSubmenu } from "./SidebarSubmenu";
8
8
  export { SidebarToggle } from "./SidebarToggle";
9
9
  export { SidebarMobileTrigger } from "./SidebarMobileTrigger";
10
10
  export { SidebarUserProfile } from "./SidebarUserProfile";
11
+ export { SidebarLogo } from "./SidebarLogo";
11
12
  export { useSidebarContext } from "./SidebarContext";
12
- export type { SidebarProps, SidebarHeaderProps, SidebarContentProps, SidebarFooterProps, SidebarNavProps, SidebarNavGroupProps, SidebarToggleProps, SidebarMobileTriggerProps, SidebarUserProfileProps, SidebarUserStatus, SidebarSide, SidebarVariant, SidebarContextValue, SidebarTheme, SidebarThemeOverrides, } from "./Sidebar.types";
13
+ export type { SidebarProps, SidebarHeaderProps, SidebarContentProps, SidebarFooterProps, SidebarNavProps, SidebarNavGroupProps, SidebarToggleProps, SidebarMobileTriggerProps, SidebarUserProfileProps, SidebarUserStatus, SidebarSide, SidebarVariant, SidebarContextValue, SidebarTheme, SidebarThemeOverrides, SidebarLogoProps, } from "./Sidebar.types";
@@ -10,8 +10,8 @@ const tabsTheme = {
10
10
  triggerStyle: "relative inline-flex items-center justify-center whitespace-nowrap font-semibold transition-all duration-300 cursor-pointer focus:outline-none focus-visible:ring-2 focus-visible:ring-[var(--color-primary)] focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 text-[var(--color-text-muted)] hover:text-[var(--color-text-primary)] data-[state=active]:text-[var(--color-primary)]",
11
11
  // TabsTrigger size variants using CSS variables where applicable
12
12
  triggerSizes: {
13
- sm: "px-2 py-1.5 text-base",
14
- md: "px-2 py-2 text-base",
13
+ sm: "px-2 py-1.5 text-sm",
14
+ md: "px-2 py-2 text-sm",
15
15
  },
16
16
  // TabsBody styles with proper CSS variables
17
17
  bodyStyle: "focus:outline-none focus-visible:ring-2 focus-visible:ring-[var(--color-primary)] focus-visible:ring-offset-2",
@@ -3,8 +3,8 @@ const tagTheme = {
3
3
  "bg-[var(--color-background-surface)] dark:bg-[var(--color-background-secondary)] border border-[var(--color-border)] " +
4
4
  "text-[var(--color-text-primary)]",
5
5
  sizes: {
6
- sm: "text-sm px-2.5 py-0.5",
7
- md: "text-base px-2.5 py-0.5",
6
+ sm: "text-xs px-2.5 py-0.5",
7
+ md: "text-sm px-2.5 py-0.5",
8
8
  },
9
9
  avatarSizes: {
10
10
  sm: "size-4 ml-0.5",
@@ -7,8 +7,8 @@ const toastTheme = {
7
7
  glass: "glass-effect",
8
8
  },
9
9
  iconStyle: "flex-shrink-0",
10
- titleStyle: "text-base text-[var(--color-text-primary)]",
11
- subtitleStyle: "text-base mt-1 text-[var(--color-text-secondary)]",
10
+ titleStyle: "text-sm text-[var(--color-text-primary)]",
11
+ subtitleStyle: "text-sm mt-1 text-[var(--color-text-secondary)]",
12
12
  closeButtonStyle: "flex-shrink-0 size-5 opacity-70 hover:opacity-100 transition-opacity cursor-pointer",
13
13
  containerStyle: "fixed z-50 pointer-events-none",
14
14
  };
@@ -1,6 +1,6 @@
1
1
  import { TooltipProps } from "./Tooltip.types";
2
2
  declare const Tooltip: {
3
- ({ content, children, placement, delay, disabled, className, maxWidth, minWidth, showOnFocus, wrapText, id, theme: themeOverrides, "aria-label": ariaLabel, role, offset, darkMode, }: TooltipProps): import("react/jsx-runtime").JSX.Element;
3
+ ({ content, children, placement, delay, disabled, className, triggerClassName, maxWidth, minWidth, showOnFocus, wrapText, id, theme: themeOverrides, "aria-label": ariaLabel, role, offset, darkMode, }: TooltipProps): import("react/jsx-runtime").JSX.Element;
4
4
  displayName: string;
5
5
  };
6
6
  export { Tooltip };
@@ -37,7 +37,7 @@ const useDarkMode = () => {
37
37
  }, []);
38
38
  return isDark;
39
39
  };
40
- const Tooltip = ({ content, children, placement = "top", delay = 300, disabled = false, className, maxWidth = "360px", minWidth = "fit-content", showOnFocus = true, wrapText = false, id, theme: themeOverrides, "aria-label": ariaLabel, role = "tooltip", offset = 8, darkMode = false, }) => {
40
+ const Tooltip = ({ content, children, placement = "top", delay = 300, disabled = false, className, triggerClassName, maxWidth = "360px", minWidth = "fit-content", showOnFocus = true, wrapText = false, id, theme: themeOverrides, "aria-label": ariaLabel, role = "tooltip", offset = 8, darkMode = false, }) => {
41
41
  const [isVisible, setIsVisible] = useState(false);
42
42
  const tooltipRef = useRef(null);
43
43
  const triggerRef = useRef(null);
@@ -123,7 +123,7 @@ const Tooltip = ({ content, children, placement = "top", delay = 300, disabled =
123
123
  top: `${position.top}px`,
124
124
  left: `${position.left}px`,
125
125
  }, className: cn(theme.baseStyle, widthClasses, className), "aria-hidden": !isVisible, "aria-label": ariaLabel, "aria-live": role === "tooltip" ? "polite" : undefined, variants: shouldReduceMotion ? {} : getTooltipVariants(placement), initial: shouldReduceMotion ? undefined : "initial", animate: shouldReduceMotion ? undefined : "animate", exit: shouldReduceMotion ? undefined : "exit", children: content })) }));
126
- return (jsxs("div", { className: "relative inline-block", ref: triggerRef, ...triggerHandlers, tabIndex: showOnFocus ? 0 : undefined, "aria-describedby": isVisible && id ? id : undefined, children: [children, isClient &&
126
+ return (jsxs("div", { className: cn("relative inline-block", triggerClassName), ref: triggerRef, ...triggerHandlers, tabIndex: showOnFocus ? 0 : undefined, "aria-describedby": isVisible && id ? id : undefined, children: [children, isClient &&
127
127
  createPortal(jsx("div", { className: darkMode || isDarkMode ? "dark" : undefined, children: tooltipContent }), document.body)] }));
128
128
  };
129
129
  // Set display name for dev tools and Storybook
@@ -1,6 +1,6 @@
1
1
  const tooltipTheme = {
2
2
  // Base style for the tooltip - using fixed positioning for portal rendering
3
- baseStyle: "fixed z-[99] rounded-[var(--tooltip-radius)] py-1 px-2 text-sm text-[var(--color-text-primary)] focus:outline-none focus-visible:ring-2 focus-visible:ring-[var(--color-primary)] focus-visible:ring-offset-2 pointer-events-none bg-white/90 backdrop-blur-md outline outline-[var(--color-border)] shadow-lg " +
3
+ baseStyle: "fixed z-[99] rounded-[var(--tooltip-radius)] py-1 px-2 text-xs text-[var(--color-text-primary)] focus:outline-none focus-visible:ring-2 focus-visible:ring-[var(--color-primary)] focus-visible:ring-offset-2 pointer-events-none bg-white/90 backdrop-blur-md outline outline-[var(--color-border)] shadow-lg " +
4
4
  "dark:bg-[var(--color-neutral-800)]/90 dark:outline-[var(--color-border)]/80 dark:border-[var(--color-border)]",
5
5
  };
6
6
 
@@ -38,9 +38,13 @@ export interface TooltipProps {
38
38
  */
39
39
  disabled?: boolean;
40
40
  /**
41
- * Additional classes for the tooltip container
41
+ * Additional classes for the tooltip container (the tooltip bubble)
42
42
  */
43
43
  className?: string;
44
+ /**
45
+ * Additional classes for the trigger wrapper element
46
+ */
47
+ triggerClassName?: string;
44
48
  /**
45
49
  * Max width for the tooltip content
46
50
  * @default "360px"
@@ -1,7 +1,7 @@
1
1
  const treeTheme = {
2
2
  baseStyle: 'flex flex-col w-full',
3
3
  nodeStyle: 'flex items-center py-1 pr-1 rounded-[calc(var(--radius-base)*0.75)] hover:bg-[var(--color-background-secondary)] cursor-pointer transition-colors select-none gap-2',
4
- labelStyle: 'flex-1 text-lg text-[var(--color-text-primary)] truncate',
4
+ labelStyle: 'flex-1 text-base text-[var(--color-text-primary)] truncate',
5
5
  iconStyle: 'flex-shrink-0 text-[var(--color-text-muted)]',
6
6
  expandIconStyle: 'flex-shrink-0 mr-1 text-[var(--color-text-muted)] hover:text-[var(--color-text-primary)] transition-colors cursor-pointer size-4 flex items-center justify-center',
7
7
  indentSize: '1rem',
@@ -46,5 +46,4 @@ export * from "./Sidebar";
46
46
  export * from "./OfflineIndicator";
47
47
  export * from "./ContextMenu";
48
48
  export * from "./Pill";
49
- export * from "./SocialIcon";
50
- export * from "./FileTypeIcon";
49
+ export * from "./Icon";
@@ -100,6 +100,7 @@ export { SidebarSubmenu } from './Sidebar/SidebarSubmenu.js';
100
100
  export { SidebarToggle } from './Sidebar/SidebarToggle.js';
101
101
  export { SidebarMobileTrigger } from './Sidebar/SidebarMobileTrigger.js';
102
102
  export { SidebarUserProfile } from './Sidebar/SidebarUserProfile.js';
103
+ export { SidebarLogo } from './Sidebar/SidebarLogo.js';
103
104
  export { useSidebarContext } from './Sidebar/SidebarContext.js';
104
105
  export { OfflineIndicator } from './OfflineIndicator/OfflineIndicator.js';
105
106
  export { offlineIndicatorTheme } from './OfflineIndicator/OfflineIndicator.theme.js';
@@ -107,8 +108,8 @@ export { ContextMenu } from './ContextMenu/ContextMenu.js';
107
108
  export { contextMenuTheme } from './ContextMenu/ContextMenu.theme.js';
108
109
  export { Pill } from './Pill/Pill.js';
109
110
  export { pillTheme } from './Pill/Pill.theme.js';
110
- export { SocialIcon } from './SocialIcon/SocialIcon.js';
111
- export { FileTypeIcon } from './FileTypeIcon/FileTypeIcon.js';
111
+ export { Icon } from './Icon/Icon.js';
112
+ export { fileTypes } from './Icon/data/fileTypes.js';
112
113
  export { AnimatePresence } from 'motion/react';
113
114
  export { CardBody } from './Card/CardBody.js';
114
115
  export { CardFooter } from './Card/CardFooter.js';
@@ -1,8 +1,8 @@
1
1
  const descriptionListTheme = {
2
2
  baseStyle: "divide-y divide-[var(--color-border)] min-w-0",
3
3
  itemStyle: "px-4 py-3",
4
- termStyle: "text-base/6 font-medium text-[var(--color-text-primary)]",
5
- detailStyle: "mt-1 text-base/6 text-[var(--color-text-secondary)]",
4
+ termStyle: "text-sm/6 font-medium text-[var(--color-text-primary)]",
5
+ detailStyle: "mt-1 text-sm/6 text-[var(--color-text-secondary)]",
6
6
  };
7
7
 
8
8
  export { descriptionListTheme };
@@ -13,7 +13,7 @@ const feedTheme = {
13
13
  timestampStyle: "mt-1 text-xs text-[var(--color-text-muted)]/80 whitespace-nowrap",
14
14
  // Collapse
15
15
  collapseStyle: "relative",
16
- collapseButtonStyle: "flex items-center gap-1.5 text-sm font-medium text-[var(--color-primary)] hover:text-[var(--color-primary-700)] transition-colors cursor-pointer bg-transparent border-none p-0",
16
+ collapseButtonStyle: "flex items-center gap-1.5 text-xs font-medium text-[var(--color-primary)] hover:text-[var(--color-primary-700)] transition-colors cursor-pointer bg-transparent border-none p-0",
17
17
  collapseSvgStyle: "absolute top-0",
18
18
  };
19
19
 
@@ -1,5 +1,5 @@
1
1
  const ganttChartTheme = {
2
- baseStyle: "flex flex-col w-full overflow-hidden text-base",
2
+ baseStyle: "flex flex-col w-full overflow-hidden text-sm",
3
3
  toolbarStyle: "flex flex-wrap items-center justify-between gap-3 px-3 py-2 border-b border-[var(--color-border)] bg-[var(--color-background-secondary)]",
4
4
  tablePanelStyle: "hidden sm:flex flex-col shrink-0 overflow-hidden",
5
5
  chartPanelStyle: "flex flex-col flex-1 min-w-0 overflow-hidden",
@@ -9,7 +9,7 @@ const ganttChartTheme = {
9
9
  tableTaskRowStyle: "flex items-center hover:bg-[var(--color-background-secondary)] transition-colors",
10
10
  tableCellStyle: "px-3 truncate text-[var(--color-text-primary)]",
11
11
  timelineHeaderStyle: "bg-[var(--color-background)] border-b border-[var(--color-border)]",
12
- timelineMonthStyle: "text-sm font-medium text-[var(--color-text-secondary)] px-2 border-b border-[var(--color-border)] flex items-center",
12
+ timelineMonthStyle: "text-xs font-medium text-[var(--color-text-secondary)] px-2 border-b border-[var(--color-border)] flex items-center",
13
13
  timelineDayStyle: "text-[10px] text-[var(--color-text-muted)] flex items-center justify-center",
14
14
  gridLineStyle: "border-r border-[var(--color-border)]/30",
15
15
  weekendStyle: "bg-[var(--color-background-secondary)]/50",
@@ -3,23 +3,23 @@ import { semanticBgColors } from '../../../utils/colorUtils.js';
3
3
  const kpiTheme = {
4
4
  baseStyle: "flex flex-col gap-3",
5
5
  valueSizes: {
6
- sm: "text-2xl font-bold text-[var(--color-text-primary)]",
7
- md: "text-3xl font-bold text-[var(--color-text-primary)]",
8
- lg: "text-4xl font-bold text-[var(--color-text-primary)]",
6
+ sm: "text-xl font-bold text-[var(--color-text-primary)]",
7
+ md: "text-2xl font-bold text-[var(--color-text-primary)]",
8
+ lg: "text-3xl font-bold text-[var(--color-text-primary)]",
9
9
  },
10
10
  labelStyle: "text-[var(--color-text-muted)]",
11
11
  labelSizes: {
12
- sm: "text-sm",
13
- md: "text-base",
14
- lg: "text-lg",
12
+ sm: "text-xs",
13
+ md: "text-sm",
14
+ lg: "text-base",
15
15
  },
16
16
  trendPositive: "text-[var(--color-success)]",
17
17
  trendNegative: "text-[var(--color-danger)]",
18
18
  trendNeutral: "text-[var(--color-text-muted)]",
19
19
  trendSizes: {
20
- sm: "text-sm",
21
- md: "text-base",
22
- lg: "text-lg",
20
+ sm: "text-xs",
21
+ md: "text-sm",
22
+ lg: "text-base",
23
23
  },
24
24
  barFilledColors: {
25
25
  ...semanticBgColors,
@@ -51,25 +51,25 @@ const metricTheme = {
51
51
  container: "", // Padding moved to content section
52
52
  contentPadding: "p-3",
53
53
  iconContainer: "size-10",
54
- label: "text-sm",
55
- value: "text-2xl",
56
- subtitle: "text-sm mt-1",
54
+ label: "text-xs",
55
+ value: "text-xl",
56
+ subtitle: "text-xs mt-1",
57
57
  },
58
58
  md: {
59
59
  container: "", // Padding moved to content section
60
60
  contentPadding: "p-4",
61
61
  iconContainer: "size-14",
62
- label: "text-base",
63
- value: "text-2xl",
64
- subtitle: "text-sm mt-0.5",
62
+ label: "text-sm",
63
+ value: "text-xl",
64
+ subtitle: "text-xs mt-0.5",
65
65
  },
66
66
  lg: {
67
67
  container: "", // Padding moved to content section
68
68
  contentPadding: "p-5",
69
69
  iconContainer: "size-16",
70
- label: "text-lg",
71
- value: "text-3xl",
72
- subtitle: "text-base mt-1",
70
+ label: "text-base",
71
+ value: "text-2xl",
72
+ subtitle: "text-sm mt-1",
73
73
  },
74
74
  },
75
75
  // Common element styles