@kushagradhawan/kookie-ui 0.1.41 → 0.1.43
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/README.md +257 -60
- package/components.css +398 -91
- package/dist/cjs/components/schemas/base-button.schema.d.ts +319 -0
- package/dist/cjs/components/schemas/base-button.schema.d.ts.map +1 -0
- package/dist/cjs/components/schemas/base-button.schema.js +2 -0
- package/dist/cjs/components/schemas/base-button.schema.js.map +7 -0
- package/dist/cjs/components/schemas/button.schema.d.ts +686 -0
- package/dist/cjs/components/schemas/button.schema.d.ts.map +1 -0
- package/dist/cjs/components/schemas/button.schema.js +2 -0
- package/dist/cjs/components/schemas/button.schema.js.map +7 -0
- package/dist/cjs/components/schemas/icon-button.schema.d.ts +329 -0
- package/dist/cjs/components/schemas/icon-button.schema.d.ts.map +1 -0
- package/dist/cjs/components/schemas/icon-button.schema.js +2 -0
- package/dist/cjs/components/schemas/icon-button.schema.js.map +7 -0
- package/dist/cjs/components/schemas/index.d.ts +52 -0
- package/dist/cjs/components/schemas/index.d.ts.map +1 -0
- package/dist/cjs/components/schemas/index.js +2 -0
- package/dist/cjs/components/schemas/index.js.map +7 -0
- package/dist/cjs/components/schemas/toggle-button.schema.d.ts +1172 -0
- package/dist/cjs/components/schemas/toggle-button.schema.d.ts.map +1 -0
- package/dist/cjs/components/schemas/toggle-button.schema.js +2 -0
- package/dist/cjs/components/schemas/toggle-button.schema.js.map +7 -0
- package/dist/cjs/components/schemas/toggle-icon-button.schema.d.ts +563 -0
- package/dist/cjs/components/schemas/toggle-icon-button.schema.d.ts.map +1 -0
- package/dist/cjs/components/schemas/toggle-icon-button.schema.js +2 -0
- package/dist/cjs/components/schemas/toggle-icon-button.schema.js.map +7 -0
- package/dist/cjs/components/sheet.d.ts +1 -1
- package/dist/cjs/components/sheet.d.ts.map +1 -1
- package/dist/cjs/components/sheet.js +1 -1
- package/dist/cjs/components/sheet.js.map +3 -3
- package/dist/cjs/components/shell.d.ts +125 -164
- package/dist/cjs/components/shell.d.ts.map +1 -1
- package/dist/cjs/components/shell.js +1 -1
- package/dist/cjs/components/shell.js.map +3 -3
- package/dist/cjs/components/sidebar.d.ts +1 -7
- 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/theme.d.ts +3 -0
- package/dist/cjs/components/theme.d.ts.map +1 -1
- package/dist/cjs/components/theme.js +1 -1
- package/dist/cjs/components/theme.js.map +3 -3
- package/dist/cjs/components/theme.props.d.ts +10 -0
- package/dist/cjs/components/theme.props.d.ts.map +1 -1
- package/dist/cjs/components/theme.props.js +1 -1
- package/dist/cjs/components/theme.props.js.map +3 -3
- package/dist/cjs/helpers/font-config.d.ts +96 -0
- package/dist/cjs/helpers/font-config.d.ts.map +1 -0
- package/dist/cjs/helpers/font-config.js +3 -0
- package/dist/cjs/helpers/font-config.js.map +7 -0
- package/dist/cjs/helpers/index.d.ts +1 -0
- package/dist/cjs/helpers/index.d.ts.map +1 -1
- package/dist/cjs/helpers/index.js +1 -1
- package/dist/cjs/helpers/index.js.map +2 -2
- package/dist/esm/components/schemas/base-button.schema.d.ts +319 -0
- package/dist/esm/components/schemas/base-button.schema.d.ts.map +1 -0
- package/dist/esm/components/schemas/base-button.schema.js +2 -0
- package/dist/esm/components/schemas/base-button.schema.js.map +7 -0
- package/dist/esm/components/schemas/button.schema.d.ts +686 -0
- package/dist/esm/components/schemas/button.schema.d.ts.map +1 -0
- package/dist/esm/components/schemas/button.schema.js +2 -0
- package/dist/esm/components/schemas/button.schema.js.map +7 -0
- package/dist/esm/components/schemas/icon-button.schema.d.ts +329 -0
- package/dist/esm/components/schemas/icon-button.schema.d.ts.map +1 -0
- package/dist/esm/components/schemas/icon-button.schema.js +2 -0
- package/dist/esm/components/schemas/icon-button.schema.js.map +7 -0
- package/dist/esm/components/schemas/index.d.ts +52 -0
- package/dist/esm/components/schemas/index.d.ts.map +1 -0
- package/dist/esm/components/schemas/index.js +2 -0
- package/dist/esm/components/schemas/index.js.map +7 -0
- package/dist/esm/components/schemas/toggle-button.schema.d.ts +1172 -0
- package/dist/esm/components/schemas/toggle-button.schema.d.ts.map +1 -0
- package/dist/esm/components/schemas/toggle-button.schema.js +2 -0
- package/dist/esm/components/schemas/toggle-button.schema.js.map +7 -0
- package/dist/esm/components/schemas/toggle-icon-button.schema.d.ts +563 -0
- package/dist/esm/components/schemas/toggle-icon-button.schema.d.ts.map +1 -0
- package/dist/esm/components/schemas/toggle-icon-button.schema.js +2 -0
- package/dist/esm/components/schemas/toggle-icon-button.schema.js.map +7 -0
- package/dist/esm/components/sheet.d.ts +1 -1
- package/dist/esm/components/sheet.d.ts.map +1 -1
- package/dist/esm/components/sheet.js +1 -1
- package/dist/esm/components/sheet.js.map +3 -3
- package/dist/esm/components/shell.d.ts +125 -164
- package/dist/esm/components/shell.d.ts.map +1 -1
- package/dist/esm/components/shell.js +1 -1
- package/dist/esm/components/shell.js.map +3 -3
- package/dist/esm/components/sidebar.d.ts +1 -7
- 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/theme.d.ts +3 -0
- package/dist/esm/components/theme.d.ts.map +1 -1
- package/dist/esm/components/theme.js +1 -1
- package/dist/esm/components/theme.js.map +3 -3
- package/dist/esm/components/theme.props.d.ts +10 -0
- package/dist/esm/components/theme.props.d.ts.map +1 -1
- package/dist/esm/components/theme.props.js +1 -1
- package/dist/esm/components/theme.props.js.map +3 -3
- package/dist/esm/helpers/font-config.d.ts +96 -0
- package/dist/esm/helpers/font-config.d.ts.map +1 -0
- package/dist/esm/helpers/font-config.js +3 -0
- package/dist/esm/helpers/font-config.js.map +7 -0
- package/dist/esm/helpers/index.d.ts +1 -0
- package/dist/esm/helpers/index.d.ts.map +1 -1
- package/dist/esm/helpers/index.js +1 -1
- package/dist/esm/helpers/index.js.map +2 -2
- package/package.json +23 -3
- package/schemas/base-button.d.ts +2 -0
- package/schemas/base-button.json +284 -0
- package/schemas/button.d.ts +2 -0
- package/schemas/button.json +535 -0
- package/schemas/icon-button.d.ts +2 -0
- package/schemas/icon-button.json +318 -0
- package/schemas/index.d.ts +2 -0
- package/schemas/index.json +2016 -0
- package/schemas/schemas.d.ts +29 -0
- package/schemas/toggle-button.d.ts +2 -0
- package/schemas/toggle-button.json +543 -0
- package/schemas/toggle-icon-button.d.ts +2 -0
- package/schemas/toggle-icon-button.json +326 -0
- package/schemas-json.d.ts +12 -0
- package/src/components/_internal/base-sidebar-menu.css +3 -8
- package/src/components/_internal/base-sidebar.css +1 -2
- package/src/components/schemas/base-button.schema.ts +339 -0
- package/src/components/schemas/button.schema.ts +198 -0
- package/src/components/schemas/icon-button.schema.ts +142 -0
- package/src/components/schemas/index.ts +68 -0
- package/src/components/schemas/toggle-button.schema.ts +122 -0
- package/src/components/schemas/toggle-icon-button.schema.ts +195 -0
- package/src/components/sheet.css +39 -19
- package/src/components/sheet.tsx +62 -3
- package/src/components/shell.css +510 -89
- package/src/components/shell.tsx +2055 -928
- package/src/components/sidebar.css +126 -65
- package/src/components/sidebar.tsx +5 -24
- package/src/components/theme.props.tsx +8 -0
- package/src/components/theme.tsx +16 -0
- package/src/helpers/font-config.ts +167 -0
- package/src/helpers/index.ts +1 -0
- package/src/styles/fonts.css +16 -13
- package/src/styles/tokens/typography.css +27 -4
- package/styles.css +410 -91
- package/tokens/base.css +12 -0
- package/tokens.css +12 -0
|
@@ -69,7 +69,7 @@
|
|
|
69
69
|
.rt-SidebarContainer:where(.rt-variant-outline) {
|
|
70
70
|
background-color: var(--color-panel);
|
|
71
71
|
backdrop-filter: var(--backdrop-filter-panel);
|
|
72
|
-
|
|
72
|
+
|
|
73
73
|
/* Component-level overrides (higher specificity) - remap --color-panel */
|
|
74
74
|
&:where([data-panel-background='solid']) {
|
|
75
75
|
--color-panel: var(--color-panel-solid);
|
|
@@ -84,18 +84,18 @@
|
|
|
84
84
|
--backdrop-filter-panel: blur(var(--backdrop-blur-panel));
|
|
85
85
|
--backdrop-filter-components: blur(var(--backdrop-blur-components));
|
|
86
86
|
}
|
|
87
|
-
|
|
87
|
+
|
|
88
88
|
/* Floating sidebars get full inset border */
|
|
89
|
-
:where(.rt-SidebarRoot[data-type=
|
|
89
|
+
:where(.rt-SidebarRoot[data-type='floating']) & {
|
|
90
90
|
box-shadow: inset 0 0 0 1px var(--gray-a6);
|
|
91
91
|
}
|
|
92
|
-
|
|
92
|
+
|
|
93
93
|
/* Non-floating sidebars get border only on the content-facing side */
|
|
94
|
-
:where(.rt-SidebarRoot[data-type=
|
|
94
|
+
:where(.rt-SidebarRoot[data-type='sidebar'][data-side='left']) & {
|
|
95
95
|
box-shadow: inset -1px 0 0 0 var(--gray-a6);
|
|
96
96
|
}
|
|
97
|
-
|
|
98
|
-
:where(.rt-SidebarRoot[data-type=
|
|
97
|
+
|
|
98
|
+
:where(.rt-SidebarRoot[data-type='sidebar'][data-side='right']) & {
|
|
99
99
|
box-shadow: inset 1px 0 0 0 var(--gray-a6);
|
|
100
100
|
}
|
|
101
101
|
}
|
|
@@ -134,7 +134,7 @@
|
|
|
134
134
|
.rt-SidebarContainer:where(.rt-variant-surface) {
|
|
135
135
|
/* Base state: neutral gray background (maintains sidebar neutrality) */
|
|
136
136
|
background-color: var(--gray-1);
|
|
137
|
-
|
|
137
|
+
|
|
138
138
|
/* Theme-level translucent override */
|
|
139
139
|
:where([data-panel-background='translucent']) & {
|
|
140
140
|
background-color: color-mix(in srgb, var(--gray-a1), var(--gray-1) 60%);
|
|
@@ -155,31 +155,31 @@
|
|
|
155
155
|
--backdrop-filter-panel: blur(var(--backdrop-blur-panel));
|
|
156
156
|
--backdrop-filter-components: blur(var(--backdrop-blur-components));
|
|
157
157
|
}
|
|
158
|
-
|
|
158
|
+
|
|
159
159
|
/* Inset border like Card surface variant */
|
|
160
160
|
/* Floating sidebars get full inset border */
|
|
161
|
-
:where(.rt-SidebarRoot[data-type=
|
|
161
|
+
:where(.rt-SidebarRoot[data-type='floating']) & {
|
|
162
162
|
box-shadow: inset 0 0 0 1px var(--gray-6);
|
|
163
|
-
|
|
163
|
+
|
|
164
164
|
/* Theme-level translucent override */
|
|
165
165
|
:where([data-panel-background='translucent']) & {
|
|
166
166
|
box-shadow: inset 0 0 0 1px var(--gray-a6);
|
|
167
167
|
}
|
|
168
168
|
}
|
|
169
|
-
|
|
169
|
+
|
|
170
170
|
/* Non-floating sidebars get border only on the content-facing side */
|
|
171
|
-
:where(.rt-SidebarRoot[data-type=
|
|
171
|
+
:where(.rt-SidebarRoot[data-type='sidebar'][data-side='left']) & {
|
|
172
172
|
box-shadow: inset -1px 0 0 0 var(--gray-6);
|
|
173
|
-
|
|
173
|
+
|
|
174
174
|
/* Theme-level translucent override */
|
|
175
175
|
:where([data-panel-background='translucent']) & {
|
|
176
176
|
box-shadow: inset -1px 0 0 0 var(--gray-a6);
|
|
177
177
|
}
|
|
178
178
|
}
|
|
179
|
-
|
|
180
|
-
:where(.rt-SidebarRoot[data-type=
|
|
179
|
+
|
|
180
|
+
:where(.rt-SidebarRoot[data-type='sidebar'][data-side='right']) & {
|
|
181
181
|
box-shadow: inset 1px 0 0 0 var(--gray-6);
|
|
182
|
-
|
|
182
|
+
|
|
183
183
|
/* Theme-level translucent override */
|
|
184
184
|
:where([data-panel-background='translucent']) & {
|
|
185
185
|
box-shadow: inset 1px 0 0 0 var(--gray-a6);
|
|
@@ -195,7 +195,7 @@
|
|
|
195
195
|
gap: var(--space-2);
|
|
196
196
|
padding: var(--base-menu-content-padding);
|
|
197
197
|
min-height: var(--base-menu-item-height);
|
|
198
|
-
|
|
198
|
+
|
|
199
199
|
/* Make MenuButtons expand to full width */
|
|
200
200
|
& :where(.rt-SidebarMenuButton) {
|
|
201
201
|
flex: 1;
|
|
@@ -209,7 +209,7 @@
|
|
|
209
209
|
gap: var(--space-2);
|
|
210
210
|
padding: var(--base-menu-content-padding);
|
|
211
211
|
min-height: var(--base-menu-item-height);
|
|
212
|
-
|
|
212
|
+
|
|
213
213
|
/* Make MenuButtons expand to full width */
|
|
214
214
|
& :where(.rt-SidebarMenuButton) {
|
|
215
215
|
flex: 1;
|
|
@@ -217,33 +217,85 @@
|
|
|
217
217
|
}
|
|
218
218
|
|
|
219
219
|
/* Flex utilities for header/footer layouts */
|
|
220
|
-
.rt-SidebarHeader:where(.rt-flex-row) {
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
.rt-SidebarHeader:where(.rt-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
.rt-SidebarHeader:where(.rt-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
.rt-SidebarHeader:where(.rt-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
.rt-SidebarHeader:where(.rt-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
.rt-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
.rt-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
.rt-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
.rt-
|
|
245
|
-
|
|
246
|
-
|
|
220
|
+
.rt-SidebarHeader:where(.rt-flex-row) {
|
|
221
|
+
flex-direction: row;
|
|
222
|
+
}
|
|
223
|
+
.rt-SidebarHeader:where(.rt-flex-col) {
|
|
224
|
+
flex-direction: column;
|
|
225
|
+
}
|
|
226
|
+
.rt-SidebarHeader:where(.rt-items-center) {
|
|
227
|
+
align-items: center;
|
|
228
|
+
}
|
|
229
|
+
.rt-SidebarHeader:where(.rt-items-start) {
|
|
230
|
+
align-items: flex-start;
|
|
231
|
+
}
|
|
232
|
+
.rt-SidebarHeader:where(.rt-items-end) {
|
|
233
|
+
align-items: flex-end;
|
|
234
|
+
}
|
|
235
|
+
.rt-SidebarHeader:where(.rt-justify-between) {
|
|
236
|
+
justify-content: space-between;
|
|
237
|
+
}
|
|
238
|
+
.rt-SidebarHeader:where(.rt-justify-center) {
|
|
239
|
+
justify-content: center;
|
|
240
|
+
}
|
|
241
|
+
.rt-SidebarHeader:where(.rt-justify-start) {
|
|
242
|
+
justify-content: flex-start;
|
|
243
|
+
}
|
|
244
|
+
.rt-SidebarHeader:where(.rt-justify-end) {
|
|
245
|
+
justify-content: flex-end;
|
|
246
|
+
}
|
|
247
|
+
.rt-SidebarHeader:where(.rt-gap-1) {
|
|
248
|
+
gap: var(--space-1);
|
|
249
|
+
}
|
|
250
|
+
.rt-SidebarHeader:where(.rt-gap-2) {
|
|
251
|
+
gap: var(--space-2);
|
|
252
|
+
}
|
|
253
|
+
.rt-SidebarHeader:where(.rt-gap-3) {
|
|
254
|
+
gap: var(--space-3);
|
|
255
|
+
}
|
|
256
|
+
.rt-SidebarHeader:where(.rt-gap-4) {
|
|
257
|
+
gap: var(--space-4);
|
|
258
|
+
}
|
|
259
|
+
|
|
260
|
+
.rt-SidebarFooter:where(.rt-flex-row) {
|
|
261
|
+
flex-direction: row;
|
|
262
|
+
}
|
|
263
|
+
.rt-SidebarFooter:where(.rt-flex-col) {
|
|
264
|
+
flex-direction: column;
|
|
265
|
+
}
|
|
266
|
+
.rt-SidebarFooter:where(.rt-items-center) {
|
|
267
|
+
align-items: center;
|
|
268
|
+
}
|
|
269
|
+
.rt-SidebarFooter:where(.rt-items-start) {
|
|
270
|
+
align-items: flex-start;
|
|
271
|
+
}
|
|
272
|
+
.rt-SidebarFooter:where(.rt-items-end) {
|
|
273
|
+
align-items: flex-end;
|
|
274
|
+
}
|
|
275
|
+
.rt-SidebarFooter:where(.rt-justify-between) {
|
|
276
|
+
justify-content: space-between;
|
|
277
|
+
}
|
|
278
|
+
.rt-SidebarFooter:where(.rt-justify-center) {
|
|
279
|
+
justify-content: center;
|
|
280
|
+
}
|
|
281
|
+
.rt-SidebarFooter:where(.rt-justify-start) {
|
|
282
|
+
justify-content: flex-start;
|
|
283
|
+
}
|
|
284
|
+
.rt-SidebarFooter:where(.rt-justify-end) {
|
|
285
|
+
justify-content: flex-end;
|
|
286
|
+
}
|
|
287
|
+
.rt-SidebarFooter:where(.rt-gap-1) {
|
|
288
|
+
gap: var(--space-1);
|
|
289
|
+
}
|
|
290
|
+
.rt-SidebarFooter:where(.rt-gap-2) {
|
|
291
|
+
gap: var(--space-2);
|
|
292
|
+
}
|
|
293
|
+
.rt-SidebarFooter:where(.rt-gap-3) {
|
|
294
|
+
gap: var(--space-3);
|
|
295
|
+
}
|
|
296
|
+
.rt-SidebarFooter:where(.rt-gap-4) {
|
|
297
|
+
gap: var(--space-4);
|
|
298
|
+
}
|
|
247
299
|
|
|
248
300
|
/* Header/Footer Menu Button Support */
|
|
249
301
|
.rt-SidebarHeader :where(.rt-SidebarMenuButton),
|
|
@@ -266,21 +318,22 @@
|
|
|
266
318
|
text-align: left;
|
|
267
319
|
cursor: var(--cursor-menu-item);
|
|
268
320
|
user-select: none;
|
|
269
|
-
|
|
321
|
+
|
|
270
322
|
/* Header/Footer-specific styling */
|
|
271
323
|
justify-content: flex-start;
|
|
272
|
-
|
|
324
|
+
|
|
273
325
|
/* Transitions */
|
|
274
|
-
transition:
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
326
|
+
transition:
|
|
327
|
+
background var(--motion-duration-small) var(--motion-ease-standard),
|
|
328
|
+
box-shadow var(--motion-duration-small) var(--motion-ease-standard),
|
|
329
|
+
filter var(--motion-duration-small) var(--motion-ease-standard);
|
|
330
|
+
|
|
278
331
|
/* Focus state */
|
|
279
332
|
&:where(:focus-visible) {
|
|
280
333
|
outline: 2px solid var(--focus-8);
|
|
281
334
|
outline-offset: 2px;
|
|
282
335
|
}
|
|
283
|
-
|
|
336
|
+
|
|
284
337
|
/* Reduced motion support */
|
|
285
338
|
@media (prefers-reduced-motion: reduce) {
|
|
286
339
|
transition: none;
|
|
@@ -397,15 +450,17 @@
|
|
|
397
450
|
/* Sub-trigger transitions - match base menu */
|
|
398
451
|
& :where(.rt-SidebarMenuSubTrigger) {
|
|
399
452
|
transition: var(--transition-menu);
|
|
400
|
-
|
|
453
|
+
|
|
401
454
|
/* Reduced motion support */
|
|
402
455
|
@media (prefers-reduced-motion: reduce) {
|
|
403
456
|
transition: none;
|
|
404
457
|
}
|
|
405
|
-
|
|
458
|
+
|
|
406
459
|
/* Remove backdrop-filter transitions in translucent mode to prevent flickering */
|
|
407
460
|
:where([data-panel-background='translucent']) & {
|
|
408
|
-
transition:
|
|
461
|
+
transition:
|
|
462
|
+
background var(--duration-1) var(--ease-1),
|
|
463
|
+
color var(--duration-2) var(--ease-1);
|
|
409
464
|
}
|
|
410
465
|
}
|
|
411
466
|
|
|
@@ -413,7 +468,7 @@
|
|
|
413
468
|
& :where(.rt-SidebarMenuSubTrigger[data-state='open']) {
|
|
414
469
|
/* Base state: solid gray for solid panels */
|
|
415
470
|
background-color: var(--gray-3);
|
|
416
|
-
|
|
471
|
+
|
|
417
472
|
/* Theme-level translucent override */
|
|
418
473
|
:where([data-panel-background='translucent']) & {
|
|
419
474
|
background-color: var(--gray-a3);
|
|
@@ -435,7 +490,9 @@
|
|
|
435
490
|
& :where(.rt-SidebarMenuButton) {
|
|
436
491
|
/* Remove backdrop-filter transitions in translucent mode to prevent flickering */
|
|
437
492
|
:where([data-panel-background='translucent']) & {
|
|
438
|
-
transition:
|
|
493
|
+
transition:
|
|
494
|
+
background var(--duration-1) var(--ease-1),
|
|
495
|
+
color var(--duration-2) var(--ease-1);
|
|
439
496
|
}
|
|
440
497
|
}
|
|
441
498
|
|
|
@@ -576,15 +633,17 @@
|
|
|
576
633
|
/* Sub-trigger transitions - match base menu */
|
|
577
634
|
& :where(.rt-SidebarMenuSubTrigger) {
|
|
578
635
|
transition: var(--transition-menu);
|
|
579
|
-
|
|
636
|
+
|
|
580
637
|
/* Reduced motion support */
|
|
581
638
|
@media (prefers-reduced-motion: reduce) {
|
|
582
639
|
transition: none;
|
|
583
640
|
}
|
|
584
|
-
|
|
641
|
+
|
|
585
642
|
/* Remove backdrop-filter transitions in translucent mode to prevent flickering */
|
|
586
643
|
:where([data-panel-background='translucent']) & {
|
|
587
|
-
transition:
|
|
644
|
+
transition:
|
|
645
|
+
background var(--duration-1) var(--ease-1),
|
|
646
|
+
color var(--duration-2) var(--ease-1);
|
|
588
647
|
}
|
|
589
648
|
}
|
|
590
649
|
|
|
@@ -592,7 +651,7 @@
|
|
|
592
651
|
& :where(.rt-SidebarMenuSubTrigger[data-state='open']) {
|
|
593
652
|
/* Base state: solid accent for solid panels */
|
|
594
653
|
background-color: var(--accent-3);
|
|
595
|
-
|
|
654
|
+
|
|
596
655
|
/* Theme-level translucent override */
|
|
597
656
|
:where([data-panel-background='translucent']) & {
|
|
598
657
|
background-color: var(--accent-a3);
|
|
@@ -614,7 +673,9 @@
|
|
|
614
673
|
& :where(.rt-SidebarMenuButton) {
|
|
615
674
|
/* Remove backdrop-filter transitions in translucent mode to prevent flickering */
|
|
616
675
|
:where([data-panel-background='translucent']) & {
|
|
617
|
-
transition:
|
|
676
|
+
transition:
|
|
677
|
+
background var(--duration-1) var(--ease-1),
|
|
678
|
+
color var(--duration-2) var(--ease-1);
|
|
618
679
|
}
|
|
619
680
|
}
|
|
620
681
|
|
|
@@ -622,7 +683,7 @@
|
|
|
622
683
|
& :where(.rt-SidebarMenuButton[data-highlighted]) {
|
|
623
684
|
/* Base state: solid accent for solid panels */
|
|
624
685
|
background-color: var(--accent-4);
|
|
625
|
-
|
|
686
|
+
|
|
626
687
|
/* Theme-level translucent override */
|
|
627
688
|
:where([data-panel-background='translucent']) & {
|
|
628
689
|
background-color: var(--accent-a4);
|
|
@@ -677,4 +738,4 @@
|
|
|
677
738
|
}
|
|
678
739
|
}
|
|
679
740
|
|
|
680
|
-
/* Removed old icon-only collapsed mode rules in favor of Shell rail mode */
|
|
741
|
+
/* Removed old icon-only collapsed mode rules in favor of Shell rail mode */
|
|
@@ -39,21 +39,7 @@ function useSidebarVisual() {
|
|
|
39
39
|
return React.useContext(SidebarVisualContext);
|
|
40
40
|
}
|
|
41
41
|
|
|
42
|
-
//
|
|
43
|
-
type ShellSidebarSectionContextValue = {
|
|
44
|
-
side: 'start' | 'end';
|
|
45
|
-
section: 'rail' | 'panel';
|
|
46
|
-
};
|
|
47
|
-
|
|
48
|
-
// Create a context that Shell.Sidebar can provide
|
|
49
|
-
const ShellSidebarSectionContext = React.createContext<ShellSidebarSectionContextValue | null>(
|
|
50
|
-
null,
|
|
51
|
-
);
|
|
52
|
-
|
|
53
|
-
// This context comes from Shell.Sidebar when Sidebar is used within Shell
|
|
54
|
-
function useShellSidebarSection(): ShellSidebarSectionContextValue | null {
|
|
55
|
-
return React.useContext(ShellSidebarSectionContext);
|
|
56
|
-
}
|
|
42
|
+
// Sidebar is now independent of Shell - no integration needed
|
|
57
43
|
|
|
58
44
|
// Main Sidebar component
|
|
59
45
|
type SidebarOwnProps = GetPropDefTypes<typeof sidebarPropDefs>;
|
|
@@ -79,9 +65,8 @@ const Sidebar = React.forwardRef<HTMLDivElement, SidebarProps>((props, forwarded
|
|
|
79
65
|
const { asChild: _, panelBackground: __, ...safeRootProps } = rootProps; // Remove asChild and panelBackground from DOM props
|
|
80
66
|
const resolvedColor = color || themeContext.accentColor;
|
|
81
67
|
|
|
82
|
-
//
|
|
83
|
-
const
|
|
84
|
-
const resolvedLayout = layout || shellSection?.section || 'panel'; // Default to 'panel' if no context
|
|
68
|
+
// Resolve layout (default to 'panel')
|
|
69
|
+
const resolvedLayout = layout || 'panel';
|
|
85
70
|
|
|
86
71
|
// Update context with current props - we'll pass the resolved values
|
|
87
72
|
const resolvedSize = typeof size === 'object' ? size.initial || '2' : size;
|
|
@@ -153,7 +138,7 @@ const SidebarContent = React.forwardRef<HTMLDivElement, SidebarContentProps>(
|
|
|
153
138
|
className,
|
|
154
139
|
)}
|
|
155
140
|
>
|
|
156
|
-
{children}
|
|
141
|
+
<div className="rt-BaseMenuViewport">{children}</div>
|
|
157
142
|
</div>
|
|
158
143
|
</ScrollArea>
|
|
159
144
|
);
|
|
@@ -258,7 +243,7 @@ const SidebarMenu = React.forwardRef<HTMLUListElement, SidebarMenuProps>(
|
|
|
258
243
|
{...props}
|
|
259
244
|
ref={forwardedRef}
|
|
260
245
|
role="menu"
|
|
261
|
-
className={classNames('rt-
|
|
246
|
+
className={classNames('rt-SidebarMenu', className)}
|
|
262
247
|
/>
|
|
263
248
|
),
|
|
264
249
|
);
|
|
@@ -615,8 +600,4 @@ export type {
|
|
|
615
600
|
SidebarHeaderProps as HeaderProps,
|
|
616
601
|
SidebarFooterProps as FooterProps,
|
|
617
602
|
BadgeConfig,
|
|
618
|
-
ShellSidebarSectionContextValue,
|
|
619
603
|
};
|
|
620
|
-
|
|
621
|
-
// Export context for Shell.Sidebar integration
|
|
622
|
-
export { ShellSidebarSectionContext };
|
|
@@ -8,6 +8,7 @@ const appearances = ['inherit', 'light', 'dark'] as const;
|
|
|
8
8
|
const panelBackgrounds = ['solid', 'translucent'] as const;
|
|
9
9
|
const materials = ['solid', 'translucent'] as const;
|
|
10
10
|
const scalings = ['90%', '95%', '100%', '105%', '110%'] as const;
|
|
11
|
+
const fontFamilies = ['sans', 'mono'] as const;
|
|
11
12
|
|
|
12
13
|
const themePropDefs = {
|
|
13
14
|
...asChildPropDef,
|
|
@@ -71,6 +72,12 @@ const themePropDefs = {
|
|
|
71
72
|
* https://www.radix-ui.com/themes/docs/theme/layout
|
|
72
73
|
*/
|
|
73
74
|
scaling: { type: 'enum', values: scalings, default: '100%' },
|
|
75
|
+
/**
|
|
76
|
+
* Sets the font family for the theme.
|
|
77
|
+
*
|
|
78
|
+
* @default 'sans'
|
|
79
|
+
*/
|
|
80
|
+
fontFamily: { type: 'enum', values: fontFamilies, default: 'sans' },
|
|
74
81
|
} satisfies {
|
|
75
82
|
hasBackground: PropDef<boolean>;
|
|
76
83
|
appearance: PropDef<(typeof appearances)[number]>;
|
|
@@ -80,6 +87,7 @@ const themePropDefs = {
|
|
|
80
87
|
panelBackground: PropDef<(typeof panelBackgrounds)[number]>;
|
|
81
88
|
radius: PropDef<(typeof radii)[number]>;
|
|
82
89
|
scaling: PropDef<(typeof scalings)[number]>;
|
|
90
|
+
fontFamily: PropDef<(typeof fontFamilies)[number]>;
|
|
83
91
|
};
|
|
84
92
|
|
|
85
93
|
type ThemeOwnProps = GetPropDefTypes<typeof themePropDefs & typeof asChildPropDef>;
|
package/src/components/theme.tsx
CHANGED
|
@@ -19,6 +19,7 @@ type ThemeMaterial = (typeof themePropDefs.material.values)[number];
|
|
|
19
19
|
type ThemePanelBackground = (typeof themePropDefs.panelBackground.values)[number];
|
|
20
20
|
type ThemeRadius = (typeof themePropDefs.radius.values)[number];
|
|
21
21
|
type ThemeScaling = (typeof themePropDefs.scaling.values)[number];
|
|
22
|
+
type ThemeFontFamily = (typeof themePropDefs.fontFamily.values)[number];
|
|
22
23
|
|
|
23
24
|
interface ThemeChangeHandlers {
|
|
24
25
|
onAppearanceChange: (appearance: ThemeAppearance) => void;
|
|
@@ -28,6 +29,7 @@ interface ThemeChangeHandlers {
|
|
|
28
29
|
onPanelBackgroundChange: (panelBackground: ThemePanelBackground) => void;
|
|
29
30
|
onRadiusChange: (radius: ThemeRadius) => void;
|
|
30
31
|
onScalingChange: (scaling: ThemeScaling) => void;
|
|
32
|
+
onFontFamilyChange: (fontFamily: ThemeFontFamily) => void;
|
|
31
33
|
}
|
|
32
34
|
|
|
33
35
|
interface ThemeContextValue extends ThemeChangeHandlers {
|
|
@@ -39,6 +41,7 @@ interface ThemeContextValue extends ThemeChangeHandlers {
|
|
|
39
41
|
panelBackground: ThemePanelBackground;
|
|
40
42
|
radius: ThemeRadius;
|
|
41
43
|
scaling: ThemeScaling;
|
|
44
|
+
fontFamily: ThemeFontFamily;
|
|
42
45
|
}
|
|
43
46
|
const ThemeContext = React.createContext<ThemeContextValue | undefined>(undefined);
|
|
44
47
|
|
|
@@ -77,6 +80,7 @@ const ThemeRoot = React.forwardRef<ThemeImplElement, ThemeImplPublicProps>(
|
|
|
77
80
|
panelBackground: panelBackgroundProp = themePropDefs.panelBackground.default,
|
|
78
81
|
radius: radiusProp = themePropDefs.radius.default,
|
|
79
82
|
scaling: scalingProp = themePropDefs.scaling.default,
|
|
83
|
+
fontFamily: fontFamilyProp = themePropDefs.fontFamily.default,
|
|
80
84
|
hasBackground = themePropDefs.hasBackground.default,
|
|
81
85
|
...rootProps
|
|
82
86
|
} = props;
|
|
@@ -115,6 +119,9 @@ const ThemeRoot = React.forwardRef<ThemeImplElement, ThemeImplPublicProps>(
|
|
|
115
119
|
const [scaling, setScaling] = React.useState(scalingProp);
|
|
116
120
|
React.useEffect(() => setScaling(scalingProp), [scalingProp]);
|
|
117
121
|
|
|
122
|
+
const [fontFamily, setFontFamily] = React.useState(fontFamilyProp);
|
|
123
|
+
React.useEffect(() => setFontFamily(fontFamilyProp), [fontFamilyProp]);
|
|
124
|
+
|
|
118
125
|
return (
|
|
119
126
|
<ThemeImpl
|
|
120
127
|
{...rootProps}
|
|
@@ -129,6 +136,7 @@ const ThemeRoot = React.forwardRef<ThemeImplElement, ThemeImplPublicProps>(
|
|
|
129
136
|
panelBackground={panelBackground}
|
|
130
137
|
radius={radius}
|
|
131
138
|
scaling={scaling}
|
|
139
|
+
fontFamily={fontFamily}
|
|
132
140
|
//
|
|
133
141
|
onAppearanceChange={setAppearance}
|
|
134
142
|
onAccentColorChange={setAccentColor}
|
|
@@ -137,6 +145,7 @@ const ThemeRoot = React.forwardRef<ThemeImplElement, ThemeImplPublicProps>(
|
|
|
137
145
|
onPanelBackgroundChange={setPanelBackground}
|
|
138
146
|
onRadiusChange={setRadius}
|
|
139
147
|
onScalingChange={setScaling}
|
|
148
|
+
onFontFamilyChange={setFontFamily}
|
|
140
149
|
/>
|
|
141
150
|
);
|
|
142
151
|
},
|
|
@@ -167,6 +176,7 @@ const ThemeImpl = React.forwardRef<ThemeImplElement, ThemeImplProps>((props, for
|
|
|
167
176
|
themePropDefs.panelBackground.default,
|
|
168
177
|
radius = props.radius ?? context?.radius ?? themePropDefs.radius.default,
|
|
169
178
|
scaling = props.scaling ?? context?.scaling ?? themePropDefs.scaling.default,
|
|
179
|
+
fontFamily = props.fontFamily ?? context?.fontFamily ?? themePropDefs.fontFamily.default,
|
|
170
180
|
//
|
|
171
181
|
onAppearanceChange = noop,
|
|
172
182
|
onAccentColorChange = noop,
|
|
@@ -175,6 +185,7 @@ const ThemeImpl = React.forwardRef<ThemeImplElement, ThemeImplProps>((props, for
|
|
|
175
185
|
onPanelBackgroundChange = noop,
|
|
176
186
|
onRadiusChange = noop,
|
|
177
187
|
onScalingChange = noop,
|
|
188
|
+
onFontFamilyChange = noop,
|
|
178
189
|
//
|
|
179
190
|
...themeProps
|
|
180
191
|
} = props;
|
|
@@ -195,6 +206,7 @@ const ThemeImpl = React.forwardRef<ThemeImplElement, ThemeImplProps>((props, for
|
|
|
195
206
|
panelBackground,
|
|
196
207
|
radius,
|
|
197
208
|
scaling,
|
|
209
|
+
fontFamily,
|
|
198
210
|
//
|
|
199
211
|
onAppearanceChange,
|
|
200
212
|
onAccentColorChange,
|
|
@@ -203,6 +215,7 @@ const ThemeImpl = React.forwardRef<ThemeImplElement, ThemeImplProps>((props, for
|
|
|
203
215
|
onPanelBackgroundChange,
|
|
204
216
|
onRadiusChange,
|
|
205
217
|
onScalingChange,
|
|
218
|
+
onFontFamilyChange,
|
|
206
219
|
}),
|
|
207
220
|
[
|
|
208
221
|
appearance,
|
|
@@ -213,6 +226,7 @@ const ThemeImpl = React.forwardRef<ThemeImplElement, ThemeImplProps>((props, for
|
|
|
213
226
|
panelBackground,
|
|
214
227
|
radius,
|
|
215
228
|
scaling,
|
|
229
|
+
fontFamily,
|
|
216
230
|
//
|
|
217
231
|
onAppearanceChange,
|
|
218
232
|
onAccentColorChange,
|
|
@@ -221,6 +235,7 @@ const ThemeImpl = React.forwardRef<ThemeImplElement, ThemeImplProps>((props, for
|
|
|
221
235
|
onPanelBackgroundChange,
|
|
222
236
|
onRadiusChange,
|
|
223
237
|
onScalingChange,
|
|
238
|
+
onFontFamilyChange,
|
|
224
239
|
],
|
|
225
240
|
)}
|
|
226
241
|
>
|
|
@@ -234,6 +249,7 @@ const ThemeImpl = React.forwardRef<ThemeImplElement, ThemeImplProps>((props, for
|
|
|
234
249
|
data-panel-background={panelBackground}
|
|
235
250
|
data-radius={radius}
|
|
236
251
|
data-scaling={scaling}
|
|
252
|
+
data-font-family={fontFamily}
|
|
237
253
|
ref={forwardedRef}
|
|
238
254
|
{...themeProps}
|
|
239
255
|
className={classNames(
|