@rcarls/rc-theme-material 0.6.0 → 0.7.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.
Files changed (52) hide show
  1. package/CHANGELOG.md +544 -0
  2. package/DESIGN.md +1399 -0
  3. package/README.md +88 -5
  4. package/bridge.css +132 -55
  5. package/components/accordion.css +43 -157
  6. package/components/adaptive-menu.css +47 -86
  7. package/components/app-bar.css +4 -2
  8. package/components/bottom-sheet.css +2 -2
  9. package/components/button.css +2 -1
  10. package/components/card.css +2 -0
  11. package/components/chip.css +12 -1
  12. package/components/combobox.css +61 -14
  13. package/components/dialog.css +27 -26
  14. package/components/disclosure.css +128 -84
  15. package/components/field.css +566 -0
  16. package/components/icons.css +9 -0
  17. package/components/list-item.css +65 -3
  18. package/components/listbox.css +5 -4
  19. package/components/markdown-editor.css +62 -35
  20. package/components/menu-button.css +4 -1
  21. package/components/menu.css +18 -31
  22. package/components/menubar.css +4 -1
  23. package/components/modes.css +22 -5
  24. package/components/navigation-bar.css +3 -5
  25. package/components/navigation-rail.css +5 -7
  26. package/components/popover.css +50 -0
  27. package/components/progress.css +5 -0
  28. package/components/range-slider.css +3 -2
  29. package/components/search-bar.css +12 -2
  30. package/components/segmented-button.css +2 -28
  31. package/components/select.css +99 -14
  32. package/components/splitter.css +4 -1
  33. package/components/switch.css +9 -1
  34. package/components/textarea.css +7 -3
  35. package/components/toolbar.css +2 -1
  36. package/components/tooltip.css +12 -0
  37. package/components/transfer-list.css +5 -1
  38. package/components/virtual-scroller.css +7 -0
  39. package/components.css +6 -1
  40. package/css-components/button.css +66 -0
  41. package/css-components/card.css +14 -0
  42. package/css-components/chip-group.css +9 -0
  43. package/css-components/chip.css +80 -0
  44. package/css-components/disclosure.css +25 -0
  45. package/css-components/list.css +34 -0
  46. package/css-components/select.css +20 -0
  47. package/css-components/textarea.css +22 -0
  48. package/css-components.css +31 -0
  49. package/defaults.css +189 -3
  50. package/native.css +258 -0
  51. package/package.json +20 -6
  52. package/state-layer.css +5 -1
@@ -1,5 +1,9 @@
1
1
  @layer rc-theme-material.components {
2
- :where(.rc-theme-material, :host(.rc-theme-material)) rc-adaptive-menu {
2
+ /*
3
+ * Declared on the theme root rather than on rc-adaptive-menu so menus
4
+ * rendered inside other shadow roots inherit the same values.
5
+ */
6
+ :where(.rc-theme-material, :host(.rc-theme-material)) {
3
7
  --rc-adaptive-menu-gap: 0;
4
8
  --rc-adaptive-menu-trigger-inline-size: 2rem;
5
9
  --rc-adaptive-menu-trigger-block-size: 2.5rem;
@@ -19,42 +23,20 @@
19
23
  --rc-adaptive-menu-trigger-radius: var(--md-sys-shape-corner-full, 9999px);
20
24
  --rc-adaptive-menu-trigger-background: transparent;
21
25
  --rc-adaptive-menu-trigger-color: var(--md-sys-color-on-surface-variant, ButtonText);
26
+ --rc-adaptive-menu-trigger-hover-background: color-mix(
27
+ in srgb,
28
+ var(--md-sys-color-on-surface-variant, CanvasText)
29
+ calc(var(--md-sys-state-hover-state-layer-opacity, 0.08) * 100%),
30
+ transparent
31
+ );
22
32
  --rc-adaptive-menu-icon-size: 1.5rem;
23
33
  --rc-adaptive-menu-popup-min-inline-size: 7rem;
24
- --rc-adaptive-menu-popup-padding-block: 0.5rem;
25
- --rc-adaptive-menu-popup-border: 0;
26
- --rc-adaptive-menu-popup-radius: var(
27
- --md-menu-container-shape,
28
- var(--md-sys-shape-corner-extra-small, 0.25rem)
29
- );
30
- --rc-adaptive-menu-popup-background: var(
31
- --md-menu-container-color,
32
- var(--md-sys-color-surface-container, Canvas)
33
- );
34
- --rc-adaptive-menu-popup-color: var(--md-sys-color-on-surface, CanvasText);
35
- --rc-adaptive-menu-popup-shadow: 0 1px 2px rgb(0 0 0 / 30%), 0 2px 6px 2px rgb(0 0 0 / 15%);
36
34
  --rc-adaptive-menu-item-min-block-size: 3rem;
37
35
  --rc-adaptive-menu-item-padding-block: 0;
38
36
  --rc-adaptive-menu-item-padding-inline: 0.75rem;
39
37
  --rc-adaptive-menu-item-gap: 0.75rem;
40
38
  }
41
39
 
42
- :where(.rc-theme-material, :host(.rc-theme-material))
43
- rc-adaptive-menu::part(overflow-trigger):hover {
44
- background: color-mix(
45
- in srgb,
46
- var(--md-sys-color-on-surface-variant, CanvasText)
47
- calc(var(--md-sys-state-hover-state-layer-opacity, 0.08) * 100%),
48
- transparent
49
- );
50
- }
51
-
52
- :where(.rc-theme-material, :host(.rc-theme-material))
53
- rc-adaptive-menu::part(overflow-trigger):focus-visible {
54
- outline: var(--rc-focus-ring, 2px solid Highlight);
55
- outline-offset: var(--rc-focus-ring-offset, 2px);
56
- }
57
-
58
40
  :where(.rc-theme-material, :host(.rc-theme-material))
59
41
  rc-adaptive-menu
60
42
  > [data-rc-action-promoted]:has([data-rc-menu-leading])
@@ -82,81 +64,60 @@
82
64
  > [slot='indicator'] {
83
65
  display: none;
84
66
  }
67
+ }
85
68
 
86
- :where(.rc-theme-material, :host(.rc-theme-material))
87
- rc-adaptive-menu
88
- > [data-rc-action-overflowed] {
89
- inline-size: 100%;
90
- color: var(--md-sys-color-on-surface, CanvasText);
91
- }
92
-
69
+ /*
70
+ * An action rc-adaptive-menu moves into its overflow renders as a menu row.
71
+ * rc-adaptive-menu maps the action's own tokens onto its item tokens in rc-base,
72
+ * which sits below every theme layer, so this layer repeats the mapping above the
73
+ * theme's button and menu-button variants (filled, tonal, icon-only sizes, and so
74
+ * on) that would otherwise restyle the row as a standalone control.
75
+ */
76
+ @layer rc-theme-material.overrides {
93
77
  :where(.rc-theme-material, :host(.rc-theme-material))
94
78
  rc-adaptive-menu
95
79
  > rc-button[data-rc-action-overflowed] {
96
- display: block;
97
- min-inline-size: 100%;
98
- min-block-size: 0;
99
- --rc-button-block-size: 3rem;
80
+ --rc-button-block-size: var(--rc-adaptive-menu-item-min-block-size, 2.5em);
100
81
  --rc-button-icon-size: 100%;
101
82
  --rc-button-touch-target-inline-size: 100%;
102
- --rc-button-touch-target-block-size: 3rem;
103
- --rc-button-padding-inline: 0.75rem;
104
- --rc-button-padding-block: 0;
83
+ --rc-button-touch-target-block-size: var(--rc-adaptive-menu-item-min-block-size, 2.5em);
84
+ --rc-button-padding-inline: var(
85
+ --rc-adaptive-menu-item-padding-inline,
86
+ var(--rc-item-padding-inline, 0.75em)
87
+ );
88
+ --rc-button-padding-block: var(
89
+ --rc-adaptive-menu-item-padding-block,
90
+ var(--rc-item-padding-block, 0.3em)
91
+ );
105
92
  --rc-button-radius: 0;
106
93
  --rc-button-bg: transparent;
107
- --rc-button-color: var(--md-sys-color-on-surface, CanvasText);
94
+ --rc-button-color: currentColor;
108
95
  --rc-button-border: 0;
109
- --rc-button-state-layer-bg: var(--md-sys-color-on-surface, CanvasText);
110
- --rc-button-progress-color: var(--md-sys-color-on-surface, CanvasText);
96
+ --rc-button-state-layer-bg: currentColor;
97
+ --rc-button-progress-color: currentColor;
111
98
  }
112
99
 
113
100
  :where(.rc-theme-material, :host(.rc-theme-material))
114
101
  rc-adaptive-menu
115
102
  > rc-menu-button[data-rc-action-overflowed] {
116
- display: block;
117
- min-inline-size: 100%;
118
- min-block-size: 0;
119
- --rc-menu-button-trigger-block-size: 3rem;
103
+ --rc-menu-button-trigger-block-size: var(--rc-adaptive-menu-item-min-block-size, 2.5em);
120
104
  --rc-menu-button-icon-size: 100%;
121
105
  --rc-menu-button-touch-target-inline-size: 100%;
122
- --rc-menu-button-touch-target-block-size: 3rem;
123
- --rc-menu-button-trigger-padding-block: 0;
124
- --rc-menu-button-trigger-padding-inline: 0.75rem;
125
- --rc-menu-button-trigger-gap: 0.75rem;
106
+ --rc-menu-button-touch-target-block-size: var(--rc-adaptive-menu-item-min-block-size, 2.5em);
107
+ --rc-menu-button-trigger-padding-block: var(
108
+ --rc-adaptive-menu-item-padding-block,
109
+ var(--rc-item-padding-block, 0.3em)
110
+ );
111
+ --rc-menu-button-trigger-padding-inline: var(
112
+ --rc-adaptive-menu-item-padding-inline,
113
+ var(--rc-item-padding-inline, 0.75em)
114
+ );
115
+ --rc-menu-button-trigger-gap: var(--rc-adaptive-menu-item-gap, var(--rc-item-gap, 0.5em));
126
116
  --rc-menu-button-trigger-radius: 0;
127
117
  --rc-menu-button-trigger-border: 0;
128
118
  --rc-menu-button-trigger-background: transparent;
129
- --rc-menu-button-trigger-color: var(--md-sys-color-on-surface, CanvasText);
130
- --rc-menu-button-trigger-hover-color: var(--md-sys-color-on-surface, CanvasText);
131
- --rc-menu-button-trigger-open-color: var(--md-sys-color-on-surface, CanvasText);
132
- }
133
-
134
- :where(.rc-theme-material, :host(.rc-theme-material))
135
- rc-adaptive-menu
136
- > rc-menu-button[data-rc-action-overflowed]
137
- > [slot='trigger'] {
138
- justify-content: flex-start;
139
- inline-size: 100%;
140
- min-inline-size: 100%;
141
- padding-inline: 0.75rem;
142
- }
143
-
144
- :where(.rc-theme-material, :host(.rc-theme-material))
145
- rc-adaptive-menu
146
- > [data-rc-action-overflowed]
147
- [data-rc-menu-label] {
148
- font: var(--md-sys-typescale-body-large-weight, 400)
149
- var(--md-sys-typescale-body-large-size, 1rem) /
150
- var(--md-sys-typescale-body-large-line-height, 1.5rem)
151
- var(--md-sys-typescale-body-large-font, inherit);
152
- letter-spacing: var(--md-sys-typescale-body-large-tracking, 0.03125rem);
153
- }
154
-
155
- :where(.rc-theme-material, :host(.rc-theme-material))
156
- rc-adaptive-menu
157
- > [data-rc-action-overflowed]
158
- [data-rc-menu-leading] {
159
- font-size: 1.5rem;
160
- line-height: 1.5rem;
119
+ --rc-menu-button-trigger-color: currentColor;
120
+ --rc-menu-button-trigger-hover-color: currentColor;
121
+ --rc-menu-button-trigger-open-color: currentColor;
161
122
  }
162
123
  }
@@ -3,8 +3,10 @@
3
3
  box-shadow: var(--rc-shadow-level0, none);
4
4
  font-family: var(--md-sys-typescale-title-large-font, inherit);
5
5
  transition:
6
- box-shadow 200ms ease,
7
- translate 200ms ease;
6
+ box-shadow var(--rc-motion-effects-duration-default, 200ms)
7
+ var(--rc-motion-effects-easing-default, ease),
8
+ translate var(--rc-motion-spatial-duration-default, 400ms)
9
+ var(--rc-motion-spatial-easing-default, ease);
8
10
  }
9
11
 
10
12
  :where(.rc-theme-material, :host(.rc-theme-material)) rc-app-bar[data-scrolled] {
@@ -8,7 +8,7 @@
8
8
  );
9
9
  --rc-bottom-sheet-handle-radius: var(--md-sys-shape-corner-full, 999px);
10
10
  --rc-bottom-sheet-handle-target-block-size: 3rem;
11
- --rc-bottom-sheet-snap-duration: var(--rc-motion-spatial-duration-default, 500ms);
11
+ --rc-bottom-sheet-snap-duration: var(--rc-motion-spatial-duration-fast, 300ms);
12
12
  --rc-bottom-sheet-snap-easing: var(
13
13
  --rc-motion-spatial-easing-default,
14
14
  cubic-bezier(0.2, 0, 0, 1)
@@ -69,7 +69,7 @@
69
69
  [data-rc-bottom-sheet-handle]::before {
70
70
  content: '';
71
71
  position: absolute;
72
- inset-block-start: 50%;
72
+ inset-block-start: var(--rc-bottom-sheet-handle-offset, 50%);
73
73
  inset-inline-start: 50%;
74
74
  inline-size: var(--rc-bottom-sheet-handle-inline-size, 2rem);
75
75
  block-size: var(--rc-bottom-sheet-handle-block-size, 0.25rem);
@@ -16,6 +16,7 @@
16
16
  --rc-button-hover-state-layer-opacity: var(--md-sys-state-hover-state-layer-opacity, 0.08);
17
17
  --rc-button-focus-state-layer-opacity: var(--md-sys-state-focus-state-layer-opacity, 0.12);
18
18
  --rc-button-pressed-state-layer-opacity: var(--md-sys-state-pressed-state-layer-opacity, 0.12);
19
+ --rc-button-state-layer-duration: var(--rc-motion-effects-duration-fast, 150ms);
19
20
  --rc-button-state-layer-easing: var(
20
21
  --md-sys-motion-easing-standard,
21
22
  cubic-bezier(0.2, 0, 0, 1)
@@ -23,7 +24,7 @@
23
24
  --_rc-button-ripple-enabled: 1;
24
25
  --_rc-button-ripple-color: var(--md-sys-color-on-primary, currentColor);
25
26
  --_rc-button-ripple-opacity: var(--md-sys-state-pressed-state-layer-opacity, 0.12);
26
- --_rc-button-ripple-duration: var(--md-sys-motion-duration-long1, 450ms);
27
+ --_rc-button-ripple-duration: var(--rc-motion-spatial-duration-slow, 500ms);
27
28
  --_rc-button-ripple-easing: var(
28
29
  --md-sys-motion-easing-emphasized-decelerate,
29
30
  cubic-bezier(0.05, 0.7, 0.1, 1)
@@ -21,6 +21,8 @@
21
21
  --rc-card-state-layer-bg: var(--md-sys-color-on-surface, currentColor);
22
22
  --rc-card-hover-state-layer-opacity: var(--md-sys-state-hover-state-layer-opacity, 0.08);
23
23
  --rc-card-pressed-state-layer-opacity: var(--md-sys-state-pressed-state-layer-opacity, 0.12);
24
+ --rc-card-state-layer-duration: var(--rc-motion-effects-duration-fast, 150ms);
25
+ --rc-card-state-layer-easing: var(--md-sys-motion-easing-standard, ease);
24
26
  }
25
27
 
26
28
  :where(.rc-theme-material, :host(.rc-theme-material)) rc-card[selected] {
@@ -3,11 +3,17 @@
3
3
  --rc-chip-block-size: 2rem;
4
4
  --rc-chip-gap: 0px;
5
5
  --rc-chip-padding-inline: 1rem;
6
+ --rc-chip-padding-inline-start: var(--rc-chip-padding-inline);
7
+ --rc-chip-padding-inline-end: var(--rc-chip-padding-inline);
6
8
  --rc-chip-border: 1px solid var(--md-sys-color-outline, ButtonBorder);
7
9
  --rc-chip-radius: var(--md-sys-shape-corner-small, 0.5rem);
8
10
  --rc-chip-bg: var(--md-sys-color-surface-container-low, ButtonFace);
9
11
  --rc-chip-color: var(--md-sys-color-on-surface-variant, ButtonText);
10
- --rc-chip-font: inherit;
12
+ --rc-chip-font: var(--md-sys-typescale-label-large-weight, 500)
13
+ var(--md-sys-typescale-label-large-size, 0.875rem) /
14
+ var(--md-sys-typescale-label-large-line-height, 1.25rem)
15
+ var(--md-sys-typescale-label-large-font, inherit);
16
+ --rc-chip-padding-block: 0;
11
17
  --rc-chip-text-decoration: none;
12
18
  --rc-chip-selected-border-color: transparent;
13
19
  --rc-chip-selected-bg: var(--md-sys-color-secondary-container, Highlight);
@@ -25,4 +31,9 @@
25
31
  --rc-chip-remove-target-size: 1.5rem;
26
32
  --rc-chip-remove-offset-inline: 0.25rem;
27
33
  }
34
+
35
+ :where(.rc-theme-material, :host(.rc-theme-material)) rc-chip:has([data-rc-chip-icon]) {
36
+ --rc-chip-gap: 0.5rem;
37
+ --rc-chip-padding-inline-start: 0.5rem;
38
+ }
28
39
  }
@@ -2,9 +2,12 @@
2
2
  :where(.rc-theme-material, :host(.rc-theme-material)) rc-combobox::part(anchor) {
3
3
  box-sizing: border-box;
4
4
  transition:
5
- border-color 150ms ease,
6
- box-shadow 150ms ease,
7
- background-color 150ms ease;
5
+ border-color var(--rc-motion-effects-duration-fast, 150ms)
6
+ var(--rc-motion-effects-easing-fast, ease),
7
+ box-shadow var(--rc-motion-effects-duration-fast, 150ms)
8
+ var(--rc-motion-effects-easing-fast, ease),
9
+ background-color var(--rc-motion-effects-duration-fast, 150ms)
10
+ var(--rc-motion-effects-easing-fast, ease);
8
11
  }
9
12
 
10
13
  :where(.rc-theme-material, :host(.rc-theme-material)) rc-combobox::part(anchor):hover {
@@ -35,6 +38,20 @@
35
38
  --rc-chip-remove-target-size: 1.5rem;
36
39
  }
37
40
 
41
+ /*
42
+ * Dense chips fit one chip row on the field's single input line, so a
43
+ * populated field keeps the unified 56px height. The touch target is
44
+ * unchanged.
45
+ */
46
+ :where(.rc-theme-material, :host(.rc-theme-material))
47
+ rc-combobox.rc-combobox--dense::part(chips) {
48
+ --rc-chip-block-size: 1.5rem;
49
+ }
50
+
51
+ :where(.rc-theme-material, :host(.rc-theme-material)) rc-combobox.rc-combobox--dense::part(chip) {
52
+ min-block-size: 1.5rem;
53
+ }
54
+
38
55
  :where(.rc-theme-material, :host(.rc-theme-material)) rc-combobox::part(toggle) {
39
56
  border-radius: var(--md-sys-shape-corner-full, 999px);
40
57
  color: var(
@@ -42,8 +59,9 @@
42
59
  var(--md-sys-color-on-surface-variant, CanvasText)
43
60
  );
44
61
  transition:
45
- color 150ms ease,
46
- background-color 150ms ease;
62
+ color var(--rc-motion-effects-duration-fast, 150ms) var(--rc-motion-effects-easing-fast, ease),
63
+ background-color var(--rc-motion-effects-duration-fast, 150ms)
64
+ var(--rc-motion-effects-easing-fast, ease);
47
65
  }
48
66
 
49
67
  :where(.rc-theme-material, :host(.rc-theme-material)) rc-combobox::part(toggle):hover {
@@ -66,26 +84,55 @@
66
84
  color: var(--md-sys-color-on-surface-variant, CanvasText);
67
85
  }
68
86
 
87
+ :where(.rc-theme-material, :host(.rc-theme-material))
88
+ rc-combobox[popup-mode='dialog']::part(dialog-search) {
89
+ color: var(--md-sys-color-on-surface-variant, CanvasText);
90
+ font-family: var(--md-sys-typescale-label-medium-font, inherit);
91
+ font-size: var(--md-sys-typescale-label-medium-size, 0.75rem);
92
+ line-height: var(--md-sys-typescale-label-medium-line-height, 1rem);
93
+ }
94
+
95
+ :where(.rc-theme-material, :host(.rc-theme-material))
96
+ rc-combobox[popup-mode='dialog']::part(dialog-input) {
97
+ min-block-size: 3.5rem;
98
+ padding-inline: 1rem;
99
+ border: 1px solid var(--md-sys-color-outline, ButtonBorder);
100
+ border-radius: var(--md-sys-shape-corner-extra-small, 0.25rem);
101
+ background: transparent;
102
+ color: var(--md-sys-color-on-surface, FieldText);
103
+ font-family: var(--md-sys-typescale-body-large-font, inherit);
104
+ font-size: var(--md-sys-typescale-body-large-size, 1rem);
105
+ line-height: var(--md-sys-typescale-body-large-line-height, 1.5rem);
106
+
107
+ &:focus-visible {
108
+ border-color: var(--md-sys-color-primary, Highlight);
109
+ box-shadow: inset 0 0 0 1px var(--md-sys-color-primary, Highlight);
110
+ }
111
+ }
112
+
113
+ :where(.rc-theme-material, :host(.rc-theme-material))
114
+ rc-combobox[popup-mode='dialog']::part(dialog-listbox) {
115
+ min-block-size: 0;
116
+ padding-block: 0;
117
+ border-radius: 0;
118
+ background: transparent;
119
+ }
120
+
69
121
  /*
70
122
  * Propagate Material styles to the embedded rc-listbox host. rc-listbox renders
71
123
  * options into its own light DOM inside rc-combobox's shadow root, so inherited
72
124
  * custom properties are the stable styling contract for option rows.
73
125
  */
74
126
  :where(.rc-theme-material, :host(.rc-theme-material)) rc-combobox::part(listbox) {
75
- background: var(--md-menu-container-color, var(--md-sys-color-surface-container, Canvas));
76
- color: var(--md-sys-color-on-surface, CanvasText);
77
- font-family: var(--md-sys-typescale-body-large-font, inherit);
78
- font-size: var(--md-sys-typescale-body-large-size, 1rem);
79
- line-height: var(--md-sys-typescale-body-large-line-height, 1.5rem);
80
- padding-block: 0.5rem;
81
- border-radius: var(--md-menu-container-shape, var(--md-sys-shape-corner-extra-small, 0.25rem));
82
-
83
127
  /* Option sizing */
84
128
  --rc-listbox-option-gap: var(--rc-list-item-gap, 0.75rem);
85
129
  --rc-listbox-option-min-block-size: 3rem;
86
130
  --rc-listbox-option-padding-block: 0;
87
131
  --rc-listbox-option-padding-inline: 0.75rem;
88
- --rc-listbox-option-transition: background-color 150ms ease, color 150ms ease;
132
+ --rc-listbox-option-transition:
133
+ background-color var(--rc-motion-effects-duration-fast, 150ms)
134
+ var(--rc-motion-effects-easing-fast, ease),
135
+ color var(--rc-motion-effects-duration-fast, 150ms) var(--rc-motion-effects-easing-fast, ease);
89
136
 
90
137
  /* M3 hover state layer (8% on-surface) instead of secondary-container */
91
138
  --rc-highlight: color-mix(in srgb, var(--md-sys-color-on-surface, CanvasText) 8%, transparent);
@@ -1,32 +1,33 @@
1
1
  @layer rc-theme-material.components {
2
- :where(.rc-theme-material, :host(.rc-theme-material)) rc-dialog > dialog {
3
- max-inline-size: min(35rem, calc(100vw - 3rem));
4
- /* A native <dialog>'s own default max-block-size/overflow:auto is what
5
- * would otherwise constrain a tall dialog's height, but Chromium does
6
- * not reliably clip a scrolling element's own border-radius once it
7
- * actually needs to scroll (confirmed: a short dialog renders correctly
8
- * rounded on every edge; the same dialog forced to overflow its
9
- * available height loses the radius on whichever edge sits at the
10
- * scroll boundary). Setting an explicit max-block-size plus
11
- * overflow: hidden here replaces that reliance: this outer surface
12
- * never itself scrolls, so its own corners always clip correctly, and
13
- * a scrollable dialog instead scrolls a dedicated inner region. */
14
- max-block-size: calc(100dvh - 3rem);
15
- overflow: hidden;
16
- padding: 1.5rem;
17
- border: 0;
18
- border-radius: var(--md-sys-shape-corner-extra-large, 1.75rem);
19
- background: var(--md-sys-color-surface-container-high, Canvas);
20
- color: var(--md-sys-color-on-surface, CanvasText);
21
- box-shadow: var(--rc-shadow-level3, var(--rc-shadow, none));
22
- font-family: var(--md-sys-typescale-body-medium-font, inherit);
2
+ /*
3
+ * Maps Material tokens onto the public rc-dialog properties. The surface and
4
+ * the fullscreen geometry are drawn by the component's own light-DOM base
5
+ * layer, including the explicit block bound and overflow that keep a tall
6
+ * dialog's corners clipping correctly in Chromium.
7
+ */
8
+ :where(.rc-theme-material, :host(.rc-theme-material)) rc-dialog {
9
+ --rc-dialog-min-inline-size: min(17.5rem, calc(100vw - 3rem));
10
+ --rc-dialog-max-inline-size: min(35rem, calc(100vw - 3rem));
11
+ --rc-dialog-max-block-size: calc(100dvh - 3rem);
12
+ --rc-dialog-padding: 1.5rem;
13
+ --rc-dialog-border: 0;
14
+ --rc-dialog-radius: var(--md-sys-shape-corner-extra-large, 1.75rem);
15
+ --rc-dialog-background: var(--md-sys-color-surface-container-high, Canvas);
16
+ --rc-dialog-color: var(--md-sys-color-on-surface, CanvasText);
17
+ --rc-dialog-shadow: var(--rc-shadow-level3, var(--rc-shadow, none));
18
+ --rc-dialog-scrim: color-mix(in srgb, var(--md-sys-color-scrim, #000) 32%, transparent);
19
+
20
+ /* Material 3 full-screen dialog: the page surface, like its top app bar. */
21
+ --rc-dialog-fullscreen-background: var(--md-sys-color-surface, Canvas);
22
+
23
+ /* Material 3 modal side sheet: a low container at level 1, rounded on its leading edge. */
24
+ --rc-dialog-side-background: var(--md-sys-color-surface-container-low, Canvas);
25
+ --rc-dialog-side-radius: var(--md-sys-shape-corner-large, 1rem);
26
+ --rc-dialog-side-shadow: var(--rc-shadow-level1, var(--rc-shadow, none));
23
27
  }
24
28
 
25
- :where(.rc-theme-material, :host(.rc-theme-material)) rc-dialog > dialog::backdrop {
26
- background: var(
27
- --rc-dialog-scrim,
28
- color-mix(in srgb, var(--md-sys-color-scrim, #000) 32%, transparent)
29
- );
29
+ :where(.rc-theme-material, :host(.rc-theme-material)) rc-dialog > dialog {
30
+ font-family: var(--md-sys-typescale-body-medium-font, inherit);
30
31
  }
31
32
 
32
33
  /*