@plexui/styles 0.0.0-stage → 0.1.0
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/LICENSE +21 -0
- package/README.md +28 -2
- package/dist/es/components/Accordion/Accordion.module.css +89 -0
- package/dist/es/components/Alert/Alert.module.css +210 -0
- package/dist/es/components/Avatar/Avatar.module.css +168 -0
- package/dist/es/components/Avatar/AvatarGroup.module.css +26 -0
- package/dist/es/components/Badge/Badge.module.css +196 -0
- package/dist/es/components/Breadcrumb/Breadcrumb.module.css +59 -0
- package/dist/es/components/Button/Button.module.css +863 -0
- package/dist/es/components/ButtonGroup/ButtonGroup.module.css +158 -0
- package/dist/es/components/Card/Card.module.css +125 -0
- package/dist/es/components/Checkbox/Checkbox.module.css +225 -0
- package/dist/es/components/CodeBlock/CodeBlock.module.css +139 -0
- package/dist/es/components/DataTable/DataTable.module.css +117 -0
- package/dist/es/components/DatePicker/Calendar.module.css +271 -0
- package/dist/es/components/DateRangePicker/Calendar.module.css +295 -0
- package/dist/es/components/DateRangePicker/Trigger.module.css +25 -0
- package/dist/es/components/Dialog/Dialog.module.css +240 -0
- package/dist/es/components/EmptyMessage/EmptyMessage.module.css +116 -0
- package/dist/es/components/Field/Field.module.css +152 -0
- package/dist/es/components/FieldError/FieldError.module.css +28 -0
- package/dist/es/components/FileUpload/FileUpload.module.css +133 -0
- package/dist/es/components/FloatingLabelInput/FloatingLabelInput.module.css +220 -0
- package/dist/es/components/FloatingLabelSelect/FloatingLabelSelect.module.css +152 -0
- package/dist/es/components/Image/Image.module.css +9 -0
- package/dist/es/components/Indicator/CircularProgress.module.css +28 -0
- package/dist/es/components/Indicator/LoadingDots.module.css +35 -0
- package/dist/es/components/Indicator/LoadingIndicator.module.css +41 -0
- package/dist/es/components/Input/Input.module.css +519 -0
- package/dist/es/components/InputGroup/InputGroup.module.css +309 -0
- package/dist/es/components/Kbd/Kbd.module.css +47 -0
- package/dist/es/components/Label/Label.module.css +16 -0
- package/dist/es/components/Markdown/Markdown.module.css +233 -0
- package/dist/es/components/MarkdownEditor/MarkdownEditor.module.css +297 -0
- package/dist/es/components/Menu/Menu.module.css +386 -0
- package/dist/es/components/OTPInput/OTPInput.module.css +70 -0
- package/dist/es/components/Popover/Popover.module.css +82 -0
- package/dist/es/components/Progress/Progress.module.css +34 -0
- package/dist/es/components/ProgressSteps/ProgressSteps.module.css +246 -0
- package/dist/es/components/RadioGroup/RadioGroup.module.css +159 -0
- package/dist/es/components/Select/Select.module.css +338 -0
- package/dist/es/components/SelectControl/SelectControl.module.css +558 -0
- package/dist/es/components/Separator/Separator.module.css +16 -0
- package/dist/es/components/ShimmerText/ShimmerText.module.css +43 -0
- package/dist/es/components/Sidebar/Sidebar.module.css +913 -0
- package/dist/es/components/Skeleton/Skeleton.module.css +17 -0
- package/dist/es/components/Slider/Slider.module.css +199 -0
- package/dist/es/components/StatCard/StatCard.module.css +234 -0
- package/dist/es/components/Switch/Switch.module.css +121 -0
- package/dist/es/components/Table/Table.module.css +56 -0
- package/dist/es/components/Tabs/Tabs.module.css +688 -0
- package/dist/es/components/TagInput/TagInput.module.css +320 -0
- package/dist/es/components/TextLink/TextLink.module.css +50 -0
- package/dist/es/components/Textarea/Textarea.module.css +272 -0
- package/dist/es/components/Toast/Toast.module.css +99 -0
- package/dist/es/components/Tooltip/Tooltip.module.css +91 -0
- package/dist/es/components/Transition/Animate.module.css +54 -0
- package/dist/es/components/Transition/AnimateLayout.module.css +101 -0
- package/dist/es/components/Transition/AnimateLayoutGroup.module.css +88 -0
- package/dist/es/components/Transition/TransitionGroup.module.css +4 -0
- package/dist/es/styles/base.css +102 -0
- package/dist/es/styles/globals.css +50 -0
- package/dist/es/styles/index.css +22 -0
- package/dist/es/styles/katex.min.css +1296 -0
- package/dist/es/styles/tailwind-utilities.css +1316 -0
- package/dist/es/styles/variables-components.css +626 -0
- package/dist/es/styles/variables-primitive.css +327 -0
- package/dist/es/styles/variables-semantic.css +629 -0
- package/dist/es/styles/variables-tailwind-theme.css +34 -0
- package/dist/es/styles/variables-tokens-root.css +40 -0
- package/dist/es/types.js +4 -0
- package/dist/es/types.js.map +1 -0
- package/dist/es/vite/index.js +54 -0
- package/dist/es/vite/index.js.map +1 -0
- package/dist/types/types.d.ts +15 -0
- package/dist/types/vite/index.d.ts +55 -0
- package/package.json +109 -4
- package/postcss/functions.mjs +23 -0
- package/postcss/injectBreakpoints.mjs +47 -0
- package/postcss/mixins.mjs +100 -0
- package/postcss/parseLightDark.mjs +174 -0
- package/postcss/wrapModulesInLayer.mjs +21 -0
- package/postcss.config.mjs +52 -0
|
@@ -0,0 +1,913 @@
|
|
|
1
|
+
@layer components {/* =============================================
|
|
2
|
+
Sidebar Component Styles
|
|
3
|
+
============================================= *//* Layout container (wraps sidebar + content) */.SidebarLayout {
|
|
4
|
+
display: flex;
|
|
5
|
+
width: 100%;
|
|
6
|
+
height: 100%;
|
|
7
|
+
background-color: var(--color-surface-tertiary);
|
|
8
|
+
}/* =============================================
|
|
9
|
+
Sidebar Core
|
|
10
|
+
============================================= */.Sidebar {
|
|
11
|
+
position: relative;
|
|
12
|
+
z-index: 10;
|
|
13
|
+
display: flex;
|
|
14
|
+
flex-direction: column;
|
|
15
|
+
flex-shrink: 0;
|
|
16
|
+
width: var(--sidebar-width);
|
|
17
|
+
height: 100%;
|
|
18
|
+
padding: 0 var(--sidebar-gutter);
|
|
19
|
+
overflow: hidden;
|
|
20
|
+
background: var(--sidebar-background);
|
|
21
|
+
transition: width var(--sidebar-collapse-duration) var(--cubic-move);
|
|
22
|
+
}/* Collapsed state */:global([data-sidebar="collapsed"]) .Sidebar {
|
|
23
|
+
width: var(--sidebar-width-icon);
|
|
24
|
+
}/* Right side */.Sidebar[data-side="right"] {
|
|
25
|
+
order: 1;
|
|
26
|
+
}/* =============================================
|
|
27
|
+
Sidebar Sections
|
|
28
|
+
============================================= */.Header {
|
|
29
|
+
position: relative;
|
|
30
|
+
z-index: 20;
|
|
31
|
+
display: flex;
|
|
32
|
+
align-items: center;
|
|
33
|
+
flex-shrink: 0;
|
|
34
|
+
min-height: var(--sidebar-header-height);
|
|
35
|
+
padding: 0;
|
|
36
|
+
background: var(--color-surface-tertiary);
|
|
37
|
+
}/* Hide header text when collapsed, keep only icon/logo */:global([data-sidebar="collapsed"]) .Header {
|
|
38
|
+
justify-content: center;
|
|
39
|
+
padding: 0;
|
|
40
|
+
overflow: hidden;
|
|
41
|
+
}/* Hide all spans in header when collapsed, except the collapse trigger's own */:global([data-sidebar="collapsed"]) .Header span:not(:where(.Trigger, .Trigger *)) {
|
|
42
|
+
opacity: 0;
|
|
43
|
+
pointer-events: none;
|
|
44
|
+
}/* Keep only the logo icon visible (first element with fixed size). A wrapper
|
|
45
|
+
around the trigger (a Tooltip, say) keeps its own size. */:global([data-sidebar="collapsed"]) .Header > div:not(:has(.Trigger)) {
|
|
46
|
+
width: 32px;
|
|
47
|
+
height: 32px;
|
|
48
|
+
flex-shrink: 0;
|
|
49
|
+
}:global([data-sidebar="collapsed"]) .Header > div:not(:has(.Trigger)) > span {
|
|
50
|
+
opacity: 0;
|
|
51
|
+
pointer-events: none;
|
|
52
|
+
}/* Header title text - hidden when collapsed */.HeaderTitle {
|
|
53
|
+
overflow: hidden;
|
|
54
|
+
text-overflow: ellipsis;
|
|
55
|
+
white-space: nowrap;
|
|
56
|
+
transition: opacity var(--sidebar-collapse-duration) var(--cubic-move);
|
|
57
|
+
}:global([data-sidebar="collapsed"]) .HeaderTitle {
|
|
58
|
+
opacity: 0;
|
|
59
|
+
}.Content {
|
|
60
|
+
position: relative;
|
|
61
|
+
flex: 1;
|
|
62
|
+
width: 100%;
|
|
63
|
+
overflow-y: auto;
|
|
64
|
+
overflow-x: hidden;
|
|
65
|
+
padding: 24px 0 16px 0;
|
|
66
|
+
scrollbar-width: none;
|
|
67
|
+
-ms-overflow-style: none;
|
|
68
|
+
/* Smooth fade at top and bottom edges with buffer zone */
|
|
69
|
+
-webkit-mask-image: linear-gradient(
|
|
70
|
+
to bottom,
|
|
71
|
+
transparent 0,
|
|
72
|
+
transparent 8px,
|
|
73
|
+
black 24px,
|
|
74
|
+
black calc(100% - 24px),
|
|
75
|
+
transparent calc(100% - 8px),
|
|
76
|
+
transparent 100%
|
|
77
|
+
);
|
|
78
|
+
mask-image: linear-gradient(
|
|
79
|
+
to bottom,
|
|
80
|
+
transparent 0,
|
|
81
|
+
transparent 8px,
|
|
82
|
+
black 24px,
|
|
83
|
+
black calc(100% - 24px),
|
|
84
|
+
transparent calc(100% - 8px),
|
|
85
|
+
transparent 100%
|
|
86
|
+
);
|
|
87
|
+
}.Content::-webkit-scrollbar {
|
|
88
|
+
display: none;
|
|
89
|
+
}/* When Footer with separator is present, remove bottom fade - clip exactly at separator */.Sidebar:has(.Footer) .Content {
|
|
90
|
+
-webkit-mask-image: linear-gradient(
|
|
91
|
+
to bottom,
|
|
92
|
+
transparent 0,
|
|
93
|
+
transparent 8px,
|
|
94
|
+
black 24px,
|
|
95
|
+
black 100%
|
|
96
|
+
);
|
|
97
|
+
mask-image: linear-gradient(to bottom, transparent 0, transparent 8px, black 24px, black 100%);
|
|
98
|
+
}.Footer {
|
|
99
|
+
flex-shrink: 0;
|
|
100
|
+
width: 100%;
|
|
101
|
+
padding: 0 0 12px 0;
|
|
102
|
+
}.FooterSeparator {
|
|
103
|
+
height: 1px;
|
|
104
|
+
margin-bottom: 8px;
|
|
105
|
+
background: var(--sidebar-border);
|
|
106
|
+
margin-left: calc(-1 * var(--sidebar-gutter));
|
|
107
|
+
margin-right: calc(-1 * var(--sidebar-gutter));
|
|
108
|
+
width: calc(100% + 2 * var(--sidebar-gutter));
|
|
109
|
+
}/* Hide separator above collapse when sidebar has no vertical scroll */.Sidebar:not([data-content-scrollable="true"]) .FooterSeparator {
|
|
110
|
+
display: none;
|
|
111
|
+
}/* No special padding needed for children, parent handles it (except Card) */.Footer > *:not(.FooterSeparator):not(.Card) {
|
|
112
|
+
padding-left: 0;
|
|
113
|
+
padding-right: 0;
|
|
114
|
+
}/* Rail (collapse toggle area) */.Rail {
|
|
115
|
+
position: absolute;
|
|
116
|
+
top: 0;
|
|
117
|
+
right: 0;
|
|
118
|
+
z-index: 1;
|
|
119
|
+
display: flex;
|
|
120
|
+
align-items: center;
|
|
121
|
+
justify-content: center;
|
|
122
|
+
width: var(--sidebar-gutter);
|
|
123
|
+
height: 100%;
|
|
124
|
+
}/* =============================================
|
|
125
|
+
Groups
|
|
126
|
+
============================================= */.Group {
|
|
127
|
+
padding-bottom: calc(var(--spacing) * 3);
|
|
128
|
+
}/* First group should have smaller top margin (only for large headers) */.Group:first-child .GroupLabel[data-size="lg"] {
|
|
129
|
+
margin-top: 8px;
|
|
130
|
+
}.GroupLabel {
|
|
131
|
+
display: block;
|
|
132
|
+
padding: 0 12px 8px;
|
|
133
|
+
line-height: 14px;
|
|
134
|
+
transition: opacity var(--sidebar-collapse-duration) var(--cubic-move);
|
|
135
|
+
}/* Small header - compact dashboard/settings style */.GroupLabel[data-size="sm"] {
|
|
136
|
+
margin: 0;
|
|
137
|
+
color: var(--sidebar-group-label-color);
|
|
138
|
+
font-size: 13px;
|
|
139
|
+
font-weight: var(--font-weight-medium);
|
|
140
|
+
}/* Large header - documentation style with clear section separation */.GroupLabel[data-size="lg"] {
|
|
141
|
+
margin: 24px 0 2px;
|
|
142
|
+
color: var(--color-text-primary);
|
|
143
|
+
font-size: 14px;
|
|
144
|
+
font-weight: var(--font-weight-semibold);
|
|
145
|
+
letter-spacing: 0.005em;
|
|
146
|
+
}/* Hide group labels when collapsed. These collapsed-state rules stop at a
|
|
147
|
+
sidebar nested inside it that is expanded (a tree in the page content). */:global([data-sidebar="collapsed"]) .GroupLabel:not(:where([data-sidebar="collapsed"] [data-sidebar="expanded"] *)) {
|
|
148
|
+
opacity: 0;
|
|
149
|
+
}.GroupAction {
|
|
150
|
+
position: absolute;
|
|
151
|
+
top: 0;
|
|
152
|
+
right: var(--sidebar-gutter);
|
|
153
|
+
}.GroupContent {
|
|
154
|
+
display: flex;
|
|
155
|
+
flex-direction: column;
|
|
156
|
+
}/* Collapsible groups */.Group[data-state="closed"] .GroupContent {
|
|
157
|
+
display: none;
|
|
158
|
+
}/* =============================================
|
|
159
|
+
Menu
|
|
160
|
+
============================================= */.Menu {
|
|
161
|
+
display: flex;
|
|
162
|
+
flex-direction: column;
|
|
163
|
+
list-style: none;
|
|
164
|
+
padding: 0;
|
|
165
|
+
margin: 0;
|
|
166
|
+
}.MenuItem {
|
|
167
|
+
position: relative;
|
|
168
|
+
}/* =============================================
|
|
169
|
+
Menu Button (Navigation Item)
|
|
170
|
+
============================================= */.MenuButton {
|
|
171
|
+
position: relative;
|
|
172
|
+
display: flex;
|
|
173
|
+
align-items: center;
|
|
174
|
+
width: 100%;
|
|
175
|
+
padding: var(--sidebar-menu-item-padding);
|
|
176
|
+
margin: var(--sidebar-menu-item-margin);
|
|
177
|
+
border: none;
|
|
178
|
+
border-radius: 0;
|
|
179
|
+
background: transparent;
|
|
180
|
+
color: var(--sidebar-menu-text);
|
|
181
|
+
font-size: var(--sidebar-menu-item-font-size);
|
|
182
|
+
line-height: var(--sidebar-menu-item-line-height);
|
|
183
|
+
text-decoration: none;
|
|
184
|
+
cursor: pointer;
|
|
185
|
+
-webkit-user-select: none;
|
|
186
|
+
-moz-user-select: none;
|
|
187
|
+
user-select: none;
|
|
188
|
+
white-space: nowrap;
|
|
189
|
+
overflow: hidden;
|
|
190
|
+
transition: color 0.15s var(--cubic-enter);
|
|
191
|
+
}.MenuButton:focus {
|
|
192
|
+
outline: none;
|
|
193
|
+
}/* Pseudo-element background for hover/active states */.MenuButton::before {
|
|
194
|
+
position: absolute;
|
|
195
|
+
inset: 0;
|
|
196
|
+
display: block;
|
|
197
|
+
border-radius: var(--sidebar-menu-item-radius);
|
|
198
|
+
background: var(--sidebar-accent);
|
|
199
|
+
content: "";
|
|
200
|
+
opacity: 0;
|
|
201
|
+
transform: scale(0.98);
|
|
202
|
+
transition-duration: 0.15s;
|
|
203
|
+
transition-property: opacity, background-color, transform;
|
|
204
|
+
transition-timing-function: var(--cubic-enter);
|
|
205
|
+
will-change: opacity, transform;
|
|
206
|
+
}/* Hover state */@media (hover: hover) and (pointer: fine) {
|
|
207
|
+
.MenuButton:hover {
|
|
208
|
+
color: var(--sidebar-menu-text-active);
|
|
209
|
+
}
|
|
210
|
+
|
|
211
|
+
.MenuButton:hover::before {
|
|
212
|
+
opacity: 0.5;
|
|
213
|
+
transform: scale(1);
|
|
214
|
+
}
|
|
215
|
+
}/* Active (selected) state - mapping to rZ3k- in reference */.MenuButton[data-active="true"] {
|
|
216
|
+
color: var(--sidebar-menu-text-active);
|
|
217
|
+
cursor: default;
|
|
218
|
+
}.MenuButton[data-active="true"]::before {
|
|
219
|
+
opacity: 1;
|
|
220
|
+
transform: scale(1);
|
|
221
|
+
}/* Press effect */.MenuButton:active:not([data-active="true"])::before {
|
|
222
|
+
opacity: 0.7;
|
|
223
|
+
transform: scale(0.98);
|
|
224
|
+
}/* Focus visible */.MenuButton:focus-visible::before {
|
|
225
|
+
box-shadow: 0 0 0 2px var(--color-ring);
|
|
226
|
+
}/* Inner container - controls height like reference .abr-y */.MenuButtonInner {
|
|
227
|
+
position: relative;
|
|
228
|
+
display: flex;
|
|
229
|
+
align-items: center;
|
|
230
|
+
width: 100%;
|
|
231
|
+
height: var(--sidebar-menu-item-height);
|
|
232
|
+
padding-right: 12px; /* Space for chevron from edge */
|
|
233
|
+
overflow: hidden;
|
|
234
|
+
}@media (min-width: 768px) {
|
|
235
|
+
.MenuButtonInner {
|
|
236
|
+
height: var(--sidebar-menu-item-height-desktop);
|
|
237
|
+
}
|
|
238
|
+
|
|
239
|
+
.MenuButton {
|
|
240
|
+
margin: var(--sidebar-menu-item-margin-desktop);
|
|
241
|
+
}
|
|
242
|
+
}/* Icon wrapper - fixed width for centering */.MenuButtonIcon {
|
|
243
|
+
position: relative;
|
|
244
|
+
z-index: 1;
|
|
245
|
+
display: flex;
|
|
246
|
+
align-items: center;
|
|
247
|
+
justify-content: center;
|
|
248
|
+
flex-shrink: 0;
|
|
249
|
+
width: var(--sidebar-icon-wrapper-size);
|
|
250
|
+
height: var(--sidebar-icon-wrapper-size);
|
|
251
|
+
margin: var(--sidebar-icon-margin);
|
|
252
|
+
color: inherit;
|
|
253
|
+
}.MenuButtonIcon svg {
|
|
254
|
+
width: var(--sidebar-icon-size);
|
|
255
|
+
height: var(--sidebar-icon-size);
|
|
256
|
+
}/* Label - collapses when sidebar is collapsed */.MenuButtonLabel {
|
|
257
|
+
position: relative;
|
|
258
|
+
z-index: 1;
|
|
259
|
+
flex: 1;
|
|
260
|
+
overflow: hidden;
|
|
261
|
+
text-align: left;
|
|
262
|
+
text-overflow: ellipsis;
|
|
263
|
+
white-space: nowrap;
|
|
264
|
+
min-width: 0;
|
|
265
|
+
transition: opacity var(--sidebar-collapse-duration) var(--cubic-move);
|
|
266
|
+
will-change: opacity, width;
|
|
267
|
+
}/* Add left padding when label is first child (no icon) */.MenuButtonLabel:first-child {
|
|
268
|
+
padding-left: 12px;
|
|
269
|
+
}/* Hide label when collapsed */:global([data-sidebar="collapsed"]) .MenuButtonLabel:not(:where([data-sidebar="collapsed"] [data-sidebar="expanded"] *)) {
|
|
270
|
+
opacity: 0;
|
|
271
|
+
pointer-events: none;
|
|
272
|
+
}/* Long/short label support */.MenuButtonLabel[data-long-label="true"] {
|
|
273
|
+
opacity: 1;
|
|
274
|
+
}.MenuButtonLabel[data-short-label="true"] {
|
|
275
|
+
position: absolute;
|
|
276
|
+
opacity: 0;
|
|
277
|
+
pointer-events: none;
|
|
278
|
+
}:global([data-sidebar="collapsed"]) .MenuButtonLabel[data-long-label="true"]:not(:where([data-sidebar="collapsed"] [data-sidebar="expanded"] *)) {
|
|
279
|
+
opacity: 0;
|
|
280
|
+
}:global([data-sidebar="collapsed"]) .MenuButtonLabel[data-short-label="true"]:not(:where([data-sidebar="collapsed"] [data-sidebar="expanded"] *)) {
|
|
281
|
+
position: relative;
|
|
282
|
+
opacity: 1;
|
|
283
|
+
pointer-events: auto;
|
|
284
|
+
}/* No special button positioning when collapsed - keep left alignment for smooth transition */:global([data-sidebar="collapsed"]) .MenuButton {
|
|
285
|
+
width: 100%;
|
|
286
|
+
}/* Icon stays same size when collapsed - centering via parent justify-content *//* Menu button sizes */.MenuButton[data-size="sm"] .MenuButtonInner {
|
|
287
|
+
height: 28px;
|
|
288
|
+
}.MenuButton[data-size="lg"] .MenuButtonInner {
|
|
289
|
+
height: var(--sidebar-menu-item-height);
|
|
290
|
+
}/* =============================================
|
|
291
|
+
Menu Badge & Action
|
|
292
|
+
============================================= */.MenuBadge {
|
|
293
|
+
position: relative;
|
|
294
|
+
z-index: 1;
|
|
295
|
+
padding-left: calc(var(--spacing) * 2);
|
|
296
|
+
transition: opacity var(--sidebar-collapse-duration) var(--cubic-move);
|
|
297
|
+
transition-delay: 0.2s;
|
|
298
|
+
}:global([data-sidebar="collapsed"]) .MenuBadge:not(:where([data-sidebar="collapsed"] [data-sidebar="expanded"] *)) {
|
|
299
|
+
opacity: 0;
|
|
300
|
+
pointer-events: none;
|
|
301
|
+
transition-delay: 0s;
|
|
302
|
+
}.MenuAction {
|
|
303
|
+
position: relative;
|
|
304
|
+
z-index: 1;
|
|
305
|
+
margin-left: auto;
|
|
306
|
+
opacity: 0;
|
|
307
|
+
transition: opacity var(--transition-duration-basic) var(--cubic-enter);
|
|
308
|
+
}.MenuItem:hover .MenuAction,
|
|
309
|
+
.MenuItem:focus-within .MenuAction {
|
|
310
|
+
opacity: 1;
|
|
311
|
+
}/* =============================================
|
|
312
|
+
Submenu
|
|
313
|
+
============================================= */.MenuSub {
|
|
314
|
+
display: flex;
|
|
315
|
+
flex-direction: column;
|
|
316
|
+
gap: 0;
|
|
317
|
+
padding-left: 0;
|
|
318
|
+
margin-left: 0; /* No margin - buttons handle all indentation via padding */
|
|
319
|
+
list-style: none;
|
|
320
|
+
margin-top: 0;
|
|
321
|
+
margin-bottom: 0;
|
|
322
|
+
overflow: hidden; /* Required for collapse animation */
|
|
323
|
+
}.MenuSubItem {
|
|
324
|
+
position: relative;
|
|
325
|
+
}.MenuSubButton {
|
|
326
|
+
/* Inherits MenuButton base styles (replaced composes for Turbopack compatibility) */
|
|
327
|
+
position: relative;
|
|
328
|
+
display: flex;
|
|
329
|
+
align-items: center;
|
|
330
|
+
width: 100%;
|
|
331
|
+
padding: 8px 12px;
|
|
332
|
+
margin: var(--sidebar-menu-item-margin);
|
|
333
|
+
border: none;
|
|
334
|
+
border-radius: 0;
|
|
335
|
+
background: transparent;
|
|
336
|
+
color: var(--sidebar-menu-text);
|
|
337
|
+
font-size: 14px;
|
|
338
|
+
line-height: 20px;
|
|
339
|
+
text-decoration: none;
|
|
340
|
+
cursor: pointer;
|
|
341
|
+
-webkit-user-select: none;
|
|
342
|
+
-moz-user-select: none;
|
|
343
|
+
user-select: none;
|
|
344
|
+
white-space: nowrap;
|
|
345
|
+
overflow: hidden;
|
|
346
|
+
transition: color 0.15s var(--cubic-enter);
|
|
347
|
+
}.MenuSubButton:focus {
|
|
348
|
+
outline: none;
|
|
349
|
+
}.MenuSubButton::before {
|
|
350
|
+
position: absolute;
|
|
351
|
+
inset: 0;
|
|
352
|
+
display: block;
|
|
353
|
+
border-radius: var(--sidebar-menu-item-radius);
|
|
354
|
+
background: var(--sidebar-accent);
|
|
355
|
+
content: "";
|
|
356
|
+
opacity: 0;
|
|
357
|
+
transform: scale(0.98);
|
|
358
|
+
transition-duration: 0.15s;
|
|
359
|
+
transition-property: opacity, background-color, transform;
|
|
360
|
+
transition-timing-function: var(--cubic-enter);
|
|
361
|
+
will-change: opacity, transform;
|
|
362
|
+
}@media (hover: hover) and (pointer: fine) {
|
|
363
|
+
.MenuSubButton:hover {
|
|
364
|
+
color: var(--sidebar-menu-text-active);
|
|
365
|
+
}
|
|
366
|
+
|
|
367
|
+
.MenuSubButton:hover::before {
|
|
368
|
+
opacity: 0.5;
|
|
369
|
+
transform: scale(1);
|
|
370
|
+
}
|
|
371
|
+
}.MenuSubButton[data-active="true"] {
|
|
372
|
+
color: var(--sidebar-menu-text-active);
|
|
373
|
+
cursor: default;
|
|
374
|
+
}.MenuSubButton[data-active="true"]::before {
|
|
375
|
+
opacity: 1;
|
|
376
|
+
transform: scale(1);
|
|
377
|
+
}.MenuSubButton:active:not([data-active="true"])::before {
|
|
378
|
+
opacity: 0.7;
|
|
379
|
+
transform: scale(0.98);
|
|
380
|
+
}.MenuSubButton:focus-visible::before {
|
|
381
|
+
box-shadow: 0 0 0 2px var(--color-ring);
|
|
382
|
+
}@media (min-width: 768px) {
|
|
383
|
+
.MenuSubButton {
|
|
384
|
+
padding: 6px 12px;
|
|
385
|
+
}
|
|
386
|
+
}/* Indent levels for nested items - full-width buttons with padding for text *//* indent0 = 12px aligns with section header (GroupLabel) */.MenuSubButton.indent0 {
|
|
387
|
+
padding-left: 12px;
|
|
388
|
+
}.MenuSubButton.indent1 {
|
|
389
|
+
padding-left: 24px;
|
|
390
|
+
}.MenuSubButton.indent2 {
|
|
391
|
+
padding-left: 36px;
|
|
392
|
+
}.MenuSubButton.indent3 {
|
|
393
|
+
padding-left: 48px;
|
|
394
|
+
}/* When parent has icons, level 1 children align with parent text at 38px */.MenuSub[data-has-icons="true"] .MenuSubButton.indent1 {
|
|
395
|
+
padding-left: 38px;
|
|
396
|
+
}/* Submenu visibility with animation */.MenuSub {
|
|
397
|
+
/* The open height animates from 0 to this cap; raise it for long lists */
|
|
398
|
+
max-height: var(--sidebar-menu-sub-max-height, 1000px);
|
|
399
|
+
transition:
|
|
400
|
+
max-height 0.3s var(--cubic-move),
|
|
401
|
+
opacity 0.3s var(--cubic-move);
|
|
402
|
+
}.MenuSub[data-state="closed"] {
|
|
403
|
+
max-height: 0;
|
|
404
|
+
opacity: 0;
|
|
405
|
+
pointer-events: none;
|
|
406
|
+
}/* Chevron toggle icon - pushed to right end */.MenuChevron {
|
|
407
|
+
display: flex;
|
|
408
|
+
align-items: center;
|
|
409
|
+
justify-content: center;
|
|
410
|
+
margin-left: auto;
|
|
411
|
+
color: inherit; /* Inherit from parent item */
|
|
412
|
+
transition: transform 0.15s;
|
|
413
|
+
flex-shrink: 0;
|
|
414
|
+
}/* Rotate chevron when its own item is expanded: not when only an outer item
|
|
415
|
+
is (a collapsed item nested under an expanded one keeps its chevron) */[data-expanded="true"] .MenuChevron:not([data-expanded="true"] li:not([data-expanded="true"]) .MenuChevron) {
|
|
416
|
+
transform: rotate(90deg);
|
|
417
|
+
}/* Hide chevron in collapsed sidebar */:global([data-sidebar="collapsed"]) .MenuChevron:not(:where([data-sidebar="collapsed"] [data-sidebar="expanded"] *)) {
|
|
418
|
+
display: none;
|
|
419
|
+
}/* =============================================
|
|
420
|
+
Skeleton (Loading State)
|
|
421
|
+
============================================= */.MenuSkeleton {
|
|
422
|
+
display: flex;
|
|
423
|
+
align-items: center;
|
|
424
|
+
height: var(--sidebar-menu-item-height);
|
|
425
|
+
padding: var(--sidebar-menu-item-padding);
|
|
426
|
+
}.MenuSkeletonIcon {
|
|
427
|
+
width: var(--sidebar-icon-wrapper-size);
|
|
428
|
+
height: var(--sidebar-icon-wrapper-size);
|
|
429
|
+
margin: var(--sidebar-icon-margin);
|
|
430
|
+
border-radius: var(--skeleton-radius);
|
|
431
|
+
background: var(--skeleton-background);
|
|
432
|
+
animation: skeleton-pulse 1.5s ease-in-out infinite;
|
|
433
|
+
}.MenuSkeletonLabel {
|
|
434
|
+
height: 12px;
|
|
435
|
+
margin-left: calc(var(--spacing) * 2);
|
|
436
|
+
border-radius: var(--skeleton-radius);
|
|
437
|
+
background: var(--skeleton-background);
|
|
438
|
+
animation: skeleton-pulse 1.5s ease-in-out infinite;
|
|
439
|
+
}@keyframes skeleton-pulse {
|
|
440
|
+
0%,
|
|
441
|
+
100% {
|
|
442
|
+
opacity: 1;
|
|
443
|
+
}
|
|
444
|
+
|
|
445
|
+
50% {
|
|
446
|
+
opacity: 0.5;
|
|
447
|
+
}
|
|
448
|
+
}/* Hide skeleton label when collapsed */:global([data-sidebar="collapsed"]) .MenuSkeletonLabel:not(:where([data-sidebar="collapsed"] [data-sidebar="expanded"] *)) {
|
|
449
|
+
opacity: 0;
|
|
450
|
+
}/* =============================================
|
|
451
|
+
Separator
|
|
452
|
+
============================================= */.Separator {
|
|
453
|
+
height: 1px;
|
|
454
|
+
margin: calc(var(--spacing) * 2) 0;
|
|
455
|
+
background: var(--sidebar-border);
|
|
456
|
+
transition: width var(--sidebar-collapse-duration) var(--cubic-move);
|
|
457
|
+
}/* Shorten and align separator when collapsed */:global([data-sidebar="collapsed"]) .Separator {
|
|
458
|
+
width: 32px;
|
|
459
|
+
margin-left: 4px;
|
|
460
|
+
}/* =============================================
|
|
461
|
+
Card (Footer CTA)
|
|
462
|
+
============================================= */.Card {
|
|
463
|
+
position: relative;
|
|
464
|
+
display: flex;
|
|
465
|
+
flex-direction: column;
|
|
466
|
+
padding: 6px 12px 10px;
|
|
467
|
+
margin: 12px 0 8px;
|
|
468
|
+
border: 1px solid var(--color-border);
|
|
469
|
+
border-radius: var(--radius-md);
|
|
470
|
+
background: var(--color-surface-tertiary);
|
|
471
|
+
font-size: 14px;
|
|
472
|
+
transition:
|
|
473
|
+
border-color 0.15s ease,
|
|
474
|
+
height 0.15s ease,
|
|
475
|
+
padding 0.15s ease,
|
|
476
|
+
margin 0.15s ease,
|
|
477
|
+
opacity 0.5s ease 0.25s;
|
|
478
|
+
}.Card:hover {
|
|
479
|
+
border-color: var(--color-border-strong);
|
|
480
|
+
}.CardHeader {
|
|
481
|
+
display: flex;
|
|
482
|
+
align-items: center;
|
|
483
|
+
justify-content: space-between;
|
|
484
|
+
margin-bottom: calc(var(--spacing) * 1);
|
|
485
|
+
}.CardTitle {
|
|
486
|
+
font-weight: var(--font-weight-semibold);
|
|
487
|
+
color: var(--sidebar-foreground);
|
|
488
|
+
}.CardDismiss {
|
|
489
|
+
position: absolute;
|
|
490
|
+
top: 6px;
|
|
491
|
+
right: 6px;
|
|
492
|
+
border-radius: var(--radius-xs);
|
|
493
|
+
}.CardContent {
|
|
494
|
+
flex: 1;
|
|
495
|
+
color: var(--color-text-secondary);
|
|
496
|
+
font-size: var(--font-text-sm-size);
|
|
497
|
+
line-height: var(--font-text-sm-line-height);
|
|
498
|
+
}.CardFooter {
|
|
499
|
+
margin-top: calc(var(--spacing) * 3);
|
|
500
|
+
}/* Card title link with chevron animation */.CardTitleLink {
|
|
501
|
+
display: flex;
|
|
502
|
+
align-items: center;
|
|
503
|
+
gap: 2px;
|
|
504
|
+
font-weight: var(--font-weight-semibold);
|
|
505
|
+
color: var(--sidebar-foreground);
|
|
506
|
+
}.CardTitleChevron {
|
|
507
|
+
opacity: 0;
|
|
508
|
+
transform: translateX(-4px);
|
|
509
|
+
transition:
|
|
510
|
+
opacity 0.15s ease,
|
|
511
|
+
transform 0.15s ease;
|
|
512
|
+
}.Card:hover .CardTitleChevron {
|
|
513
|
+
opacity: 1;
|
|
514
|
+
transform: translateX(0);
|
|
515
|
+
}/* Hide card when collapsed - fully collapse height */:global([data-sidebar="collapsed"]) .Card {
|
|
516
|
+
height: 0;
|
|
517
|
+
padding: 0;
|
|
518
|
+
margin: 0;
|
|
519
|
+
border-width: 0;
|
|
520
|
+
opacity: 0;
|
|
521
|
+
overflow: hidden;
|
|
522
|
+
pointer-events: none;
|
|
523
|
+
transition-delay: 0s;
|
|
524
|
+
transition-duration: 0s;
|
|
525
|
+
}/* =============================================
|
|
526
|
+
Inset (Main Content Area)
|
|
527
|
+
============================================= */.Inset {
|
|
528
|
+
overflow: auto;
|
|
529
|
+
flex: 1;
|
|
530
|
+
min-width: 0;
|
|
531
|
+
margin: var(--sidebar-gutter-sm);
|
|
532
|
+
margin-left: 0;
|
|
533
|
+
box-shadow: var(--sidebar-inset-shadow);
|
|
534
|
+
border-radius: var(--radius-xl);
|
|
535
|
+
background: var(--color-surface);
|
|
536
|
+
}/* =============================================
|
|
537
|
+
Trigger (Collapse Button)
|
|
538
|
+
============================================= *//* Styled like MenuButton for visual consistency with menu items */.Trigger {
|
|
539
|
+
position: relative;
|
|
540
|
+
display: flex;
|
|
541
|
+
align-items: center;
|
|
542
|
+
width: 100%;
|
|
543
|
+
padding: 0;
|
|
544
|
+
margin: 0;
|
|
545
|
+
border: none;
|
|
546
|
+
border-radius: 0;
|
|
547
|
+
background: transparent;
|
|
548
|
+
color: var(--sidebar-foreground);
|
|
549
|
+
cursor: pointer;
|
|
550
|
+
-webkit-user-select: none;
|
|
551
|
+
-moz-user-select: none;
|
|
552
|
+
user-select: none;
|
|
553
|
+
-webkit-appearance: none;
|
|
554
|
+
-moz-appearance: none;
|
|
555
|
+
appearance: none;
|
|
556
|
+
}.Trigger:focus {
|
|
557
|
+
outline: none;
|
|
558
|
+
}/* Hover background via pseudo-element like MenuButton */.Trigger::before {
|
|
559
|
+
position: absolute;
|
|
560
|
+
inset: 0;
|
|
561
|
+
display: block;
|
|
562
|
+
border-radius: var(--sidebar-menu-item-radius);
|
|
563
|
+
background: var(--sidebar-accent);
|
|
564
|
+
content: "";
|
|
565
|
+
opacity: 0;
|
|
566
|
+
transform: scale(1);
|
|
567
|
+
transition-duration: 0.15s;
|
|
568
|
+
transition-property: opacity, background-color, transform;
|
|
569
|
+
transition-timing-function: var(--cubic-enter);
|
|
570
|
+
will-change: opacity, transform;
|
|
571
|
+
}@media (hover: hover) and (pointer: fine) {
|
|
572
|
+
.Trigger:hover::before {
|
|
573
|
+
opacity: 0.5;
|
|
574
|
+
}
|
|
575
|
+
}.Trigger:focus-visible::before {
|
|
576
|
+
box-shadow: 0 0 0 2px var(--color-ring);
|
|
577
|
+
opacity: 1;
|
|
578
|
+
background: transparent;
|
|
579
|
+
}.Trigger:active::before {
|
|
580
|
+
opacity: 0.7;
|
|
581
|
+
transform: scale(0.98);
|
|
582
|
+
}:global([data-sidebar="collapsed"]) .Trigger {
|
|
583
|
+
/* No special positioning */
|
|
584
|
+
}/* Inner container - same height as menu items */.TriggerInner {
|
|
585
|
+
position: relative;
|
|
586
|
+
display: flex;
|
|
587
|
+
align-items: center;
|
|
588
|
+
height: var(--sidebar-menu-item-height);
|
|
589
|
+
}@media (min-width: 768px) {
|
|
590
|
+
.TriggerInner {
|
|
591
|
+
height: var(--sidebar-menu-item-height-desktop);
|
|
592
|
+
}
|
|
593
|
+
}/* Icon wrapper - same as MenuButtonIcon for alignment */.TriggerIcon {
|
|
594
|
+
position: relative;
|
|
595
|
+
z-index: 1;
|
|
596
|
+
display: flex;
|
|
597
|
+
align-items: center;
|
|
598
|
+
justify-content: center;
|
|
599
|
+
flex-shrink: 0;
|
|
600
|
+
width: var(--sidebar-icon-wrapper-size);
|
|
601
|
+
height: var(--sidebar-icon-wrapper-size);
|
|
602
|
+
margin: var(--sidebar-icon-margin);
|
|
603
|
+
color: inherit;
|
|
604
|
+
}.TriggerIcon svg {
|
|
605
|
+
width: var(--sidebar-icon-size);
|
|
606
|
+
height: var(--sidebar-icon-size);
|
|
607
|
+
}/* Don't show trigger when collapsible="none" */:global([data-collapsible="none"]) .Trigger {
|
|
608
|
+
display: none;
|
|
609
|
+
}/* =============================================
|
|
610
|
+
Input (Search)
|
|
611
|
+
============================================= */.Input {
|
|
612
|
+
position: relative;
|
|
613
|
+
display: flex;
|
|
614
|
+
align-items: center;
|
|
615
|
+
box-sizing: border-box;
|
|
616
|
+
padding: 12px 0 8px; /* No horizontal padding - Input component has its own */
|
|
617
|
+
}/* =============================================
|
|
618
|
+
Mobile Menu Button (Hamburger → X)
|
|
619
|
+
============================================= */.MobileMenuButton {
|
|
620
|
+
position: relative;
|
|
621
|
+
display: block;
|
|
622
|
+
width: var(--sidebar-mobile-button-size);
|
|
623
|
+
height: var(--sidebar-mobile-button-size);
|
|
624
|
+
padding: 0;
|
|
625
|
+
border: 0;
|
|
626
|
+
border-radius: var(--sidebar-mobile-button-radius);
|
|
627
|
+
background: none;
|
|
628
|
+
cursor: pointer;
|
|
629
|
+
transition: box-shadow 0.3s var(--cubic-enter);
|
|
630
|
+
}.MobileMenuButton::before {
|
|
631
|
+
position: absolute;
|
|
632
|
+
inset: 0;
|
|
633
|
+
display: block;
|
|
634
|
+
border-radius: var(--sidebar-mobile-button-radius);
|
|
635
|
+
background: var(--color-surface);
|
|
636
|
+
content: "";
|
|
637
|
+
opacity: 0;
|
|
638
|
+
transition: opacity 0.15s ease;
|
|
639
|
+
}.MobileMenuButton:hover::before {
|
|
640
|
+
opacity: 0.65;
|
|
641
|
+
}.MobileMenuButton:active::before,
|
|
642
|
+
.MobileMenuButton[data-expanded]::before {
|
|
643
|
+
opacity: 1;
|
|
644
|
+
}.MobileMenuButton:focus-visible {
|
|
645
|
+
box-shadow: 0 0 0 2px var(--color-ring);
|
|
646
|
+
outline: 0;
|
|
647
|
+
}/* Icon wrapper */.MobileMenuIcon {
|
|
648
|
+
position: relative;
|
|
649
|
+
top: 0;
|
|
650
|
+
left: 7px;
|
|
651
|
+
overflow: hidden;
|
|
652
|
+
display: block;
|
|
653
|
+
width: var(--sidebar-mobile-icon-size);
|
|
654
|
+
height: var(--sidebar-mobile-icon-size);
|
|
655
|
+
}/* Line bars */.MobileMenuLine {
|
|
656
|
+
position: absolute;
|
|
657
|
+
top: 4px;
|
|
658
|
+
left: 0;
|
|
659
|
+
display: block;
|
|
660
|
+
width: var(--sidebar-mobile-icon-size);
|
|
661
|
+
height: var(--sidebar-mobile-line-height);
|
|
662
|
+
transition: transform var(--sidebar-mobile-line-transition-duration) var(--cubic-move) 0.2s;
|
|
663
|
+
}.MobileMenuLine::before {
|
|
664
|
+
display: block;
|
|
665
|
+
width: var(--sidebar-mobile-icon-size);
|
|
666
|
+
height: var(--sidebar-mobile-line-height);
|
|
667
|
+
background: var(--sidebar-mobile-line-color);
|
|
668
|
+
content: "";
|
|
669
|
+
transform-origin: center;
|
|
670
|
+
transition: transform var(--sidebar-mobile-line-transition-duration) var(--cubic-move);
|
|
671
|
+
will-change: transform;
|
|
672
|
+
}/* Top line - closed state */.MobileMenuLine[data-top] {
|
|
673
|
+
transform: translateY(0);
|
|
674
|
+
transition-delay: 0.2s;
|
|
675
|
+
}.MobileMenuLine[data-top]::before {
|
|
676
|
+
transform: rotate(0);
|
|
677
|
+
transition-delay: 0s;
|
|
678
|
+
}/* Bottom line - closed state */.MobileMenuLine[data-bottom] {
|
|
679
|
+
top: 12px;
|
|
680
|
+
transform: translateY(0);
|
|
681
|
+
transition-delay: 0.2s;
|
|
682
|
+
}.MobileMenuLine[data-bottom]::before {
|
|
683
|
+
transform: rotate(0);
|
|
684
|
+
transition-delay: 0s;
|
|
685
|
+
}/* Middle wrapper */.MobileMenuMiddle {
|
|
686
|
+
display: block;
|
|
687
|
+
transform: translateX(-6px);
|
|
688
|
+
transition: transform 0s var(--cubic-move) 0.2s;
|
|
689
|
+
}/* Open state (X) */.MobileMenuButton[data-expanded] .MobileMenuLine[data-top] {
|
|
690
|
+
transform: translateY(4px);
|
|
691
|
+
transition-delay: 0s;
|
|
692
|
+
}.MobileMenuButton[data-expanded] .MobileMenuLine[data-top]::before {
|
|
693
|
+
transform: rotate(45deg);
|
|
694
|
+
transition-delay: 0.2s;
|
|
695
|
+
}.MobileMenuButton[data-expanded] .MobileMenuLine[data-bottom] {
|
|
696
|
+
transform: translateY(-4px);
|
|
697
|
+
transition-delay: 0s;
|
|
698
|
+
}.MobileMenuButton[data-expanded] .MobileMenuLine[data-bottom]::before {
|
|
699
|
+
transform: rotate(-45deg);
|
|
700
|
+
transition-delay: 0.2s;
|
|
701
|
+
}.MobileMenuButton[data-expanded] .MobileMenuMiddle {
|
|
702
|
+
transform: translateX(0);
|
|
703
|
+
}/* =============================================
|
|
704
|
+
Mobile Drawer
|
|
705
|
+
============================================= */.MobileBackdrop {
|
|
706
|
+
position: fixed;
|
|
707
|
+
inset: 0;
|
|
708
|
+
z-index: calc(var(--sidebar-mobile-z-index) - 1);
|
|
709
|
+
background: var(--sidebar-mobile-backdrop-color);
|
|
710
|
+
pointer-events: none;
|
|
711
|
+
opacity: 0;
|
|
712
|
+
visibility: hidden;
|
|
713
|
+
transition:
|
|
714
|
+
opacity var(--sidebar-mobile-exit-duration) var(--cubic-exit),
|
|
715
|
+
visibility 0s var(--sidebar-mobile-exit-duration);
|
|
716
|
+
}:global([data-mobile-menu="visible"]) .MobileBackdrop {
|
|
717
|
+
pointer-events: auto;
|
|
718
|
+
opacity: 1;
|
|
719
|
+
visibility: visible;
|
|
720
|
+
transition:
|
|
721
|
+
opacity 0.6s var(--cubic-enter),
|
|
722
|
+
visibility 0s;
|
|
723
|
+
}.MobileSidebar {
|
|
724
|
+
position: fixed;
|
|
725
|
+
top: 0;
|
|
726
|
+
right: 0;
|
|
727
|
+
bottom: 0;
|
|
728
|
+
left: 100%;
|
|
729
|
+
z-index: var(--sidebar-mobile-z-index);
|
|
730
|
+
overflow: hidden;
|
|
731
|
+
display: flex;
|
|
732
|
+
flex-direction: column;
|
|
733
|
+
width: var(--sidebar-width-mobile);
|
|
734
|
+
padding: var(--sidebar-mobile-gutter) var(--sidebar-mobile-gutter) 0;
|
|
735
|
+
background: var(--sidebar-background, var(--color-surface));
|
|
736
|
+
-webkit-user-select: none;
|
|
737
|
+
-moz-user-select: none;
|
|
738
|
+
user-select: none;
|
|
739
|
+
visibility: hidden;
|
|
740
|
+
transition:
|
|
741
|
+
left var(--sidebar-mobile-exit-duration) var(--cubic-exit),
|
|
742
|
+
visibility 0s var(--sidebar-mobile-exit-duration);
|
|
743
|
+
}:global([data-mobile-menu="visible"]) .MobileSidebar {
|
|
744
|
+
left: 0;
|
|
745
|
+
right: 0;
|
|
746
|
+
width: auto;
|
|
747
|
+
visibility: visible;
|
|
748
|
+
transition:
|
|
749
|
+
left var(--sidebar-transition-duration) var(--cubic-enter),
|
|
750
|
+
visibility 0s;
|
|
751
|
+
}/* Staggered children animation */.MobileSidebar > * {
|
|
752
|
+
opacity: 0;
|
|
753
|
+
transform: translateY(-6px);
|
|
754
|
+
transition:
|
|
755
|
+
opacity var(--sidebar-mobile-exit-duration) var(--cubic-exit),
|
|
756
|
+
transform var(--sidebar-mobile-exit-duration) var(--cubic-exit);
|
|
757
|
+
}:global([data-mobile-menu="visible"]) .MobileSidebar > * {
|
|
758
|
+
opacity: 1;
|
|
759
|
+
transform: translateY(0);
|
|
760
|
+
transition:
|
|
761
|
+
opacity var(--sidebar-mobile-enter-opacity-duration) var(--cubic-enter)
|
|
762
|
+
var(--sidebar-mobile-enter-delay),
|
|
763
|
+
transform var(--sidebar-mobile-enter-transform-duration) var(--cubic-enter)
|
|
764
|
+
var(--sidebar-mobile-enter-delay);
|
|
765
|
+
will-change: opacity, transform;
|
|
766
|
+
}:global([data-mobile-menu="visible"]) .MobileSidebar > *:nth-child(1) {
|
|
767
|
+
transition-delay: 0.15s;
|
|
768
|
+
}:global([data-mobile-menu="visible"]) .MobileSidebar > *:nth-child(2) {
|
|
769
|
+
transition-delay: 0.21s;
|
|
770
|
+
}:global([data-mobile-menu="visible"]) .MobileSidebar > *:nth-child(3) {
|
|
771
|
+
transition-delay: 0.27s;
|
|
772
|
+
}/* Mobile menu item - larger for touch */.MobileSidebar .MenuButtonInner {
|
|
773
|
+
height: var(--sidebar-menu-item-height);
|
|
774
|
+
}/* Mobile header */.MobileHeader {
|
|
775
|
+
display: flex;
|
|
776
|
+
align-items: center;
|
|
777
|
+
justify-content: space-between;
|
|
778
|
+
height: var(--sidebar-mobile-header-height);
|
|
779
|
+
padding: 0 var(--sidebar-mobile-gutter);
|
|
780
|
+
margin: 0 calc(-1 * var(--sidebar-mobile-gutter));
|
|
781
|
+
}/* Mobile footer with shadow */.MobileFooter {
|
|
782
|
+
padding: var(--sidebar-mobile-gutter);
|
|
783
|
+
margin: 0 calc(-1 * var(--sidebar-mobile-gutter));
|
|
784
|
+
box-shadow: var(--sidebar-footer-shadow);
|
|
785
|
+
}/* Mobile menu content - for inline menu rendering */.MobileMenuContent {
|
|
786
|
+
padding: 12px;
|
|
787
|
+
}/* Force labels visible in mobile menu content regardless of collapsed state */.MobileMenuContent .MenuButtonLabel,
|
|
788
|
+
.MobileMenuContent .GroupLabel {
|
|
789
|
+
opacity: 1 !important;
|
|
790
|
+
pointer-events: auto !important;
|
|
791
|
+
}/* Desktop breakpoint - sidebar becomes fixed */@media (min-width: 768px) {
|
|
792
|
+
.MobileSidebar {
|
|
793
|
+
display: none;
|
|
794
|
+
}
|
|
795
|
+
|
|
796
|
+
.MobileBackdrop {
|
|
797
|
+
display: none;
|
|
798
|
+
}
|
|
799
|
+
}/* Contained mode - for demos where drawer should stay within container */.MobileBackdrop.contained {
|
|
800
|
+
position: absolute;
|
|
801
|
+
}.MobileSidebar.contained {
|
|
802
|
+
position: absolute;
|
|
803
|
+
}/* Contained mode - override desktop hiding for demo purposes */@media (min-width: 768px) {
|
|
804
|
+
.MobileSidebar.contained {
|
|
805
|
+
display: flex;
|
|
806
|
+
}
|
|
807
|
+
|
|
808
|
+
.MobileBackdrop.contained {
|
|
809
|
+
display: block;
|
|
810
|
+
}
|
|
811
|
+
}/* Contained mode visible state - full width positioning */:global([data-mobile-menu="visible"]) .MobileSidebar.contained {
|
|
812
|
+
left: 0;
|
|
813
|
+
right: 0;
|
|
814
|
+
width: auto;
|
|
815
|
+
background: var(--color-surface);
|
|
816
|
+
z-index: 10;
|
|
817
|
+
}/* =============================================
|
|
818
|
+
Footer Links (horizontal layout)
|
|
819
|
+
============================================= */.FooterLinks {
|
|
820
|
+
display: flex;
|
|
821
|
+
align-items: center;
|
|
822
|
+
justify-content: space-between;
|
|
823
|
+
gap: calc(var(--spacing) * 2);
|
|
824
|
+
transition: width var(--sidebar-collapse-duration) var(--cubic-move);
|
|
825
|
+
}:global([data-sidebar="collapsed"]) .FooterLinks {
|
|
826
|
+
width: var(--sidebar-width-icon);
|
|
827
|
+
flex-direction: column;
|
|
828
|
+
gap: calc(var(--spacing) * 1);
|
|
829
|
+
}:global([data-sidebar="collapsed"]) .FooterLinks .Label {
|
|
830
|
+
opacity: 0;
|
|
831
|
+
}/* =============================================
|
|
832
|
+
Docs Sidebar Variant
|
|
833
|
+
============================================= */.Sidebar[data-variant="docs"] .MenuButton {
|
|
834
|
+
padding: 0;
|
|
835
|
+
margin: 0 0 2px;
|
|
836
|
+
border-radius: 8px;
|
|
837
|
+
transition:
|
|
838
|
+
color 0.15s var(--cubic-enter),
|
|
839
|
+
background-color 0.15s var(--cubic-enter);
|
|
840
|
+
}/* Disable pseudo-element for docs variant - use direct background instead */.Sidebar[data-variant="docs"] .MenuButton::before {
|
|
841
|
+
display: none;
|
|
842
|
+
}.Sidebar[data-variant="docs"] .MenuButtonInner {
|
|
843
|
+
padding: 8px 12px;
|
|
844
|
+
height: auto;
|
|
845
|
+
}@media (min-width: 768px) {
|
|
846
|
+
.Sidebar[data-variant="docs"] .MenuButtonInner {
|
|
847
|
+
padding: 6px 12px;
|
|
848
|
+
}
|
|
849
|
+
}.Sidebar[data-variant="docs"] .MenuButton:hover:not([data-active="true"]), :where([data-theme="light"]) .Sidebar[data-variant="docs"] .MenuButton:hover:not([data-active="true"]) {
|
|
850
|
+
background: var(--gray-150);
|
|
851
|
+
}:where([data-theme="dark"]) .Sidebar[data-variant="docs"] .MenuButton:hover:not([data-active="true"]) {
|
|
852
|
+
background: var(--gray-300);
|
|
853
|
+
}.Sidebar[data-variant="docs"] .MenuButton[data-active="true"] {
|
|
854
|
+
color: var(--color-text);
|
|
855
|
+
}.Sidebar[data-variant="docs"] .MenuButton[data-active="true"], :where([data-theme="light"]) .Sidebar[data-variant="docs"] .MenuButton[data-active="true"] {
|
|
856
|
+
background: var(--gray-150);
|
|
857
|
+
}:where([data-theme="dark"]) .Sidebar[data-variant="docs"] .MenuButton[data-active="true"] {
|
|
858
|
+
background: var(--gray-300);
|
|
859
|
+
}/* Disable extra left padding on labels in docs variant (inner already has padding) */.Sidebar[data-variant="docs"] .MenuButtonLabel:first-child {
|
|
860
|
+
padding-left: 0;
|
|
861
|
+
}/* MenuSubButton needs explicit padding in docs variant (composes MenuButton which has padding: 0) */.Sidebar[data-variant="docs"] .MenuSubButton {
|
|
862
|
+
padding: 8px 12px;
|
|
863
|
+
}@media (min-width: 768px) {
|
|
864
|
+
.Sidebar[data-variant="docs"] .MenuSubButton {
|
|
865
|
+
padding: 6px 12px;
|
|
866
|
+
}
|
|
867
|
+
}/* Docs variant indent levels - override base padding-left *//* indent0 = 12px aligns with section header (GroupLabel) */.Sidebar[data-variant="docs"] .MenuSubButton.indent0 {
|
|
868
|
+
padding-left: 12px;
|
|
869
|
+
}.Sidebar[data-variant="docs"] .MenuSubButton.indent1 {
|
|
870
|
+
padding-left: 24px;
|
|
871
|
+
}.Sidebar[data-variant="docs"] .MenuSubButton.indent2 {
|
|
872
|
+
padding-left: 36px;
|
|
873
|
+
}.Sidebar[data-variant="docs"] .MenuSubButton.indent3 {
|
|
874
|
+
padding-left: 48px;
|
|
875
|
+
}/* Docs variant - keep scroll mask, items have their own horizontal padding */.Sidebar[data-variant="docs"] .Content {
|
|
876
|
+
padding: 0 0 16px 0; /* Bottom padding for mask fade, items provide top padding */
|
|
877
|
+
}/* First group in docs variant needs top padding since Content has none */.Sidebar[data-variant="docs"] .Group:first-child {
|
|
878
|
+
padding-top: 24px;
|
|
879
|
+
}/* Nested child items */.DocsNavChild {
|
|
880
|
+
margin-left: 12px;
|
|
881
|
+
}.DocsNavChild.indent1 {
|
|
882
|
+
margin-left: 24px;
|
|
883
|
+
}.DocsNavChild.indent2 {
|
|
884
|
+
margin-left: 36px;
|
|
885
|
+
}.DocsNavChild.indent3 {
|
|
886
|
+
margin-left: 48px;
|
|
887
|
+
}/* Chevron for expandable items */.DocsNavChevron {
|
|
888
|
+
margin-left: 4px;
|
|
889
|
+
transition: transform 0.15s;
|
|
890
|
+
}.MenuItem[data-expanded="true"] .DocsNavChevron {
|
|
891
|
+
transform: rotate(90deg);
|
|
892
|
+
}/* =============================================
|
|
893
|
+
RTL Support
|
|
894
|
+
============================================= *//* Layout reverses for RTL with side="right" */.SidebarLayout[dir="rtl"] {
|
|
895
|
+
flex-direction: row-reverse;
|
|
896
|
+
}/* Ensure text stays aligned properly in RTL */.SidebarLayout[dir="rtl"] .MenuButtonLabel {
|
|
897
|
+
text-align: right;
|
|
898
|
+
}/* Flip icon position in RTL - icons go to the right of label */.SidebarLayout[dir="rtl"] .MenuButton {
|
|
899
|
+
flex-direction: row-reverse;
|
|
900
|
+
}/* Adjust icon margins for RTL */.SidebarLayout[dir="rtl"] .MenuButtonIcon {
|
|
901
|
+
margin-left: 0;
|
|
902
|
+
margin-right: 0;
|
|
903
|
+
}/* RTL nested items indentation */.SidebarLayout[dir="rtl"] .DocsNavChild {
|
|
904
|
+
margin-left: 0;
|
|
905
|
+
margin-right: 12px;
|
|
906
|
+
}.SidebarLayout[dir="rtl"] .DocsNavChild.indent1 {
|
|
907
|
+
margin-right: 24px;
|
|
908
|
+
}.SidebarLayout[dir="rtl"] .DocsNavChild.indent2 {
|
|
909
|
+
margin-right: 36px;
|
|
910
|
+
}.SidebarLayout[dir="rtl"] .DocsNavChild.indent3 {
|
|
911
|
+
margin-right: 48px;
|
|
912
|
+
}
|
|
913
|
+
}
|