@kushagradhawan/kookie-ui 0.1.33 → 0.1.35
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 +684 -205
- 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/chatbar.d.ts +205 -0
- package/dist/cjs/components/chatbar.d.ts.map +1 -0
- package/dist/cjs/components/chatbar.js +2 -0
- package/dist/cjs/components/chatbar.js.map +7 -0
- package/dist/cjs/components/icon-button.d.ts.map +1 -1
- package/dist/cjs/components/icon-button.js +2 -2
- package/dist/cjs/components/icon-button.js.map +3 -3
- package/dist/cjs/components/icons.d.ts +6 -1
- package/dist/cjs/components/icons.d.ts.map +1 -1
- package/dist/cjs/components/icons.js +1 -1
- package/dist/cjs/components/icons.js.map +3 -3
- package/dist/cjs/components/index.d.ts +3 -0
- package/dist/cjs/components/index.d.ts.map +1 -1
- package/dist/cjs/components/index.js +1 -1
- package/dist/cjs/components/index.js.map +3 -3
- package/dist/cjs/components/popover.d.ts +13 -1
- 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/sheet.d.ts +82 -0
- package/dist/cjs/components/sheet.d.ts.map +1 -0
- package/dist/cjs/components/sheet.js +2 -0
- package/dist/cjs/components/sheet.js.map +7 -0
- package/dist/cjs/components/shell.d.ts +180 -0
- package/dist/cjs/components/shell.d.ts.map +1 -0
- package/dist/cjs/components/shell.js +2 -0
- package/dist/cjs/components/shell.js.map +7 -0
- package/dist/cjs/components/sidebar.d.ts +4 -33
- 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/skeleton.d.ts.map +1 -1
- package/dist/cjs/components/skeleton.js +1 -1
- package/dist/cjs/components/skeleton.js.map +2 -2
- package/dist/cjs/helpers/inert.d.ts +1 -1
- package/dist/cjs/helpers/inert.d.ts.map +1 -1
- package/dist/cjs/helpers/inert.js +1 -1
- package/dist/cjs/helpers/inert.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/chatbar.d.ts +205 -0
- package/dist/esm/components/chatbar.d.ts.map +1 -0
- package/dist/esm/components/chatbar.js +2 -0
- package/dist/esm/components/chatbar.js.map +7 -0
- package/dist/esm/components/icon-button.d.ts.map +1 -1
- package/dist/esm/components/icon-button.js +2 -2
- package/dist/esm/components/icon-button.js.map +3 -3
- package/dist/esm/components/icons.d.ts +6 -1
- package/dist/esm/components/icons.d.ts.map +1 -1
- package/dist/esm/components/icons.js +1 -1
- package/dist/esm/components/icons.js.map +3 -3
- package/dist/esm/components/index.d.ts +3 -0
- package/dist/esm/components/index.d.ts.map +1 -1
- package/dist/esm/components/index.js +1 -1
- package/dist/esm/components/index.js.map +3 -3
- package/dist/esm/components/popover.d.ts +13 -1
- 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/sheet.d.ts +82 -0
- package/dist/esm/components/sheet.d.ts.map +1 -0
- package/dist/esm/components/sheet.js +2 -0
- package/dist/esm/components/sheet.js.map +7 -0
- package/dist/esm/components/shell.d.ts +180 -0
- package/dist/esm/components/shell.d.ts.map +1 -0
- package/dist/esm/components/shell.js +2 -0
- package/dist/esm/components/shell.js.map +7 -0
- package/dist/esm/components/sidebar.d.ts +4 -33
- 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/skeleton.d.ts.map +1 -1
- package/dist/esm/components/skeleton.js.map +2 -2
- package/dist/esm/helpers/inert.d.ts +1 -1
- package/dist/esm/helpers/inert.d.ts.map +1 -1
- package/dist/esm/helpers/inert.js +1 -1
- package/dist/esm/helpers/inert.js.map +2 -2
- package/package.json +2 -1
- package/src/components/_internal/base-button.tsx +8 -0
- package/src/components/_internal/base-card.css +4 -4
- package/src/components/_internal/base-dialog.css +3 -41
- package/src/components/_internal/base-menu.css +2 -2
- package/src/components/_internal/base-sidebar-menu.css +3 -3
- package/src/components/accordion.css +2 -2
- package/src/components/animations.css +65 -81
- package/src/components/chatbar.css +214 -0
- package/src/components/chatbar.tsx +1195 -0
- package/src/components/icon-button.tsx +11 -0
- package/src/components/icons.tsx +97 -2
- package/src/components/image.css +2 -2
- package/src/components/index.css +3 -0
- package/src/components/index.tsx +3 -0
- package/src/components/popover.css +45 -0
- package/src/components/popover.tsx +180 -2
- package/src/components/scroll-area.css +3 -3
- package/src/components/segmented-control.css +3 -3
- package/src/components/sheet.css +90 -0
- package/src/components/sheet.tsx +247 -0
- package/src/components/shell.css +137 -0
- package/src/components/shell.tsx +1032 -0
- package/src/components/sidebar.css +55 -268
- package/src/components/sidebar.tsx +40 -262
- package/src/components/skeleton.tsx +1 -2
- package/src/components/text-area.css +1 -0
- package/src/components/tooltip.css +2 -2
- package/src/helpers/inert.ts +3 -3
- package/src/styles/tokens/constants.css +6 -3
- package/src/styles/tokens/index.css +1 -0
- package/src/styles/tokens/transition.css +91 -46
- package/styles.css +743 -241
- package/tokens/base.css +55 -33
- package/tokens.css +59 -36
|
@@ -6,11 +6,11 @@ import { Slot } from './slot.js';
|
|
|
6
6
|
import { Accordion } from 'radix-ui';
|
|
7
7
|
|
|
8
8
|
import { sidebarPropDefs } from './sidebar.props.js';
|
|
9
|
-
import {
|
|
10
|
-
import { IconButton } from './icon-button.js';
|
|
9
|
+
import { useThemeContext } from './theme.js';
|
|
10
|
+
// import { IconButton } from './icon-button.js';
|
|
11
11
|
import { ScrollArea } from './scroll-area.js';
|
|
12
12
|
import { Separator } from './separator.js';
|
|
13
|
-
import {
|
|
13
|
+
import { ThickChevronRightIcon } from './icons.js';
|
|
14
14
|
import { extractProps } from '../helpers/extract-props.js';
|
|
15
15
|
import { Kbd } from './kbd.js';
|
|
16
16
|
import { Badge } from './badge.js';
|
|
@@ -29,150 +29,33 @@ type BadgeConfig = {
|
|
|
29
29
|
radius?: BadgeProps['radius'];
|
|
30
30
|
};
|
|
31
31
|
|
|
32
|
-
//
|
|
33
|
-
type
|
|
34
|
-
state: 'expanded' | 'collapsed';
|
|
35
|
-
open: boolean;
|
|
36
|
-
setOpen: (open: boolean) => void;
|
|
37
|
-
openMobile: boolean;
|
|
38
|
-
setOpenMobile: (open: boolean) => void;
|
|
39
|
-
isMobile: boolean;
|
|
40
|
-
toggleSidebar: () => void;
|
|
41
|
-
side: 'left' | 'right';
|
|
42
|
-
type: 'sidebar' | 'floating';
|
|
43
|
-
variant: 'soft' | 'outline' | 'surface' | 'ghost';
|
|
44
|
-
menuVariant: 'solid' | 'soft';
|
|
45
|
-
collapsible: 'offcanvas' | 'icon' | 'none';
|
|
32
|
+
// Internal presentational context (not exported) for size/menu variant
|
|
33
|
+
type SidebarVisualContextValue = {
|
|
46
34
|
size: '1' | '2';
|
|
35
|
+
menuVariant: 'solid' | 'soft';
|
|
47
36
|
};
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
function useSidebar() {
|
|
52
|
-
const context = React.useContext(SidebarContext);
|
|
53
|
-
if (!context) {
|
|
54
|
-
throw new Error('useSidebar must be used within a SidebarProvider.');
|
|
55
|
-
}
|
|
56
|
-
return context;
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
// Hook to detect mobile (simplified version)
|
|
60
|
-
function useIsMobile() {
|
|
61
|
-
const [isMobile, setIsMobile] = React.useState(false);
|
|
62
|
-
|
|
63
|
-
React.useEffect(() => {
|
|
64
|
-
const checkIsMobile = () => {
|
|
65
|
-
setIsMobile(window.innerWidth < 768);
|
|
66
|
-
};
|
|
67
|
-
|
|
68
|
-
checkIsMobile();
|
|
69
|
-
window.addEventListener('resize', checkIsMobile);
|
|
70
|
-
return () => window.removeEventListener('resize', checkIsMobile);
|
|
71
|
-
}, []);
|
|
72
|
-
|
|
73
|
-
return isMobile;
|
|
74
|
-
}
|
|
75
|
-
|
|
76
|
-
// Provider component
|
|
77
|
-
interface SidebarProviderProps extends React.ComponentPropsWithoutRef<'div'> {
|
|
78
|
-
defaultOpen?: boolean;
|
|
79
|
-
open?: boolean;
|
|
80
|
-
onOpenChange?: (open: boolean) => void;
|
|
81
|
-
side?: 'left' | 'right';
|
|
37
|
+
const SidebarVisualContext = React.createContext<SidebarVisualContextValue | null>(null);
|
|
38
|
+
function useSidebarVisual() {
|
|
39
|
+
return React.useContext(SidebarVisualContext);
|
|
82
40
|
}
|
|
83
41
|
|
|
84
|
-
const SidebarProvider = React.forwardRef<HTMLDivElement, SidebarProviderProps>(
|
|
85
|
-
(
|
|
86
|
-
{
|
|
87
|
-
defaultOpen = true,
|
|
88
|
-
open: openProp,
|
|
89
|
-
onOpenChange: setOpenProp,
|
|
90
|
-
side = 'left',
|
|
91
|
-
className,
|
|
92
|
-
children,
|
|
93
|
-
...props
|
|
94
|
-
},
|
|
95
|
-
forwardedRef,
|
|
96
|
-
) => {
|
|
97
|
-
const isMobile = useIsMobile();
|
|
98
|
-
const [openMobile, setOpenMobile] = React.useState(false);
|
|
99
|
-
|
|
100
|
-
// Internal state for uncontrolled mode
|
|
101
|
-
const [internalOpen, setInternalOpen] = React.useState(defaultOpen);
|
|
102
|
-
|
|
103
|
-
// Use controlled state if provided, otherwise internal state
|
|
104
|
-
const open = openProp ?? internalOpen;
|
|
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
|
-
);
|
|
117
|
-
|
|
118
|
-
// Helper to toggle the sidebar
|
|
119
|
-
const toggleSidebar = React.useCallback(() => {
|
|
120
|
-
return isMobile ? setOpenMobile((open) => !open) : setOpen((open) => !open);
|
|
121
|
-
}, [isMobile, setOpen, setOpenMobile]);
|
|
122
|
-
|
|
123
|
-
// State for data attributes
|
|
124
|
-
const state = open ? 'expanded' : 'collapsed';
|
|
125
|
-
|
|
126
|
-
const contextValue = React.useMemo<Partial<SidebarContextProps>>(
|
|
127
|
-
() => ({
|
|
128
|
-
state,
|
|
129
|
-
open,
|
|
130
|
-
setOpen,
|
|
131
|
-
isMobile,
|
|
132
|
-
openMobile,
|
|
133
|
-
setOpenMobile,
|
|
134
|
-
toggleSidebar,
|
|
135
|
-
side,
|
|
136
|
-
}),
|
|
137
|
-
[state, open, setOpen, isMobile, openMobile, setOpenMobile, toggleSidebar, side],
|
|
138
|
-
);
|
|
139
|
-
|
|
140
|
-
return (
|
|
141
|
-
<div
|
|
142
|
-
{...props}
|
|
143
|
-
ref={forwardedRef}
|
|
144
|
-
className={classNames('rt-SidebarProvider', className)}
|
|
145
|
-
data-state={state}
|
|
146
|
-
data-side={side}
|
|
147
|
-
>
|
|
148
|
-
<SidebarContext.Provider value={contextValue as SidebarContextProps}>
|
|
149
|
-
{children}
|
|
150
|
-
</SidebarContext.Provider>
|
|
151
|
-
</div>
|
|
152
|
-
);
|
|
153
|
-
},
|
|
154
|
-
);
|
|
155
|
-
SidebarProvider.displayName = 'Sidebar.Provider';
|
|
156
|
-
|
|
157
42
|
// Main Sidebar component
|
|
158
43
|
type SidebarOwnProps = GetPropDefTypes<typeof sidebarPropDefs>;
|
|
159
44
|
interface SidebarProps extends ComponentPropsWithout<'div', RemovedProps>, SidebarOwnProps {}
|
|
160
45
|
|
|
161
46
|
const Sidebar = React.forwardRef<HTMLDivElement, SidebarProps>((props, forwardedRef) => {
|
|
162
47
|
const themeContext = useThemeContext();
|
|
163
|
-
const { isMobile, state, openMobile } = useSidebar();
|
|
164
48
|
|
|
165
49
|
const {
|
|
166
50
|
size = sidebarPropDefs.size.default,
|
|
167
51
|
variant = sidebarPropDefs.variant.default,
|
|
168
52
|
menuVariant = sidebarPropDefs.menuVariant.default,
|
|
169
|
-
type = sidebarPropDefs.type.default,
|
|
170
|
-
side = sidebarPropDefs.side.default,
|
|
171
|
-
collapsible = sidebarPropDefs.collapsible.default,
|
|
53
|
+
// type = sidebarPropDefs.type.default,
|
|
54
|
+
// side = sidebarPropDefs.side.default,
|
|
55
|
+
// collapsible = sidebarPropDefs.collapsible.default,
|
|
172
56
|
panelBackground,
|
|
173
57
|
color,
|
|
174
58
|
highContrast = sidebarPropDefs.highContrast.default,
|
|
175
|
-
|
|
176
59
|
} = props;
|
|
177
60
|
|
|
178
61
|
const { className, children, ...rootProps } = extractProps(props, sidebarPropDefs);
|
|
@@ -181,104 +64,28 @@ const Sidebar = React.forwardRef<HTMLDivElement, SidebarProps>((props, forwarded
|
|
|
181
64
|
|
|
182
65
|
// Update context with current props - we'll pass the resolved values
|
|
183
66
|
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
|
-
}
|
|
193
|
-
|
|
194
|
-
if (collapsible === 'none') {
|
|
195
|
-
return (
|
|
196
|
-
<div
|
|
197
|
-
{...safeRootProps}
|
|
198
|
-
ref={forwardedRef}
|
|
199
|
-
data-accent-color={resolvedColor}
|
|
200
|
-
data-state={state}
|
|
201
|
-
data-side={side}
|
|
202
|
-
data-type={type}
|
|
203
|
-
data-collapsible={collapsible}
|
|
204
|
-
className={classNames('rt-SidebarRoot', `rt-r-size-${size}`, className)}
|
|
205
|
-
>
|
|
206
|
-
<Theme>
|
|
207
|
-
<div
|
|
208
|
-
className={classNames('rt-SidebarContainer', `rt-variant-${variant}`)}
|
|
209
|
-
data-accent-color={resolvedColor}
|
|
210
|
-
data-high-contrast={highContrast || undefined}
|
|
211
|
-
data-side={side}
|
|
212
|
-
data-panel-background={panelBackground}
|
|
213
|
-
>
|
|
214
|
-
{children}
|
|
215
|
-
</div>
|
|
216
|
-
</Theme>
|
|
217
|
-
</div>
|
|
218
|
-
);
|
|
219
|
-
}
|
|
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-type={type}
|
|
244
|
-
data-collapsible={collapsible}
|
|
245
|
-
data-panel-background={panelBackground}
|
|
246
|
-
>
|
|
247
|
-
{children}
|
|
248
|
-
</div>
|
|
249
|
-
</Theme>
|
|
250
|
-
</div>
|
|
251
|
-
);
|
|
252
|
-
}
|
|
253
|
-
|
|
254
67
|
return (
|
|
255
68
|
<div
|
|
256
69
|
{...safeRootProps}
|
|
257
70
|
ref={forwardedRef}
|
|
258
71
|
data-accent-color={resolvedColor}
|
|
259
|
-
data-state={state}
|
|
260
|
-
data-side={side}
|
|
261
|
-
data-type={type}
|
|
262
|
-
data-collapsible={collapsible}
|
|
263
72
|
className={classNames('rt-SidebarRoot', className)}
|
|
264
73
|
>
|
|
265
|
-
<
|
|
74
|
+
<SidebarVisualContext.Provider value={{ size: resolvedSize, menuVariant }}>
|
|
266
75
|
<div
|
|
267
76
|
className={classNames(
|
|
268
77
|
'rt-SidebarContainer',
|
|
269
78
|
`rt-variant-${variant}`,
|
|
270
|
-
`rt-r-size-${
|
|
79
|
+
`rt-r-size-${resolvedSize}`,
|
|
80
|
+
`rt-menu-variant-${menuVariant}`,
|
|
271
81
|
)}
|
|
272
82
|
data-accent-color={resolvedColor}
|
|
273
83
|
data-high-contrast={highContrast || undefined}
|
|
274
|
-
data-side={side}
|
|
275
|
-
data-type={type}
|
|
276
|
-
data-collapsible={collapsible}
|
|
277
84
|
data-panel-background={panelBackground}
|
|
278
85
|
>
|
|
279
86
|
{children}
|
|
280
87
|
</div>
|
|
281
|
-
</
|
|
88
|
+
</SidebarVisualContext.Provider>
|
|
282
89
|
</div>
|
|
283
90
|
);
|
|
284
91
|
});
|
|
@@ -286,33 +93,34 @@ Sidebar.displayName = 'Sidebar.Root';
|
|
|
286
93
|
|
|
287
94
|
// Sidebar content area
|
|
288
95
|
interface SidebarContentProps extends React.ComponentPropsWithoutRef<'div'> {
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
* @default "Main navigation"
|
|
292
|
-
*/
|
|
96
|
+
id?: string;
|
|
97
|
+
role?: 'navigation' | 'none';
|
|
293
98
|
'aria-label'?: string;
|
|
294
99
|
}
|
|
295
100
|
|
|
296
101
|
const SidebarContent = React.forwardRef<HTMLDivElement, SidebarContentProps>(
|
|
297
102
|
(
|
|
298
|
-
{
|
|
103
|
+
{
|
|
104
|
+
className,
|
|
105
|
+
children,
|
|
106
|
+
role = 'navigation',
|
|
107
|
+
'aria-label': ariaLabel = 'Main navigation',
|
|
108
|
+
id,
|
|
109
|
+
...props
|
|
110
|
+
},
|
|
299
111
|
forwardedRef,
|
|
300
112
|
) => {
|
|
301
|
-
const
|
|
302
|
-
const
|
|
303
|
-
|
|
304
|
-
menuVariant = 'soft',
|
|
305
|
-
type = 'sidebar',
|
|
306
|
-
collapsible = 'none',
|
|
307
|
-
} = context || {};
|
|
113
|
+
const visual = useSidebarVisual();
|
|
114
|
+
const size = visual?.size ?? '2';
|
|
115
|
+
const menuVariant = visual?.menuVariant ?? 'soft';
|
|
308
116
|
|
|
309
117
|
return (
|
|
310
118
|
<ScrollArea type="hover">
|
|
311
119
|
<div
|
|
312
120
|
{...props}
|
|
313
121
|
ref={forwardedRef}
|
|
314
|
-
id=
|
|
315
|
-
role=
|
|
122
|
+
id={id}
|
|
123
|
+
role={role}
|
|
316
124
|
aria-label={ariaLabel}
|
|
317
125
|
className={classNames(
|
|
318
126
|
'rt-BaseMenuContent',
|
|
@@ -321,8 +129,6 @@ const SidebarContent = React.forwardRef<HTMLDivElement, SidebarContentProps>(
|
|
|
321
129
|
`rt-menu-variant-${menuVariant}`,
|
|
322
130
|
className,
|
|
323
131
|
)}
|
|
324
|
-
data-type={type}
|
|
325
|
-
data-collapsible={collapsible}
|
|
326
132
|
>
|
|
327
133
|
{children}
|
|
328
134
|
</div>
|
|
@@ -343,8 +149,9 @@ interface SidebarHeaderProps extends React.ComponentPropsWithoutRef<'div'> {
|
|
|
343
149
|
|
|
344
150
|
const SidebarHeader = React.forwardRef<HTMLDivElement, SidebarHeaderProps>(
|
|
345
151
|
({ className, asContainer = true, ...props }, forwardedRef) => {
|
|
346
|
-
const
|
|
347
|
-
const
|
|
152
|
+
const visual = useSidebarVisual();
|
|
153
|
+
const size = visual?.size ?? '2';
|
|
154
|
+
const menuVariant = visual?.menuVariant ?? 'soft';
|
|
348
155
|
|
|
349
156
|
return (
|
|
350
157
|
<div
|
|
@@ -376,8 +183,9 @@ interface SidebarFooterProps extends React.ComponentPropsWithoutRef<'div'> {
|
|
|
376
183
|
|
|
377
184
|
const SidebarFooter = React.forwardRef<HTMLDivElement, SidebarFooterProps>(
|
|
378
185
|
({ className, asContainer = true, ...props }, forwardedRef) => {
|
|
379
|
-
const
|
|
380
|
-
const
|
|
186
|
+
const visual = useSidebarVisual();
|
|
187
|
+
const size = visual?.size ?? '2';
|
|
188
|
+
const menuVariant = visual?.menuVariant ?? 'soft';
|
|
381
189
|
|
|
382
190
|
return (
|
|
383
191
|
<div
|
|
@@ -399,31 +207,7 @@ const SidebarFooter = React.forwardRef<HTMLDivElement, SidebarFooterProps>(
|
|
|
399
207
|
SidebarFooter.displayName = 'Sidebar.Footer';
|
|
400
208
|
|
|
401
209
|
// Sidebar trigger button
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
const SidebarTrigger = React.forwardRef<React.ElementRef<typeof IconButton>, SidebarTriggerProps>(
|
|
405
|
-
({ onClick, children, ...props }, forwardedRef) => {
|
|
406
|
-
const { toggleSidebar, state } = useSidebar();
|
|
407
|
-
|
|
408
|
-
return (
|
|
409
|
-
<IconButton
|
|
410
|
-
{...props}
|
|
411
|
-
ref={forwardedRef}
|
|
412
|
-
variant="ghost"
|
|
413
|
-
aria-label={state === 'expanded' ? 'Collapse sidebar' : 'Expand sidebar'}
|
|
414
|
-
aria-expanded={state === 'expanded'}
|
|
415
|
-
aria-controls="sidebar-navigation"
|
|
416
|
-
onClick={(event) => {
|
|
417
|
-
onClick?.(event);
|
|
418
|
-
toggleSidebar();
|
|
419
|
-
}}
|
|
420
|
-
>
|
|
421
|
-
{children || <ChevronDownIcon />}
|
|
422
|
-
</IconButton>
|
|
423
|
-
);
|
|
424
|
-
},
|
|
425
|
-
);
|
|
426
|
-
SidebarTrigger.displayName = 'Sidebar.Trigger';
|
|
210
|
+
// removed Trigger in presentational-only Sidebar
|
|
427
211
|
|
|
428
212
|
// Removed SidebarInset - not needed
|
|
429
213
|
|
|
@@ -490,8 +274,8 @@ const SidebarMenuButton = React.forwardRef<HTMLButtonElement, SidebarMenuButtonP
|
|
|
490
274
|
forwardedRef,
|
|
491
275
|
) => {
|
|
492
276
|
const [isHighlighted, setIsHighlighted] = React.useState(false);
|
|
493
|
-
const
|
|
494
|
-
const
|
|
277
|
+
const visual = useSidebarVisual();
|
|
278
|
+
const sidebarSize = visual?.size ?? '2';
|
|
495
279
|
|
|
496
280
|
const Comp = asChild ? Slot : 'button';
|
|
497
281
|
|
|
@@ -733,12 +517,10 @@ SidebarGroupContent.displayName = 'Sidebar.GroupContent';
|
|
|
733
517
|
|
|
734
518
|
// Export all components following shadcn's pattern
|
|
735
519
|
export {
|
|
736
|
-
SidebarProvider as Provider,
|
|
737
520
|
Sidebar as Root,
|
|
738
521
|
SidebarContent as Content,
|
|
739
522
|
SidebarHeader as Header,
|
|
740
523
|
SidebarFooter as Footer,
|
|
741
|
-
SidebarTrigger as Trigger,
|
|
742
524
|
SidebarSeparator as Separator,
|
|
743
525
|
SidebarMenu as Menu,
|
|
744
526
|
SidebarMenuItem as MenuItem,
|
|
@@ -749,8 +531,6 @@ export {
|
|
|
749
531
|
SidebarGroup as Group,
|
|
750
532
|
SidebarGroupLabel as GroupLabel,
|
|
751
533
|
SidebarGroupContent as GroupContent,
|
|
752
|
-
// Export hook
|
|
753
|
-
useSidebar,
|
|
754
534
|
};
|
|
755
535
|
|
|
756
536
|
/**
|
|
@@ -807,11 +587,9 @@ export {
|
|
|
807
587
|
*/
|
|
808
588
|
|
|
809
589
|
export type {
|
|
810
|
-
SidebarProviderProps as ProviderProps,
|
|
811
590
|
SidebarProps as RootProps,
|
|
812
591
|
SidebarContentProps as ContentProps,
|
|
813
592
|
SidebarHeaderProps as HeaderProps,
|
|
814
593
|
SidebarFooterProps as FooterProps,
|
|
815
|
-
SidebarTriggerProps as TriggerProps,
|
|
816
594
|
BadgeConfig,
|
|
817
595
|
};
|
|
@@ -21,7 +21,7 @@ const Skeleton = React.forwardRef<SkeletonElement, SkeletonProps>((props, forwar
|
|
|
21
21
|
const { children, className, loading, ...skeletonProps } = extractProps(
|
|
22
22
|
props,
|
|
23
23
|
skeletonPropDefs,
|
|
24
|
-
marginPropDefs
|
|
24
|
+
marginPropDefs,
|
|
25
25
|
);
|
|
26
26
|
|
|
27
27
|
if (!loading) return children;
|
|
@@ -35,7 +35,6 @@ const Skeleton = React.forwardRef<SkeletonElement, SkeletonProps>((props, forwar
|
|
|
35
35
|
className={classNames('rt-Skeleton', className)}
|
|
36
36
|
data-inline-skeleton={React.isValidElement(children) ? undefined : true}
|
|
37
37
|
tabIndex={-1}
|
|
38
|
-
// @ts-expect-error
|
|
39
38
|
inert={inert}
|
|
40
39
|
{...skeletonProps}
|
|
41
40
|
>
|
|
@@ -6,8 +6,8 @@
|
|
|
6
6
|
|
|
7
7
|
transform-origin: var(--radix-tooltip-content-transform-origin);
|
|
8
8
|
|
|
9
|
-
animation-duration: var(--duration-
|
|
10
|
-
animation-timing-function: var(--
|
|
9
|
+
animation-duration: var(--motion-duration-small);
|
|
10
|
+
animation-timing-function: var(--motion-spring-snappy);
|
|
11
11
|
|
|
12
12
|
@media (prefers-reduced-motion: no-preference) {
|
|
13
13
|
&:where([data-state='delayed-open']) {
|
package/src/helpers/inert.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import * as React from 'react';
|
|
2
2
|
|
|
3
|
-
//
|
|
4
|
-
//
|
|
5
|
-
export const inert = parseFloat(React.version) >= 19
|
|
3
|
+
// In React 19+, boolean attributes like inert are preserved; in earlier versions we omit it.
|
|
4
|
+
// Use: {...(hidden ? { inert } : {})}
|
|
5
|
+
export const inert: boolean | undefined = parseFloat(React.version) >= 19 ? true : undefined;
|
|
@@ -16,15 +16,15 @@
|
|
|
16
16
|
--surface-opacity-dark: var(--opacity-7);
|
|
17
17
|
|
|
18
18
|
/* Dialog background opacity constants (stronger than panel) */
|
|
19
|
-
--dialog-opacity: var(--opacity-
|
|
19
|
+
--dialog-opacity: var(--opacity-9);
|
|
20
20
|
--dialog-opacity-percentage: calc(var(--dialog-opacity) * 100%);
|
|
21
21
|
|
|
22
22
|
/* Panel background opacity constants */
|
|
23
|
-
--panel-opacity: var(--opacity-
|
|
23
|
+
--panel-opacity: var(--opacity-8);
|
|
24
24
|
--panel-opacity-percentage: calc(var(--panel-opacity) * 100%);
|
|
25
25
|
|
|
26
26
|
/* Surface background opacity constants */
|
|
27
|
-
--surface-opacity: var(--opacity-
|
|
27
|
+
--surface-opacity: var(--opacity-7);
|
|
28
28
|
--surface-opacity-percentage: calc(var(--surface-opacity) * 100%);
|
|
29
29
|
|
|
30
30
|
/* Standard border width constants */
|
|
@@ -159,6 +159,9 @@
|
|
|
159
159
|
|
|
160
160
|
/* Transition constants */
|
|
161
161
|
--transition-background-blur: background-color var(--duration-2) var(--ease-1);
|
|
162
|
+
|
|
163
|
+
/* Sheet animation constants */
|
|
164
|
+
--sheet-slide-distance: 50%;
|
|
162
165
|
|
|
163
166
|
/* Spacing multipliers for component sizing */
|
|
164
167
|
--spacing-multiplier-small: 0.5;
|