@kushagradhawan/kookie-ui 0.1.16 → 0.1.18
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/components.css +3730 -1072
- package/dist/cjs/components/_internal/base-button.d.ts.map +1 -1
- package/dist/cjs/components/_internal/base-button.js +1 -1
- package/dist/cjs/components/_internal/base-button.js.map +3 -3
- package/dist/cjs/components/_internal/base-button.props.d.ts +9 -0
- package/dist/cjs/components/_internal/base-button.props.d.ts.map +1 -1
- package/dist/cjs/components/_internal/base-button.props.js +1 -1
- package/dist/cjs/components/_internal/base-button.props.js.map +3 -3
- package/dist/cjs/components/_internal/base-menu.props.d.ts +5 -0
- package/dist/cjs/components/_internal/base-menu.props.d.ts.map +1 -1
- package/dist/cjs/components/_internal/base-menu.props.js +1 -1
- package/dist/cjs/components/_internal/base-menu.props.js.map +3 -3
- package/dist/cjs/components/_internal/base-tab-list.props.d.ts +5 -0
- package/dist/cjs/components/_internal/base-tab-list.props.d.ts.map +1 -1
- package/dist/cjs/components/_internal/base-tab-list.props.js +1 -1
- package/dist/cjs/components/_internal/base-tab-list.props.js.map +3 -3
- package/dist/cjs/components/alert-dialog.d.ts.map +1 -1
- package/dist/cjs/components/alert-dialog.js +1 -1
- package/dist/cjs/components/alert-dialog.js.map +3 -3
- package/dist/cjs/components/avatar.d.ts.map +1 -1
- package/dist/cjs/components/avatar.js +1 -1
- package/dist/cjs/components/avatar.js.map +3 -3
- package/dist/cjs/components/avatar.props.d.ts +6 -1
- package/dist/cjs/components/avatar.props.d.ts.map +1 -1
- package/dist/cjs/components/avatar.props.js +1 -1
- package/dist/cjs/components/avatar.props.js.map +3 -3
- package/dist/cjs/components/badge.d.ts.map +1 -1
- package/dist/cjs/components/badge.js +1 -1
- package/dist/cjs/components/badge.js.map +3 -3
- package/dist/cjs/components/badge.props.d.ts +6 -1
- package/dist/cjs/components/badge.props.d.ts.map +1 -1
- package/dist/cjs/components/badge.props.js +1 -1
- package/dist/cjs/components/badge.props.js.map +2 -2
- package/dist/cjs/components/callout.d.ts.map +1 -1
- package/dist/cjs/components/callout.js +1 -1
- package/dist/cjs/components/callout.js.map +3 -3
- package/dist/cjs/components/callout.props.d.ts +5 -0
- package/dist/cjs/components/callout.props.d.ts.map +1 -1
- package/dist/cjs/components/callout.props.js +1 -1
- package/dist/cjs/components/callout.props.js.map +3 -3
- package/dist/cjs/components/card.d.ts.map +1 -1
- package/dist/cjs/components/card.js +1 -1
- package/dist/cjs/components/card.js.map +3 -3
- package/dist/cjs/components/card.props.d.ts +11 -2
- package/dist/cjs/components/card.props.d.ts.map +1 -1
- package/dist/cjs/components/card.props.js +1 -1
- package/dist/cjs/components/card.props.js.map +3 -3
- package/dist/cjs/components/context-menu.d.ts.map +1 -1
- package/dist/cjs/components/context-menu.js +1 -1
- package/dist/cjs/components/context-menu.js.map +3 -3
- package/dist/cjs/components/dialog.d.ts.map +1 -1
- package/dist/cjs/components/dialog.js +1 -1
- package/dist/cjs/components/dialog.js.map +3 -3
- package/dist/cjs/components/dialog.props.d.ts +5 -0
- package/dist/cjs/components/dialog.props.d.ts.map +1 -1
- package/dist/cjs/components/dialog.props.js +1 -1
- package/dist/cjs/components/dialog.props.js.map +3 -3
- package/dist/cjs/components/dropdown-menu.d.ts.map +1 -1
- package/dist/cjs/components/dropdown-menu.js +1 -1
- package/dist/cjs/components/dropdown-menu.js.map +3 -3
- package/dist/cjs/components/image.d.ts +6 -1
- package/dist/cjs/components/image.d.ts.map +1 -1
- package/dist/cjs/components/image.js +1 -1
- package/dist/cjs/components/image.js.map +3 -3
- package/dist/cjs/components/popover.d.ts.map +1 -1
- package/dist/cjs/components/popover.js +1 -1
- package/dist/cjs/components/popover.js.map +3 -3
- package/dist/cjs/components/popover.props.d.ts +5 -0
- package/dist/cjs/components/popover.props.d.ts.map +1 -1
- package/dist/cjs/components/popover.props.js +1 -1
- package/dist/cjs/components/popover.props.js.map +3 -3
- package/dist/cjs/components/select.d.ts.map +1 -1
- package/dist/cjs/components/select.js +1 -1
- package/dist/cjs/components/select.js.map +3 -3
- package/dist/cjs/components/select.props.d.ts +6 -1
- package/dist/cjs/components/select.props.d.ts.map +1 -1
- package/dist/cjs/components/select.props.js +1 -1
- package/dist/cjs/components/select.props.js.map +2 -2
- package/dist/cjs/components/sidebar.d.ts +13 -2
- package/dist/cjs/components/sidebar.d.ts.map +1 -1
- package/dist/cjs/components/sidebar.js +1 -1
- package/dist/cjs/components/sidebar.js.map +3 -3
- package/dist/cjs/components/sidebar.props.d.ts +5 -0
- package/dist/cjs/components/sidebar.props.d.ts.map +1 -1
- package/dist/cjs/components/sidebar.props.js +1 -1
- package/dist/cjs/components/sidebar.props.js.map +2 -2
- package/dist/cjs/components/tabs.d.ts.map +1 -1
- package/dist/cjs/components/tabs.js +1 -1
- package/dist/cjs/components/tabs.js.map +3 -3
- package/dist/cjs/components/text-area.d.ts.map +1 -1
- package/dist/cjs/components/text-area.js +1 -1
- package/dist/cjs/components/text-area.js.map +3 -3
- package/dist/cjs/components/text-area.props.d.ts +6 -1
- package/dist/cjs/components/text-area.props.d.ts.map +1 -1
- package/dist/cjs/components/text-area.props.js +1 -1
- package/dist/cjs/components/text-area.props.js.map +3 -3
- package/dist/cjs/components/text-field.d.ts.map +1 -1
- package/dist/cjs/components/text-field.js +2 -2
- package/dist/cjs/components/text-field.js.map +3 -3
- package/dist/cjs/components/text-field.props.d.ts +6 -1
- package/dist/cjs/components/text-field.props.d.ts.map +1 -1
- package/dist/cjs/components/text-field.props.js +1 -1
- package/dist/cjs/components/text-field.props.js.map +3 -3
- package/dist/cjs/components/theme.d.ts.map +1 -1
- package/dist/cjs/components/theme.js +1 -1
- package/dist/cjs/components/theme.js.map +2 -2
- package/dist/cjs/helpers/map-prop-values.js +1 -1
- package/dist/cjs/helpers/map-prop-values.js.map +2 -2
- package/dist/esm/components/_internal/base-button.d.ts.map +1 -1
- package/dist/esm/components/_internal/base-button.js +1 -1
- package/dist/esm/components/_internal/base-button.js.map +3 -3
- package/dist/esm/components/_internal/base-button.props.d.ts +9 -0
- package/dist/esm/components/_internal/base-button.props.d.ts.map +1 -1
- package/dist/esm/components/_internal/base-button.props.js +1 -1
- package/dist/esm/components/_internal/base-button.props.js.map +3 -3
- package/dist/esm/components/_internal/base-menu.props.d.ts +5 -0
- package/dist/esm/components/_internal/base-menu.props.d.ts.map +1 -1
- package/dist/esm/components/_internal/base-menu.props.js +1 -1
- package/dist/esm/components/_internal/base-menu.props.js.map +3 -3
- package/dist/esm/components/_internal/base-tab-list.props.d.ts +5 -0
- package/dist/esm/components/_internal/base-tab-list.props.d.ts.map +1 -1
- package/dist/esm/components/_internal/base-tab-list.props.js +1 -1
- package/dist/esm/components/_internal/base-tab-list.props.js.map +3 -3
- package/dist/esm/components/alert-dialog.d.ts.map +1 -1
- package/dist/esm/components/alert-dialog.js +1 -1
- package/dist/esm/components/alert-dialog.js.map +3 -3
- package/dist/esm/components/avatar.d.ts.map +1 -1
- package/dist/esm/components/avatar.js +1 -1
- package/dist/esm/components/avatar.js.map +3 -3
- package/dist/esm/components/avatar.props.d.ts +6 -1
- package/dist/esm/components/avatar.props.d.ts.map +1 -1
- package/dist/esm/components/avatar.props.js +1 -1
- package/dist/esm/components/avatar.props.js.map +3 -3
- package/dist/esm/components/badge.d.ts.map +1 -1
- package/dist/esm/components/badge.js +1 -1
- package/dist/esm/components/badge.js.map +3 -3
- package/dist/esm/components/badge.props.d.ts +6 -1
- package/dist/esm/components/badge.props.d.ts.map +1 -1
- package/dist/esm/components/badge.props.js +1 -1
- package/dist/esm/components/badge.props.js.map +2 -2
- package/dist/esm/components/callout.d.ts.map +1 -1
- package/dist/esm/components/callout.js +1 -1
- package/dist/esm/components/callout.js.map +3 -3
- package/dist/esm/components/callout.props.d.ts +5 -0
- package/dist/esm/components/callout.props.d.ts.map +1 -1
- package/dist/esm/components/callout.props.js +1 -1
- package/dist/esm/components/callout.props.js.map +3 -3
- package/dist/esm/components/card.d.ts.map +1 -1
- package/dist/esm/components/card.js +1 -1
- package/dist/esm/components/card.js.map +3 -3
- package/dist/esm/components/card.props.d.ts +11 -2
- package/dist/esm/components/card.props.d.ts.map +1 -1
- package/dist/esm/components/card.props.js +1 -1
- package/dist/esm/components/card.props.js.map +3 -3
- package/dist/esm/components/context-menu.d.ts.map +1 -1
- package/dist/esm/components/context-menu.js +1 -1
- package/dist/esm/components/context-menu.js.map +3 -3
- package/dist/esm/components/dialog.d.ts.map +1 -1
- package/dist/esm/components/dialog.js +1 -1
- package/dist/esm/components/dialog.js.map +3 -3
- package/dist/esm/components/dialog.props.d.ts +5 -0
- package/dist/esm/components/dialog.props.d.ts.map +1 -1
- package/dist/esm/components/dialog.props.js +1 -1
- package/dist/esm/components/dialog.props.js.map +3 -3
- package/dist/esm/components/dropdown-menu.d.ts.map +1 -1
- package/dist/esm/components/dropdown-menu.js +1 -1
- package/dist/esm/components/dropdown-menu.js.map +3 -3
- package/dist/esm/components/image.d.ts +6 -1
- package/dist/esm/components/image.d.ts.map +1 -1
- package/dist/esm/components/image.js +1 -1
- package/dist/esm/components/image.js.map +3 -3
- package/dist/esm/components/popover.d.ts.map +1 -1
- package/dist/esm/components/popover.js +1 -1
- package/dist/esm/components/popover.js.map +3 -3
- package/dist/esm/components/popover.props.d.ts +5 -0
- package/dist/esm/components/popover.props.d.ts.map +1 -1
- package/dist/esm/components/popover.props.js +1 -1
- package/dist/esm/components/popover.props.js.map +3 -3
- package/dist/esm/components/select.d.ts.map +1 -1
- package/dist/esm/components/select.js +1 -1
- package/dist/esm/components/select.js.map +3 -3
- package/dist/esm/components/select.props.d.ts +6 -1
- package/dist/esm/components/select.props.d.ts.map +1 -1
- package/dist/esm/components/select.props.js +1 -1
- package/dist/esm/components/select.props.js.map +2 -2
- package/dist/esm/components/sidebar.d.ts +13 -2
- package/dist/esm/components/sidebar.d.ts.map +1 -1
- package/dist/esm/components/sidebar.js +1 -1
- package/dist/esm/components/sidebar.js.map +3 -3
- package/dist/esm/components/sidebar.props.d.ts +5 -0
- package/dist/esm/components/sidebar.props.d.ts.map +1 -1
- package/dist/esm/components/sidebar.props.js +1 -1
- package/dist/esm/components/sidebar.props.js.map +2 -2
- package/dist/esm/components/tabs.d.ts.map +1 -1
- package/dist/esm/components/tabs.js +1 -1
- package/dist/esm/components/tabs.js.map +3 -3
- package/dist/esm/components/text-area.d.ts.map +1 -1
- package/dist/esm/components/text-area.js +1 -1
- package/dist/esm/components/text-area.js.map +3 -3
- package/dist/esm/components/text-area.props.d.ts +6 -1
- package/dist/esm/components/text-area.props.d.ts.map +1 -1
- package/dist/esm/components/text-area.props.js +1 -1
- package/dist/esm/components/text-area.props.js.map +3 -3
- package/dist/esm/components/text-field.d.ts.map +1 -1
- package/dist/esm/components/text-field.js +2 -2
- package/dist/esm/components/text-field.js.map +3 -3
- package/dist/esm/components/text-field.props.d.ts +6 -1
- package/dist/esm/components/text-field.props.d.ts.map +1 -1
- package/dist/esm/components/text-field.props.js +1 -1
- package/dist/esm/components/text-field.props.js.map +3 -3
- package/dist/esm/components/theme.d.ts.map +1 -1
- package/dist/esm/components/theme.js +1 -1
- package/dist/esm/components/theme.js.map +2 -2
- package/dist/esm/helpers/map-prop-values.js +1 -1
- package/dist/esm/helpers/map-prop-values.js.map +2 -2
- package/package.json +1 -1
- package/src/components/_internal/base-button.css +518 -110
- package/src/components/_internal/base-button.props.ts +5 -0
- package/src/components/_internal/base-button.tsx +4 -0
- package/src/components/_internal/base-card.css +59 -11
- package/src/components/_internal/base-dialog.css +26 -9
- package/src/components/_internal/base-menu.css +192 -21
- package/src/components/_internal/base-menu.props.ts +7 -0
- package/src/components/_internal/base-tab-list.css +56 -5
- package/src/components/_internal/base-tab-list.props.ts +3 -0
- package/src/components/alert-dialog.tsx +22 -7
- package/src/components/animations.css +31 -0
- package/src/components/avatar.css +436 -9
- package/src/components/avatar.props.tsx +4 -1
- package/src/components/avatar.tsx +19 -6
- package/src/components/badge.css +222 -7
- package/src/components/badge.props.tsx +3 -1
- package/src/components/badge.tsx +3 -2
- package/src/components/button.css +17 -17
- package/src/components/callout.css +75 -6
- package/src/components/callout.props.tsx +3 -0
- package/src/components/callout.tsx +6 -5
- package/src/components/card.css +361 -44
- package/src/components/card.props.tsx +7 -2
- package/src/components/card.tsx +7 -1
- package/src/components/context-menu.tsx +47 -22
- package/src/components/dialog.props.tsx +3 -0
- package/src/components/dialog.tsx +22 -7
- package/src/components/dropdown-menu.css +10 -10
- package/src/components/dropdown-menu.tsx +37 -11
- package/src/components/icon-button.css +36 -8
- package/src/components/image.tsx +92 -73
- package/src/components/kbd.css +122 -54
- package/src/components/popover.css +22 -3
- package/src/components/popover.props.tsx +3 -0
- package/src/components/popover.tsx +15 -8
- package/src/components/select.css +386 -95
- package/src/components/select.props.tsx +7 -1
- package/src/components/select.tsx +21 -13
- package/src/components/sidebar.css +201 -86
- package/src/components/sidebar.props.tsx +15 -3
- package/src/components/sidebar.tsx +306 -235
- package/src/components/tabs.css +3 -1
- package/src/components/tabs.tsx +8 -3
- package/src/components/text-area.css +323 -32
- package/src/components/text-area.props.tsx +4 -1
- package/src/components/text-area.tsx +3 -2
- package/src/components/text-field.css +336 -15
- package/src/components/text-field.props.tsx +4 -1
- package/src/components/text-field.tsx +5 -7
- package/src/components/theme.tsx +11 -9
- package/src/helpers/map-prop-values.ts +1 -1
- package/src/styles/tokens/color.css +19 -5
- package/src/styles/tokens/constants.css +118 -0
- package/src/styles/tokens/index.css +1 -0
- package/src/styles/tokens/radius.css +9 -6
- package/src/styles/tokens/shadow.css +10 -10
- package/src/styles/tokens/transition.css +33 -1
- package/styles.css +3846 -1089
- package/tokens/base.css +51 -22
- package/tokens.css +133 -34
|
@@ -7,6 +7,7 @@ import type { PropDef } from '../../props/prop-def.js';
|
|
|
7
7
|
|
|
8
8
|
const sizes = ['1', '2', '3', '4'] as const;
|
|
9
9
|
const variants = ['classic', 'solid', 'soft', 'surface', 'outline', 'ghost'] as const;
|
|
10
|
+
const panelBackgrounds = ['solid', 'translucent'] as const;
|
|
10
11
|
|
|
11
12
|
const baseButtonPropDefs = {
|
|
12
13
|
...asChildPropDef,
|
|
@@ -17,11 +18,15 @@ const baseButtonPropDefs = {
|
|
|
17
18
|
...radiusPropDef,
|
|
18
19
|
loading: { type: 'boolean', className: 'rt-loading', default: false },
|
|
19
20
|
fullWidth: { type: 'boolean', className: 'rt-full-width', default: false },
|
|
21
|
+
panelBackground: { type: 'enum', values: panelBackgrounds, default: undefined },
|
|
22
|
+
flush: { type: 'boolean', default: false },
|
|
20
23
|
} satisfies {
|
|
21
24
|
size: PropDef<(typeof sizes)[number]>;
|
|
22
25
|
variant: PropDef<(typeof variants)[number]>;
|
|
23
26
|
loading: PropDef<boolean>;
|
|
24
27
|
fullWidth: PropDef<boolean>;
|
|
28
|
+
panelBackground: PropDef<(typeof panelBackgrounds)[number] | undefined>;
|
|
29
|
+
flush: PropDef<boolean>;
|
|
25
30
|
};
|
|
26
31
|
|
|
27
32
|
export { baseButtonPropDefs };
|
|
@@ -35,6 +35,8 @@ const BaseButton = React.forwardRef<BaseButtonElement, BaseButtonProps>((props,
|
|
|
35
35
|
as,
|
|
36
36
|
color,
|
|
37
37
|
radius,
|
|
38
|
+
panelBackground,
|
|
39
|
+
flush,
|
|
38
40
|
disabled = props.loading,
|
|
39
41
|
...baseButtonProps
|
|
40
42
|
} = extractProps(props, baseButtonPropDefs, marginPropDefs);
|
|
@@ -65,6 +67,8 @@ const BaseButton = React.forwardRef<BaseButtonElement, BaseButtonProps>((props,
|
|
|
65
67
|
data-disabled={disabled || undefined}
|
|
66
68
|
data-accent-color={color}
|
|
67
69
|
data-radius={radius}
|
|
70
|
+
data-panel-background={panelBackground}
|
|
71
|
+
data-flush={flush ? 'true' : undefined}
|
|
68
72
|
{...baseButtonProps}
|
|
69
73
|
{...accessibilityProps}
|
|
70
74
|
ref={forwardedRef}
|
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
position: relative;
|
|
4
4
|
overflow: hidden;
|
|
5
5
|
border-radius: var(--base-card-border-radius);
|
|
6
|
+
transition: var(--transition-card);
|
|
6
7
|
|
|
7
8
|
/* Don't inherit typographic properties */
|
|
8
9
|
font-family: var(--default-font-family);
|
|
@@ -70,9 +71,9 @@
|
|
|
70
71
|
--base-card-surface-active-box-shadow: 0 0 0 1px var(--gray-a6);
|
|
71
72
|
|
|
72
73
|
@supports (color: color-mix(in oklab, white, black)) {
|
|
73
|
-
--base-card-surface-box-shadow: 0 0 0 1px color-mix(in oklab, var(--gray-a5), var(--gray-5)
|
|
74
|
-
--base-card-surface-hover-box-shadow: 0 0 0 1px color-mix(in oklab, var(--gray-a7), var(--gray-7)
|
|
75
|
-
--base-card-surface-active-box-shadow: 0 0 0 1px color-mix(in oklab, var(--gray-a6), var(--gray-6)
|
|
74
|
+
--base-card-surface-box-shadow: 0 0 0 1px color-mix(in oklab, var(--gray-a5), var(--gray-5) var(--color-mix-percentage-light));
|
|
75
|
+
--base-card-surface-hover-box-shadow: 0 0 0 1px color-mix(in oklab, var(--gray-a7), var(--gray-7) var(--color-mix-percentage-light));
|
|
76
|
+
--base-card-surface-active-box-shadow: 0 0 0 1px color-mix(in oklab, var(--gray-a6), var(--gray-6) var(--color-mix-percentage-light));
|
|
76
77
|
}
|
|
77
78
|
}
|
|
78
79
|
|
|
@@ -83,21 +84,68 @@
|
|
|
83
84
|
/* * * * * * * * * * * * * * * * * * * */
|
|
84
85
|
|
|
85
86
|
/*
|
|
86
|
-
* Using
|
|
87
|
-
*
|
|
87
|
+
* Using the same elevated 3D effect as Button classic variant for consistency.
|
|
88
|
+
* Creates a sophisticated multi-layer shadow system with inset and outer shadows.
|
|
88
89
|
*/
|
|
89
90
|
|
|
90
91
|
:where(.radix-themes) {
|
|
91
|
-
|
|
92
|
-
--base-card-classic-
|
|
93
|
-
|
|
92
|
+
/* Base state - elevated 3D effect (exact same structure as Button) */
|
|
93
|
+
--base-card-classic-box-shadow-outer:
|
|
94
|
+
inset 0 calc(-1 * var(--classic-border-width)) var(--classic-shadow-blur-large) var(--gray-a2),
|
|
95
|
+
inset 0 var(--classic-border-width) var(--white-a12),
|
|
96
|
+
inset 0 var(--classic-shadow-blur-medium) var(--classic-shadow-blur-large) var(--gray-a2),
|
|
97
|
+
inset 0 calc(-1 * var(--classic-border-width)) var(--gray-a6),
|
|
98
|
+
0 0 0 var(--classic-border-width) var(--gray-a5),
|
|
99
|
+
0 var(--classic-shadow-offset-y) var(--classic-shadow-blur-small) var(--gray-a7);
|
|
94
100
|
|
|
101
|
+
/* Hover state - enhanced elevation (exact same structure as Button) */
|
|
102
|
+
--base-card-classic-hover-box-shadow-outer:
|
|
103
|
+
inset 0 calc(-1 * var(--classic-border-width)) var(--classic-shadow-blur-large) var(--gray-a2),
|
|
104
|
+
inset 0 var(--classic-border-width) var(--white-a12),
|
|
105
|
+
inset 0 var(--classic-shadow-blur-medium) var(--classic-shadow-blur-large) var(--gray-a2),
|
|
106
|
+
inset 0 calc(-1 * var(--classic-border-width)) var(--gray-a6),
|
|
107
|
+
0 0 0 var(--classic-border-width) var(--gray-a5),
|
|
108
|
+
0 var(--classic-shadow-offset-y) var(--classic-shadow-blur-small) var(--gray-a7),
|
|
109
|
+
0 0 0 var(--classic-border-width) var(--gray-a5);
|
|
110
|
+
|
|
111
|
+
/* Active state - pressed down effect (exact same structure as Button) */
|
|
112
|
+
--base-card-classic-active-box-shadow-outer:
|
|
113
|
+
inset 0 var(--classic-border-width) var(--black-a3),
|
|
114
|
+
0 0 0 var(--classic-border-width) var(--gray-a7);
|
|
115
|
+
|
|
116
|
+
/* Dark mode overrides (exact same structure as Button) */
|
|
117
|
+
:where(.dark, .dark-theme) &,
|
|
118
|
+
:where(.dark, .dark-theme) :where(.radix-themes:not(.light, .light-theme)) {
|
|
119
|
+
--base-card-classic-box-shadow-outer:
|
|
120
|
+
inset 0 calc(-1 * var(--classic-border-width)) var(--classic-shadow-blur-large) var(--gray-a3),
|
|
121
|
+
inset 0 var(--classic-border-width) var(--gray-a11),
|
|
122
|
+
inset 0 var(--classic-shadow-blur-medium) var(--classic-shadow-blur-large) var(--gray-a2),
|
|
123
|
+
inset 0 calc(-2 * var(--classic-border-width)) var(--black-a11),
|
|
124
|
+
0 0 0 var(--classic-border-width-thick) var(--gray-a7),
|
|
125
|
+
0 var(--classic-shadow-offset-y) var(--classic-shadow-blur-small) var(--black-a12);
|
|
126
|
+
|
|
127
|
+
--base-card-classic-hover-box-shadow-outer:
|
|
128
|
+
inset 0 calc(-1 * var(--classic-border-width)) var(--classic-shadow-blur-large) var(--gray-a3),
|
|
129
|
+
inset 0 var(--classic-border-width) var(--gray-a11),
|
|
130
|
+
inset 0 var(--classic-shadow-blur-medium) var(--classic-shadow-blur-large) var(--gray-a2),
|
|
131
|
+
inset 0 var(--classic-shadow-offset-negative) var(--black-a11),
|
|
132
|
+
0 0 0 var(--classic-border-width-thick) var(--gray-a7),
|
|
133
|
+
0 var(--classic-shadow-offset-y) var(--classic-shadow-blur-small) var(--black-a12),
|
|
134
|
+
0 0 0 var(--classic-border-width) var(--gray-a5);
|
|
135
|
+
|
|
136
|
+
--base-card-classic-active-box-shadow-outer:
|
|
137
|
+
inset 0 var(--classic-border-width) var(--black-a3),
|
|
138
|
+
0 0 0 var(--classic-border-width) var(--gray-a7);
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
/* Border color definitions (kept for compatibility) */
|
|
95
142
|
--base-card-classic-border-color: var(--gray-a3);
|
|
96
143
|
--base-card-classic-hover-border-color: var(--gray-a3);
|
|
97
144
|
--base-card-classic-active-border-color: var(--gray-a4);
|
|
145
|
+
|
|
98
146
|
@supports (color: color-mix(in oklab, white, black)) {
|
|
99
|
-
--base-card-classic-border-color: color-mix(in oklab, var(--gray-a3), var(--gray-3)
|
|
100
|
-
--base-card-classic-hover-border-color: color-mix(in oklab, var(--gray-a4), var(--gray-4)
|
|
101
|
-
--base-card-classic-active-border-color: color-mix(in oklab, var(--gray-a3), var(--gray-3)
|
|
147
|
+
--base-card-classic-border-color: color-mix(in oklab, var(--gray-a3), var(--gray-3) var(--color-mix-percentage-light));
|
|
148
|
+
--base-card-classic-hover-border-color: color-mix(in oklab, var(--gray-a4), var(--gray-4) var(--color-mix-percentage-light));
|
|
149
|
+
--base-card-classic-active-border-color: color-mix(in oklab, var(--gray-a3), var(--gray-3) var(--color-mix-percentage-light));
|
|
102
150
|
}
|
|
103
151
|
}
|
|
@@ -50,9 +50,26 @@
|
|
|
50
50
|
padding: var(--dialog-content-padding);
|
|
51
51
|
box-sizing: border-box;
|
|
52
52
|
|
|
53
|
-
|
|
53
|
+
/* Base state: use contextual dialog color that auto-resolves */
|
|
54
|
+
background-color: var(--color-dialog);
|
|
54
55
|
box-shadow: var(--shadow-6);
|
|
55
56
|
outline: none;
|
|
57
|
+
|
|
58
|
+
/* Theme-level backdrop filter for auto dialogs */
|
|
59
|
+
:where([data-panel-background='translucent']) & {
|
|
60
|
+
backdrop-filter: var(--backdrop-filter-dialog);
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
/* Component-level overrides (when panelBackground prop is explicitly set) */
|
|
64
|
+
&:where([data-panel-background='solid']) {
|
|
65
|
+
background-color: var(--color-dialog-solid);
|
|
66
|
+
backdrop-filter: none;
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
&:where([data-panel-background='translucent']) {
|
|
70
|
+
background-color: var(--color-dialog-translucent);
|
|
71
|
+
backdrop-filter: var(--backdrop-filter-dialog);
|
|
72
|
+
}
|
|
56
73
|
}
|
|
57
74
|
|
|
58
75
|
/***************************************************************************************************
|
|
@@ -64,20 +81,20 @@
|
|
|
64
81
|
@breakpoints {
|
|
65
82
|
.rt-BaseDialogContent {
|
|
66
83
|
&:where(.rt-r-size-1) {
|
|
67
|
-
--dialog-content-padding: var(--space-
|
|
68
|
-
border-radius: var(--radius-
|
|
84
|
+
--dialog-content-padding: var(--space-4);
|
|
85
|
+
border-radius: var(--radius-5);
|
|
69
86
|
}
|
|
70
87
|
&:where(.rt-r-size-2) {
|
|
71
|
-
--dialog-content-padding: var(--space-
|
|
72
|
-
border-radius: var(--radius-
|
|
88
|
+
--dialog-content-padding: var(--space-5);
|
|
89
|
+
border-radius: var(--radius-6);
|
|
73
90
|
}
|
|
74
91
|
&:where(.rt-r-size-3) {
|
|
75
|
-
--dialog-content-padding: var(--space-
|
|
76
|
-
border-radius: var(--radius-
|
|
92
|
+
--dialog-content-padding: var(--space-6);
|
|
93
|
+
border-radius: var(--radius-7);
|
|
77
94
|
}
|
|
78
95
|
&:where(.rt-r-size-4) {
|
|
79
|
-
--dialog-content-padding: var(--space-
|
|
80
|
-
border-radius: var(--radius-
|
|
96
|
+
--dialog-content-padding: var(--space-7);
|
|
97
|
+
border-radius: var(--radius-8);
|
|
81
98
|
}
|
|
82
99
|
}
|
|
83
100
|
}
|
|
@@ -8,7 +8,27 @@
|
|
|
8
8
|
flex-direction: column;
|
|
9
9
|
box-sizing: border-box;
|
|
10
10
|
overflow: hidden;
|
|
11
|
-
|
|
11
|
+
|
|
12
|
+
background-color: var(--color-panel);
|
|
13
|
+
backdrop-filter: var(--backdrop-filter-panel);
|
|
14
|
+
box-shadow: var(--shadow-5);
|
|
15
|
+
transition: var(--transition-background-blur);
|
|
16
|
+
|
|
17
|
+
/* Reduced motion support */
|
|
18
|
+
@media (prefers-reduced-motion: reduce) {
|
|
19
|
+
transition: none;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
/* Component-level overrides (higher specificity) */
|
|
23
|
+
&:where([data-panel-background='solid']) {
|
|
24
|
+
background-color: var(--color-panel-solid);
|
|
25
|
+
backdrop-filter: none;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
&:where([data-panel-background='translucent']) {
|
|
29
|
+
background-color: var(--color-panel-translucent);
|
|
30
|
+
backdrop-filter: var(--backdrop-filter-panel);
|
|
31
|
+
}
|
|
12
32
|
}
|
|
13
33
|
|
|
14
34
|
.rt-BaseMenuViewport {
|
|
@@ -37,6 +57,7 @@
|
|
|
37
57
|
position: relative;
|
|
38
58
|
outline: none;
|
|
39
59
|
scroll-margin: var(--base-menu-content-padding) 0;
|
|
60
|
+
transition: var(--transition-menu);
|
|
40
61
|
|
|
41
62
|
/* Fix sticky text highlighting after selection in Firefox */
|
|
42
63
|
user-select: none;
|
|
@@ -46,6 +67,11 @@
|
|
|
46
67
|
&:where([data-disabled]) {
|
|
47
68
|
cursor: default;
|
|
48
69
|
}
|
|
70
|
+
|
|
71
|
+
/* Reduced motion support */
|
|
72
|
+
@media (prefers-reduced-motion: reduce) {
|
|
73
|
+
transition: none;
|
|
74
|
+
}
|
|
49
75
|
}
|
|
50
76
|
|
|
51
77
|
.rt-BaseMenuShortcut {
|
|
@@ -53,6 +79,7 @@
|
|
|
53
79
|
align-items: center;
|
|
54
80
|
margin-left: auto;
|
|
55
81
|
padding-left: var(--space-4);
|
|
82
|
+
margin-right: calc(-2px * var(--scaling)); /* Pulls closer to edge */
|
|
56
83
|
}
|
|
57
84
|
|
|
58
85
|
.rt-BaseMenuSubTriggerIcon {
|
|
@@ -96,7 +123,16 @@
|
|
|
96
123
|
}
|
|
97
124
|
|
|
98
125
|
.rt-BaseMenuArrow {
|
|
99
|
-
fill: var(--
|
|
126
|
+
fill: var(--color-panel);
|
|
127
|
+
|
|
128
|
+
/* Component-level overrides (higher specificity) */
|
|
129
|
+
:where(.rt-BaseMenuContent[data-panel-background='solid']) & {
|
|
130
|
+
fill: var(--color-panel-solid);
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
:where(.rt-BaseMenuContent[data-panel-background='translucent']) & {
|
|
134
|
+
fill: var(--color-panel-translucent);
|
|
135
|
+
}
|
|
100
136
|
}
|
|
101
137
|
|
|
102
138
|
/***************************************************************************************************
|
|
@@ -108,7 +144,7 @@
|
|
|
108
144
|
@breakpoints {
|
|
109
145
|
.rt-BaseMenuContent {
|
|
110
146
|
&:where(.rt-r-size-1) {
|
|
111
|
-
--base-menu-content-padding: var(--space-
|
|
147
|
+
--base-menu-content-padding: var(--space-2);
|
|
112
148
|
--base-menu-item-padding-left: calc(var(--space-5) / 1.2);
|
|
113
149
|
--base-menu-item-padding-right: var(--space-2);
|
|
114
150
|
--base-menu-item-padding-y: calc(var(--space-1) * 0.75);
|
|
@@ -116,6 +152,7 @@
|
|
|
116
152
|
border-radius: var(--radius-3);
|
|
117
153
|
|
|
118
154
|
& :where(.rt-BaseMenuItem) {
|
|
155
|
+
gap: var(--component-gap-2);
|
|
119
156
|
font-size: var(--font-size-1);
|
|
120
157
|
line-height: var(--line-height-1);
|
|
121
158
|
letter-spacing: var(--letter-spacing-1);
|
|
@@ -123,8 +160,8 @@
|
|
|
123
160
|
|
|
124
161
|
/* stylelint-disable-next-line selector-max-type */
|
|
125
162
|
& :where(svg) {
|
|
126
|
-
width:
|
|
127
|
-
height:
|
|
163
|
+
width: var(--content-icon-size-1);
|
|
164
|
+
height: var(--content-icon-size-1);
|
|
128
165
|
flex-shrink: 0;
|
|
129
166
|
}
|
|
130
167
|
}
|
|
@@ -136,8 +173,8 @@
|
|
|
136
173
|
}
|
|
137
174
|
|
|
138
175
|
& :where(.rt-BaseMenuItemIndicatorIcon, .rt-BaseMenuSubTriggerIcon) {
|
|
139
|
-
width:
|
|
140
|
-
height:
|
|
176
|
+
width: var(--indicator-icon-size-1);
|
|
177
|
+
height: var(--indicator-icon-size-1);
|
|
141
178
|
}
|
|
142
179
|
|
|
143
180
|
/* reset with :not:has so we still support browsers without :has */
|
|
@@ -150,14 +187,15 @@
|
|
|
150
187
|
}
|
|
151
188
|
|
|
152
189
|
&:where(.rt-r-size-2) {
|
|
153
|
-
--base-menu-content-padding: var(--space-
|
|
190
|
+
--base-menu-content-padding: var(--space-3);
|
|
154
191
|
--base-menu-item-padding-left: var(--space-3);
|
|
155
192
|
--base-menu-item-padding-right: var(--space-3);
|
|
156
193
|
--base-menu-item-padding-y: var(--space-1);
|
|
157
194
|
--base-menu-item-height: var(--space-6);
|
|
158
|
-
border-radius: var(--radius-
|
|
195
|
+
border-radius: var(--radius-5);
|
|
159
196
|
|
|
160
197
|
& :where(.rt-BaseMenuItem) {
|
|
198
|
+
gap: var(--component-gap-3);
|
|
161
199
|
font-size: var(--font-size-2);
|
|
162
200
|
line-height: var(--line-height-2);
|
|
163
201
|
letter-spacing: var(--letter-spacing-2);
|
|
@@ -165,8 +203,8 @@
|
|
|
165
203
|
|
|
166
204
|
/* stylelint-disable-next-line selector-max-type */
|
|
167
205
|
& :where(svg) {
|
|
168
|
-
width: var(--
|
|
169
|
-
height: var(--
|
|
206
|
+
width: var(--content-icon-size-2);
|
|
207
|
+
height: var(--content-icon-size-2);
|
|
170
208
|
flex-shrink: 0;
|
|
171
209
|
}
|
|
172
210
|
}
|
|
@@ -178,8 +216,51 @@
|
|
|
178
216
|
}
|
|
179
217
|
|
|
180
218
|
& :where(.rt-BaseMenuItemIndicatorIcon, .rt-BaseMenuSubTriggerIcon) {
|
|
181
|
-
width:
|
|
182
|
-
height:
|
|
219
|
+
width: var(--indicator-icon-size-2);
|
|
220
|
+
height: var(--indicator-icon-size-2);
|
|
221
|
+
}
|
|
222
|
+
|
|
223
|
+
/* reset with :not:has so we still support browsers without :has */
|
|
224
|
+
&:where(:not(:has(.rt-BaseMenuCheckboxItem, .rt-BaseMenuRadioItem))) {
|
|
225
|
+
--base-menu-item-padding-left: var(--space-3);
|
|
226
|
+
}
|
|
227
|
+
&:where(:has(.rt-BaseMenuCheckboxItem, .rt-BaseMenuRadioItem)) {
|
|
228
|
+
--base-menu-item-padding-left: var(--space-5);
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
|
|
232
|
+
&:where(.rt-r-size-3) {
|
|
233
|
+
--base-menu-content-padding: var(--space-3);
|
|
234
|
+
--base-menu-item-padding-left: var(--space-3);
|
|
235
|
+
--base-menu-item-padding-right: var(--space-3);
|
|
236
|
+
--base-menu-item-padding-y: var(--space-1);
|
|
237
|
+
--base-menu-item-height: var(--space-6);
|
|
238
|
+
border-radius: var(--radius-6);
|
|
239
|
+
|
|
240
|
+
& :where(.rt-BaseMenuItem) {
|
|
241
|
+
gap: var(--component-gap-4);
|
|
242
|
+
font-size: var(--font-size-3);
|
|
243
|
+
line-height: var(--line-height-2);
|
|
244
|
+
letter-spacing: var(--letter-spacing-3);
|
|
245
|
+
border-radius: var(--radius-2);
|
|
246
|
+
|
|
247
|
+
/* stylelint-disable-next-line selector-max-type */
|
|
248
|
+
& :where(svg) {
|
|
249
|
+
width: var(--content-icon-size-2);
|
|
250
|
+
height: var(--content-icon-size-2);
|
|
251
|
+
flex-shrink: 0;
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
|
|
255
|
+
& :where(.rt-BaseMenuLabel) {
|
|
256
|
+
font-size: var(--font-size-2);
|
|
257
|
+
line-height: var(--line-height-2);
|
|
258
|
+
letter-spacing: var(--letter-spacing-2);
|
|
259
|
+
}
|
|
260
|
+
|
|
261
|
+
& :where(.rt-BaseMenuItemIndicatorIcon, .rt-BaseMenuSubTriggerIcon) {
|
|
262
|
+
width: var(--indicator-icon-size-2);
|
|
263
|
+
height: var(--indicator-icon-size-2);
|
|
183
264
|
}
|
|
184
265
|
|
|
185
266
|
/* reset with :not:has so we still support browsers without :has */
|
|
@@ -198,11 +279,6 @@
|
|
|
198
279
|
* VARIANTS *
|
|
199
280
|
* *
|
|
200
281
|
***************************************************************************************************/
|
|
201
|
-
|
|
202
|
-
.rt-BaseMenuContent {
|
|
203
|
-
--base-menu-bg: var(--color-panel-solid);
|
|
204
|
-
box-shadow: var(--shadow-5);
|
|
205
|
-
}
|
|
206
282
|
.rt-BaseMenuItem:where([data-accent-color]) {
|
|
207
283
|
color: var(--accent-a11);
|
|
208
284
|
}
|
|
@@ -230,8 +306,46 @@
|
|
|
230
306
|
/* solid */
|
|
231
307
|
|
|
232
308
|
.rt-BaseMenuContent:where(.rt-variant-solid) {
|
|
309
|
+
& :where(.rt-BaseMenuSubTrigger) {
|
|
310
|
+
transition: var(--transition-menu);
|
|
311
|
+
|
|
312
|
+
/* Reduced motion support */
|
|
313
|
+
@media (prefers-reduced-motion: reduce) {
|
|
314
|
+
transition: none;
|
|
315
|
+
}
|
|
316
|
+
|
|
317
|
+
/* Remove backdrop-filter transitions in translucent mode to prevent flickering */
|
|
318
|
+
:where([data-panel-background='translucent']) & {
|
|
319
|
+
transition: background var(--duration-1) var(--ease-1), color var(--duration-2) var(--ease-1);
|
|
320
|
+
}
|
|
321
|
+
}
|
|
233
322
|
& :where(.rt-BaseMenuSubTrigger[data-state='open']) {
|
|
234
|
-
|
|
323
|
+
/* Base state: solid gray for solid panels */
|
|
324
|
+
background-color: var(--gray-3);
|
|
325
|
+
|
|
326
|
+
/* Theme-level translucent override */
|
|
327
|
+
:where([data-panel-background='translucent']) & {
|
|
328
|
+
background-color: var(--gray-a3);
|
|
329
|
+
/* Remove individual backdrop-filter to prevent layering with container backdrop-filter */
|
|
330
|
+
}
|
|
331
|
+
|
|
332
|
+
/* Component-level overrides (higher specificity) */
|
|
333
|
+
&:where([data-panel-background='solid']) {
|
|
334
|
+
background-color: var(--gray-3);
|
|
335
|
+
backdrop-filter: none;
|
|
336
|
+
--backdrop-filter-components: none;
|
|
337
|
+
}
|
|
338
|
+
|
|
339
|
+
&:where([data-panel-background='translucent']) {
|
|
340
|
+
background-color: var(--gray-a3);
|
|
341
|
+
/* No backdrop-filter here to prevent double-blur with container */
|
|
342
|
+
}
|
|
343
|
+
}
|
|
344
|
+
& :where(.rt-BaseMenuItem) {
|
|
345
|
+
/* Remove backdrop-filter transitions in translucent mode to prevent flickering */
|
|
346
|
+
:where([data-panel-background='translucent']) & {
|
|
347
|
+
transition: background var(--duration-1) var(--ease-1), color var(--duration-2) var(--ease-1);
|
|
348
|
+
}
|
|
235
349
|
}
|
|
236
350
|
& :where(.rt-BaseMenuItem[data-highlighted]) {
|
|
237
351
|
background-color: var(--accent-9);
|
|
@@ -289,11 +403,68 @@
|
|
|
289
403
|
/* soft */
|
|
290
404
|
|
|
291
405
|
.rt-BaseMenuContent:where(.rt-variant-soft) {
|
|
406
|
+
& :where(.rt-BaseMenuSubTrigger) {
|
|
407
|
+
transition: var(--transition-menu);
|
|
408
|
+
|
|
409
|
+
/* Reduced motion support */
|
|
410
|
+
@media (prefers-reduced-motion: reduce) {
|
|
411
|
+
transition: none;
|
|
412
|
+
}
|
|
413
|
+
|
|
414
|
+
/* Remove backdrop-filter transitions in translucent mode to prevent flickering */
|
|
415
|
+
:where([data-panel-background='translucent']) & {
|
|
416
|
+
transition: background var(--duration-1) var(--ease-1), color var(--duration-2) var(--ease-1);
|
|
417
|
+
}
|
|
418
|
+
}
|
|
292
419
|
& :where(.rt-BaseMenuSubTrigger[data-state='open']) {
|
|
293
|
-
|
|
420
|
+
/* Base state: solid accent for solid panels */
|
|
421
|
+
background-color: var(--accent-3);
|
|
422
|
+
|
|
423
|
+
/* Theme-level translucent override */
|
|
424
|
+
:where([data-panel-background='translucent']) & {
|
|
425
|
+
background-color: var(--accent-a3);
|
|
426
|
+
/* Remove individual backdrop-filter to prevent layering with container backdrop-filter */
|
|
427
|
+
}
|
|
428
|
+
|
|
429
|
+
/* Component-level overrides (higher specificity) */
|
|
430
|
+
&:where([data-panel-background='solid']) {
|
|
431
|
+
background-color: var(--accent-3);
|
|
432
|
+
backdrop-filter: none;
|
|
433
|
+
--backdrop-filter-components: none;
|
|
434
|
+
}
|
|
435
|
+
|
|
436
|
+
&:where([data-panel-background='translucent']) {
|
|
437
|
+
background-color: var(--accent-a3);
|
|
438
|
+
/* No backdrop-filter here to prevent double-blur with container */
|
|
439
|
+
}
|
|
440
|
+
}
|
|
441
|
+
& :where(.rt-BaseMenuItem) {
|
|
442
|
+
/* Remove backdrop-filter transitions in translucent mode to prevent flickering */
|
|
443
|
+
:where([data-panel-background='translucent']) & {
|
|
444
|
+
transition: background var(--duration-1) var(--ease-1), color var(--duration-2) var(--ease-1);
|
|
445
|
+
}
|
|
294
446
|
}
|
|
295
447
|
& :where(.rt-BaseMenuItem[data-highlighted]) {
|
|
296
|
-
|
|
448
|
+
/* Base state: solid accent for solid panels */
|
|
449
|
+
background-color: var(--accent-4);
|
|
450
|
+
|
|
451
|
+
/* Theme-level translucent override */
|
|
452
|
+
:where([data-panel-background='translucent']) & {
|
|
453
|
+
background-color: var(--accent-a4);
|
|
454
|
+
/* Remove individual backdrop-filter to prevent layering with container backdrop-filter */
|
|
455
|
+
}
|
|
456
|
+
|
|
457
|
+
/* Component-level overrides (higher specificity) */
|
|
458
|
+
&:where([data-panel-background='solid']) {
|
|
459
|
+
background-color: var(--accent-4);
|
|
460
|
+
backdrop-filter: none;
|
|
461
|
+
--backdrop-filter-components: none;
|
|
462
|
+
}
|
|
463
|
+
|
|
464
|
+
&:where([data-panel-background='translucent']) {
|
|
465
|
+
background-color: var(--accent-a4);
|
|
466
|
+
/* No backdrop-filter here to prevent double-blur with container */
|
|
467
|
+
}
|
|
297
468
|
|
|
298
469
|
/* In soft variant, improve contrast for gray text while maintaining hierarchy */
|
|
299
470
|
& :where(.rt-Text[data-accent-color='gray'], [data-accent-color='gray']) {
|
|
@@ -6,6 +6,7 @@ import type { PropDef } from '../../props/prop-def.js';
|
|
|
6
6
|
|
|
7
7
|
const contentSizes = ['1', '2'] as const;
|
|
8
8
|
const contentVariants = ['solid', 'soft'] as const;
|
|
9
|
+
const panelBackgrounds = ['solid', 'translucent'] as const;
|
|
9
10
|
|
|
10
11
|
const baseMenuContentPropDefs = {
|
|
11
12
|
size: {
|
|
@@ -21,11 +22,17 @@ const baseMenuContentPropDefs = {
|
|
|
21
22
|
values: contentVariants,
|
|
22
23
|
default: 'solid',
|
|
23
24
|
},
|
|
25
|
+
panelBackground: {
|
|
26
|
+
type: 'enum',
|
|
27
|
+
values: panelBackgrounds,
|
|
28
|
+
default: undefined,
|
|
29
|
+
},
|
|
24
30
|
...colorPropDef,
|
|
25
31
|
...highContrastPropDef,
|
|
26
32
|
} satisfies {
|
|
27
33
|
size: PropDef<(typeof contentSizes)[number]>;
|
|
28
34
|
variant: PropDef<(typeof contentVariants)[number]>;
|
|
35
|
+
panelBackground: PropDef<(typeof panelBackgrounds)[number] | undefined>;
|
|
29
36
|
};
|
|
30
37
|
|
|
31
38
|
const baseMenuItemPropDefs = {
|
|
@@ -20,6 +20,7 @@
|
|
|
20
20
|
flex-shrink: 0;
|
|
21
21
|
position: relative;
|
|
22
22
|
user-select: none;
|
|
23
|
+
transition: var(--transition-tabs);
|
|
23
24
|
}
|
|
24
25
|
|
|
25
26
|
.rt-BaseTabListTriggerInner,
|
|
@@ -27,6 +28,7 @@
|
|
|
27
28
|
display: flex;
|
|
28
29
|
align-items: center;
|
|
29
30
|
justify-content: center;
|
|
31
|
+
transition: var(--transition-tabs);
|
|
30
32
|
}
|
|
31
33
|
|
|
32
34
|
.rt-BaseTabListTriggerInner {
|
|
@@ -35,12 +37,14 @@
|
|
|
35
37
|
:where(.rt-BaseTabListTrigger[data-state='inactive'], .rt-TabNavLink:not([data-active])) & {
|
|
36
38
|
letter-spacing: var(--tab-inactive-letter-spacing);
|
|
37
39
|
word-spacing: var(--tab-inactive-word-spacing);
|
|
40
|
+
transition-delay: var(--duration-1); /* 100ms - allows staggered effect vs active state's 0ms */
|
|
38
41
|
}
|
|
39
42
|
|
|
40
43
|
:where(.rt-BaseTabListTrigger[data-state='active'], .rt-TabNavLink[data-active]) & {
|
|
41
44
|
font-weight: var(--font-weight-medium);
|
|
42
45
|
letter-spacing: var(--tab-active-letter-spacing);
|
|
43
46
|
word-spacing: var(--tab-active-word-spacing);
|
|
47
|
+
transition-delay: 0ms; /* Immediate transition for active state */
|
|
44
48
|
}
|
|
45
49
|
}
|
|
46
50
|
|
|
@@ -80,7 +84,7 @@
|
|
|
80
84
|
--tab-height: var(--space-6);
|
|
81
85
|
--tab-padding-x: var(--space-1);
|
|
82
86
|
--tab-inner-padding-x: var(--space-1);
|
|
83
|
-
--tab-inner-padding-y: calc(var(--space-1) *
|
|
87
|
+
--tab-inner-padding-y: calc(var(--space-1) * var(--spacing-multiplier-small));
|
|
84
88
|
--tab-inner-border-radius: var(--radius-1);
|
|
85
89
|
}
|
|
86
90
|
&:where(.rt-r-size-2) {
|
|
@@ -103,7 +107,7 @@
|
|
|
103
107
|
***************************************************************************************************/
|
|
104
108
|
|
|
105
109
|
.rt-BaseTabList {
|
|
106
|
-
box-shadow: inset 0 -
|
|
110
|
+
box-shadow: inset 0 calc(-1 * var(--border-width-standard)) 0 0 var(--gray-a5);
|
|
107
111
|
}
|
|
108
112
|
|
|
109
113
|
.rt-BaseTabListTrigger {
|
|
@@ -114,28 +118,73 @@
|
|
|
114
118
|
color: var(--gray-12);
|
|
115
119
|
}
|
|
116
120
|
&:where(:hover) :where(.rt-BaseTabListTriggerInner) {
|
|
121
|
+
/* Base state: solid gray for solid panels */
|
|
117
122
|
background-color: var(--gray-a3);
|
|
123
|
+
|
|
124
|
+
/* Theme-level translucent override for hover */
|
|
125
|
+
:where([data-panel-background='translucent']) & {
|
|
126
|
+
background-color: var(--gray-a3);
|
|
127
|
+
backdrop-filter: var(--backdrop-filter-components);
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
/* Component-level overrides for hover */
|
|
131
|
+
:where(.rt-BaseTabList[data-panel-background='solid']) & {
|
|
132
|
+
background-color: var(--gray-a3);
|
|
133
|
+
backdrop-filter: none;
|
|
134
|
+
--backdrop-filter-components: none;
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
:where(.rt-BaseTabList[data-panel-background='translucent']) & {
|
|
138
|
+
background-color: var(--gray-a3);
|
|
139
|
+
backdrop-filter: var(--backdrop-filter-components);
|
|
140
|
+
--backdrop-filter-components: blur(var(--backdrop-blur-components));
|
|
141
|
+
}
|
|
118
142
|
}
|
|
119
143
|
&:where(:focus-visible:hover) :where(.rt-BaseTabListTriggerInner) {
|
|
144
|
+
/* Base state: solid accent for solid panels */
|
|
120
145
|
background-color: var(--accent-a3);
|
|
146
|
+
|
|
147
|
+
/* Theme-level translucent override for focus+hover */
|
|
148
|
+
:where([data-panel-background='translucent']) & {
|
|
149
|
+
background-color: var(--accent-a3);
|
|
150
|
+
backdrop-filter: var(--backdrop-filter-components);
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
/* Component-level overrides for focus+hover */
|
|
154
|
+
:where(.rt-BaseTabList[data-panel-background='solid']) & {
|
|
155
|
+
background-color: var(--accent-a3);
|
|
156
|
+
backdrop-filter: none;
|
|
157
|
+
--backdrop-filter-components: none;
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
:where(.rt-BaseTabList[data-panel-background='translucent']) & {
|
|
161
|
+
background-color: var(--accent-a3);
|
|
162
|
+
backdrop-filter: var(--backdrop-filter-components);
|
|
163
|
+
--backdrop-filter-components: blur(var(--backdrop-blur-components));
|
|
164
|
+
}
|
|
121
165
|
}
|
|
122
166
|
}
|
|
123
167
|
&:where([data-state='active'], [data-active]) {
|
|
124
168
|
color: var(--gray-12);
|
|
125
169
|
}
|
|
126
170
|
&:where(:focus-visible) :where(.rt-BaseTabListTriggerInner) {
|
|
127
|
-
outline:
|
|
128
|
-
outline-offset: -
|
|
171
|
+
outline: var(--focus-outline-width) solid var(--focus-8);
|
|
172
|
+
outline-offset: var(--focus-outline-offset-inset);
|
|
129
173
|
}
|
|
130
174
|
&:where([data-state='active'], [data-active])::before {
|
|
131
175
|
box-sizing: border-box;
|
|
132
176
|
content: '';
|
|
133
|
-
height:
|
|
177
|
+
height: var(--focus-outline-width); /* Consistent with focus outline thickness */
|
|
134
178
|
position: absolute;
|
|
135
179
|
bottom: 0;
|
|
136
180
|
left: 0;
|
|
137
181
|
right: 0;
|
|
138
182
|
background-color: var(--accent-indicator);
|
|
183
|
+
transform-origin: center;
|
|
184
|
+
transition:
|
|
185
|
+
transform var(--duration-3) var(--ease-3),
|
|
186
|
+
opacity var(--duration-2) var(--ease-1),
|
|
187
|
+
background-color var(--duration-2) var(--ease-1);
|
|
139
188
|
}
|
|
140
189
|
|
|
141
190
|
:where(.rt-BaseTabList.rt-high-contrast) & {
|
|
@@ -144,3 +193,5 @@
|
|
|
144
193
|
}
|
|
145
194
|
}
|
|
146
195
|
}
|
|
196
|
+
|
|
197
|
+
|