@kushagradhawan/kookie-ui 0.1.20 → 0.1.21
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 +1417 -0
- package/dist/cjs/components/index.d.ts +1 -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/sidebar.d.ts +157 -0
- package/dist/cjs/components/sidebar.d.ts.map +1 -0
- package/dist/cjs/components/sidebar.js +2 -0
- package/dist/cjs/components/sidebar.js.map +7 -0
- package/dist/cjs/components/sidebar.props.d.ts +60 -0
- package/dist/cjs/components/sidebar.props.d.ts.map +1 -0
- package/dist/cjs/components/sidebar.props.js +2 -0
- package/dist/cjs/components/sidebar.props.js.map +7 -0
- package/dist/esm/components/index.d.ts +1 -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/sidebar.d.ts +157 -0
- package/dist/esm/components/sidebar.d.ts.map +1 -0
- package/dist/esm/components/sidebar.js +2 -0
- package/dist/esm/components/sidebar.js.map +7 -0
- package/dist/esm/components/sidebar.props.d.ts +60 -0
- package/dist/esm/components/sidebar.props.d.ts.map +1 -0
- package/dist/esm/components/sidebar.props.js +2 -0
- package/dist/esm/components/sidebar.props.js.map +7 -0
- package/package.json +1 -1
- package/src/components/index.css +1 -0
- package/src/components/index.tsx +1 -1
- package/src/components/sidebar.css +1043 -0
- package/src/components/sidebar.props.tsx +54 -0
- package/src/components/sidebar.tsx +740 -0
- package/styles.css +1417 -0
|
@@ -0,0 +1,1043 @@
|
|
|
1
|
+
/* Sidebar Provider - handles positioning */
|
|
2
|
+
.rt-SidebarProvider {
|
|
3
|
+
/* Positioning based on side */
|
|
4
|
+
&:where([data-side="left"]) {
|
|
5
|
+
/* Left side is default - no additional positioning needed */
|
|
6
|
+
order: -1; /* Ensure it appears first in flex container */
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
&:where([data-side="right"]) {
|
|
10
|
+
/* Position on the right side */
|
|
11
|
+
order: 999; /* Push to end in flex container */
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
/* Sidebar Root Container */
|
|
16
|
+
.rt-SidebarRoot {
|
|
17
|
+
--sidebar-width: 16rem; /* Fixed width */
|
|
18
|
+
--sidebar-base-border-radius: 0; /* Default to no radius */
|
|
19
|
+
|
|
20
|
+
width: var(--sidebar-width);
|
|
21
|
+
height: 100%;
|
|
22
|
+
flex-shrink: 0;
|
|
23
|
+
display: flex;
|
|
24
|
+
flex-direction: column;
|
|
25
|
+
|
|
26
|
+
/* Make sure Theme wrapper also participates in flex layout */
|
|
27
|
+
& :where(.radix-themes) {
|
|
28
|
+
display: flex;
|
|
29
|
+
flex-direction: column;
|
|
30
|
+
flex: 1;
|
|
31
|
+
height: 100%;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
/* Floating type - ONLY visual changes */
|
|
35
|
+
&:where([data-type="floating"]) {
|
|
36
|
+
border-radius: var(--sidebar-base-border-radius);
|
|
37
|
+
margin: var(--space-2);
|
|
38
|
+
height: calc(100% - var(--space-4));
|
|
39
|
+
overflow: visible; /* Ensure shadow is not clipped */
|
|
40
|
+
position: relative; /* Ensure proper stacking context for floating sidebars */
|
|
41
|
+
|
|
42
|
+
/* Ensure Theme wrapper has proper border radius in floating mode */
|
|
43
|
+
& :where(.radix-themes) {
|
|
44
|
+
border-radius: inherit;
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
/* Set border radius for floating sidebars based on size - set on the root where it's used */
|
|
50
|
+
.rt-SidebarRoot:where([data-type="floating"]) {
|
|
51
|
+
/* Default radius for floating sidebars */
|
|
52
|
+
--sidebar-base-border-radius: var(--radius-5);
|
|
53
|
+
|
|
54
|
+
&:where(.rt-r-size-1) {
|
|
55
|
+
--sidebar-base-border-radius: var(--radius-5);
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
&:where(.rt-r-size-2) {
|
|
59
|
+
--sidebar-base-border-radius: var(--radius-6);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
/* Sidebar Container */
|
|
64
|
+
.rt-SidebarContainer {
|
|
65
|
+
--sidebar-base-border-radius: 0; /* Default to no radius */
|
|
66
|
+
display: flex;
|
|
67
|
+
flex-direction: column;
|
|
68
|
+
height: 100%;
|
|
69
|
+
width: 100%;
|
|
70
|
+
background-color: var(--color-panel);
|
|
71
|
+
backdrop-filter: var(--backdrop-filter-panel);
|
|
72
|
+
border-radius: inherit;
|
|
73
|
+
flex: 1;
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
.rt-SidebarContainer:where(.rt-variant-surface) {
|
|
77
|
+
background-color: var(--color-panel);
|
|
78
|
+
backdrop-filter: var(--backdrop-filter-panel);
|
|
79
|
+
|
|
80
|
+
/* Component-level overrides (higher specificity) - remap --color-panel */
|
|
81
|
+
&:where([data-panel-background='solid']) {
|
|
82
|
+
--color-panel: var(--color-panel-solid);
|
|
83
|
+
backdrop-filter: none;
|
|
84
|
+
--backdrop-filter-panel: none;
|
|
85
|
+
--backdrop-filter-components: none;
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
&:where([data-panel-background='translucent']) {
|
|
89
|
+
--color-panel: var(--color-panel-translucent);
|
|
90
|
+
backdrop-filter: var(--backdrop-filter-panel);
|
|
91
|
+
--backdrop-filter-panel: blur(var(--backdrop-blur-panel));
|
|
92
|
+
--backdrop-filter-components: blur(var(--backdrop-blur-components));
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
/* Floating sidebars get full inset border */
|
|
96
|
+
:where(.rt-SidebarRoot[data-type="floating"]) & {
|
|
97
|
+
box-shadow: inset 0 0 0 1px var(--gray-a6);
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
/* Non-floating sidebars get border only on the content-facing side */
|
|
101
|
+
:where(.rt-SidebarRoot[data-type="sidebar"][data-side="left"]) & {
|
|
102
|
+
box-shadow: inset -1px 0 0 0 var(--gray-a6);
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
:where(.rt-SidebarRoot[data-type="sidebar"][data-side="right"]) & {
|
|
106
|
+
box-shadow: inset 1px 0 0 0 var(--gray-a6);
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
/* Sidebar Header */
|
|
111
|
+
.rt-SidebarHeader {
|
|
112
|
+
display: flex;
|
|
113
|
+
flex-direction: column;
|
|
114
|
+
flex-shrink: 0;
|
|
115
|
+
border-radius: var(--sidebar-base-border-radius) var(--sidebar-base-border-radius) 0 0;
|
|
116
|
+
|
|
117
|
+
/* Support for SidebarMenuButton inside header */
|
|
118
|
+
& :where(.rt-SidebarMenuButton) {
|
|
119
|
+
/* Inherit all base MenuButton styles */
|
|
120
|
+
display: flex;
|
|
121
|
+
align-items: center;
|
|
122
|
+
gap: var(--space-2);
|
|
123
|
+
min-height: var(--sidebar-item-height);
|
|
124
|
+
padding-top: var(--sidebar-item-padding-y);
|
|
125
|
+
padding-bottom: var(--sidebar-item-padding-y);
|
|
126
|
+
padding-left: var(--sidebar-item-padding-left);
|
|
127
|
+
padding-right: var(--sidebar-item-padding-right);
|
|
128
|
+
box-sizing: border-box;
|
|
129
|
+
position: relative;
|
|
130
|
+
outline: none;
|
|
131
|
+
background: none;
|
|
132
|
+
border: none;
|
|
133
|
+
width: 100%;
|
|
134
|
+
text-align: left;
|
|
135
|
+
cursor: var(--cursor-menu-item);
|
|
136
|
+
user-select: none;
|
|
137
|
+
|
|
138
|
+
/* Header-specific styling */
|
|
139
|
+
justify-content: flex-start;
|
|
140
|
+
border-radius: var(--sidebar-base-border-radius) var(--sidebar-base-border-radius) 0 0;
|
|
141
|
+
|
|
142
|
+
/* Transitions */
|
|
143
|
+
transition: background var(--duration-2) var(--ease-1),
|
|
144
|
+
box-shadow var(--duration-2) var(--ease-1),
|
|
145
|
+
filter var(--duration-2) var(--ease-1);
|
|
146
|
+
|
|
147
|
+
/* Note: Hover/active states are handled by menu variants */
|
|
148
|
+
|
|
149
|
+
/* Focus state */
|
|
150
|
+
&:where(:focus-visible) {
|
|
151
|
+
outline: 2px solid var(--focus-8);
|
|
152
|
+
outline-offset: 2px;
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
/* Reduced motion support */
|
|
156
|
+
@media (prefers-reduced-motion: reduce) {
|
|
157
|
+
transition: none;
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
/* Header container variant - default flex container */
|
|
163
|
+
.rt-SidebarHeader:where(.rt-SidebarHeader--container) {
|
|
164
|
+
display: flex;
|
|
165
|
+
flex-direction: row;
|
|
166
|
+
align-items: center;
|
|
167
|
+
gap: var(--space-2);
|
|
168
|
+
padding: var(--sidebar-content-padding);
|
|
169
|
+
min-height: var(--sidebar-item-height);
|
|
170
|
+
|
|
171
|
+
/* Make MenuButtons expand to full width */
|
|
172
|
+
& :where(.rt-SidebarMenuButton) {
|
|
173
|
+
flex: 1;
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
/* Flex utilities for header layouts */
|
|
178
|
+
.rt-SidebarHeader:where(.rt-flex-row) {
|
|
179
|
+
flex-direction: row;
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
.rt-SidebarHeader:where(.rt-flex-col) {
|
|
183
|
+
flex-direction: column;
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
.rt-SidebarHeader:where(.rt-items-center) {
|
|
187
|
+
align-items: center;
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
.rt-SidebarHeader:where(.rt-items-start) {
|
|
191
|
+
align-items: flex-start;
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
.rt-SidebarHeader:where(.rt-items-end) {
|
|
195
|
+
align-items: flex-end;
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
.rt-SidebarHeader:where(.rt-justify-between) {
|
|
199
|
+
justify-content: space-between;
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
.rt-SidebarHeader:where(.rt-justify-center) {
|
|
203
|
+
justify-content: center;
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
.rt-SidebarHeader:where(.rt-justify-start) {
|
|
207
|
+
justify-content: flex-start;
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
.rt-SidebarHeader:where(.rt-justify-end) {
|
|
211
|
+
justify-content: flex-end;
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
.rt-SidebarHeader:where(.rt-gap-1) {
|
|
215
|
+
gap: var(--space-1);
|
|
216
|
+
}
|
|
217
|
+
|
|
218
|
+
.rt-SidebarHeader:where(.rt-gap-2) {
|
|
219
|
+
gap: var(--space-2);
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
.rt-SidebarHeader:where(.rt-gap-3) {
|
|
223
|
+
gap: var(--space-3);
|
|
224
|
+
}
|
|
225
|
+
|
|
226
|
+
.rt-SidebarHeader:where(.rt-gap-4) {
|
|
227
|
+
gap: var(--space-4);
|
|
228
|
+
}
|
|
229
|
+
|
|
230
|
+
/* Sidebar Content - based on rt-BaseMenuContent */
|
|
231
|
+
.rt-SidebarContent {
|
|
232
|
+
--scrollarea-scrollbar-vertical-margin-top: var(--sidebar-content-padding);
|
|
233
|
+
--scrollarea-scrollbar-vertical-margin-bottom: var(--sidebar-content-padding);
|
|
234
|
+
--scrollarea-scrollbar-horizontal-margin-left: var(--sidebar-content-padding);
|
|
235
|
+
--scrollarea-scrollbar-horizontal-margin-right: var(--sidebar-content-padding);
|
|
236
|
+
|
|
237
|
+
display: flex;
|
|
238
|
+
flex-direction: column;
|
|
239
|
+
flex: 1;
|
|
240
|
+
box-sizing: border-box;
|
|
241
|
+
min-height: 0; /* Critical for flex children to shrink */
|
|
242
|
+
|
|
243
|
+
/* Ensure ScrollArea takes full height within SidebarContent */
|
|
244
|
+
& :where(.rt-ScrollAreaRoot) {
|
|
245
|
+
flex: 1;
|
|
246
|
+
display: flex;
|
|
247
|
+
flex-direction: column;
|
|
248
|
+
min-height: 0;
|
|
249
|
+
}
|
|
250
|
+
|
|
251
|
+
& :where(.rt-ScrollAreaViewport) {
|
|
252
|
+
flex: 1;
|
|
253
|
+
display: flex;
|
|
254
|
+
flex-direction: column;
|
|
255
|
+
min-height: 0;
|
|
256
|
+
}
|
|
257
|
+
}
|
|
258
|
+
|
|
259
|
+
/* Sidebar Menu - based on rt-BaseMenuViewport */
|
|
260
|
+
.rt-SidebarMenu {
|
|
261
|
+
flex: 1;
|
|
262
|
+
display: flex;
|
|
263
|
+
flex-direction: column;
|
|
264
|
+
gap: var(--space-2); /* Use gap for consistent spacing */
|
|
265
|
+
padding: var(--sidebar-content-padding);
|
|
266
|
+
box-sizing: border-box;
|
|
267
|
+
list-style: none;
|
|
268
|
+
margin: 0;
|
|
269
|
+
min-height: 0;
|
|
270
|
+
|
|
271
|
+
:where(.rt-SidebarContent:has(.rt-ScrollAreaScrollbar[data-orientation='vertical'])) & {
|
|
272
|
+
padding-right: var(--space-3);
|
|
273
|
+
}
|
|
274
|
+
}
|
|
275
|
+
|
|
276
|
+
/* Sidebar Menu Item */
|
|
277
|
+
.rt-SidebarMenuItem {
|
|
278
|
+
list-style: none;
|
|
279
|
+
}
|
|
280
|
+
|
|
281
|
+
/* Sidebar Menu Button - matches rt-BaseMenuItem */
|
|
282
|
+
.rt-SidebarMenuButton {
|
|
283
|
+
display: flex;
|
|
284
|
+
align-items: center;
|
|
285
|
+
gap: var(--space-2);
|
|
286
|
+
min-height: var(--sidebar-item-height);
|
|
287
|
+
padding-top: var(--sidebar-item-padding-y);
|
|
288
|
+
padding-bottom: var(--sidebar-item-padding-y);
|
|
289
|
+
padding-left: var(--sidebar-item-padding-left);
|
|
290
|
+
padding-right: var(--sidebar-item-padding-right);
|
|
291
|
+
box-sizing: border-box;
|
|
292
|
+
position: relative;
|
|
293
|
+
outline: none;
|
|
294
|
+
scroll-margin: var(--sidebar-content-padding) 0;
|
|
295
|
+
background: none;
|
|
296
|
+
border: none;
|
|
297
|
+
width: 100%;
|
|
298
|
+
text-align: left;
|
|
299
|
+
border-radius: var(--radius-2);
|
|
300
|
+
|
|
301
|
+
/* Transitions - similar to button but without transform */
|
|
302
|
+
transition: background var(--duration-2) var(--ease-1),
|
|
303
|
+
box-shadow var(--duration-2) var(--ease-1),
|
|
304
|
+
filter var(--duration-2) var(--ease-1);
|
|
305
|
+
|
|
306
|
+
/* Fix sticky text highlighting after selection in Firefox */
|
|
307
|
+
user-select: none;
|
|
308
|
+
|
|
309
|
+
/* Cursors */
|
|
310
|
+
cursor: var(--cursor-menu-item);
|
|
311
|
+
&:where([data-disabled]) {
|
|
312
|
+
cursor: default;
|
|
313
|
+
color: var(--gray-a8);
|
|
314
|
+
}
|
|
315
|
+
|
|
316
|
+
/* Active navigation state - always accent-based */
|
|
317
|
+
&:where([data-active], .rt-active) {
|
|
318
|
+
background-color: var(--accent-a3);
|
|
319
|
+
color: var(--accent-a12);
|
|
320
|
+
}
|
|
321
|
+
|
|
322
|
+
/* Focus state */
|
|
323
|
+
&:where(:focus-visible) {
|
|
324
|
+
outline: 2px solid var(--focus-8);
|
|
325
|
+
outline-offset: 2px;
|
|
326
|
+
}
|
|
327
|
+
|
|
328
|
+
/* Accent color support */
|
|
329
|
+
&:where([data-accent-color]) {
|
|
330
|
+
color: var(--accent-a11);
|
|
331
|
+
}
|
|
332
|
+
|
|
333
|
+
/* Gray text support */
|
|
334
|
+
& :where(.rt-Text[data-accent-color='gray'], [data-accent-color='gray']) {
|
|
335
|
+
color: var(--gray-a10);
|
|
336
|
+
}
|
|
337
|
+
|
|
338
|
+
/* Ensure shortcuts inherit color in disabled/highlighted/active states */
|
|
339
|
+
&:where([data-disabled], [data-highlighted], [data-active]) {
|
|
340
|
+
& :where(.rt-SidebarMenuShortcut) {
|
|
341
|
+
color: inherit;
|
|
342
|
+
}
|
|
343
|
+
}
|
|
344
|
+
|
|
345
|
+
/* Reduced motion support */
|
|
346
|
+
@media (prefers-reduced-motion: reduce) {
|
|
347
|
+
transition: none;
|
|
348
|
+
}
|
|
349
|
+
}
|
|
350
|
+
|
|
351
|
+
/* Sidebar Menu Sub Components - Radix Accordion */
|
|
352
|
+
.rt-SidebarMenuSubTrigger {
|
|
353
|
+
justify-content: space-between;
|
|
354
|
+
}
|
|
355
|
+
|
|
356
|
+
/* Accordion trigger icon rotation */
|
|
357
|
+
.rt-SidebarMenuSubTrigger {
|
|
358
|
+
& :where(.rt-SidebarMenuSubTriggerIcon) {
|
|
359
|
+
transition: transform 0.2s ease;
|
|
360
|
+
}
|
|
361
|
+
|
|
362
|
+
&:where([data-state="open"]) :where(.rt-SidebarMenuSubTriggerIcon) {
|
|
363
|
+
transform: rotate(90deg);
|
|
364
|
+
}
|
|
365
|
+
}
|
|
366
|
+
|
|
367
|
+
.rt-SidebarMenuSubContent {
|
|
368
|
+
overflow: hidden;
|
|
369
|
+
|
|
370
|
+
/* Allow focus outlines to show */
|
|
371
|
+
&:where(:focus-within) {
|
|
372
|
+
overflow: visible;
|
|
373
|
+
}
|
|
374
|
+
|
|
375
|
+
/* Radix Accordion animation support */
|
|
376
|
+
&:where([data-state="open"]) {
|
|
377
|
+
animation: rt-sidebar-slide-down 200ms ease-out;
|
|
378
|
+
}
|
|
379
|
+
|
|
380
|
+
&:where([data-state="closed"]) {
|
|
381
|
+
animation: rt-sidebar-slide-up 200ms ease-out;
|
|
382
|
+
}
|
|
383
|
+
}
|
|
384
|
+
|
|
385
|
+
@keyframes rt-sidebar-slide-down {
|
|
386
|
+
from {
|
|
387
|
+
height: 0;
|
|
388
|
+
}
|
|
389
|
+
to {
|
|
390
|
+
height: var(--radix-accordion-content-height);
|
|
391
|
+
}
|
|
392
|
+
}
|
|
393
|
+
|
|
394
|
+
@keyframes rt-sidebar-slide-up {
|
|
395
|
+
from {
|
|
396
|
+
height: var(--radix-accordion-content-height);
|
|
397
|
+
}
|
|
398
|
+
to {
|
|
399
|
+
height: 0;
|
|
400
|
+
}
|
|
401
|
+
}
|
|
402
|
+
|
|
403
|
+
.rt-SidebarMenuSubList {
|
|
404
|
+
padding-left: var(--space-4);
|
|
405
|
+
border-left: 1px solid var(--gray-a5);
|
|
406
|
+
margin-left: var(--space-3);
|
|
407
|
+
}
|
|
408
|
+
|
|
409
|
+
/* Sub-menu items have consistent heights based on size - match dropdown menu exactly */
|
|
410
|
+
:where(.rt-SidebarContent.rt-r-size-1) :where(.rt-SidebarMenuSubList) .rt-SidebarMenuButton {
|
|
411
|
+
padding-left: var(--space-3);
|
|
412
|
+
padding-top: calc(var(--space-1) * 0.75);
|
|
413
|
+
padding-bottom: calc(var(--space-1) * 0.75);
|
|
414
|
+
min-height: var(--space-5); /* 20px */
|
|
415
|
+
font-size: var(--font-size-1);
|
|
416
|
+
}
|
|
417
|
+
|
|
418
|
+
:where(.rt-SidebarContent.rt-r-size-2) :where(.rt-SidebarMenuSubList) .rt-SidebarMenuButton {
|
|
419
|
+
padding-left: var(--space-3);
|
|
420
|
+
padding-top: var(--space-1);
|
|
421
|
+
padding-bottom: var(--space-1);
|
|
422
|
+
min-height: var(--space-6); /* 24px */
|
|
423
|
+
font-size: var(--font-size-2);
|
|
424
|
+
}
|
|
425
|
+
|
|
426
|
+
/* Sidebar Footer */
|
|
427
|
+
.rt-SidebarFooter {
|
|
428
|
+
display: flex;
|
|
429
|
+
flex-direction: column;
|
|
430
|
+
flex-shrink: 0;
|
|
431
|
+
margin-top: auto;
|
|
432
|
+
border-radius: 0 0 var(--sidebar-base-border-radius) var(--sidebar-base-border-radius);
|
|
433
|
+
|
|
434
|
+
/* Support for SidebarMenuButton inside footer */
|
|
435
|
+
& :where(.rt-SidebarMenuButton) {
|
|
436
|
+
/* Inherit all base MenuButton styles */
|
|
437
|
+
display: flex;
|
|
438
|
+
align-items: center;
|
|
439
|
+
gap: var(--space-2);
|
|
440
|
+
min-height: var(--sidebar-item-height);
|
|
441
|
+
padding-top: var(--sidebar-item-padding-y);
|
|
442
|
+
padding-bottom: var(--sidebar-item-padding-y);
|
|
443
|
+
padding-left: var(--sidebar-item-padding-left);
|
|
444
|
+
padding-right: var(--sidebar-item-padding-right);
|
|
445
|
+
box-sizing: border-box;
|
|
446
|
+
position: relative;
|
|
447
|
+
outline: none;
|
|
448
|
+
background: none;
|
|
449
|
+
border: none;
|
|
450
|
+
width: 100%;
|
|
451
|
+
text-align: left;
|
|
452
|
+
cursor: var(--cursor-menu-item);
|
|
453
|
+
user-select: none;
|
|
454
|
+
|
|
455
|
+
/* Footer-specific styling */
|
|
456
|
+
justify-content: flex-start;
|
|
457
|
+
border-radius: 0 0 var(--sidebar-base-border-radius) var(--sidebar-base-border-radius);
|
|
458
|
+
|
|
459
|
+
/* Transitions */
|
|
460
|
+
transition: background var(--duration-2) var(--ease-1),
|
|
461
|
+
box-shadow var(--duration-2) var(--ease-1),
|
|
462
|
+
filter var(--duration-2) var(--ease-1);
|
|
463
|
+
|
|
464
|
+
/* Note: Hover/active states are handled by menu variants */
|
|
465
|
+
|
|
466
|
+
/* Focus state */
|
|
467
|
+
&:where(:focus-visible) {
|
|
468
|
+
outline: 2px solid var(--focus-8);
|
|
469
|
+
outline-offset: 2px;
|
|
470
|
+
}
|
|
471
|
+
|
|
472
|
+
/* Reduced motion support */
|
|
473
|
+
@media (prefers-reduced-motion: reduce) {
|
|
474
|
+
transition: none;
|
|
475
|
+
}
|
|
476
|
+
}
|
|
477
|
+
}
|
|
478
|
+
|
|
479
|
+
/* Footer container variant - default flex container */
|
|
480
|
+
.rt-SidebarFooter:where(.rt-SidebarFooter--container) {
|
|
481
|
+
display: flex;
|
|
482
|
+
flex-direction: row;
|
|
483
|
+
align-items: center;
|
|
484
|
+
gap: var(--space-2);
|
|
485
|
+
padding: var(--sidebar-content-padding);
|
|
486
|
+
min-height: var(--sidebar-item-height);
|
|
487
|
+
|
|
488
|
+
/* Make MenuButtons expand to full width */
|
|
489
|
+
& :where(.rt-SidebarMenuButton) {
|
|
490
|
+
flex: 1;
|
|
491
|
+
}
|
|
492
|
+
}
|
|
493
|
+
|
|
494
|
+
/* Flex utilities for footer layouts */
|
|
495
|
+
.rt-SidebarFooter:where(.rt-flex-row) {
|
|
496
|
+
flex-direction: row;
|
|
497
|
+
}
|
|
498
|
+
|
|
499
|
+
.rt-SidebarFooter:where(.rt-flex-col) {
|
|
500
|
+
flex-direction: column;
|
|
501
|
+
}
|
|
502
|
+
|
|
503
|
+
.rt-SidebarFooter:where(.rt-items-center) {
|
|
504
|
+
align-items: center;
|
|
505
|
+
}
|
|
506
|
+
|
|
507
|
+
.rt-SidebarFooter:where(.rt-items-start) {
|
|
508
|
+
align-items: flex-start;
|
|
509
|
+
}
|
|
510
|
+
|
|
511
|
+
.rt-SidebarFooter:where(.rt-items-end) {
|
|
512
|
+
align-items: flex-end;
|
|
513
|
+
}
|
|
514
|
+
|
|
515
|
+
.rt-SidebarFooter:where(.rt-justify-between) {
|
|
516
|
+
justify-content: space-between;
|
|
517
|
+
}
|
|
518
|
+
|
|
519
|
+
.rt-SidebarFooter:where(.rt-justify-center) {
|
|
520
|
+
justify-content: center;
|
|
521
|
+
}
|
|
522
|
+
|
|
523
|
+
.rt-SidebarFooter:where(.rt-justify-start) {
|
|
524
|
+
justify-content: flex-start;
|
|
525
|
+
}
|
|
526
|
+
|
|
527
|
+
.rt-SidebarFooter:where(.rt-justify-end) {
|
|
528
|
+
justify-content: flex-end;
|
|
529
|
+
}
|
|
530
|
+
|
|
531
|
+
.rt-SidebarFooter:where(.rt-gap-1) {
|
|
532
|
+
gap: var(--space-1);
|
|
533
|
+
}
|
|
534
|
+
|
|
535
|
+
.rt-SidebarFooter:where(.rt-gap-2) {
|
|
536
|
+
gap: var(--space-2);
|
|
537
|
+
}
|
|
538
|
+
|
|
539
|
+
.rt-SidebarFooter:where(.rt-gap-3) {
|
|
540
|
+
gap: var(--space-3);
|
|
541
|
+
}
|
|
542
|
+
|
|
543
|
+
.rt-SidebarFooter:where(.rt-gap-4) {
|
|
544
|
+
gap: var(--space-4);
|
|
545
|
+
}
|
|
546
|
+
|
|
547
|
+
/* Sidebar Separator - ensure full width and proper spacing */
|
|
548
|
+
.rt-SidebarSeparator {
|
|
549
|
+
width: 100%;
|
|
550
|
+
margin: var(--space-2) 0;
|
|
551
|
+
}
|
|
552
|
+
|
|
553
|
+
/* Sidebar Group Components - add spacing between groups */
|
|
554
|
+
.rt-SidebarGroup {
|
|
555
|
+
display: flex;
|
|
556
|
+
flex-direction: column;
|
|
557
|
+
flex-shrink: 0;
|
|
558
|
+
|
|
559
|
+
/* Add spacing between groups without manual separators */
|
|
560
|
+
&:where(:not(:first-child)) {
|
|
561
|
+
margin-top: var(--space-4);
|
|
562
|
+
}
|
|
563
|
+
}
|
|
564
|
+
|
|
565
|
+
.rt-SidebarGroupLabel {
|
|
566
|
+
display: flex;
|
|
567
|
+
align-items: center;
|
|
568
|
+
min-height: var(--sidebar-item-height);
|
|
569
|
+
padding-top: var(--sidebar-item-padding-y);
|
|
570
|
+
padding-bottom: var(--sidebar-item-padding-y);
|
|
571
|
+
padding-left: var(--sidebar-item-padding-left);
|
|
572
|
+
padding-right: var(--sidebar-item-padding-right);
|
|
573
|
+
box-sizing: border-box;
|
|
574
|
+
color: var(--gray-a10);
|
|
575
|
+
user-select: none;
|
|
576
|
+
cursor: default;
|
|
577
|
+
flex-shrink: 0;
|
|
578
|
+
}
|
|
579
|
+
|
|
580
|
+
.rt-SidebarGroupContent {
|
|
581
|
+
display: flex;
|
|
582
|
+
flex-direction: column;
|
|
583
|
+
flex-shrink: 0;
|
|
584
|
+
}
|
|
585
|
+
|
|
586
|
+
/***************************************************************************************************
|
|
587
|
+
* *
|
|
588
|
+
* SIZES *
|
|
589
|
+
* *
|
|
590
|
+
***************************************************************************************************/
|
|
591
|
+
|
|
592
|
+
@breakpoints {
|
|
593
|
+
/* Container sizing - padding and border radius like Card */
|
|
594
|
+
.rt-SidebarContainer {
|
|
595
|
+
&:where(.rt-r-size-1) {
|
|
596
|
+
--sidebar-base-padding: var(--space-3);
|
|
597
|
+
/* Ensure header/footer menu buttons share the same sizing variables as content */
|
|
598
|
+
--sidebar-content-padding: var(--space-1);
|
|
599
|
+
--sidebar-item-padding-left: var(--space-2);
|
|
600
|
+
--sidebar-item-padding-right: var(--space-2);
|
|
601
|
+
--sidebar-item-padding-y: calc(var(--space-1) * 0.75);
|
|
602
|
+
--sidebar-item-height: var(--space-5);
|
|
603
|
+
}
|
|
604
|
+
&:where(.rt-r-size-2) {
|
|
605
|
+
--sidebar-base-padding: var(--space-4);
|
|
606
|
+
/* Ensure header/footer menu buttons share the same sizing variables as content */
|
|
607
|
+
--sidebar-content-padding: var(--space-2);
|
|
608
|
+
--sidebar-item-padding-left: var(--space-3);
|
|
609
|
+
--sidebar-item-padding-right: var(--space-3);
|
|
610
|
+
--sidebar-item-padding-y: var(--space-1);
|
|
611
|
+
--sidebar-item-height: var(--space-6);
|
|
612
|
+
}
|
|
613
|
+
}
|
|
614
|
+
|
|
615
|
+
/* Content sizing - like base menu (dropdown menu) */
|
|
616
|
+
.rt-SidebarContent {
|
|
617
|
+
&:where(.rt-r-size-1) {
|
|
618
|
+
--sidebar-content-padding: var(--space-1);
|
|
619
|
+
--sidebar-item-padding-left: calc(var(--space-5) / 1.2);
|
|
620
|
+
--sidebar-item-padding-right: var(--space-2);
|
|
621
|
+
--sidebar-item-padding-y: calc(var(--space-1) * 0.75);
|
|
622
|
+
--sidebar-item-height: var(--space-5);
|
|
623
|
+
border-radius: var(--radius-3);
|
|
624
|
+
|
|
625
|
+
/* reset with :not:has so we still support browsers without :has */
|
|
626
|
+
&:where(:not(:has(.rt-BaseMenuCheckboxItem, .rt-BaseMenuRadioItem))) {
|
|
627
|
+
--sidebar-item-padding-left: var(--space-2);
|
|
628
|
+
}
|
|
629
|
+
&:where(:has(.rt-BaseMenuCheckboxItem, .rt-BaseMenuRadioItem)) {
|
|
630
|
+
--sidebar-item-padding-left: calc(var(--space-5) / 1.2);
|
|
631
|
+
}
|
|
632
|
+
}
|
|
633
|
+
&:where(.rt-r-size-2) {
|
|
634
|
+
--sidebar-content-padding: var(--space-2);
|
|
635
|
+
--sidebar-item-padding-left: var(--space-3);
|
|
636
|
+
--sidebar-item-padding-right: var(--space-3);
|
|
637
|
+
--sidebar-item-padding-y: var(--space-1);
|
|
638
|
+
--sidebar-item-height: var(--space-6);
|
|
639
|
+
border-radius: var(--radius-4);
|
|
640
|
+
|
|
641
|
+
/* reset with :not:has so we still support browsers without :has */
|
|
642
|
+
&:where(:not(:has(.rt-BaseMenuCheckboxItem, .rt-BaseMenuRadioItem))) {
|
|
643
|
+
--sidebar-item-padding-left: var(--space-3);
|
|
644
|
+
}
|
|
645
|
+
&:where(:has(.rt-BaseMenuCheckboxItem, .rt-BaseMenuRadioItem)) {
|
|
646
|
+
--sidebar-item-padding-left: var(--space-5);
|
|
647
|
+
}
|
|
648
|
+
}
|
|
649
|
+
}
|
|
650
|
+
|
|
651
|
+
/* Size-specific menu button styling - matches base menu items */
|
|
652
|
+
.rt-SidebarContent:where(.rt-r-size-1) {
|
|
653
|
+
& :where(.rt-SidebarMenuButton) {
|
|
654
|
+
font-size: var(--font-size-1);
|
|
655
|
+
line-height: var(--line-height-1);
|
|
656
|
+
letter-spacing: var(--letter-spacing-1);
|
|
657
|
+
border-radius: var(--radius-1);
|
|
658
|
+
|
|
659
|
+
/* stylelint-disable-next-line selector-max-type */
|
|
660
|
+
& :where(svg) {
|
|
661
|
+
width: var(--content-icon-size-1);
|
|
662
|
+
height: var(--content-icon-size-1);
|
|
663
|
+
flex-shrink: 0;
|
|
664
|
+
}
|
|
665
|
+
}
|
|
666
|
+
|
|
667
|
+
/* Sub-trigger icon sizing - matches base menu exactly */
|
|
668
|
+
& :where(.rt-BaseMenuSubTriggerIcon) {
|
|
669
|
+
width: var(--indicator-icon-size-1);
|
|
670
|
+
height: var(--indicator-icon-size-1);
|
|
671
|
+
flex-shrink: 0;
|
|
672
|
+
margin-left: auto;
|
|
673
|
+
}
|
|
674
|
+
|
|
675
|
+
/* Group label sizing - matches base menu */
|
|
676
|
+
& :where(.rt-SidebarGroupLabel) {
|
|
677
|
+
font-size: var(--font-size-1);
|
|
678
|
+
line-height: var(--line-height-1);
|
|
679
|
+
letter-spacing: var(--letter-spacing-1);
|
|
680
|
+
}
|
|
681
|
+
}
|
|
682
|
+
|
|
683
|
+
/* Header and footer styling for size 1 */
|
|
684
|
+
.rt-SidebarContainer:where(.rt-r-size-1) {
|
|
685
|
+
& :where(.rt-SidebarHeader .rt-SidebarMenuButton) {
|
|
686
|
+
font-size: var(--font-size-1);
|
|
687
|
+
line-height: var(--line-height-1);
|
|
688
|
+
letter-spacing: var(--letter-spacing-1);
|
|
689
|
+
border-radius: var(--radius-1);
|
|
690
|
+
|
|
691
|
+
/* stylelint-disable-next-line selector-max-type */
|
|
692
|
+
& :where(svg) {
|
|
693
|
+
width: var(--content-icon-size-1);
|
|
694
|
+
height: var(--content-icon-size-1);
|
|
695
|
+
flex-shrink: 0;
|
|
696
|
+
}
|
|
697
|
+
}
|
|
698
|
+
|
|
699
|
+
& :where(.rt-SidebarFooter .rt-SidebarMenuButton) {
|
|
700
|
+
font-size: var(--font-size-1);
|
|
701
|
+
line-height: var(--line-height-1);
|
|
702
|
+
letter-spacing: var(--letter-spacing-1);
|
|
703
|
+
border-radius: var(--radius-1);
|
|
704
|
+
|
|
705
|
+
/* stylelint-disable-next-line selector-max-type */
|
|
706
|
+
& :where(svg) {
|
|
707
|
+
width: var(--content-icon-size-1);
|
|
708
|
+
height: var(--content-icon-size-1);
|
|
709
|
+
flex-shrink: 0;
|
|
710
|
+
}
|
|
711
|
+
}
|
|
712
|
+
}
|
|
713
|
+
|
|
714
|
+
.rt-SidebarContent:where(.rt-r-size-2) {
|
|
715
|
+
& :where(.rt-SidebarMenuButton) {
|
|
716
|
+
font-size: var(--font-size-2);
|
|
717
|
+
line-height: var(--line-height-2);
|
|
718
|
+
letter-spacing: var(--letter-spacing-2);
|
|
719
|
+
border-radius: var(--radius-3);
|
|
720
|
+
|
|
721
|
+
/* stylelint-disable-next-line selector-max-type */
|
|
722
|
+
& :where(svg) {
|
|
723
|
+
width: var(--content-icon-size-2);
|
|
724
|
+
height: var(--content-icon-size-2);
|
|
725
|
+
flex-shrink: 0;
|
|
726
|
+
}
|
|
727
|
+
}
|
|
728
|
+
|
|
729
|
+
/* Sub-trigger icon sizing - matches base menu exactly */
|
|
730
|
+
& :where(.rt-BaseMenuSubTriggerIcon) {
|
|
731
|
+
width: var(--indicator-icon-size-2);
|
|
732
|
+
height: var(--indicator-icon-size-2);
|
|
733
|
+
flex-shrink: 0;
|
|
734
|
+
margin-left: auto;
|
|
735
|
+
}
|
|
736
|
+
|
|
737
|
+
/* Group label sizing - matches base menu */
|
|
738
|
+
& :where(.rt-SidebarGroupLabel) {
|
|
739
|
+
font-size: var(--font-size-2);
|
|
740
|
+
line-height: var(--line-height-2);
|
|
741
|
+
letter-spacing: var(--letter-spacing-2);
|
|
742
|
+
}
|
|
743
|
+
}
|
|
744
|
+
|
|
745
|
+
/* Header and footer styling for size 2 */
|
|
746
|
+
.rt-SidebarContainer:where(.rt-r-size-2) {
|
|
747
|
+
& :where(.rt-SidebarHeader .rt-SidebarMenuButton) {
|
|
748
|
+
font-size: var(--font-size-2);
|
|
749
|
+
line-height: var(--line-height-2);
|
|
750
|
+
letter-spacing: var(--letter-spacing-2);
|
|
751
|
+
border-radius: var(--radius-3);
|
|
752
|
+
|
|
753
|
+
/* stylelint-disable-next-line selector-max-type */
|
|
754
|
+
& :where(svg) {
|
|
755
|
+
width: var(--content-icon-size-2);
|
|
756
|
+
height: var(--content-icon-size-2);
|
|
757
|
+
flex-shrink: 0;
|
|
758
|
+
}
|
|
759
|
+
}
|
|
760
|
+
|
|
761
|
+
& :where(.rt-SidebarFooter .rt-SidebarMenuButton) {
|
|
762
|
+
font-size: var(--font-size-2);
|
|
763
|
+
line-height: var(--line-height-2);
|
|
764
|
+
letter-spacing: var(--letter-spacing-2);
|
|
765
|
+
border-radius: var(--radius-3);
|
|
766
|
+
|
|
767
|
+
/* stylelint-disable-next-line selector-max-type */
|
|
768
|
+
& :where(svg) {
|
|
769
|
+
width: var(--content-icon-size-2);
|
|
770
|
+
height: var(--content-icon-size-2);
|
|
771
|
+
flex-shrink: 0;
|
|
772
|
+
}
|
|
773
|
+
}
|
|
774
|
+
}
|
|
775
|
+
}
|
|
776
|
+
|
|
777
|
+
/***************************************************************************************************
|
|
778
|
+
* *
|
|
779
|
+
* VARIANTS *
|
|
780
|
+
* *
|
|
781
|
+
***************************************************************************************************/
|
|
782
|
+
|
|
783
|
+
/* Sidebar Container Variants */
|
|
784
|
+
.rt-SidebarContainer {
|
|
785
|
+
&:where(.rt-variant-ghost) {
|
|
786
|
+
background-color: transparent;
|
|
787
|
+
backdrop-filter: none;
|
|
788
|
+
border: none;
|
|
789
|
+
}
|
|
790
|
+
&:where(.rt-variant-soft) {
|
|
791
|
+
/* Use solid accent for solid panels, alpha accent for translucent panels */
|
|
792
|
+
background-color: var(--accent-2);
|
|
793
|
+
|
|
794
|
+
/* Theme-level translucent override */
|
|
795
|
+
:where([data-panel-background='translucent']) & {
|
|
796
|
+
background-color: var(--accent-a2);
|
|
797
|
+
backdrop-filter: var(--backdrop-filter-panel);
|
|
798
|
+
}
|
|
799
|
+
|
|
800
|
+
/* Component-level overrides (higher specificity) */
|
|
801
|
+
&:where([data-panel-background='solid']) {
|
|
802
|
+
background-color: var(--accent-2);
|
|
803
|
+
backdrop-filter: none;
|
|
804
|
+
--backdrop-filter-components: none;
|
|
805
|
+
}
|
|
806
|
+
|
|
807
|
+
&:where([data-panel-background='translucent']) {
|
|
808
|
+
background-color: var(--accent-a2);
|
|
809
|
+
backdrop-filter: var(--backdrop-filter-panel);
|
|
810
|
+
--backdrop-filter-panel: blur(var(--backdrop-blur-panel));
|
|
811
|
+
--backdrop-filter-components: blur(var(--backdrop-blur-components));
|
|
812
|
+
}
|
|
813
|
+
}
|
|
814
|
+
}
|
|
815
|
+
|
|
816
|
+
/* Floating shadows - only for ghost variant */
|
|
817
|
+
.rt-SidebarContainer:where(.rt-variant-ghost) {
|
|
818
|
+
:where(.rt-SidebarRoot[data-type="floating"]) & {
|
|
819
|
+
box-shadow: var(--shadow-4);
|
|
820
|
+
}
|
|
821
|
+
}
|
|
822
|
+
|
|
823
|
+
/* Menu Button Variants - Independent of Container */
|
|
824
|
+
|
|
825
|
+
/* Menu Variant: Solid */
|
|
826
|
+
.rt-SidebarHeader:where(.rt-menu-variant-solid),
|
|
827
|
+
.rt-SidebarContent:where(.rt-menu-variant-solid),
|
|
828
|
+
.rt-SidebarFooter:where(.rt-menu-variant-solid) {
|
|
829
|
+
/* Active navigation state for solid variant */
|
|
830
|
+
& :where(.rt-SidebarMenuButton[data-active]) {
|
|
831
|
+
background-color: var(--accent-9);
|
|
832
|
+
color: var(--accent-contrast);
|
|
833
|
+
|
|
834
|
+
/* Force all text elements to inherit active color */
|
|
835
|
+
& :where(.rt-Text) {
|
|
836
|
+
color: inherit !important;
|
|
837
|
+
}
|
|
838
|
+
|
|
839
|
+
& :where([data-accent-color='gray']) {
|
|
840
|
+
color: inherit !important;
|
|
841
|
+
}
|
|
842
|
+
}
|
|
843
|
+
|
|
844
|
+
/* Hover/highlighted state for solid variant */
|
|
845
|
+
& :where(.rt-SidebarMenuButton[data-highlighted]) {
|
|
846
|
+
background-color: var(--accent-9);
|
|
847
|
+
color: var(--accent-contrast);
|
|
848
|
+
|
|
849
|
+
/* Force all text elements to inherit hover color */
|
|
850
|
+
& :where(.rt-Text) {
|
|
851
|
+
color: inherit !important;
|
|
852
|
+
}
|
|
853
|
+
|
|
854
|
+
& :where([data-accent-color='gray']) {
|
|
855
|
+
color: inherit !important;
|
|
856
|
+
}
|
|
857
|
+
}
|
|
858
|
+
|
|
859
|
+
/* High contrast support for solid variant */
|
|
860
|
+
&:where(.rt-high-contrast) {
|
|
861
|
+
& :where(.rt-SidebarMenuButton[data-active]),
|
|
862
|
+
& :where(.rt-SidebarMenuButton[data-highlighted]) {
|
|
863
|
+
background-color: var(--accent-12);
|
|
864
|
+
color: var(--accent-1);
|
|
865
|
+
|
|
866
|
+
& :where(.rt-Text) {
|
|
867
|
+
color: inherit !important;
|
|
868
|
+
}
|
|
869
|
+
|
|
870
|
+
& :where([data-accent-color='gray']) {
|
|
871
|
+
color: inherit !important;
|
|
872
|
+
}
|
|
873
|
+
|
|
874
|
+
&:where([data-accent-color]) {
|
|
875
|
+
background-color: var(--accent-9);
|
|
876
|
+
color: var(--accent-contrast);
|
|
877
|
+
|
|
878
|
+
& :where(.rt-Text) {
|
|
879
|
+
color: inherit !important;
|
|
880
|
+
}
|
|
881
|
+
|
|
882
|
+
& :where([data-accent-color='gray']) {
|
|
883
|
+
color: inherit !important;
|
|
884
|
+
}
|
|
885
|
+
}
|
|
886
|
+
}
|
|
887
|
+
}
|
|
888
|
+
}
|
|
889
|
+
|
|
890
|
+
/* Menu Variant: Soft */
|
|
891
|
+
.rt-SidebarHeader:where(.rt-menu-variant-soft),
|
|
892
|
+
.rt-SidebarContent:where(.rt-menu-variant-soft),
|
|
893
|
+
.rt-SidebarFooter:where(.rt-menu-variant-soft) {
|
|
894
|
+
/* Active navigation state for soft variant */
|
|
895
|
+
& :where(.rt-SidebarMenuButton[data-active]) {
|
|
896
|
+
/* Use solid accent for solid panels, alpha accent for translucent panels */
|
|
897
|
+
background-color: var(--accent-3);
|
|
898
|
+
color: var(--accent-12);
|
|
899
|
+
|
|
900
|
+
/* Theme-level translucent override */
|
|
901
|
+
:where([data-panel-background='translucent']) & {
|
|
902
|
+
background-color: var(--accent-a3);
|
|
903
|
+
color: var(--accent-a12);
|
|
904
|
+
/* Only apply backdrop-filter if parent container doesn't have it (ghost variant) */
|
|
905
|
+
backdrop-filter: var(--backdrop-filter-components);
|
|
906
|
+
}
|
|
907
|
+
|
|
908
|
+
/* Component-level overrides (higher specificity) */
|
|
909
|
+
:where(.rt-SidebarContainer[data-panel-background='solid']) & {
|
|
910
|
+
background-color: var(--accent-3);
|
|
911
|
+
color: var(--accent-12);
|
|
912
|
+
backdrop-filter: none;
|
|
913
|
+
--backdrop-filter-components: none;
|
|
914
|
+
}
|
|
915
|
+
|
|
916
|
+
:where(.rt-SidebarContainer[data-panel-background='translucent']) & {
|
|
917
|
+
background-color: var(--accent-a3);
|
|
918
|
+
color: var(--accent-a12);
|
|
919
|
+
/* Only apply backdrop-filter if parent container doesn't have it (ghost variant) */
|
|
920
|
+
backdrop-filter: var(--backdrop-filter-components);
|
|
921
|
+
--backdrop-filter-components: blur(var(--backdrop-blur-components));
|
|
922
|
+
}
|
|
923
|
+
|
|
924
|
+
/* Avoid double backdrop-filter on surface variant - container already has backdrop-filter */
|
|
925
|
+
:where(.rt-SidebarContainer.rt-variant-surface) & {
|
|
926
|
+
backdrop-filter: none;
|
|
927
|
+
}
|
|
928
|
+
|
|
929
|
+
/* In soft variant, improve contrast for gray text while maintaining hierarchy */
|
|
930
|
+
& :where(.rt-Text[data-accent-color='gray'], [data-accent-color='gray']) {
|
|
931
|
+
color: var(--gray-11) !important;
|
|
932
|
+
}
|
|
933
|
+
}
|
|
934
|
+
|
|
935
|
+
/* Hover/highlighted state for soft variant */
|
|
936
|
+
& :where(.rt-SidebarMenuButton[data-highlighted]) {
|
|
937
|
+
/* Use solid accent for solid panels, alpha accent for translucent panels */
|
|
938
|
+
background-color: var(--accent-3);
|
|
939
|
+
|
|
940
|
+
/* Theme-level translucent override */
|
|
941
|
+
:where([data-panel-background='translucent']) & {
|
|
942
|
+
background-color: var(--accent-a3);
|
|
943
|
+
/* Only apply backdrop-filter if parent container doesn't have it (ghost variant) */
|
|
944
|
+
backdrop-filter: var(--backdrop-filter-components);
|
|
945
|
+
}
|
|
946
|
+
|
|
947
|
+
/* Component-level overrides (higher specificity) */
|
|
948
|
+
:where(.rt-SidebarContainer[data-panel-background='solid']) & {
|
|
949
|
+
background-color: var(--accent-3);
|
|
950
|
+
backdrop-filter: none;
|
|
951
|
+
--backdrop-filter-components: none;
|
|
952
|
+
}
|
|
953
|
+
|
|
954
|
+
:where(.rt-SidebarContainer[data-panel-background='translucent']) & {
|
|
955
|
+
background-color: var(--accent-a3);
|
|
956
|
+
/* Only apply backdrop-filter if parent container doesn't have it (ghost variant) */
|
|
957
|
+
backdrop-filter: var(--backdrop-filter-components);
|
|
958
|
+
--backdrop-filter-components: blur(var(--backdrop-blur-components));
|
|
959
|
+
}
|
|
960
|
+
|
|
961
|
+
/* Avoid double backdrop-filter on surface variant - container already has backdrop-filter */
|
|
962
|
+
:where(.rt-SidebarContainer.rt-variant-surface) & {
|
|
963
|
+
backdrop-filter: none;
|
|
964
|
+
}
|
|
965
|
+
|
|
966
|
+
/* In soft variant, improve contrast for gray text while maintaining hierarchy */
|
|
967
|
+
& :where(.rt-Text[data-accent-color='gray'], [data-accent-color='gray']) {
|
|
968
|
+
color: var(--gray-11) !important;
|
|
969
|
+
}
|
|
970
|
+
}
|
|
971
|
+
}
|
|
972
|
+
|
|
973
|
+
/* Ensure menu items inherit proper theming and spacing for sidebar */
|
|
974
|
+
.rt-SidebarContent :where(.rt-BaseMenuItem) {
|
|
975
|
+
border-radius: var(--radius-2);
|
|
976
|
+
margin-bottom: var(--space-1);
|
|
977
|
+
}
|
|
978
|
+
|
|
979
|
+
/* Collapsible behavior */
|
|
980
|
+
.rt-SidebarRoot:where([data-collapsible="icon"][data-state="collapsed"]) {
|
|
981
|
+
transform: translateX(-100%);
|
|
982
|
+
transition: transform var(--duration-3) var(--ease-2);
|
|
983
|
+
}
|
|
984
|
+
|
|
985
|
+
.rt-SidebarRoot:where([data-collapsible="icon"][data-state="expanded"]) {
|
|
986
|
+
transform: translateX(0);
|
|
987
|
+
transition: transform var(--duration-3) var(--ease-2);
|
|
988
|
+
}
|
|
989
|
+
|
|
990
|
+
/* Right-side sidebar adjustments */
|
|
991
|
+
.rt-SidebarRoot:where([data-collapsible="icon"][data-state="collapsed"][data-side="right"]) {
|
|
992
|
+
transform: translateX(100%);
|
|
993
|
+
}
|
|
994
|
+
|
|
995
|
+
/* Reduced motion support for collapsible */
|
|
996
|
+
@media (prefers-reduced-motion: reduce) {
|
|
997
|
+
.rt-SidebarRoot:where([data-collapsible="icon"]) {
|
|
998
|
+
transition: none;
|
|
999
|
+
}
|
|
1000
|
+
}
|
|
1001
|
+
|
|
1002
|
+
/* Responsive behavior */
|
|
1003
|
+
@media (max-width: 768px) {
|
|
1004
|
+
.rt-SidebarRoot {
|
|
1005
|
+
display: none;
|
|
1006
|
+
}
|
|
1007
|
+
}
|
|
1008
|
+
|
|
1009
|
+
/* Reduce right padding on menu buttons with trailing elements */
|
|
1010
|
+
.rt-SidebarMenuButton:where(:has(.rt-SidebarMenuShortcut, .rt-SidebarMenuBadge)) {
|
|
1011
|
+
/* Size-specific right padding reduction */
|
|
1012
|
+
:where(.rt-SidebarContent.rt-r-size-1) & {
|
|
1013
|
+
padding-right: calc(var(--space-1) * 0.75); /* 3px - matches top/bottom padding */
|
|
1014
|
+
}
|
|
1015
|
+
|
|
1016
|
+
:where(.rt-SidebarContent.rt-r-size-2) & {
|
|
1017
|
+
padding-right: var(--space-1); /* 4px - matches top/bottom padding */
|
|
1018
|
+
}
|
|
1019
|
+
|
|
1020
|
+
/* Also apply to header and footer menu buttons */
|
|
1021
|
+
:where(.rt-SidebarContainer.rt-r-size-1) & {
|
|
1022
|
+
padding-right: calc(var(--space-1) * 0.75); /* 3px - matches top/bottom padding */
|
|
1023
|
+
}
|
|
1024
|
+
|
|
1025
|
+
:where(.rt-SidebarContainer.rt-r-size-2) & {
|
|
1026
|
+
padding-right: var(--space-1); /* 4px - matches top/bottom padding */
|
|
1027
|
+
}
|
|
1028
|
+
}
|
|
1029
|
+
|
|
1030
|
+
.rt-SidebarMenuShortcut {
|
|
1031
|
+
display: flex;
|
|
1032
|
+
align-items: center;
|
|
1033
|
+
margin-left: auto;
|
|
1034
|
+
padding-left: var(--space-4);
|
|
1035
|
+
color: var(--gray-a11);
|
|
1036
|
+
}
|
|
1037
|
+
|
|
1038
|
+
.rt-SidebarMenuBadge {
|
|
1039
|
+
display: flex;
|
|
1040
|
+
align-items: center;
|
|
1041
|
+
margin-left: auto;
|
|
1042
|
+
padding-left: var(--space-2);
|
|
1043
|
+
}
|