@kushagradhawan/kookie-ui 0.1.17 → 0.1.18
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/components.css +3730 -1072
- package/dist/cjs/components/_internal/base-button.d.ts.map +1 -1
- package/dist/cjs/components/_internal/base-button.js +1 -1
- package/dist/cjs/components/_internal/base-button.js.map +3 -3
- package/dist/cjs/components/_internal/base-button.props.d.ts +9 -0
- package/dist/cjs/components/_internal/base-button.props.d.ts.map +1 -1
- package/dist/cjs/components/_internal/base-button.props.js +1 -1
- package/dist/cjs/components/_internal/base-button.props.js.map +3 -3
- package/dist/cjs/components/_internal/base-menu.props.d.ts +5 -0
- package/dist/cjs/components/_internal/base-menu.props.d.ts.map +1 -1
- package/dist/cjs/components/_internal/base-menu.props.js +1 -1
- package/dist/cjs/components/_internal/base-menu.props.js.map +3 -3
- package/dist/cjs/components/_internal/base-tab-list.props.d.ts +5 -0
- package/dist/cjs/components/_internal/base-tab-list.props.d.ts.map +1 -1
- package/dist/cjs/components/_internal/base-tab-list.props.js +1 -1
- package/dist/cjs/components/_internal/base-tab-list.props.js.map +3 -3
- package/dist/cjs/components/alert-dialog.d.ts.map +1 -1
- package/dist/cjs/components/alert-dialog.js +1 -1
- package/dist/cjs/components/alert-dialog.js.map +3 -3
- package/dist/cjs/components/avatar.d.ts.map +1 -1
- package/dist/cjs/components/avatar.js +1 -1
- package/dist/cjs/components/avatar.js.map +3 -3
- package/dist/cjs/components/avatar.props.d.ts +6 -1
- package/dist/cjs/components/avatar.props.d.ts.map +1 -1
- package/dist/cjs/components/avatar.props.js +1 -1
- package/dist/cjs/components/avatar.props.js.map +3 -3
- package/dist/cjs/components/badge.d.ts.map +1 -1
- package/dist/cjs/components/badge.js +1 -1
- package/dist/cjs/components/badge.js.map +3 -3
- package/dist/cjs/components/badge.props.d.ts +6 -1
- package/dist/cjs/components/badge.props.d.ts.map +1 -1
- package/dist/cjs/components/badge.props.js +1 -1
- package/dist/cjs/components/badge.props.js.map +2 -2
- package/dist/cjs/components/callout.d.ts.map +1 -1
- package/dist/cjs/components/callout.js +1 -1
- package/dist/cjs/components/callout.js.map +3 -3
- package/dist/cjs/components/callout.props.d.ts +5 -0
- package/dist/cjs/components/callout.props.d.ts.map +1 -1
- package/dist/cjs/components/callout.props.js +1 -1
- package/dist/cjs/components/callout.props.js.map +3 -3
- package/dist/cjs/components/card.d.ts.map +1 -1
- package/dist/cjs/components/card.js +1 -1
- package/dist/cjs/components/card.js.map +3 -3
- package/dist/cjs/components/card.props.d.ts +11 -2
- package/dist/cjs/components/card.props.d.ts.map +1 -1
- package/dist/cjs/components/card.props.js +1 -1
- package/dist/cjs/components/card.props.js.map +3 -3
- package/dist/cjs/components/context-menu.d.ts.map +1 -1
- package/dist/cjs/components/context-menu.js +1 -1
- package/dist/cjs/components/context-menu.js.map +3 -3
- package/dist/cjs/components/dialog.d.ts.map +1 -1
- package/dist/cjs/components/dialog.js +1 -1
- package/dist/cjs/components/dialog.js.map +3 -3
- package/dist/cjs/components/dialog.props.d.ts +5 -0
- package/dist/cjs/components/dialog.props.d.ts.map +1 -1
- package/dist/cjs/components/dialog.props.js +1 -1
- package/dist/cjs/components/dialog.props.js.map +3 -3
- package/dist/cjs/components/dropdown-menu.d.ts.map +1 -1
- package/dist/cjs/components/dropdown-menu.js +1 -1
- package/dist/cjs/components/dropdown-menu.js.map +3 -3
- package/dist/cjs/components/image.d.ts +6 -1
- package/dist/cjs/components/image.d.ts.map +1 -1
- package/dist/cjs/components/image.js +1 -1
- package/dist/cjs/components/image.js.map +3 -3
- package/dist/cjs/components/popover.d.ts.map +1 -1
- package/dist/cjs/components/popover.js +1 -1
- package/dist/cjs/components/popover.js.map +3 -3
- package/dist/cjs/components/popover.props.d.ts +5 -0
- package/dist/cjs/components/popover.props.d.ts.map +1 -1
- package/dist/cjs/components/popover.props.js +1 -1
- package/dist/cjs/components/popover.props.js.map +3 -3
- package/dist/cjs/components/select.d.ts.map +1 -1
- package/dist/cjs/components/select.js +1 -1
- package/dist/cjs/components/select.js.map +3 -3
- package/dist/cjs/components/select.props.d.ts +6 -1
- package/dist/cjs/components/select.props.d.ts.map +1 -1
- package/dist/cjs/components/select.props.js +1 -1
- package/dist/cjs/components/select.props.js.map +2 -2
- package/dist/cjs/components/sidebar.d.ts +13 -2
- package/dist/cjs/components/sidebar.d.ts.map +1 -1
- package/dist/cjs/components/sidebar.js +1 -1
- package/dist/cjs/components/sidebar.js.map +3 -3
- package/dist/cjs/components/sidebar.props.d.ts +5 -0
- package/dist/cjs/components/sidebar.props.d.ts.map +1 -1
- package/dist/cjs/components/sidebar.props.js +1 -1
- package/dist/cjs/components/sidebar.props.js.map +2 -2
- package/dist/cjs/components/tabs.d.ts.map +1 -1
- package/dist/cjs/components/tabs.js +1 -1
- package/dist/cjs/components/tabs.js.map +3 -3
- package/dist/cjs/components/text-area.d.ts.map +1 -1
- package/dist/cjs/components/text-area.js +1 -1
- package/dist/cjs/components/text-area.js.map +3 -3
- package/dist/cjs/components/text-area.props.d.ts +6 -1
- package/dist/cjs/components/text-area.props.d.ts.map +1 -1
- package/dist/cjs/components/text-area.props.js +1 -1
- package/dist/cjs/components/text-area.props.js.map +3 -3
- package/dist/cjs/components/text-field.d.ts.map +1 -1
- package/dist/cjs/components/text-field.js +2 -2
- package/dist/cjs/components/text-field.js.map +3 -3
- package/dist/cjs/components/text-field.props.d.ts +6 -1
- package/dist/cjs/components/text-field.props.d.ts.map +1 -1
- package/dist/cjs/components/text-field.props.js +1 -1
- package/dist/cjs/components/text-field.props.js.map +3 -3
- package/dist/cjs/components/theme.d.ts.map +1 -1
- package/dist/cjs/components/theme.js +1 -1
- package/dist/cjs/components/theme.js.map +2 -2
- package/dist/cjs/helpers/map-prop-values.js +1 -1
- package/dist/cjs/helpers/map-prop-values.js.map +2 -2
- package/dist/esm/components/_internal/base-button.d.ts.map +1 -1
- package/dist/esm/components/_internal/base-button.js +1 -1
- package/dist/esm/components/_internal/base-button.js.map +3 -3
- package/dist/esm/components/_internal/base-button.props.d.ts +9 -0
- package/dist/esm/components/_internal/base-button.props.d.ts.map +1 -1
- package/dist/esm/components/_internal/base-button.props.js +1 -1
- package/dist/esm/components/_internal/base-button.props.js.map +3 -3
- package/dist/esm/components/_internal/base-menu.props.d.ts +5 -0
- package/dist/esm/components/_internal/base-menu.props.d.ts.map +1 -1
- package/dist/esm/components/_internal/base-menu.props.js +1 -1
- package/dist/esm/components/_internal/base-menu.props.js.map +3 -3
- package/dist/esm/components/_internal/base-tab-list.props.d.ts +5 -0
- package/dist/esm/components/_internal/base-tab-list.props.d.ts.map +1 -1
- package/dist/esm/components/_internal/base-tab-list.props.js +1 -1
- package/dist/esm/components/_internal/base-tab-list.props.js.map +3 -3
- package/dist/esm/components/alert-dialog.d.ts.map +1 -1
- package/dist/esm/components/alert-dialog.js +1 -1
- package/dist/esm/components/alert-dialog.js.map +3 -3
- package/dist/esm/components/avatar.d.ts.map +1 -1
- package/dist/esm/components/avatar.js +1 -1
- package/dist/esm/components/avatar.js.map +3 -3
- package/dist/esm/components/avatar.props.d.ts +6 -1
- package/dist/esm/components/avatar.props.d.ts.map +1 -1
- package/dist/esm/components/avatar.props.js +1 -1
- package/dist/esm/components/avatar.props.js.map +3 -3
- package/dist/esm/components/badge.d.ts.map +1 -1
- package/dist/esm/components/badge.js +1 -1
- package/dist/esm/components/badge.js.map +3 -3
- package/dist/esm/components/badge.props.d.ts +6 -1
- package/dist/esm/components/badge.props.d.ts.map +1 -1
- package/dist/esm/components/badge.props.js +1 -1
- package/dist/esm/components/badge.props.js.map +2 -2
- package/dist/esm/components/callout.d.ts.map +1 -1
- package/dist/esm/components/callout.js +1 -1
- package/dist/esm/components/callout.js.map +3 -3
- package/dist/esm/components/callout.props.d.ts +5 -0
- package/dist/esm/components/callout.props.d.ts.map +1 -1
- package/dist/esm/components/callout.props.js +1 -1
- package/dist/esm/components/callout.props.js.map +3 -3
- package/dist/esm/components/card.d.ts.map +1 -1
- package/dist/esm/components/card.js +1 -1
- package/dist/esm/components/card.js.map +3 -3
- package/dist/esm/components/card.props.d.ts +11 -2
- package/dist/esm/components/card.props.d.ts.map +1 -1
- package/dist/esm/components/card.props.js +1 -1
- package/dist/esm/components/card.props.js.map +3 -3
- package/dist/esm/components/context-menu.d.ts.map +1 -1
- package/dist/esm/components/context-menu.js +1 -1
- package/dist/esm/components/context-menu.js.map +3 -3
- package/dist/esm/components/dialog.d.ts.map +1 -1
- package/dist/esm/components/dialog.js +1 -1
- package/dist/esm/components/dialog.js.map +3 -3
- package/dist/esm/components/dialog.props.d.ts +5 -0
- package/dist/esm/components/dialog.props.d.ts.map +1 -1
- package/dist/esm/components/dialog.props.js +1 -1
- package/dist/esm/components/dialog.props.js.map +3 -3
- package/dist/esm/components/dropdown-menu.d.ts.map +1 -1
- package/dist/esm/components/dropdown-menu.js +1 -1
- package/dist/esm/components/dropdown-menu.js.map +3 -3
- package/dist/esm/components/image.d.ts +6 -1
- package/dist/esm/components/image.d.ts.map +1 -1
- package/dist/esm/components/image.js +1 -1
- package/dist/esm/components/image.js.map +3 -3
- package/dist/esm/components/popover.d.ts.map +1 -1
- package/dist/esm/components/popover.js +1 -1
- package/dist/esm/components/popover.js.map +3 -3
- package/dist/esm/components/popover.props.d.ts +5 -0
- package/dist/esm/components/popover.props.d.ts.map +1 -1
- package/dist/esm/components/popover.props.js +1 -1
- package/dist/esm/components/popover.props.js.map +3 -3
- package/dist/esm/components/select.d.ts.map +1 -1
- package/dist/esm/components/select.js +1 -1
- package/dist/esm/components/select.js.map +3 -3
- package/dist/esm/components/select.props.d.ts +6 -1
- package/dist/esm/components/select.props.d.ts.map +1 -1
- package/dist/esm/components/select.props.js +1 -1
- package/dist/esm/components/select.props.js.map +2 -2
- package/dist/esm/components/sidebar.d.ts +13 -2
- package/dist/esm/components/sidebar.d.ts.map +1 -1
- package/dist/esm/components/sidebar.js +1 -1
- package/dist/esm/components/sidebar.js.map +3 -3
- package/dist/esm/components/sidebar.props.d.ts +5 -0
- package/dist/esm/components/sidebar.props.d.ts.map +1 -1
- package/dist/esm/components/sidebar.props.js +1 -1
- package/dist/esm/components/sidebar.props.js.map +2 -2
- package/dist/esm/components/tabs.d.ts.map +1 -1
- package/dist/esm/components/tabs.js +1 -1
- package/dist/esm/components/tabs.js.map +3 -3
- package/dist/esm/components/text-area.d.ts.map +1 -1
- package/dist/esm/components/text-area.js +1 -1
- package/dist/esm/components/text-area.js.map +3 -3
- package/dist/esm/components/text-area.props.d.ts +6 -1
- package/dist/esm/components/text-area.props.d.ts.map +1 -1
- package/dist/esm/components/text-area.props.js +1 -1
- package/dist/esm/components/text-area.props.js.map +3 -3
- package/dist/esm/components/text-field.d.ts.map +1 -1
- package/dist/esm/components/text-field.js +2 -2
- package/dist/esm/components/text-field.js.map +3 -3
- package/dist/esm/components/text-field.props.d.ts +6 -1
- package/dist/esm/components/text-field.props.d.ts.map +1 -1
- package/dist/esm/components/text-field.props.js +1 -1
- package/dist/esm/components/text-field.props.js.map +3 -3
- package/dist/esm/components/theme.d.ts.map +1 -1
- package/dist/esm/components/theme.js +1 -1
- package/dist/esm/components/theme.js.map +2 -2
- package/dist/esm/helpers/map-prop-values.js +1 -1
- package/dist/esm/helpers/map-prop-values.js.map +2 -2
- package/package.json +1 -1
- package/src/components/_internal/base-button.css +518 -110
- package/src/components/_internal/base-button.props.ts +5 -0
- package/src/components/_internal/base-button.tsx +4 -0
- package/src/components/_internal/base-card.css +59 -11
- package/src/components/_internal/base-dialog.css +26 -9
- package/src/components/_internal/base-menu.css +192 -21
- package/src/components/_internal/base-menu.props.ts +7 -0
- package/src/components/_internal/base-tab-list.css +56 -5
- package/src/components/_internal/base-tab-list.props.ts +3 -0
- package/src/components/alert-dialog.tsx +22 -7
- package/src/components/animations.css +31 -0
- package/src/components/avatar.css +436 -9
- package/src/components/avatar.props.tsx +4 -1
- package/src/components/avatar.tsx +19 -6
- package/src/components/badge.css +222 -7
- package/src/components/badge.props.tsx +3 -1
- package/src/components/badge.tsx +3 -2
- package/src/components/button.css +17 -17
- package/src/components/callout.css +75 -6
- package/src/components/callout.props.tsx +3 -0
- package/src/components/callout.tsx +6 -5
- package/src/components/card.css +361 -44
- package/src/components/card.props.tsx +7 -2
- package/src/components/card.tsx +7 -1
- package/src/components/context-menu.tsx +47 -22
- package/src/components/dialog.props.tsx +3 -0
- package/src/components/dialog.tsx +22 -7
- package/src/components/dropdown-menu.css +10 -10
- package/src/components/dropdown-menu.tsx +37 -11
- package/src/components/icon-button.css +36 -8
- package/src/components/image.tsx +92 -73
- package/src/components/kbd.css +122 -54
- package/src/components/popover.css +22 -3
- package/src/components/popover.props.tsx +3 -0
- package/src/components/popover.tsx +15 -8
- package/src/components/select.css +386 -95
- package/src/components/select.props.tsx +7 -1
- package/src/components/select.tsx +21 -13
- package/src/components/sidebar.css +201 -86
- package/src/components/sidebar.props.tsx +15 -3
- package/src/components/sidebar.tsx +306 -235
- package/src/components/tabs.css +3 -1
- package/src/components/tabs.tsx +8 -3
- package/src/components/text-area.css +323 -32
- package/src/components/text-area.props.tsx +4 -1
- package/src/components/text-area.tsx +3 -2
- package/src/components/text-field.css +336 -15
- package/src/components/text-field.props.tsx +4 -1
- package/src/components/text-field.tsx +5 -7
- package/src/components/theme.tsx +11 -9
- package/src/helpers/map-prop-values.ts +1 -1
- package/src/styles/tokens/color.css +19 -5
- package/src/styles/tokens/constants.css +118 -0
- package/src/styles/tokens/index.css +1 -0
- package/src/styles/tokens/radius.css +9 -6
- package/src/styles/tokens/shadow.css +10 -10
- package/src/styles/tokens/transition.css +33 -1
- package/styles.css +3846 -1089
- package/tokens/base.css +51 -22
- package/tokens.css +133 -34
|
@@ -8,13 +8,26 @@ import { Accordion } from 'radix-ui';
|
|
|
8
8
|
import { sidebarPropDefs } from './sidebar.props';
|
|
9
9
|
import { Theme, useThemeContext } from './theme';
|
|
10
10
|
import { IconButton } from './icon-button';
|
|
11
|
-
import { ScrollArea } from './scroll-area';
|
|
12
|
-
import { Separator } from './separator';
|
|
13
|
-
import { ChevronDownIcon, ThickChevronRightIcon } from './icons';
|
|
14
|
-
import { extractProps } from '../helpers/extract-props';
|
|
11
|
+
import { ScrollArea } from './scroll-area.js';
|
|
12
|
+
import { Separator } from './separator.js';
|
|
13
|
+
import { ChevronDownIcon, ThickChevronRightIcon } from './icons.js';
|
|
14
|
+
import { extractProps } from '../helpers/extract-props.js';
|
|
15
|
+
import { Kbd } from './kbd.js';
|
|
16
|
+
import { Badge } from './badge.js';
|
|
15
17
|
|
|
16
18
|
import type { ComponentPropsWithout, RemovedProps } from '../helpers/component-props';
|
|
17
19
|
import type { GetPropDefTypes } from '../props/prop-def';
|
|
20
|
+
import type { BadgeProps } from './badge.js';
|
|
21
|
+
|
|
22
|
+
// Badge configuration type for sidebar menu buttons
|
|
23
|
+
type BadgeConfig = {
|
|
24
|
+
content: React.ReactNode;
|
|
25
|
+
variant?: BadgeProps['variant'];
|
|
26
|
+
size?: BadgeProps['size'];
|
|
27
|
+
color?: BadgeProps['color'];
|
|
28
|
+
highContrast?: BadgeProps['highContrast'];
|
|
29
|
+
radius?: BadgeProps['radius'];
|
|
30
|
+
};
|
|
18
31
|
|
|
19
32
|
// Sidebar context for state management
|
|
20
33
|
type SidebarContextProps = {
|
|
@@ -46,17 +59,17 @@ function useSidebar() {
|
|
|
46
59
|
// Hook to detect mobile (simplified version)
|
|
47
60
|
function useIsMobile() {
|
|
48
61
|
const [isMobile, setIsMobile] = React.useState(false);
|
|
49
|
-
|
|
62
|
+
|
|
50
63
|
React.useEffect(() => {
|
|
51
64
|
const checkIsMobile = () => {
|
|
52
65
|
setIsMobile(window.innerWidth < 768);
|
|
53
66
|
};
|
|
54
|
-
|
|
67
|
+
|
|
55
68
|
checkIsMobile();
|
|
56
69
|
window.addEventListener('resize', checkIsMobile);
|
|
57
70
|
return () => window.removeEventListener('resize', checkIsMobile);
|
|
58
71
|
}, []);
|
|
59
|
-
|
|
72
|
+
|
|
60
73
|
return isMobile;
|
|
61
74
|
}
|
|
62
75
|
|
|
@@ -69,24 +82,38 @@ interface SidebarProviderProps extends React.ComponentPropsWithoutRef<'div'> {
|
|
|
69
82
|
}
|
|
70
83
|
|
|
71
84
|
const SidebarProvider = React.forwardRef<HTMLDivElement, SidebarProviderProps>(
|
|
72
|
-
(
|
|
85
|
+
(
|
|
86
|
+
{
|
|
87
|
+
defaultOpen = true,
|
|
88
|
+
open: openProp,
|
|
89
|
+
onOpenChange: setOpenProp,
|
|
90
|
+
side = 'left',
|
|
91
|
+
className,
|
|
92
|
+
children,
|
|
93
|
+
...props
|
|
94
|
+
},
|
|
95
|
+
forwardedRef,
|
|
96
|
+
) => {
|
|
73
97
|
const isMobile = useIsMobile();
|
|
74
98
|
const [openMobile, setOpenMobile] = React.useState(false);
|
|
75
|
-
|
|
99
|
+
|
|
76
100
|
// Internal state for uncontrolled mode
|
|
77
101
|
const [internalOpen, setInternalOpen] = React.useState(defaultOpen);
|
|
78
|
-
|
|
102
|
+
|
|
79
103
|
// Use controlled state if provided, otherwise internal state
|
|
80
104
|
const open = openProp ?? internalOpen;
|
|
81
|
-
|
|
82
|
-
const setOpen = React.useCallback(
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
setOpenProp
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
105
|
+
|
|
106
|
+
const setOpen = React.useCallback(
|
|
107
|
+
(value: boolean | ((value: boolean) => boolean)) => {
|
|
108
|
+
const openState = typeof value === 'function' ? value(open) : value;
|
|
109
|
+
if (setOpenProp) {
|
|
110
|
+
setOpenProp(openState);
|
|
111
|
+
} else {
|
|
112
|
+
setInternalOpen(openState);
|
|
113
|
+
}
|
|
114
|
+
},
|
|
115
|
+
[setOpenProp, open],
|
|
116
|
+
);
|
|
90
117
|
|
|
91
118
|
// Helper to toggle the sidebar
|
|
92
119
|
const toggleSidebar = React.useCallback(() => {
|
|
@@ -95,7 +122,7 @@ const SidebarProvider = React.forwardRef<HTMLDivElement, SidebarProviderProps>(
|
|
|
95
122
|
|
|
96
123
|
// State for data attributes
|
|
97
124
|
const state = open ? 'expanded' : 'collapsed';
|
|
98
|
-
|
|
125
|
+
|
|
99
126
|
const contextValue = React.useMemo<Partial<SidebarContextProps>>(
|
|
100
127
|
() => ({
|
|
101
128
|
state,
|
|
@@ -107,7 +134,7 @@ const SidebarProvider = React.forwardRef<HTMLDivElement, SidebarProviderProps>(
|
|
|
107
134
|
toggleSidebar,
|
|
108
135
|
side,
|
|
109
136
|
}),
|
|
110
|
-
[state, open, setOpen, isMobile, openMobile, setOpenMobile, toggleSidebar, side]
|
|
137
|
+
[state, open, setOpen, isMobile, openMobile, setOpenMobile, toggleSidebar, side],
|
|
111
138
|
);
|
|
112
139
|
|
|
113
140
|
return (
|
|
@@ -123,7 +150,7 @@ const SidebarProvider = React.forwardRef<HTMLDivElement, SidebarProviderProps>(
|
|
|
123
150
|
</SidebarContext.Provider>
|
|
124
151
|
</div>
|
|
125
152
|
);
|
|
126
|
-
}
|
|
153
|
+
},
|
|
127
154
|
);
|
|
128
155
|
SidebarProvider.displayName = 'Sidebar.Provider';
|
|
129
156
|
|
|
@@ -131,91 +158,40 @@ SidebarProvider.displayName = 'Sidebar.Provider';
|
|
|
131
158
|
type SidebarOwnProps = GetPropDefTypes<typeof sidebarPropDefs>;
|
|
132
159
|
interface SidebarProps extends ComponentPropsWithout<'div', RemovedProps>, SidebarOwnProps {}
|
|
133
160
|
|
|
134
|
-
const Sidebar = React.forwardRef<HTMLDivElement, SidebarProps>(
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
if (collapsible === 'none') {
|
|
168
|
-
return (
|
|
169
|
-
<div
|
|
170
|
-
{...safeRootProps}
|
|
171
|
-
ref={forwardedRef}
|
|
172
|
-
data-accent-color={resolvedColor}
|
|
173
|
-
data-state={state}
|
|
174
|
-
data-side={side}
|
|
175
|
-
data-type={type}
|
|
176
|
-
data-collapsible={collapsible}
|
|
177
|
-
className={classNames('rt-SidebarRoot', `rt-r-size-${size}`, className)}
|
|
178
|
-
>
|
|
179
|
-
<Theme>
|
|
180
|
-
<div
|
|
181
|
-
className={classNames('rt-SidebarContainer', `rt-variant-${variant}`)}
|
|
182
|
-
data-accent-color={resolvedColor}
|
|
183
|
-
data-high-contrast={highContrast || undefined}
|
|
184
|
-
data-side={side}
|
|
185
|
-
>
|
|
186
|
-
{children}
|
|
187
|
-
</div>
|
|
188
|
-
</Theme>
|
|
189
|
-
</div>
|
|
190
|
-
);
|
|
191
|
-
}
|
|
192
|
-
|
|
193
|
-
if (isMobile) {
|
|
194
|
-
return (
|
|
195
|
-
<div
|
|
196
|
-
{...safeRootProps}
|
|
197
|
-
ref={forwardedRef}
|
|
198
|
-
data-accent-color={resolvedColor}
|
|
199
|
-
data-state={openMobile ? 'open' : 'closed'}
|
|
200
|
-
data-side={side}
|
|
201
|
-
data-type={type}
|
|
202
|
-
data-collapsible={collapsible}
|
|
203
|
-
className={classNames('rt-SidebarRoot', 'rt-SidebarRoot--mobile', className)}
|
|
204
|
-
>
|
|
205
|
-
<Theme>
|
|
206
|
-
<div
|
|
207
|
-
className={classNames('rt-SidebarContainer', `rt-variant-${variant}`, `rt-r-size-${size}`)}
|
|
208
|
-
data-accent-color={resolvedColor}
|
|
209
|
-
data-high-contrast={highContrast || undefined}
|
|
210
|
-
data-side={side}
|
|
211
|
-
>
|
|
212
|
-
{children}
|
|
213
|
-
</div>
|
|
214
|
-
</Theme>
|
|
215
|
-
</div>
|
|
216
|
-
);
|
|
217
|
-
}
|
|
161
|
+
const Sidebar = React.forwardRef<HTMLDivElement, SidebarProps>((props, forwardedRef) => {
|
|
162
|
+
const themeContext = useThemeContext();
|
|
163
|
+
const { isMobile, state, openMobile, setOpenMobile } = useSidebar();
|
|
164
|
+
|
|
165
|
+
const {
|
|
166
|
+
size = sidebarPropDefs.size.default,
|
|
167
|
+
variant = sidebarPropDefs.variant.default,
|
|
168
|
+
menuVariant = sidebarPropDefs.menuVariant.default,
|
|
169
|
+
type = sidebarPropDefs.type.default,
|
|
170
|
+
side = sidebarPropDefs.side.default,
|
|
171
|
+
collapsible = sidebarPropDefs.collapsible.default,
|
|
172
|
+
panelBackground,
|
|
173
|
+
color,
|
|
174
|
+
highContrast = sidebarPropDefs.highContrast.default,
|
|
175
|
+
asChild,
|
|
176
|
+
} = props;
|
|
177
|
+
|
|
178
|
+
const { className, children, ...rootProps } = extractProps(props, sidebarPropDefs);
|
|
179
|
+
const { asChild: _, panelBackground: __, ...safeRootProps } = rootProps; // Remove asChild and panelBackground from DOM props
|
|
180
|
+
const resolvedColor = color || themeContext.accentColor;
|
|
181
|
+
|
|
182
|
+
// Update context with current props - we'll pass the resolved values
|
|
183
|
+
const resolvedSize = typeof size === 'object' ? size.initial || '2' : size;
|
|
184
|
+
const context = React.useContext(SidebarContext);
|
|
185
|
+
if (context) {
|
|
186
|
+
context.side = side;
|
|
187
|
+
context.type = type;
|
|
188
|
+
context.variant = variant;
|
|
189
|
+
context.menuVariant = menuVariant;
|
|
190
|
+
context.collapsible = collapsible;
|
|
191
|
+
context.size = resolvedSize;
|
|
192
|
+
}
|
|
218
193
|
|
|
194
|
+
if (collapsible === 'none') {
|
|
219
195
|
return (
|
|
220
196
|
<div
|
|
221
197
|
{...safeRootProps}
|
|
@@ -225,14 +201,15 @@ const Sidebar = React.forwardRef<HTMLDivElement, SidebarProps>(
|
|
|
225
201
|
data-side={side}
|
|
226
202
|
data-type={type}
|
|
227
203
|
data-collapsible={collapsible}
|
|
228
|
-
className={classNames('rt-SidebarRoot', className)}
|
|
204
|
+
className={classNames('rt-SidebarRoot', `rt-r-size-${size}`, className)}
|
|
229
205
|
>
|
|
230
206
|
<Theme>
|
|
231
|
-
<div
|
|
232
|
-
className={classNames('rt-SidebarContainer', `rt-variant-${variant}
|
|
207
|
+
<div
|
|
208
|
+
className={classNames('rt-SidebarContainer', `rt-variant-${variant}`)}
|
|
233
209
|
data-accent-color={resolvedColor}
|
|
234
210
|
data-high-contrast={highContrast || undefined}
|
|
235
211
|
data-side={side}
|
|
212
|
+
data-panel-background={panelBackground}
|
|
236
213
|
>
|
|
237
214
|
{children}
|
|
238
215
|
</div>
|
|
@@ -240,7 +217,67 @@ const Sidebar = React.forwardRef<HTMLDivElement, SidebarProps>(
|
|
|
240
217
|
</div>
|
|
241
218
|
);
|
|
242
219
|
}
|
|
243
|
-
|
|
220
|
+
|
|
221
|
+
if (isMobile) {
|
|
222
|
+
return (
|
|
223
|
+
<div
|
|
224
|
+
{...safeRootProps}
|
|
225
|
+
ref={forwardedRef}
|
|
226
|
+
data-accent-color={resolvedColor}
|
|
227
|
+
data-state={openMobile ? 'open' : 'closed'}
|
|
228
|
+
data-side={side}
|
|
229
|
+
data-type={type}
|
|
230
|
+
data-collapsible={collapsible}
|
|
231
|
+
className={classNames('rt-SidebarRoot', 'rt-SidebarRoot--mobile', className)}
|
|
232
|
+
>
|
|
233
|
+
<Theme>
|
|
234
|
+
<div
|
|
235
|
+
className={classNames(
|
|
236
|
+
'rt-SidebarContainer',
|
|
237
|
+
`rt-variant-${variant}`,
|
|
238
|
+
`rt-r-size-${size}`,
|
|
239
|
+
)}
|
|
240
|
+
data-accent-color={resolvedColor}
|
|
241
|
+
data-high-contrast={highContrast || undefined}
|
|
242
|
+
data-side={side}
|
|
243
|
+
data-panel-background={panelBackground}
|
|
244
|
+
>
|
|
245
|
+
{children}
|
|
246
|
+
</div>
|
|
247
|
+
</Theme>
|
|
248
|
+
</div>
|
|
249
|
+
);
|
|
250
|
+
}
|
|
251
|
+
|
|
252
|
+
return (
|
|
253
|
+
<div
|
|
254
|
+
{...safeRootProps}
|
|
255
|
+
ref={forwardedRef}
|
|
256
|
+
data-accent-color={resolvedColor}
|
|
257
|
+
data-state={state}
|
|
258
|
+
data-side={side}
|
|
259
|
+
data-type={type}
|
|
260
|
+
data-collapsible={collapsible}
|
|
261
|
+
className={classNames('rt-SidebarRoot', className)}
|
|
262
|
+
>
|
|
263
|
+
<Theme>
|
|
264
|
+
<div
|
|
265
|
+
className={classNames(
|
|
266
|
+
'rt-SidebarContainer',
|
|
267
|
+
`rt-variant-${variant}`,
|
|
268
|
+
`rt-r-size-${size}`,
|
|
269
|
+
)}
|
|
270
|
+
data-accent-color={resolvedColor}
|
|
271
|
+
data-high-contrast={highContrast || undefined}
|
|
272
|
+
data-side={side}
|
|
273
|
+
data-panel-background={panelBackground}
|
|
274
|
+
>
|
|
275
|
+
{children}
|
|
276
|
+
</div>
|
|
277
|
+
</Theme>
|
|
278
|
+
</div>
|
|
279
|
+
);
|
|
280
|
+
});
|
|
244
281
|
Sidebar.displayName = 'Sidebar.Root';
|
|
245
282
|
|
|
246
283
|
// Sidebar content area
|
|
@@ -250,24 +287,24 @@ const SidebarContent = React.forwardRef<HTMLDivElement, SidebarContentProps>(
|
|
|
250
287
|
({ className, children, ...props }, forwardedRef) => {
|
|
251
288
|
const context = React.useContext(SidebarContext);
|
|
252
289
|
const { size = '2', menuVariant = 'soft' } = context || {};
|
|
253
|
-
|
|
290
|
+
|
|
254
291
|
return (
|
|
255
292
|
<ScrollArea type="auto">
|
|
256
293
|
<div
|
|
257
294
|
{...props}
|
|
258
295
|
ref={forwardedRef}
|
|
259
296
|
className={classNames(
|
|
260
|
-
'rt-SidebarContent',
|
|
297
|
+
'rt-SidebarContent',
|
|
261
298
|
`rt-r-size-${size}`,
|
|
262
299
|
`rt-menu-variant-${menuVariant}`,
|
|
263
|
-
className
|
|
300
|
+
className,
|
|
264
301
|
)}
|
|
265
302
|
>
|
|
266
303
|
{children}
|
|
267
304
|
</div>
|
|
268
305
|
</ScrollArea>
|
|
269
306
|
);
|
|
270
|
-
}
|
|
307
|
+
},
|
|
271
308
|
);
|
|
272
309
|
SidebarContent.displayName = 'Sidebar.Content';
|
|
273
310
|
|
|
@@ -284,7 +321,7 @@ const SidebarHeader = React.forwardRef<HTMLDivElement, SidebarHeaderProps>(
|
|
|
284
321
|
({ className, asContainer = true, ...props }, forwardedRef) => {
|
|
285
322
|
const context = React.useContext(SidebarContext);
|
|
286
323
|
const { size = '2', menuVariant = 'soft' } = context || {};
|
|
287
|
-
|
|
324
|
+
|
|
288
325
|
return (
|
|
289
326
|
<div
|
|
290
327
|
{...props}
|
|
@@ -296,11 +333,11 @@ const SidebarHeader = React.forwardRef<HTMLDivElement, SidebarHeaderProps>(
|
|
|
296
333
|
{
|
|
297
334
|
'rt-SidebarHeader--container': asContainer,
|
|
298
335
|
},
|
|
299
|
-
className
|
|
336
|
+
className,
|
|
300
337
|
)}
|
|
301
338
|
/>
|
|
302
339
|
);
|
|
303
|
-
}
|
|
340
|
+
},
|
|
304
341
|
);
|
|
305
342
|
SidebarHeader.displayName = 'Sidebar.Header';
|
|
306
343
|
|
|
@@ -317,7 +354,7 @@ const SidebarFooter = React.forwardRef<HTMLDivElement, SidebarFooterProps>(
|
|
|
317
354
|
({ className, asContainer = true, ...props }, forwardedRef) => {
|
|
318
355
|
const context = React.useContext(SidebarContext);
|
|
319
356
|
const { size = '2', menuVariant = 'soft' } = context || {};
|
|
320
|
-
|
|
357
|
+
|
|
321
358
|
return (
|
|
322
359
|
<div
|
|
323
360
|
{...props}
|
|
@@ -329,37 +366,36 @@ const SidebarFooter = React.forwardRef<HTMLDivElement, SidebarFooterProps>(
|
|
|
329
366
|
{
|
|
330
367
|
'rt-SidebarFooter--container': asContainer,
|
|
331
368
|
},
|
|
332
|
-
className
|
|
369
|
+
className,
|
|
333
370
|
)}
|
|
334
371
|
/>
|
|
335
372
|
);
|
|
336
|
-
}
|
|
373
|
+
},
|
|
337
374
|
);
|
|
338
375
|
SidebarFooter.displayName = 'Sidebar.Footer';
|
|
339
376
|
|
|
340
377
|
// Sidebar trigger button
|
|
341
378
|
interface SidebarTriggerProps extends ComponentPropsWithout<typeof IconButton, RemovedProps> {}
|
|
342
379
|
|
|
343
|
-
const SidebarTrigger = React.forwardRef<
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
});
|
|
380
|
+
const SidebarTrigger = React.forwardRef<React.ElementRef<typeof IconButton>, SidebarTriggerProps>(
|
|
381
|
+
({ onClick, children, ...props }, forwardedRef) => {
|
|
382
|
+
const { toggleSidebar } = useSidebar();
|
|
383
|
+
|
|
384
|
+
return (
|
|
385
|
+
<IconButton
|
|
386
|
+
{...props}
|
|
387
|
+
ref={forwardedRef}
|
|
388
|
+
variant="ghost"
|
|
389
|
+
onClick={(event) => {
|
|
390
|
+
onClick?.(event);
|
|
391
|
+
toggleSidebar();
|
|
392
|
+
}}
|
|
393
|
+
>
|
|
394
|
+
{children || <ChevronDownIcon />}
|
|
395
|
+
</IconButton>
|
|
396
|
+
);
|
|
397
|
+
},
|
|
398
|
+
);
|
|
363
399
|
SidebarTrigger.displayName = 'Sidebar.Trigger';
|
|
364
400
|
|
|
365
401
|
// Removed SidebarInset - not needed
|
|
@@ -384,12 +420,8 @@ interface SidebarMenuProps extends React.ComponentPropsWithoutRef<'ul'> {}
|
|
|
384
420
|
|
|
385
421
|
const SidebarMenu = React.forwardRef<HTMLUListElement, SidebarMenuProps>(
|
|
386
422
|
({ className, ...props }, forwardedRef) => (
|
|
387
|
-
<ul
|
|
388
|
-
|
|
389
|
-
ref={forwardedRef}
|
|
390
|
-
className={classNames('rt-SidebarMenu', className)}
|
|
391
|
-
/>
|
|
392
|
-
)
|
|
423
|
+
<ul {...props} ref={forwardedRef} className={classNames('rt-SidebarMenu', className)} />
|
|
424
|
+
),
|
|
393
425
|
);
|
|
394
426
|
SidebarMenu.displayName = 'Sidebar.Menu';
|
|
395
427
|
|
|
@@ -397,34 +429,44 @@ interface SidebarMenuItemProps extends React.ComponentPropsWithoutRef<'li'> {}
|
|
|
397
429
|
|
|
398
430
|
const SidebarMenuItem = React.forwardRef<HTMLLIElement, SidebarMenuItemProps>(
|
|
399
431
|
({ className, ...props }, forwardedRef) => (
|
|
400
|
-
<li
|
|
401
|
-
|
|
402
|
-
ref={forwardedRef}
|
|
403
|
-
className={classNames('rt-SidebarMenuItem', className)}
|
|
404
|
-
/>
|
|
405
|
-
)
|
|
432
|
+
<li {...props} ref={forwardedRef} className={classNames('rt-SidebarMenuItem', className)} />
|
|
433
|
+
),
|
|
406
434
|
);
|
|
407
435
|
SidebarMenuItem.displayName = 'Sidebar.MenuItem';
|
|
408
436
|
|
|
409
437
|
interface SidebarMenuButtonProps extends React.ComponentPropsWithoutRef<'button'> {
|
|
410
438
|
asChild?: boolean;
|
|
411
439
|
isActive?: boolean;
|
|
440
|
+
shortcut?: React.ReactNode;
|
|
441
|
+
badge?: string | BadgeConfig;
|
|
412
442
|
}
|
|
413
443
|
|
|
414
444
|
const SidebarMenuButton = React.forwardRef<HTMLButtonElement, SidebarMenuButtonProps>(
|
|
415
|
-
(
|
|
445
|
+
(
|
|
446
|
+
{
|
|
447
|
+
asChild = false,
|
|
448
|
+
isActive = false,
|
|
449
|
+
shortcut,
|
|
450
|
+
badge,
|
|
451
|
+
className,
|
|
452
|
+
children,
|
|
453
|
+
onMouseEnter,
|
|
454
|
+
onMouseLeave,
|
|
455
|
+
...props
|
|
456
|
+
},
|
|
457
|
+
forwardedRef,
|
|
458
|
+
) => {
|
|
416
459
|
const [isHighlighted, setIsHighlighted] = React.useState(false);
|
|
460
|
+
const context = React.useContext(SidebarContext);
|
|
461
|
+
const { size: sidebarSize = '2' } = context || {};
|
|
462
|
+
|
|
417
463
|
const Comp = asChild ? Slot : 'button';
|
|
418
|
-
|
|
464
|
+
|
|
419
465
|
return (
|
|
420
466
|
<Comp
|
|
421
467
|
{...props}
|
|
422
468
|
ref={forwardedRef}
|
|
423
|
-
className={classNames(
|
|
424
|
-
'rt-reset',
|
|
425
|
-
'rt-SidebarMenuButton',
|
|
426
|
-
className
|
|
427
|
-
)}
|
|
469
|
+
className={classNames('rt-reset', 'rt-SidebarMenuButton', className)}
|
|
428
470
|
data-active={isActive || undefined}
|
|
429
471
|
data-highlighted={isHighlighted || undefined}
|
|
430
472
|
onMouseEnter={(event) => {
|
|
@@ -435,9 +477,42 @@ const SidebarMenuButton = React.forwardRef<HTMLButtonElement, SidebarMenuButtonP
|
|
|
435
477
|
setIsHighlighted(false);
|
|
436
478
|
onMouseLeave?.(event);
|
|
437
479
|
}}
|
|
438
|
-
|
|
480
|
+
>
|
|
481
|
+
{asChild ? (
|
|
482
|
+
children
|
|
483
|
+
) : (
|
|
484
|
+
<>
|
|
485
|
+
{children}
|
|
486
|
+
{/* Badge with soft variant default and size mapping to sidebar size */}
|
|
487
|
+
{badge && (
|
|
488
|
+
<div className="rt-SidebarMenuBadge">
|
|
489
|
+
{typeof badge === 'string' ? (
|
|
490
|
+
<Badge size={sidebarSize} variant="soft">
|
|
491
|
+
{badge}
|
|
492
|
+
</Badge>
|
|
493
|
+
) : (
|
|
494
|
+
<Badge
|
|
495
|
+
size={badge.size || sidebarSize}
|
|
496
|
+
variant={badge.variant || 'soft'}
|
|
497
|
+
color={badge.color}
|
|
498
|
+
highContrast={badge.highContrast}
|
|
499
|
+
radius={badge.radius}
|
|
500
|
+
>
|
|
501
|
+
{badge.content}
|
|
502
|
+
</Badge>
|
|
503
|
+
)}
|
|
504
|
+
</div>
|
|
505
|
+
)}
|
|
506
|
+
{shortcut && (
|
|
507
|
+
<div className="rt-BaseMenuShortcut rt-SidebarMenuShortcut">
|
|
508
|
+
<Kbd size={sidebarSize}>{shortcut}</Kbd>
|
|
509
|
+
</div>
|
|
510
|
+
)}
|
|
511
|
+
</>
|
|
512
|
+
)}
|
|
513
|
+
</Comp>
|
|
439
514
|
);
|
|
440
|
-
}
|
|
515
|
+
},
|
|
441
516
|
);
|
|
442
517
|
SidebarMenuButton.displayName = 'Sidebar.MenuButton';
|
|
443
518
|
|
|
@@ -450,75 +525,76 @@ const SidebarMenuSub = React.forwardRef<HTMLDivElement, SidebarMenuSubProps>(
|
|
|
450
525
|
({ defaultOpen = false, children, ...props }, forwardedRef) => {
|
|
451
526
|
return (
|
|
452
527
|
<div {...props} ref={forwardedRef}>
|
|
453
|
-
<Accordion.Root
|
|
454
|
-
|
|
455
|
-
collapsible
|
|
456
|
-
defaultValue={defaultOpen ? 'item' : undefined}
|
|
457
|
-
>
|
|
458
|
-
<Accordion.Item value="item">
|
|
459
|
-
{children}
|
|
460
|
-
</Accordion.Item>
|
|
528
|
+
<Accordion.Root type="single" collapsible defaultValue={defaultOpen ? 'item' : undefined}>
|
|
529
|
+
<Accordion.Item value="item">{children}</Accordion.Item>
|
|
461
530
|
</Accordion.Root>
|
|
462
531
|
</div>
|
|
463
532
|
);
|
|
464
|
-
}
|
|
533
|
+
},
|
|
465
534
|
);
|
|
466
535
|
SidebarMenuSub.displayName = 'Sidebar.MenuSub';
|
|
467
536
|
|
|
468
|
-
interface SidebarMenuSubTriggerProps
|
|
537
|
+
interface SidebarMenuSubTriggerProps
|
|
538
|
+
extends React.ComponentPropsWithoutRef<typeof Accordion.Trigger> {
|
|
469
539
|
asChild?: boolean;
|
|
470
540
|
}
|
|
471
541
|
|
|
472
542
|
const SidebarMenuSubTrigger = React.forwardRef<
|
|
473
543
|
React.ElementRef<typeof Accordion.Trigger>,
|
|
474
544
|
SidebarMenuSubTriggerProps
|
|
475
|
-
>(
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
className
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
|
|
500
|
-
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
|
|
505
|
-
|
|
506
|
-
|
|
507
|
-
|
|
508
|
-
|
|
509
|
-
|
|
510
|
-
|
|
511
|
-
|
|
512
|
-
|
|
513
|
-
|
|
514
|
-
|
|
515
|
-
|
|
516
|
-
|
|
517
|
-
|
|
518
|
-
|
|
545
|
+
>(
|
|
546
|
+
(
|
|
547
|
+
{ asChild = false, className, children, onMouseEnter, onMouseLeave, ...props },
|
|
548
|
+
forwardedRef,
|
|
549
|
+
) => {
|
|
550
|
+
const [isHighlighted, setIsHighlighted] = React.useState(false);
|
|
551
|
+
|
|
552
|
+
return (
|
|
553
|
+
<Accordion.Header asChild>
|
|
554
|
+
<div>
|
|
555
|
+
<Accordion.Trigger
|
|
556
|
+
{...props}
|
|
557
|
+
ref={forwardedRef}
|
|
558
|
+
asChild={asChild}
|
|
559
|
+
className={classNames(
|
|
560
|
+
'rt-reset',
|
|
561
|
+
'rt-SidebarMenuButton',
|
|
562
|
+
'rt-SidebarMenuSubTrigger',
|
|
563
|
+
className,
|
|
564
|
+
)}
|
|
565
|
+
data-highlighted={isHighlighted || undefined}
|
|
566
|
+
onMouseEnter={(event) => {
|
|
567
|
+
setIsHighlighted(true);
|
|
568
|
+
onMouseEnter?.(event);
|
|
569
|
+
}}
|
|
570
|
+
onMouseLeave={(event) => {
|
|
571
|
+
setIsHighlighted(false);
|
|
572
|
+
onMouseLeave?.(event);
|
|
573
|
+
}}
|
|
574
|
+
>
|
|
575
|
+
{asChild ? (
|
|
576
|
+
children
|
|
577
|
+
) : (
|
|
578
|
+
<>
|
|
579
|
+
{children}
|
|
580
|
+
<ThickChevronRightIcon
|
|
581
|
+
className={classNames(
|
|
582
|
+
'rt-BaseMenuSubTriggerIcon',
|
|
583
|
+
'rt-SidebarMenuSubTriggerIcon',
|
|
584
|
+
)}
|
|
585
|
+
/>
|
|
586
|
+
</>
|
|
587
|
+
)}
|
|
588
|
+
</Accordion.Trigger>
|
|
589
|
+
</div>
|
|
590
|
+
</Accordion.Header>
|
|
591
|
+
);
|
|
592
|
+
},
|
|
593
|
+
);
|
|
519
594
|
SidebarMenuSubTrigger.displayName = 'Sidebar.MenuSubTrigger';
|
|
520
595
|
|
|
521
|
-
interface SidebarMenuSubContentProps
|
|
596
|
+
interface SidebarMenuSubContentProps
|
|
597
|
+
extends React.ComponentPropsWithoutRef<typeof Accordion.Content> {}
|
|
522
598
|
|
|
523
599
|
const SidebarMenuSubContent = React.forwardRef<
|
|
524
600
|
React.ElementRef<typeof Accordion.Content>,
|
|
@@ -530,9 +606,7 @@ const SidebarMenuSubContent = React.forwardRef<
|
|
|
530
606
|
ref={forwardedRef}
|
|
531
607
|
className={classNames('rt-SidebarMenuSubContent', className)}
|
|
532
608
|
>
|
|
533
|
-
<div className="rt-SidebarMenuSubList">
|
|
534
|
-
{children}
|
|
535
|
-
</div>
|
|
609
|
+
<div className="rt-SidebarMenuSubList">{children}</div>
|
|
536
610
|
</Accordion.Content>
|
|
537
611
|
);
|
|
538
612
|
});
|
|
@@ -543,12 +617,8 @@ interface SidebarGroupProps extends React.ComponentPropsWithoutRef<'div'> {}
|
|
|
543
617
|
|
|
544
618
|
const SidebarGroup = React.forwardRef<HTMLDivElement, SidebarGroupProps>(
|
|
545
619
|
({ className, ...props }, forwardedRef) => (
|
|
546
|
-
<div
|
|
547
|
-
|
|
548
|
-
ref={forwardedRef}
|
|
549
|
-
className={classNames('rt-SidebarGroup', className)}
|
|
550
|
-
/>
|
|
551
|
-
)
|
|
620
|
+
<div {...props} ref={forwardedRef} className={classNames('rt-SidebarGroup', className)} />
|
|
621
|
+
),
|
|
552
622
|
);
|
|
553
623
|
SidebarGroup.displayName = 'Sidebar.Group';
|
|
554
624
|
|
|
@@ -559,7 +629,7 @@ interface SidebarGroupLabelProps extends React.ComponentPropsWithoutRef<'div'> {
|
|
|
559
629
|
const SidebarGroupLabel = React.forwardRef<HTMLDivElement, SidebarGroupLabelProps>(
|
|
560
630
|
({ asChild = false, className, ...props }, forwardedRef) => {
|
|
561
631
|
const Comp = asChild ? Slot : 'div';
|
|
562
|
-
|
|
632
|
+
|
|
563
633
|
return (
|
|
564
634
|
<Comp
|
|
565
635
|
{...props}
|
|
@@ -567,7 +637,7 @@ const SidebarGroupLabel = React.forwardRef<HTMLDivElement, SidebarGroupLabelProp
|
|
|
567
637
|
className={classNames('rt-SidebarGroupLabel', className)}
|
|
568
638
|
/>
|
|
569
639
|
);
|
|
570
|
-
}
|
|
640
|
+
},
|
|
571
641
|
);
|
|
572
642
|
SidebarGroupLabel.displayName = 'Sidebar.GroupLabel';
|
|
573
643
|
|
|
@@ -580,7 +650,7 @@ const SidebarGroupContent = React.forwardRef<HTMLDivElement, SidebarGroupContent
|
|
|
580
650
|
ref={forwardedRef}
|
|
581
651
|
className={classNames('rt-SidebarGroupContent', className)}
|
|
582
652
|
/>
|
|
583
|
-
)
|
|
653
|
+
),
|
|
584
654
|
);
|
|
585
655
|
SidebarGroupContent.displayName = 'Sidebar.GroupContent';
|
|
586
656
|
|
|
@@ -608,13 +678,13 @@ export {
|
|
|
608
678
|
|
|
609
679
|
/**
|
|
610
680
|
* Enhanced Sidebar Header and Footer Usage Examples:
|
|
611
|
-
*
|
|
681
|
+
*
|
|
612
682
|
* 1. Simple default container (backwards compatible):
|
|
613
683
|
* <Sidebar.Header>
|
|
614
684
|
* <Logo />
|
|
615
685
|
* <span>App Name</span>
|
|
616
686
|
* </Sidebar.Header>
|
|
617
|
-
*
|
|
687
|
+
*
|
|
618
688
|
* 2. Custom flex layout:
|
|
619
689
|
* <Sidebar.Header className="rt-justify-between rt-gap-3">
|
|
620
690
|
* <Logo />
|
|
@@ -622,7 +692,7 @@ export {
|
|
|
622
692
|
* <SettingsIcon />
|
|
623
693
|
* </Sidebar.MenuButton>
|
|
624
694
|
* </Sidebar.Header>
|
|
625
|
-
*
|
|
695
|
+
*
|
|
626
696
|
* 3. Column layout for multiple rows:
|
|
627
697
|
* <Sidebar.Header className="rt-flex-col rt-gap-2" asContainer={false}>
|
|
628
698
|
* <div className="rt-flex rt-items-center rt-gap-2">
|
|
@@ -634,7 +704,7 @@ export {
|
|
|
634
704
|
* <span>John Doe</span>
|
|
635
705
|
* </Sidebar.MenuButton>
|
|
636
706
|
* </Sidebar.Header>
|
|
637
|
-
*
|
|
707
|
+
*
|
|
638
708
|
* 4. Interactive footer with menu button:
|
|
639
709
|
* <Sidebar.Footer>
|
|
640
710
|
* <Sidebar.MenuButton>
|
|
@@ -643,7 +713,7 @@ export {
|
|
|
643
713
|
* <ChevronUpIcon />
|
|
644
714
|
* </Sidebar.MenuButton>
|
|
645
715
|
* </Sidebar.Footer>
|
|
646
|
-
*
|
|
716
|
+
*
|
|
647
717
|
* 5. Custom footer layout:
|
|
648
718
|
* <Sidebar.Footer className="rt-justify-between">
|
|
649
719
|
* <span>v1.0.0</span>
|
|
@@ -651,7 +721,7 @@ export {
|
|
|
651
721
|
* <HelpIcon />
|
|
652
722
|
* </Sidebar.MenuButton>
|
|
653
723
|
* </Sidebar.Footer>
|
|
654
|
-
*
|
|
724
|
+
*
|
|
655
725
|
* Available utility classes:
|
|
656
726
|
* - Layout: rt-flex-row, rt-flex-col
|
|
657
727
|
* - Alignment: rt-items-center, rt-items-start, rt-items-end
|
|
@@ -666,4 +736,5 @@ export type {
|
|
|
666
736
|
SidebarHeaderProps as HeaderProps,
|
|
667
737
|
SidebarFooterProps as FooterProps,
|
|
668
738
|
SidebarTriggerProps as TriggerProps,
|
|
669
|
-
|
|
739
|
+
BadgeConfig,
|
|
740
|
+
};
|