@flikk/ui 1.0.0-beta.25 → 1.0.0-beta.27
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 +4 -0
- package/dist/components/ai/PromptInput/VoiceRecorder.js +4 -0
- package/dist/components/ai/StreamingResponse/MarkdownRenderer.js +1 -1
- package/dist/components/ai/TokenCounter/TokenCounter.theme.js +1 -1
- package/dist/components/charts/BarChart/BarChart.js +2 -2
- package/dist/components/charts/StackedBarChart/StackedBarChart.js +1 -1
- package/dist/components/charts/shared/BarRenderer/BarRenderer.js +2 -2
- package/dist/components/core/Breadcrumbs/Breadcrumbs.theme.js +1 -1
- package/dist/components/core/Button/Button.js +1 -1
- package/dist/components/core/Button/Button.theme.js +5 -5
- package/dist/components/core/Calendar/Calendar.theme.js +1 -1
- package/dist/components/core/Calendar/CalendarMini/CalendarMini.theme.js +1 -1
- package/dist/components/core/CommandPalette/CommandItem.js +4 -5
- package/dist/components/core/CommandPalette/CommandPalette.js +1 -1
- package/dist/components/core/CommandPalette/CommandPalette.theme.js +11 -13
- package/dist/components/core/CommandPalette/CommandPalette.types.d.ts +0 -2
- package/dist/components/core/ContextMenu/ContextMenu.theme.js +13 -14
- package/dist/components/core/DotSeparator/DotSeparator.d.ts +3 -0
- package/dist/components/core/DotSeparator/DotSeparator.js +19 -0
- package/dist/components/core/DotSeparator/DotSeparator.theme.d.ts +2 -0
- package/dist/components/core/DotSeparator/DotSeparator.theme.js +10 -0
- package/dist/components/core/DotSeparator/DotSeparator.types.d.ts +25 -0
- package/dist/components/core/DotSeparator/index.d.ts +3 -0
- package/dist/components/core/Drawer/Drawer.theme.js +2 -2
- package/dist/components/core/Dropdown/Dropdown.theme.js +4 -5
- package/dist/components/core/Dropdown/DropdownItem.js +1 -1
- package/dist/components/core/Dropdown/DropdownMenu.js +1 -1
- package/dist/components/core/Empty/Empty.js +1 -1
- package/dist/components/core/ImagePlaceholder/ImagePlaceholder.d.ts +14 -0
- package/dist/components/core/ImagePlaceholder/ImagePlaceholder.js +28 -0
- package/dist/components/core/ImagePlaceholder/ImagePlaceholder.theme.d.ts +6 -0
- package/dist/components/core/ImagePlaceholder/ImagePlaceholder.theme.js +8 -0
- package/dist/components/core/ImagePlaceholder/ImagePlaceholder.types.d.ts +32 -0
- package/dist/components/core/ImagePlaceholder/index.d.ts +2 -0
- package/dist/components/core/MenuItem/MenuItem.js +5 -2
- package/dist/components/core/MenuItem/MenuItem.theme.d.ts +6 -0
- package/dist/components/core/MenuItem/MenuItem.theme.js +19 -16
- package/dist/components/core/MenuItem/MenuItem.types.d.ts +2 -0
- package/dist/components/core/Message/Message.theme.js +1 -1
- package/dist/components/core/Modal/Modal.theme.js +1 -1
- package/dist/components/core/NavItem/NavItem.d.ts +1 -1
- package/dist/components/core/NavItem/NavItem.js +187 -68
- package/dist/components/core/NavItem/NavItem.theme.js +31 -12
- package/dist/components/core/NavItem/NavItem.types.d.ts +17 -39
- package/dist/components/core/Pagination/Pagination.theme.js +3 -3
- package/dist/components/core/Popover/Popover.theme.js +1 -1
- package/dist/components/core/Popover/Popover.types.d.ts +6 -2
- package/dist/components/core/Popover/PopoverBody.js +10 -3
- package/dist/components/core/Progress/Progress.theme.js +1 -1
- package/dist/components/core/ScrollArea/ScrollArea.js +2 -2
- package/dist/components/core/ScrollArea/ScrollArea.theme.js +1 -1
- package/dist/components/core/Segmented/Segmented.js +8 -6
- package/dist/components/core/Segmented/Segmented.theme.js +3 -3
- package/dist/components/core/Sidebar/Sidebar.d.ts +3 -1
- package/dist/components/core/Sidebar/Sidebar.js +53 -16
- package/dist/components/core/Sidebar/Sidebar.theme.js +5 -7
- package/dist/components/core/Sidebar/Sidebar.types.d.ts +125 -8
- package/dist/components/core/Sidebar/SidebarCard.d.ts +25 -0
- package/dist/components/core/Sidebar/SidebarCard.js +68 -0
- package/dist/components/core/Sidebar/SidebarCard.theme.d.ts +8 -0
- package/dist/components/core/Sidebar/SidebarCard.theme.js +18 -0
- package/dist/components/core/Sidebar/SidebarContent.js +10 -6
- package/dist/components/core/Sidebar/SidebarContext.d.ts +17 -16
- package/dist/components/core/Sidebar/SidebarContext.js +43 -20
- package/dist/components/core/Sidebar/SidebarFooter.js +4 -6
- package/dist/components/core/Sidebar/SidebarHeader.js +12 -9
- package/dist/components/core/Sidebar/SidebarLogo.js +39 -8
- package/dist/components/core/Sidebar/SidebarNav.js +4 -3
- package/dist/components/core/Sidebar/SidebarNavGroup.js +4 -7
- package/dist/components/core/Sidebar/SidebarSearch.d.ts +22 -0
- package/dist/components/core/Sidebar/SidebarSearch.js +135 -0
- package/dist/components/core/Sidebar/SidebarToggle.js +6 -1
- package/dist/components/core/Sidebar/SidebarUserProfile.js +33 -17
- package/dist/components/core/Sidebar/index.d.ts +4 -3
- package/dist/components/core/Skeleton/Skeleton.theme.js +1 -1
- package/dist/components/core/Spinner/Spinner.theme.js +1 -1
- package/dist/components/core/Tabs/Tabs.js +6 -1
- package/dist/components/core/Tabs/Tabs.types.d.ts +2 -0
- package/dist/components/core/Tabs/TabsBody.js +5 -3
- package/dist/components/core/Tag/Tag.js +29 -5
- package/dist/components/core/Tag/Tag.theme.js +14 -9
- package/dist/components/core/Tag/Tag.types.d.ts +7 -0
- package/dist/components/core/Tooltip/Tooltip.js +1 -1
- package/dist/components/core/Tooltip/Tooltip.theme.js +1 -2
- package/dist/components/core/index.d.ts +2 -0
- package/dist/components/core/index.js +6 -2
- package/dist/components/data-display/GanttChart/GanttChart.d.ts +1 -1
- package/dist/components/data-display/GanttChart/GanttChart.js +31 -4
- package/dist/components/data-display/GanttChart/GanttChart.theme.js +19 -17
- package/dist/components/data-display/GanttChart/GanttChart.types.d.ts +19 -0
- package/dist/components/data-display/GanttChart/GanttChart.utils.js +1 -1
- package/dist/components/data-display/GanttChart/GanttChartPanel.d.ts +1 -1
- package/dist/components/data-display/GanttChart/GanttChartPanel.js +3 -3
- package/dist/components/data-display/GanttChart/GanttDependencyArrows.js +7 -4
- package/dist/components/data-display/GanttChart/GanttMilestone.js +5 -5
- package/dist/components/data-display/GanttChart/GanttTableGroupRow.js +1 -1
- package/dist/components/data-display/GanttChart/GanttTablePanel.js +1 -1
- package/dist/components/data-display/GanttChart/GanttTableTaskRow.js +2 -2
- package/dist/components/data-display/GanttChart/GanttTaskBar.js +37 -16
- package/dist/components/data-display/GanttChart/GanttTimelineGrid.js +2 -1
- package/dist/components/data-display/GanttChart/GanttTimelineHeader.js +35 -11
- package/dist/components/data-display/GanttChart/GanttToolbar.js +2 -2
- package/dist/components/data-display/GanttChart/hooks/useGanttDrag.js +3 -2
- package/dist/components/data-display/GanttChart/index.d.ts +1 -1
- package/dist/components/data-display/KPI/KPI.js +13 -3
- package/dist/components/data-display/KPI/KPI.theme.js +3 -3
- package/dist/components/data-display/Metric/Metric.theme.js +3 -3
- package/dist/components/data-display/Table/Table.js +4 -3
- package/dist/components/data-display/Table/Table.theme.js +14 -6
- package/dist/components/data-display/Table/Table.types.d.ts +15 -0
- package/dist/components/data-display/Table/TableColumnManager.js +1 -1
- package/dist/components/data-display/Table/index.d.ts +2 -2
- package/dist/components/effects/Aurora/Aurora.d.ts +6 -17
- package/dist/components/effects/Aurora/Aurora.js +310 -105
- package/dist/components/effects/Aurora/Aurora.types.d.ts +6 -0
- package/dist/components/effects/InteractiveCharacters/InteractiveCharacters.js +3 -3
- package/dist/components/effects/InteractiveCharacters/characters/BlobCharacter.js +13 -4
- package/dist/components/effects/InteractiveCharacters/characters/SmallCharacter.js +13 -4
- package/dist/components/effects/InteractiveCharacters/characters/TallCharacter.js +14 -4
- package/dist/components/effects/MorphingText/MorphingText.js +40 -7
- package/dist/components/effects/StripePattern/StripePattern.d.ts +18 -0
- package/dist/components/effects/StripePattern/StripePattern.js +54 -0
- package/dist/components/effects/StripePattern/StripePattern.types.d.ts +53 -0
- package/dist/components/effects/StripePattern/index.d.ts +2 -0
- package/dist/components/effects/index.d.ts +2 -0
- package/dist/components/effects/index.js +1 -0
- package/dist/components/forms/Checkbox/Checkbox.theme.js +1 -1
- package/dist/components/forms/Combobox/Combobox.js +1 -1
- package/dist/components/forms/Combobox/Combobox.theme.js +2 -4
- package/dist/components/forms/CronInput/CronInput.js +1 -1
- package/dist/components/forms/CronInput/CronInput.theme.js +22 -31
- package/dist/components/forms/DatePicker/DatePicker.theme.js +11 -18
- package/dist/components/forms/DatePicker/DatePickerTrigger.js +1 -1
- package/dist/components/forms/DateRangePicker/DateRangePicker.theme.js +7 -14
- package/dist/components/forms/DateRangePicker/DateRangePickerTrigger.js +1 -1
- package/dist/components/forms/FileUpload/FileUpload.animations.d.ts +29 -0
- package/dist/components/forms/FileUpload/FileUpload.animations.js +19 -0
- package/dist/components/forms/FileUpload/FileUpload.js +88 -49
- package/dist/components/forms/FileUpload/FileUpload.theme.d.ts +2 -10
- package/dist/components/forms/FileUpload/FileUpload.theme.js +16 -30
- package/dist/components/forms/FileUpload/FileUpload.types.d.ts +26 -10
- package/dist/components/forms/FileUpload/FileUploadProgress.js +27 -20
- package/dist/components/forms/FileUpload/FileUploadProgress.theme.js +2 -2
- package/dist/components/forms/Input/Input.theme.js +16 -15
- package/dist/components/forms/InputCounter/InputCounter.theme.js +1 -1
- package/dist/components/forms/Mention/Mention.js +152 -57
- package/dist/components/forms/Mention/Mention.theme.js +16 -23
- package/dist/components/forms/Mention/Mention.types.d.ts +12 -12
- package/dist/components/forms/Mention/Mention.utils.js +32 -4
- package/dist/components/forms/Radio/Radio.theme.js +1 -1
- package/dist/components/forms/RichTextEditor/RichTextEditor.d.ts +18 -0
- package/dist/components/forms/RichTextEditor/RichTextEditor.js +1231 -236
- package/dist/components/forms/RichTextEditor/RichTextEditor.theme.d.ts +53 -1
- package/dist/components/forms/RichTextEditor/RichTextEditor.theme.js +99 -25
- package/dist/components/forms/RichTextEditor/RichTextEditor.types.d.ts +42 -3
- package/dist/components/forms/RichTextEditor/index.d.ts +2 -2
- package/dist/components/forms/Select/Select.js +2 -2
- package/dist/components/forms/Select/Select.theme.js +3 -3
- package/dist/components/forms/Slider/Slider.theme.js +1 -1
- 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 +4 -0
- package/dist/components/forms/TimePicker/TimePickerTrigger.js +1 -1
- package/dist/components/forms/forms.theme.js +24 -19
- package/dist/components/forms/index.js +4 -0
- package/dist/components/layout/AppShell/AppShell.d.ts +10 -0
- package/dist/components/layout/AppShell/AppShell.js +84 -0
- package/dist/components/layout/AppShell/AppShell.theme.d.ts +3 -0
- package/dist/components/layout/AppShell/AppShell.theme.js +42 -0
- package/dist/components/layout/AppShell/AppShell.types.d.ts +127 -0
- package/dist/components/layout/AppShell/AppShellContext.d.ts +14 -0
- package/dist/components/layout/AppShell/AppShellContext.js +19 -0
- package/dist/components/layout/AppShell/AppShellFooter.d.ts +3 -0
- package/dist/components/layout/AppShell/AppShellFooter.js +12 -0
- package/dist/components/layout/AppShell/AppShellHeader.d.ts +3 -0
- package/dist/components/layout/AppShell/AppShellHeader.js +12 -0
- package/dist/components/layout/AppShell/AppShellMain.d.ts +3 -0
- package/dist/components/layout/AppShell/AppShellMain.js +19 -0
- package/dist/components/layout/AppShell/AppShellRightPanel.d.ts +3 -0
- package/dist/components/layout/AppShell/AppShellRightPanel.js +16 -0
- package/dist/components/layout/AppShell/AppShellSidebar.d.ts +3 -0
- package/dist/components/layout/AppShell/AppShellSidebar.js +16 -0
- package/dist/components/layout/AppShell/AppShellTopbar.d.ts +3 -0
- package/dist/components/layout/AppShell/AppShellTopbar.js +12 -0
- package/dist/components/layout/AppShell/index.d.ts +3 -0
- package/dist/components/layout/FormLayout/FormLayout.js +9 -4
- package/dist/components/layout/FormLayout/FormLayout.types.d.ts +3 -3
- package/dist/components/layout/FormLayout/FormLayoutSection.js +6 -1
- package/dist/components/layout/PageLayout/PageLayout.d.ts +2 -2
- package/dist/components/layout/PageLayout/PageLayout.js +23 -5
- package/dist/components/layout/PageLayout/PageLayout.theme.d.ts +2 -1
- package/dist/components/layout/PageLayout/PageLayout.theme.js +35 -6
- package/dist/components/layout/PageLayout/PageLayout.types.d.ts +45 -0
- package/dist/components/layout/PageLayout/PageLayoutContent.js +6 -4
- package/dist/components/layout/PageLayout/PageLayoutHeader.js +3 -3
- package/dist/components/layout/PageLayout/PageLayoutSidebar.js +5 -3
- package/dist/components/layout/PageLayout/index.d.ts +1 -1
- package/dist/components/layout/index.d.ts +1 -0
- package/dist/components/layout/index.js +2 -0
- package/dist/hooks/useSelectPortal.d.ts +10 -2
- package/dist/hooks/useSelectPortal.js +45 -24
- package/dist/index.js +8 -2
- package/dist/registry.json +10021 -0
- package/dist/styles.css +1 -1
- package/dist/utils/dateUtils.js +11 -1
- package/package.json +4 -2
- package/src/global.scss +29 -8
- package/src/styles/theme.css +174 -100
- package/dist/components/core/Sidebar/SidebarSubmenu.d.ts +0 -7
- package/dist/components/core/Sidebar/SidebarSubmenu.js +0 -12
|
@@ -10,24 +10,22 @@ export interface NavItemSubmenuItem {
|
|
|
10
10
|
active?: boolean;
|
|
11
11
|
/** Whether this sub-item is disabled */
|
|
12
12
|
isDisabled?: boolean;
|
|
13
|
-
/** Badge text/number on the sub-item */
|
|
14
|
-
badge?: string | number;
|
|
15
13
|
/** Notification count/dot on the sub-item */
|
|
16
14
|
notification?: number | boolean;
|
|
17
15
|
/** Start content (icon) for the sub-item */
|
|
18
16
|
startContent?: ReactNode;
|
|
19
17
|
}
|
|
20
|
-
export interface NavItemProps extends React.HTMLAttributes<
|
|
18
|
+
export interface NavItemProps extends React.HTMLAttributes<HTMLElement> {
|
|
21
19
|
/**
|
|
22
20
|
* Content of the navigation item
|
|
23
21
|
*/
|
|
24
22
|
children: ReactNode;
|
|
25
23
|
/**
|
|
26
|
-
* Start content (icon)
|
|
24
|
+
* Start content (icon)
|
|
27
25
|
*/
|
|
28
26
|
startContent?: ReactNode;
|
|
29
27
|
/**
|
|
30
|
-
* End content (badge/arrow)
|
|
28
|
+
* End content (badge/arrow)
|
|
31
29
|
*/
|
|
32
30
|
endContent?: ReactNode;
|
|
33
31
|
/**
|
|
@@ -38,16 +36,6 @@ export interface NavItemProps extends React.HTMLAttributes<HTMLDivElement> {
|
|
|
38
36
|
* Keyboard shortcut (optional)
|
|
39
37
|
*/
|
|
40
38
|
shortcut?: string;
|
|
41
|
-
/**
|
|
42
|
-
* Legacy icon prop (mapped to startContent)
|
|
43
|
-
* @deprecated Use startContent instead
|
|
44
|
-
*/
|
|
45
|
-
icon?: ReactNode;
|
|
46
|
-
/**
|
|
47
|
-
* Legacy badge prop (mapped to endContent)
|
|
48
|
-
* @deprecated Use endContent instead
|
|
49
|
-
*/
|
|
50
|
-
badge?: string | number;
|
|
51
39
|
/**
|
|
52
40
|
* Notification indicator. Pass a number for a count badge, or true for a dot.
|
|
53
41
|
*/
|
|
@@ -70,15 +58,6 @@ export interface NavItemProps extends React.HTMLAttributes<HTMLDivElement> {
|
|
|
70
58
|
* @default false
|
|
71
59
|
*/
|
|
72
60
|
isDisabled?: boolean;
|
|
73
|
-
/**
|
|
74
|
-
* Alias for isDisabled
|
|
75
|
-
* @deprecated Use isDisabled
|
|
76
|
-
*/
|
|
77
|
-
disabled?: boolean;
|
|
78
|
-
/**
|
|
79
|
-
* Whether the item represents a danger action
|
|
80
|
-
*/
|
|
81
|
-
isDanger?: boolean;
|
|
82
61
|
/**
|
|
83
62
|
* Whether the item has a submenu (manual mode).
|
|
84
63
|
* If `items` is provided, this is set automatically.
|
|
@@ -128,14 +107,14 @@ export interface NavItemTheme {
|
|
|
128
107
|
default: string;
|
|
129
108
|
active: string;
|
|
130
109
|
disabled: string;
|
|
131
|
-
hover: string;
|
|
132
110
|
};
|
|
133
|
-
iconStates
|
|
134
|
-
default
|
|
135
|
-
active
|
|
136
|
-
disabled
|
|
137
|
-
hover?: string;
|
|
111
|
+
iconStates: {
|
|
112
|
+
default: string;
|
|
113
|
+
active: string;
|
|
114
|
+
disabled: string;
|
|
138
115
|
};
|
|
116
|
+
/** Keyboard focus-visible ring */
|
|
117
|
+
focusStyle: string;
|
|
139
118
|
levels: {
|
|
140
119
|
0: string;
|
|
141
120
|
1: string;
|
|
@@ -145,10 +124,10 @@ export interface NavItemTheme {
|
|
|
145
124
|
container: string;
|
|
146
125
|
icon: string;
|
|
147
126
|
};
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
127
|
+
density: {
|
|
128
|
+
compact: string;
|
|
129
|
+
};
|
|
130
|
+
notificationDot: string;
|
|
152
131
|
}
|
|
153
132
|
export interface NavItemThemeOverrides {
|
|
154
133
|
baseStyle?: string;
|
|
@@ -158,14 +137,13 @@ export interface NavItemThemeOverrides {
|
|
|
158
137
|
default: string;
|
|
159
138
|
active: string;
|
|
160
139
|
disabled: string;
|
|
161
|
-
hover: string;
|
|
162
140
|
}>;
|
|
163
141
|
iconStates?: Partial<{
|
|
164
142
|
default: string;
|
|
165
143
|
active: string;
|
|
166
144
|
disabled: string;
|
|
167
|
-
hover: string;
|
|
168
145
|
}>;
|
|
146
|
+
focusStyle?: string;
|
|
169
147
|
levels?: Partial<{
|
|
170
148
|
0: string;
|
|
171
149
|
1: string;
|
|
@@ -175,8 +153,8 @@ export interface NavItemThemeOverrides {
|
|
|
175
153
|
container: string;
|
|
176
154
|
icon: string;
|
|
177
155
|
}>;
|
|
178
|
-
|
|
156
|
+
density?: Partial<{
|
|
157
|
+
compact: string;
|
|
158
|
+
}>;
|
|
179
159
|
notificationDot?: string;
|
|
180
|
-
notificationBadge?: string;
|
|
181
|
-
danger?: string;
|
|
182
160
|
}
|
|
@@ -13,15 +13,15 @@ const paginationTheme = {
|
|
|
13
13
|
// Base state - light
|
|
14
14
|
"cursor-pointer bg-white border border-transparent text-[var(--color-text-muted)] " +
|
|
15
15
|
// Base state - dark
|
|
16
|
-
"dark:bg-
|
|
16
|
+
"dark:bg-transparent dark:text-[var(--color-text-secondary)] dark:border-transparent " +
|
|
17
17
|
// Hover state - light
|
|
18
18
|
"hover:text-[var(--color-text-primary)] hover:bg-[var(--color-background-secondary)] hover:border-[var(--color-border)] " +
|
|
19
19
|
// Hover state - dark
|
|
20
|
-
"dark:hover:bg-[var(--color-
|
|
20
|
+
"dark:hover:bg-[var(--color-surface-hover)] dark:hover:text-[var(--color-text-primary)] dark:hover:border-[var(--color-border)]/0 " +
|
|
21
21
|
// Active state - light
|
|
22
22
|
"data-[active=true]:bg-white data-[active=true]:border-[var(--color-border)] data-[active=true]:text-[var(--color-text-primary)] " +
|
|
23
23
|
// Active state - dark (uses primary color accent)
|
|
24
|
-
"dark:data-[active=true]:bg-[var(--color-
|
|
24
|
+
"dark:data-[active=true]:bg-[var(--color-neutral-800)] dark:data-[active=true]:border-none dark:data-[active=true]:text-[var(--color-text-primary)] " +
|
|
25
25
|
// Disabled state
|
|
26
26
|
"data-[disabled=true]:opacity-50 data-[disabled=true]:cursor-not-allowed data-[disabled=true]:pointer-events-none",
|
|
27
27
|
// Unified item sizes
|
|
@@ -5,7 +5,7 @@ const popoverTheme = {
|
|
|
5
5
|
// Base styles for the popover
|
|
6
6
|
baseStyle: "z-50 outline-none",
|
|
7
7
|
// Body styles
|
|
8
|
-
bodyStyle: "bg-[var(--color-surface)] border border-[var(--color-border)] rounded-[var(--popover-radius)] shadow-real-xl p-4 max-w-[min(24rem,calc(100vw-2rem))] dark:bg-[var(--color-
|
|
8
|
+
bodyStyle: "bg-[var(--color-surface-overlay)] border border-[var(--color-border)] rounded-[var(--popover-radius)] shadow-real-xl p-4 max-w-[min(24rem,calc(100vw-2rem))] dark:bg-[var(--color-surface-overlay)] ",
|
|
9
9
|
};
|
|
10
10
|
|
|
11
11
|
export { popoverTheme };
|
|
@@ -48,8 +48,12 @@ export interface PopoverBodyProps extends React.HTMLAttributes<HTMLDivElement> {
|
|
|
48
48
|
children: ReactNode;
|
|
49
49
|
animation?: boolean;
|
|
50
50
|
portal?: boolean;
|
|
51
|
-
/**
|
|
52
|
-
*
|
|
51
|
+
/** Cap the body to the viewport-available height (space below/above the
|
|
52
|
+
* trigger, computed by the positioning hook; falls back to 400px) and add
|
|
53
|
+
* `overflow-y-auto`, so tall content scrolls inside the popover instead of
|
|
54
|
+
* extending past the viewport unreachably. `max-height` + `auto` means short
|
|
55
|
+
* popovers show no scrollbar. Set `false` to opt out (uncapped, may overflow).
|
|
56
|
+
* @default true */
|
|
53
57
|
scrollable?: boolean;
|
|
54
58
|
/** Custom max-height when scrollable is true (e.g. "300px", "20rem").
|
|
55
59
|
* Overrides the default viewport-aware height. */
|
|
@@ -26,7 +26,7 @@ const overlayContentAnimations = {
|
|
|
26
26
|
/**
|
|
27
27
|
* PopoverBody component displays the body/content of the popover
|
|
28
28
|
*/
|
|
29
|
-
const PopoverBody = React__default.forwardRef(({ children, className, animation = true, portal = true, scrollable =
|
|
29
|
+
const PopoverBody = React__default.forwardRef(({ children, className, animation = true, portal = true, scrollable = true, maxHeight, ...props }, ref) => {
|
|
30
30
|
const { isOpen, onOpenChange, triggerRef, contentRef, placement, offset, triggerType, closeOnClickOutside, closeOnEsc, preventClose, hasBackdrop, theme, contentId, } = usePopoverContext();
|
|
31
31
|
const shouldReduceMotion = useReducedMotion();
|
|
32
32
|
const localRef = useRef(null);
|
|
@@ -45,13 +45,20 @@ const PopoverBody = React__default.forwardRef(({ children, className, animation
|
|
|
45
45
|
});
|
|
46
46
|
// Click outside detection (active when no backdrop — with backdrop, Overlay handles it)
|
|
47
47
|
useClickOutside(localRef, (e) => {
|
|
48
|
-
var _a;
|
|
48
|
+
var _a, _b, _c;
|
|
49
49
|
if (hasBackdrop)
|
|
50
50
|
return; // Overlay handles click-outside via backdrop
|
|
51
51
|
if (e.target === triggerRef.current ||
|
|
52
52
|
((_a = triggerRef.current) === null || _a === void 0 ? void 0 : _a.contains(e.target))) {
|
|
53
53
|
return;
|
|
54
54
|
}
|
|
55
|
+
// Ignore clicks that land inside any FlikkUI overlay portal (a nested
|
|
56
|
+
// Select/Tooltip/Dropdown/Popover renders to document.body, outside our
|
|
57
|
+
// content ref — without this it would count as an outside click and
|
|
58
|
+
// dismiss the popover). See the `data-flikkui-portal` convention.
|
|
59
|
+
if ((_c = (_b = e.target) === null || _b === void 0 ? void 0 : _b.closest) === null || _c === void 0 ? void 0 : _c.call(_b, "[data-flikkui-portal]")) {
|
|
60
|
+
return;
|
|
61
|
+
}
|
|
55
62
|
if (closeOnClickOutside && !preventClose) {
|
|
56
63
|
onOpenChange(false);
|
|
57
64
|
}
|
|
@@ -120,7 +127,7 @@ const PopoverBody = React__default.forwardRef(({ children, className, animation
|
|
|
120
127
|
? { duration: 0 }
|
|
121
128
|
: popoverTransitions.content, "data-state": isOpen ? "open" : "closed", "data-placement": placement, "data-trigger": triggerType, onClick: (e) => e.stopPropagation(), ...domProps, children: children })) }));
|
|
122
129
|
if (portal && isClient) {
|
|
123
|
-
return createPortal(jsx("div", { className: isDarkMode ? "dark" : undefined, children: popoverContent }), document.body);
|
|
130
|
+
return createPortal(jsx("div", { "data-flikkui-portal": "", className: isDarkMode ? "dark" : undefined, children: popoverContent }), document.body);
|
|
124
131
|
}
|
|
125
132
|
return popoverContent;
|
|
126
133
|
});
|
|
@@ -5,7 +5,7 @@ const progressTheme = {
|
|
|
5
5
|
// Container styles
|
|
6
6
|
containerStyle: "w-full",
|
|
7
7
|
// Track (background) styles
|
|
8
|
-
trackStyle: "relative w-full rounded-full bg-[var(--color-
|
|
8
|
+
trackStyle: "relative w-full rounded-full bg-[var(--color-surface-sunken)] overflow-hidden",
|
|
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
|
|
@@ -155,12 +155,12 @@ const ScrollArea = React__default.forwardRef(({ children, type = 'hover', size =
|
|
|
155
155
|
case 'always':
|
|
156
156
|
return [
|
|
157
157
|
'[&::-webkit-scrollbar-thumb]:bg-[var(--color-border)]',
|
|
158
|
-
'[&::-webkit-scrollbar-track]:bg-[var(--color-
|
|
158
|
+
'[&::-webkit-scrollbar-track]:bg-[var(--color-surface-sunken)]',
|
|
159
159
|
].join(' ');
|
|
160
160
|
case 'scroll':
|
|
161
161
|
return [
|
|
162
162
|
'[&::-webkit-scrollbar-thumb]:bg-transparent',
|
|
163
|
-
'[&[data-scrolling]::-webkit-scrollbar-thumb]:bg-
|
|
163
|
+
'[&[data-scrolling]::-webkit-scrollbar-thumb]:bg-[var(--color-border)]',
|
|
164
164
|
'[&::-webkit-scrollbar-thumb]:transition-colors',
|
|
165
165
|
'[&::-webkit-scrollbar-thumb]:duration-300',
|
|
166
166
|
].join(' ');
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
const scrollAreaTheme = {
|
|
6
6
|
baseStyle: 'relative h-full w-full',
|
|
7
7
|
scrollbarStyle: 'flex touch-none select-none transition-colors duration-150',
|
|
8
|
-
thumbStyle: 'relative flex-1 rounded-full bg-[var(--color-border)]',
|
|
8
|
+
thumbStyle: 'relative flex-1 rounded-full bg-[var(--color-border)]/60',
|
|
9
9
|
};
|
|
10
10
|
|
|
11
11
|
export { scrollAreaTheme };
|
|
@@ -19,13 +19,15 @@ const SegmentedComponent = React__default.forwardRef(({ value, onChange, size =
|
|
|
19
19
|
return;
|
|
20
20
|
const activeButton = containerRef.current.querySelector(`[data-value="${value}"]`);
|
|
21
21
|
if (activeButton) {
|
|
22
|
-
|
|
23
|
-
|
|
22
|
+
// Use offsetTop/offsetLeft (measured from the offsetParent's padding
|
|
23
|
+
// edge) so the sliding background aligns correctly when the container
|
|
24
|
+
// has a border. getBoundingClientRect() returns border-box coords,
|
|
25
|
+
// which would offset the bg by the container's border width.
|
|
24
26
|
setActiveStyle({
|
|
25
|
-
width:
|
|
26
|
-
height:
|
|
27
|
-
top:
|
|
28
|
-
transform: `translateX(${
|
|
27
|
+
width: activeButton.offsetWidth,
|
|
28
|
+
height: activeButton.offsetHeight,
|
|
29
|
+
top: activeButton.offsetTop,
|
|
30
|
+
transform: `translateX(${activeButton.offsetLeft}px)`,
|
|
29
31
|
});
|
|
30
32
|
}
|
|
31
33
|
}, [value]);
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
*/
|
|
4
4
|
const segmentedTheme = {
|
|
5
5
|
// Base styles for the segmented container
|
|
6
|
-
baseStyle: "relative flex rounded-[var(--segmented-radius)] bg-[var(--color-
|
|
6
|
+
baseStyle: "relative flex rounded-[var(--segmented-radius)] bg-[var(--color-surface)] border border-[var(--color-border)]/60 p-[var(--segmented-padding)] shadow-inner",
|
|
7
7
|
// Size variants using CSS variables
|
|
8
8
|
sizes: {
|
|
9
9
|
sm: "min-h-[var(--segmented-min-h-sm)]",
|
|
@@ -15,14 +15,14 @@ const segmentedTheme = {
|
|
|
15
15
|
// Disabled style
|
|
16
16
|
disabledStyle: "opacity-50 cursor-not-allowed pointer-events-none",
|
|
17
17
|
// Sliding background style with CSS variables
|
|
18
|
-
slidingBackgroundStyle: "absolute top-[0px] left-[0px] rounded-[
|
|
18
|
+
slidingBackgroundStyle: "absolute top-[0px] left-[0px] rounded-[var(--segmented-inner-radius)] transition-transform duration-200 ease-out pointer-events-none z-0 bg-white dark:bg-[var(--color-surface-raised)] shadow-real-lg",
|
|
19
19
|
};
|
|
20
20
|
/**
|
|
21
21
|
* Default theme for the SegmentedItem component
|
|
22
22
|
*/
|
|
23
23
|
const segmentedItemTheme = {
|
|
24
24
|
// Base styles for the segmented item
|
|
25
|
-
baseStyle: "relative flex min-w-fit flex-1 items-center justify-center transition-all duration-200 rounded-[
|
|
25
|
+
baseStyle: "relative flex min-w-fit flex-1 items-center justify-center whitespace-nowrap transition-all duration-200 rounded-[var(--segmented-inner-radius)] 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
28
|
sm: "text-sm px-[var(--segmented-px-sm)]",
|
|
@@ -1,14 +1,16 @@
|
|
|
1
1
|
import React from "react";
|
|
2
2
|
import { SidebarProps } from "./Sidebar.types";
|
|
3
3
|
export declare const Sidebar: React.ForwardRefExoticComponent<SidebarProps & React.RefAttributes<HTMLDivElement>> & {
|
|
4
|
+
Provider: React.FC<import("./Sidebar.types").SidebarProviderProps>;
|
|
4
5
|
Header: React.ForwardRefExoticComponent<import("./Sidebar.types").SidebarHeaderProps & React.RefAttributes<HTMLDivElement>>;
|
|
5
6
|
Content: React.ForwardRefExoticComponent<import("./Sidebar.types").SidebarContentProps & React.RefAttributes<HTMLDivElement>>;
|
|
6
7
|
Footer: React.ForwardRefExoticComponent<import("./Sidebar.types").SidebarFooterProps & React.RefAttributes<HTMLDivElement>>;
|
|
7
8
|
Nav: React.ForwardRefExoticComponent<import("./Sidebar.types").SidebarNavProps & React.RefAttributes<HTMLDivElement>>;
|
|
8
9
|
NavGroup: React.ForwardRefExoticComponent<import("./Sidebar.types").SidebarNavGroupProps & React.RefAttributes<HTMLDivElement>>;
|
|
9
|
-
Submenu: ({ children, isOpen, className, }: import("./SidebarSubmenu").SidebarSubmenuProps) => import("react/jsx-runtime").JSX.Element;
|
|
10
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
13
|
Logo: React.ForwardRefExoticComponent<import("./Sidebar.types").SidebarLogoProps & React.RefAttributes<HTMLDivElement>>;
|
|
14
|
+
Search: React.ForwardRefExoticComponent<import("./Sidebar.types").SidebarSearchProps & React.RefAttributes<HTMLInputElement>>;
|
|
15
|
+
Card: React.ForwardRefExoticComponent<import("./Sidebar.types").SidebarCardProps & React.RefAttributes<HTMLDivElement>>;
|
|
14
16
|
};
|
|
@@ -1,31 +1,40 @@
|
|
|
1
1
|
import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
|
|
2
|
-
import React__default, { useMemo } from 'react';
|
|
2
|
+
import React__default, { useMemo, useRef, useEffect } from 'react';
|
|
3
3
|
import { cn } from '../../../utils/cn.js';
|
|
4
4
|
import { motion, AnimatePresence } from 'motion/react';
|
|
5
5
|
import { sidebarTheme } from './Sidebar.theme.js';
|
|
6
|
+
import { useFocusTrap } from '../../../hooks/useFocusTrap.js';
|
|
6
7
|
import { useSidebarContext, SidebarProvider } from './SidebarContext.js';
|
|
7
8
|
import { SidebarHeader } from './SidebarHeader.js';
|
|
8
9
|
import { SidebarContent } from './SidebarContent.js';
|
|
9
10
|
import { SidebarFooter } from './SidebarFooter.js';
|
|
10
11
|
import { SidebarNav } from './SidebarNav.js';
|
|
11
12
|
import { SidebarNavGroup } from './SidebarNavGroup.js';
|
|
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
16
|
import { SidebarLogo } from './SidebarLogo.js';
|
|
17
|
+
import { SidebarSearch } from './SidebarSearch.js';
|
|
18
|
+
import { SidebarCard } from './SidebarCard.js';
|
|
17
19
|
|
|
20
|
+
// Subtle spring on the sidebar's width animation. Stiffness/damping picked so
|
|
21
|
+
// the effective duration sits in the same ~200ms window as the internal CSS
|
|
22
|
+
// transitions on padding/gap (Tailwind `duration-200`), but with a soft
|
|
23
|
+
// organic settle instead of a linear cubic-bezier. Damping ratio ≈ 0.9 — a
|
|
24
|
+
// hair under critical so there's a barely-perceptible easing-into-final
|
|
25
|
+
// rather than an overshoot/bounce.
|
|
18
26
|
const SIDEBAR_TRANSITION = {
|
|
19
|
-
type: "
|
|
20
|
-
|
|
21
|
-
|
|
27
|
+
type: "spring",
|
|
28
|
+
stiffness: 320,
|
|
29
|
+
damping: 34,
|
|
30
|
+
mass: 1,
|
|
22
31
|
};
|
|
23
|
-
const SidebarDesktop = React__default.forwardRef(({ side = "left", variant = "sidebar", width, children, className, theme: customTheme = {}, ...props }, ref) => {
|
|
24
|
-
var _a, _b, _c;
|
|
32
|
+
const SidebarDesktop = React__default.forwardRef(({ side = "left", variant = "sidebar", density, width, children, className, theme: customTheme = {}, ...props }, ref) => {
|
|
33
|
+
var _a, _b, _c, _d;
|
|
25
34
|
const context = useSidebarContext();
|
|
26
35
|
const collapsed = (_a = context === null || context === void 0 ? void 0 : context.collapsed) !== null && _a !== void 0 ? _a : false;
|
|
27
36
|
const expandedWidth = (width === null || width === void 0 ? void 0 : width.expanded) || ((_b = context === null || context === void 0 ? void 0 : context.width) === null || _b === void 0 ? void 0 : _b.expanded) || 280;
|
|
28
|
-
const collapsedWidth = (width === null || width === void 0 ? void 0 : width.collapsed) || ((_c = context === null || context === void 0 ? void 0 : context.width) === null || _c === void 0 ? void 0 : _c.collapsed) ||
|
|
37
|
+
const collapsedWidth = (width === null || width === void 0 ? void 0 : width.collapsed) || ((_c = context === null || context === void 0 ? void 0 : context.width) === null || _c === void 0 ? void 0 : _c.collapsed) || 60;
|
|
29
38
|
const theme = useMemo(() => ({
|
|
30
39
|
...sidebarTheme,
|
|
31
40
|
...customTheme,
|
|
@@ -38,19 +47,41 @@ const SidebarDesktop = React__default.forwardRef(({ side = "left", variant = "si
|
|
|
38
47
|
width: collapsed ? collapsedWidth : expandedWidth,
|
|
39
48
|
maxWidth: "100vw",
|
|
40
49
|
}), [collapsed, collapsedWidth, expandedWidth]);
|
|
41
|
-
return (jsx(motion.
|
|
50
|
+
return (jsx(motion.aside, { ref: ref, className: sidebarClasses, "aria-label": "Sidebar", "data-side": side, "data-variant": variant, "data-density": (_d = density !== null && density !== void 0 ? density : context === null || context === void 0 ? void 0 : context.density) !== null && _d !== void 0 ? _d : "comfortable", "data-collapsed": collapsed, initial: false, animate: animateValue, transition: SIDEBAR_TRANSITION, ...motionSafeProps, children: children }));
|
|
42
51
|
});
|
|
43
52
|
SidebarDesktop.displayName = "SidebarDesktop";
|
|
44
53
|
const SidebarMobile = ({ children, className, theme: customTheme = {} }) => {
|
|
54
|
+
var _a, _b, _c, _d;
|
|
45
55
|
const context = useSidebarContext();
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
const { isMobileOpen, setMobileOpen } = context;
|
|
56
|
+
const panelRef = useRef(null);
|
|
57
|
+
// Hooks must run unconditionally — keep above any early return
|
|
49
58
|
const theme = useMemo(() => ({
|
|
50
59
|
...sidebarTheme,
|
|
51
60
|
...customTheme,
|
|
52
61
|
}), [customTheme]);
|
|
53
|
-
|
|
62
|
+
const isMobileOpen = (_a = context === null || context === void 0 ? void 0 : context.isMobileOpen) !== null && _a !== void 0 ? _a : false;
|
|
63
|
+
const side = (_b = context === null || context === void 0 ? void 0 : context.side) !== null && _b !== void 0 ? _b : "left";
|
|
64
|
+
const panelWidth = (_d = (_c = context === null || context === void 0 ? void 0 : context.width) === null || _c === void 0 ? void 0 : _c.expanded) !== null && _d !== void 0 ? _d : 280;
|
|
65
|
+
// Trap focus inside the open drawer; focus returns to trigger on close.
|
|
66
|
+
useFocusTrap(panelRef, isMobileOpen);
|
|
67
|
+
// Close on Escape while the drawer is open.
|
|
68
|
+
useEffect(() => {
|
|
69
|
+
if (!isMobileOpen)
|
|
70
|
+
return;
|
|
71
|
+
const onKeyDown = (e) => {
|
|
72
|
+
if (e.key === "Escape")
|
|
73
|
+
context === null || context === void 0 ? void 0 : context.setMobileOpen(false);
|
|
74
|
+
};
|
|
75
|
+
document.addEventListener("keydown", onKeyDown);
|
|
76
|
+
return () => document.removeEventListener("keydown", onKeyDown);
|
|
77
|
+
}, [isMobileOpen, context]);
|
|
78
|
+
if (!context)
|
|
79
|
+
return null;
|
|
80
|
+
const { setMobileOpen } = context;
|
|
81
|
+
const offscreen = side === "left" ? "-100%" : "100%";
|
|
82
|
+
return (jsx(AnimatePresence, { children: isMobileOpen && (jsxs(Fragment, { children: [jsx(motion.div, { className: cn(theme.mobileBackdrop), initial: { opacity: 0 }, animate: { opacity: 1 }, exit: { opacity: 0 }, transition: { duration: 0.2 }, onClick: () => setMobileOpen(false), "aria-hidden": "true" }), jsx(motion.div, { ref: panelRef, className: cn(theme.mobileOverlay, side === "left"
|
|
83
|
+
? "left-0 rounded-r-xl border-r"
|
|
84
|
+
: "right-0 rounded-l-xl border-l rounded-r-none border-r-0", className), style: { width: panelWidth }, initial: { x: offscreen }, animate: { x: 0 }, exit: { x: offscreen }, transition: { type: "spring", stiffness: 400, damping: 38 }, role: "dialog", "aria-modal": "true", "aria-label": "Navigation menu", children: children })] })) }));
|
|
54
85
|
};
|
|
55
86
|
const SidebarContainer = React__default.forwardRef((props, ref) => {
|
|
56
87
|
const context = useSidebarContext();
|
|
@@ -60,21 +91,27 @@ const SidebarContainer = React__default.forwardRef((props, ref) => {
|
|
|
60
91
|
return jsx(SidebarDesktop, { ref: ref, ...props });
|
|
61
92
|
});
|
|
62
93
|
SidebarContainer.displayName = "SidebarContainer";
|
|
63
|
-
const SidebarRoot = React__default.forwardRef(({ side = "left", variant = "sidebar", defaultCollapsed = false, collapsed: controlledCollapsed, onCollapsedChange, mobileBreakpoint, mobileOpen, onMobileOpenChange, width, children, className, theme: customTheme = {}, ...props }, ref) => {
|
|
64
|
-
|
|
94
|
+
const SidebarRoot = React__default.forwardRef(({ side = "left", variant = "sidebar", defaultCollapsed = false, collapsed: controlledCollapsed, onCollapsedChange, density = "comfortable", mobileBreakpoint, mobileOpen, onMobileOpenChange, width, children, className, theme: customTheme = {}, ...props }, ref) => {
|
|
95
|
+
const existingContext = useSidebarContext();
|
|
96
|
+
if (existingContext) {
|
|
97
|
+
return (jsx(SidebarContainer, { ref: ref, className: className, theme: customTheme, side: side, variant: variant, density: density, width: width, ...props, children: children }));
|
|
98
|
+
}
|
|
99
|
+
return (jsx(SidebarProvider, { defaultCollapsed: defaultCollapsed, collapsed: controlledCollapsed, onCollapsedChange: onCollapsedChange, density: density, mobileBreakpoint: mobileBreakpoint, mobileOpen: mobileOpen, onMobileOpenChange: onMobileOpenChange, width: width, side: side, variant: variant, children: jsx(SidebarContainer, { ref: ref, className: className, theme: customTheme, side: side, variant: variant, density: density, width: width, ...props, children: children }) }));
|
|
65
100
|
});
|
|
66
101
|
SidebarRoot.displayName = "Sidebar";
|
|
67
102
|
const Sidebar = Object.assign(SidebarRoot, {
|
|
103
|
+
Provider: SidebarProvider,
|
|
68
104
|
Header: SidebarHeader,
|
|
69
105
|
Content: SidebarContent,
|
|
70
106
|
Footer: SidebarFooter,
|
|
71
107
|
Nav: SidebarNav,
|
|
72
108
|
NavGroup: SidebarNavGroup,
|
|
73
|
-
Submenu: SidebarSubmenu,
|
|
74
109
|
Toggle: SidebarToggle,
|
|
75
110
|
MobileTrigger: SidebarMobileTrigger,
|
|
76
111
|
UserProfile: SidebarUserProfile,
|
|
77
112
|
Logo: SidebarLogo,
|
|
113
|
+
Search: SidebarSearch,
|
|
114
|
+
Card: SidebarCard,
|
|
78
115
|
});
|
|
79
116
|
|
|
80
117
|
export { Sidebar };
|
|
@@ -1,18 +1,16 @@
|
|
|
1
1
|
const sidebarTheme = {
|
|
2
|
-
baseStyle: 'flex flex-col h-full bg-[var(--color-background)] overflow-
|
|
2
|
+
baseStyle: 'group flex flex-col h-full bg-[var(--color-background)] overflow-visible transition-colors duration-200 relative',
|
|
3
3
|
variants: {
|
|
4
4
|
sidebar: 'relative',
|
|
5
|
-
floating: '
|
|
6
|
-
inset: '
|
|
5
|
+
floating: 'relative m-3 h-[calc(100%-1.5rem)] rounded-xl border border-[var(--color-border)] bg-[color-mix(in_oklab,var(--color-background)_85%,transparent)] backdrop-blur-md shadow-[0_8px_30px_rgba(0,0,0,0.03),inset_0_1px_0_rgba(255,255,255,0.05)]',
|
|
6
|
+
inset: 'relative m-3 h-[calc(100%-1.5rem)] rounded-xl bg-[var(--color-background-secondary)] border border-[var(--color-border)] shadow-sm',
|
|
7
7
|
},
|
|
8
8
|
sides: {
|
|
9
9
|
left: 'border-r border-[var(--color-border)]',
|
|
10
10
|
right: 'border-l border-[var(--color-border)]',
|
|
11
11
|
},
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
mobileOverlay: 'fixed inset-0 z-50 flex flex-col bg-[var(--color-background)]',
|
|
15
|
-
mobileBackdrop: 'fixed inset-0 z-40 bg-black/50 backdrop-blur-sm',
|
|
12
|
+
mobileOverlay: 'fixed inset-y-0 z-50 flex flex-col bg-[var(--color-background)] shadow-2xl max-w-[85vw] border-[var(--color-border)]',
|
|
13
|
+
mobileBackdrop: 'fixed inset-0 z-40 bg-black/40 backdrop-blur-sm',
|
|
16
14
|
};
|
|
17
15
|
|
|
18
16
|
export { sidebarTheme };
|