@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.
- package/dist/components/ai/CodeBlock/CodeBlock.theme.js +2 -2
- package/dist/components/ai/PromptInput/PromptInput.js +139 -7
- package/dist/components/ai/PromptInput/PromptInput.theme.js +3 -3
- package/dist/components/ai/PromptInput/VoiceRecorder.js +84 -0
- package/dist/components/ai/PromptSuggestions/PromptSuggestion.theme.js +1 -1
- package/dist/components/ai/StreamingResponse/StreamingResponse.theme.js +4 -4
- package/dist/components/ai/TokenCounter/TokenCounter.theme.js +6 -6
- package/dist/components/charts/ActivityRings/ActivityRings.theme.js +2 -2
- package/dist/components/charts/DonutChart/DonutChart.theme.js +2 -2
- package/dist/components/charts/DonutChart/MultiSegmentDonutChart.theme.js +1 -1
- package/dist/components/charts/Heatmap/Heatmap.theme.js +1 -1
- package/dist/components/charts/RadarChart/RadarChart.theme.js +2 -2
- package/dist/components/charts/ScatterPlot/ScatterPlot.theme.js +2 -2
- package/dist/components/charts/shared/ChartText/ChartText.theme.js +1 -1
- package/dist/components/charts/shared/ChartTooltip/ChartTooltip.theme.js +4 -4
- package/dist/components/core/Alert/Alert.theme.js +1 -1
- package/dist/components/core/Avatar/Avatar.theme.js +10 -10
- package/dist/components/core/AvatarGroup/AvatarGroup.theme.js +1 -1
- package/dist/components/core/Badge/Badge.js +2 -12
- package/dist/components/core/Badge/Badge.theme.js +2 -2
- package/dist/components/core/Button/Button.theme.js +6 -6
- package/dist/components/core/ButtonGroup/ButtonGroup.theme.js +1 -1
- package/dist/components/core/Calendar/Calendar.theme.js +5 -5
- package/dist/components/core/Card/Card.theme.js +2 -2
- package/dist/components/core/CommandPalette/CommandPalette.theme.js +4 -4
- package/dist/components/core/Drawer/Drawer.animations.js +5 -4
- package/dist/components/core/Drawer/Drawer.theme.js +2 -2
- package/dist/components/core/Dropdown/Dropdown.theme.js +1 -1
- package/dist/components/core/Empty/Empty.theme.js +2 -2
- package/dist/components/core/Icon/Icon.d.ts +3 -0
- package/dist/components/core/Icon/Icon.js +70 -0
- package/dist/components/core/Icon/Icon.theme.d.ts +2 -0
- package/dist/components/core/Icon/Icon.theme.js +19 -0
- package/dist/components/core/Icon/Icon.types.d.ts +32 -0
- package/dist/components/core/{FileTypeIcon → Icon/data}/fileTypes.d.ts +1 -1
- package/dist/components/core/Icon/data/paymentMethods.d.ts +27 -0
- package/dist/components/core/Icon/data/paymentMethods.js +169 -0
- package/dist/components/core/Icon/index.d.ts +4 -0
- package/dist/components/core/Kbd/Kbd.theme.js +2 -2
- package/dist/components/core/MenuItem/MenuItem.theme.js +2 -2
- package/dist/components/core/Message/Message.theme.js +6 -6
- package/dist/components/core/Modal/Modal.animations.js +3 -1
- package/dist/components/core/Modal/Modal.theme.js +2 -2
- package/dist/components/core/Modal/ModalBody.js +7 -8
- package/dist/components/core/NavItem/NavItem.js +16 -6
- package/dist/components/core/NavItem/NavItem.theme.js +2 -2
- package/dist/components/core/OfflineIndicator/OfflineIndicator.theme.js +2 -2
- package/dist/components/core/PageHeading/PageHeading.theme.js +2 -2
- package/dist/components/core/Pagination/Pagination.theme.js +2 -2
- package/dist/components/core/Pill/Pill.theme.js +3 -3
- package/dist/components/core/Progress/Progress.theme.js +2 -2
- package/dist/components/core/Segmented/Segmented.theme.js +3 -3
- package/dist/components/core/Sidebar/Sidebar.d.ts +1 -0
- package/dist/components/core/Sidebar/Sidebar.js +5 -3
- package/dist/components/core/Sidebar/Sidebar.types.d.ts +7 -1
- package/dist/components/core/Sidebar/SidebarContent.js +1 -1
- package/dist/components/core/Sidebar/SidebarFooter.js +1 -1
- package/dist/components/core/Sidebar/SidebarHeader.js +5 -2
- package/dist/components/core/Sidebar/SidebarLogo.d.ts +3 -0
- package/dist/components/core/Sidebar/SidebarLogo.js +17 -0
- package/dist/components/core/Sidebar/SidebarNavGroup.js +2 -1
- package/dist/components/core/Sidebar/SidebarToggle.js +2 -4
- package/dist/components/core/Sidebar/SidebarUserProfile.js +3 -6
- package/dist/components/core/Sidebar/index.d.ts +2 -1
- package/dist/components/core/Tabs/Tabs.theme.js +2 -2
- package/dist/components/core/Tag/Tag.theme.js +2 -2
- package/dist/components/core/Toast/Toast.theme.js +2 -2
- package/dist/components/core/Tooltip/Tooltip.d.ts +1 -1
- package/dist/components/core/Tooltip/Tooltip.js +2 -2
- package/dist/components/core/Tooltip/Tooltip.theme.js +1 -1
- package/dist/components/core/Tooltip/Tooltip.types.d.ts +5 -1
- package/dist/components/core/Tree/Tree.theme.js +1 -1
- package/dist/components/core/index.d.ts +1 -2
- package/dist/components/core/index.js +3 -2
- package/dist/components/data-display/DescriptionList/DescriptionList.theme.js +2 -2
- package/dist/components/data-display/Feed/Feed.theme.js +1 -1
- package/dist/components/data-display/GanttChart/GanttChart.theme.js +2 -2
- package/dist/components/data-display/KPI/KPI.theme.js +9 -9
- package/dist/components/data-display/Metric/Metric.theme.js +9 -9
- package/dist/components/data-display/Table/Table.animations.js +16 -10
- package/dist/components/data-display/Table/Table.filterUtils.js +8 -1
- package/dist/components/data-display/Table/Table.js +10 -14
- package/dist/components/data-display/Table/Table.theme.js +3 -3
- package/dist/components/data-display/Table/Table.types.d.ts +2 -0
- package/dist/components/data-display/Table/TableActions.js +3 -3
- package/dist/components/data-display/Table/TableActionsMenu.js +2 -3
- package/dist/components/data-display/Table/TableCell.js +6 -3
- package/dist/components/data-display/Table/TableDeclarative.js +5 -7
- package/dist/components/data-display/Table/TableHeader.js +5 -2
- package/dist/components/data-display/Table/TablePagination.js +2 -6
- package/dist/components/data-display/Table/TableRow.js +2 -6
- package/dist/components/data-display/Table/index.js +1 -0
- package/dist/components/effects/CustomCursor/CustomCursor.theme.js +1 -1
- package/dist/components/effects/Overlay/Overlay.js +50 -21
- package/dist/components/forms/Checkbox/Checkbox.theme.js +3 -3
- package/dist/components/forms/ColorPicker/ColorPicker.d.ts +5 -9
- package/dist/components/forms/ColorPicker/ColorPicker.js +126 -22
- package/dist/components/forms/ColorPicker/ColorPicker.theme.js +9 -6
- package/dist/components/forms/ColorPicker/ColorPicker.types.d.ts +99 -0
- package/dist/components/forms/ColorPicker/ColorPicker2DCanvas.js +43 -6
- package/dist/components/forms/ColorPicker/ColorPickerBody.js +1 -1
- package/dist/components/forms/ColorPicker/ColorPickerContext.d.ts +4 -0
- package/dist/components/forms/ColorPicker/ColorPickerContext.js +12 -0
- package/dist/components/forms/ColorPicker/ColorPickerEyeDropper.js +1 -1
- package/dist/components/forms/ColorPicker/ColorPickerFormatSelector.js +1 -1
- package/dist/components/forms/ColorPicker/ColorPickerGradient.d.ts +7 -0
- package/dist/components/forms/ColorPicker/ColorPickerGradient.js +186 -0
- package/dist/components/forms/ColorPicker/ColorPickerHeader.d.ts +14 -0
- package/dist/components/forms/ColorPicker/ColorPickerHeader.js +31 -0
- package/dist/components/forms/ColorPicker/ColorPickerImage.d.ts +6 -0
- package/dist/components/forms/ColorPicker/ColorPickerImage.js +154 -0
- package/dist/components/forms/ColorPicker/ColorPickerInput.d.ts +0 -4
- package/dist/components/forms/ColorPicker/ColorPickerInput.js +53 -61
- package/dist/components/forms/ColorPicker/ColorPickerPresets.js +13 -12
- package/dist/components/forms/ColorPicker/ColorPickerSavedColors.d.ts +3 -0
- package/dist/components/forms/ColorPicker/ColorPickerSavedColors.js +69 -0
- package/dist/components/forms/ColorPicker/ColorPickerSliders.d.ts +1 -2
- package/dist/components/forms/ColorPicker/ColorPickerSliders.js +84 -23
- package/dist/components/forms/ColorPicker/ColorPickerSwatch.d.ts +1 -1
- package/dist/components/forms/ColorPicker/ColorPickerSwatch.js +10 -9
- package/dist/components/forms/ColorPicker/ColorPickerTrigger.js +7 -3
- package/dist/components/forms/ColorPicker/index.d.ts +8 -2
- package/dist/components/forms/CronInput/CronInput.theme.js +8 -8
- package/dist/components/forms/DatePicker/DatePicker.theme.js +1 -1
- package/dist/components/forms/DateRangePicker/DateRangePicker.theme.js +3 -3
- package/dist/components/forms/FileUpload/FileUpload.js +85 -0
- package/dist/components/forms/FileUpload/FileUpload.theme.js +4 -4
- package/dist/components/forms/FileUpload/FileUploadProgress.js +3 -3
- package/dist/components/forms/FileUpload/FileUploadProgress.theme.js +2 -2
- package/dist/components/forms/FormLabel/FormLabel.theme.js +1 -1
- package/dist/components/forms/Input/Input.js +3 -3
- package/dist/components/forms/Input/Input.theme.js +1 -1
- package/dist/components/forms/Input/Input.types.d.ts +2 -0
- package/dist/components/forms/InputCounter/InputCounter.theme.js +1 -1
- package/dist/components/forms/InputOTP/InputOTP.theme.js +1 -1
- package/dist/components/forms/Mention/Mention.theme.js +3 -3
- package/dist/components/forms/Radio/Radio.theme.js +3 -3
- package/dist/components/forms/RichTextEditor/RichTextEditor.theme.js +1 -1
- package/dist/components/forms/Select/Select.theme.js +1 -1
- package/dist/components/forms/SelectableCard/SelectableCard.js +42 -27
- package/dist/components/forms/SelectableCard/SelectableCard.theme.js +15 -25
- package/dist/components/forms/SelectableCard/SelectableCard.types.d.ts +16 -3
- package/dist/components/forms/SelectableCard/SelectableCardContext.d.ts +1 -0
- package/dist/components/forms/SelectableCard/SelectableCardContext.js +4 -7
- package/dist/components/forms/SelectableCard/SelectableCardGroup.js +31 -10
- package/dist/components/forms/SelectableCard/index.d.ts +1 -1
- package/dist/components/forms/Signature/Signature.theme.js +1 -1
- package/dist/components/forms/Slider/Slider.theme.js +3 -3
- package/dist/components/forms/Switch/Switch.theme.js +1 -1
- package/dist/components/forms/TimePicker/TimePicker.theme.js +2 -2
- package/dist/components/forms/TimePicker/TimePickerContent.js +86 -1
- package/dist/components/forms/forms.theme.js +6 -6
- package/dist/components/forms/index.js +91 -1
- package/dist/components/layout/FormLayout/FormLayout.js +87 -1
- package/dist/components/layout/FormLayout/FormLayout.theme.js +2 -2
- package/dist/hooks/useOverlay.d.ts +2 -0
- package/dist/hooks/useOverlay.js +34 -4
- package/dist/index.js +228 -216
- package/dist/styles.css +1 -1
- package/package.json +3 -1
- package/src/global.scss +1 -1
- package/dist/bg/bg/1.jpg +0 -0
- package/dist/bg/bg/10.jpg +0 -0
- package/dist/bg/bg/11.jpg +0 -0
- package/dist/bg/bg/14.jpg +0 -0
- package/dist/bg/bg/15.jpg +0 -0
- package/dist/bg/bg/16.jpg +0 -0
- package/dist/bg/bg/17.jpg +0 -0
- package/dist/bg/bg/18.jpg +0 -0
- package/dist/bg/bg/19.jpg +0 -0
- package/dist/bg/bg/2.jpg +0 -0
- package/dist/bg/bg/20.jpg +0 -0
- package/dist/bg/bg/21.jpg +0 -0
- package/dist/bg/bg/22.jpg +0 -0
- package/dist/bg/bg/23.jpg +0 -0
- package/dist/bg/bg/24.jpg +0 -0
- package/dist/bg/bg/3.jpg +0 -0
- package/dist/bg/bg/4.jpg +0 -0
- package/dist/bg/bg/5.jpg +0 -0
- package/dist/bg/bg/6.jpg +0 -0
- package/dist/bg/bg/7.jpg +0 -0
- package/dist/bg/bg/8.jpg +0 -0
- package/dist/bg/bg/9.jpg +0 -0
- package/dist/components/core/FileTypeIcon/FileTypeIcon.d.ts +0 -3
- package/dist/components/core/FileTypeIcon/FileTypeIcon.js +0 -33
- package/dist/components/core/FileTypeIcon/FileTypeIcon.theme.d.ts +0 -2
- package/dist/components/core/FileTypeIcon/FileTypeIcon.theme.js +0 -12
- package/dist/components/core/FileTypeIcon/FileTypeIcon.types.d.ts +0 -19
- package/dist/components/core/FileTypeIcon/index.d.ts +0 -2
- package/dist/components/core/SocialIcon/SocialIcon.d.ts +0 -3
- package/dist/components/core/SocialIcon/SocialIcon.js +0 -30
- package/dist/components/core/SocialIcon/SocialIcon.theme.d.ts +0 -2
- package/dist/components/core/SocialIcon/SocialIcon.theme.js +0 -12
- package/dist/components/core/SocialIcon/SocialIcon.types.d.ts +0 -18
- package/dist/components/core/SocialIcon/index.d.ts +0 -2
- /package/dist/components/core/{FileTypeIcon → Icon/data}/fileTypes.js +0 -0
- /package/dist/components/core/{SocialIcon → Icon/data}/platforms.d.ts +0 -0
- /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 }))] })),
|
|
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
|
-
//
|
|
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 (
|
|
165
|
-
return
|
|
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-
|
|
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
|
|
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-
|
|
19
|
-
queueCount: "text-
|
|
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-
|
|
5
|
-
subtitleStyle: "text-
|
|
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-
|
|
30
|
-
md: "size-10 min-w-[2.5rem] text-
|
|
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-
|
|
31
|
-
md: "text-
|
|
32
|
-
lg: "text-
|
|
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-
|
|
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-
|
|
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-
|
|
29
|
-
md: "text-
|
|
30
|
-
lg: "text-
|
|
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: "
|
|
19
|
-
|
|
20
|
-
|
|
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-
|
|
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-
|
|
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
|
-
|
|
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,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-
|
|
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 {
|
|
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: "
|
|
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(
|
|
27
|
-
|
|
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-
|
|
14
|
-
md: "px-2 py-2 text-
|
|
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-
|
|
7
|
-
md: "text-
|
|
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-
|
|
11
|
-
subtitleStyle: "text-
|
|
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-
|
|
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-
|
|
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',
|
|
@@ -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 {
|
|
111
|
-
export {
|
|
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-
|
|
5
|
-
detailStyle: "mt-1 text-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
7
|
-
md: "text-
|
|
8
|
-
lg: "text-
|
|
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-
|
|
13
|
-
md: "text-
|
|
14
|
-
lg: "text-
|
|
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-
|
|
21
|
-
md: "text-
|
|
22
|
-
lg: "text-
|
|
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-
|
|
55
|
-
value: "text-
|
|
56
|
-
subtitle: "text-
|
|
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-
|
|
63
|
-
value: "text-
|
|
64
|
-
subtitle: "text-
|
|
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-
|
|
71
|
-
value: "text-
|
|
72
|
-
subtitle: "text-
|
|
70
|
+
label: "text-base",
|
|
71
|
+
value: "text-2xl",
|
|
72
|
+
subtitle: "text-sm mt-1",
|
|
73
73
|
},
|
|
74
74
|
},
|
|
75
75
|
// Common element styles
|