@rcarls/rc-theme-material 0.3.1 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -34,6 +34,16 @@ Selective component styles are also exported:
34
34
  @import '@rcarls/rc-theme-material/components/menu.css';
35
35
  ```
36
36
 
37
+ The state-layer utility is included by `components.css` and `theme.css`, and is
38
+ also exported separately for selective imports:
39
+
40
+ ```css
41
+ @import '@rcarls/rc-theme-material/state-layer.css';
42
+ ```
43
+
44
+ Apply `.rc-state-layer` to interactive elements that already define their own
45
+ border radius when you want a CSS-only Material state layer.
46
+
37
47
  Theme styles are scoped under a `.rc-theme-material` class.
38
48
 
39
49
  ```html
@@ -53,13 +63,18 @@ bridge and component style layers:
53
63
 
54
64
  ## Theming scope
55
65
 
56
- The full style layer will style native controls when their intent is established
57
- by composition (e.g., menu items, button triggers, etc.). Otherwise, It never styles
58
- unrelated application controls and tries to follow design token conventions.
66
+ The full style layer styles native controls when their intent is established by
67
+ composition, for example menu items and button triggers. Otherwise, it does not style
68
+ unrelated application controls and follows design-token conventions.
59
69
 
60
70
  Fonts and icons are not bundled; websites and applications may provide
61
71
  [Roboto](https://fonts.google.com/specimen/Roboto) and
62
72
  [Material Symbols](https://fonts.google.com/icons) through other means.
73
+ Tag general icon-font markup with `data-rc-icon`; component-specific markers
74
+ such as `data-rc-button-icon` and `data-rc-navigation-icon` opt in
75
+ automatically. The shared `--rc-icon-font-size` and
76
+ `--rc-icon-font-line-height` tokens keep glyph geometry consistent and can be
77
+ overridden at the theme boundary or on one component.
63
78
 
64
79
  [Material Web](material-web.dev) token names are used where a corresponding component
65
80
  exists. Search bar and top app bar mappings follow Material 3 token terminology and
package/bridge.css CHANGED
@@ -37,11 +37,80 @@
37
37
  --rc-font-family: var(--md-sys-typescale-body-medium-font, inherit);
38
38
  --rc-font-size: var(--md-sys-typescale-body-medium-size, 0.875rem);
39
39
  --rc-line-height: var(--md-sys-typescale-body-medium-line-height, 1.25rem);
40
+ --rc-icon-font-size: 1.5rem;
41
+ --rc-icon-font-line-height: var(--rc-icon-font-size);
40
42
  --rc-control-block-size: 2.5rem;
41
43
  --rc-control-padding-block: 0.5rem;
42
44
  --rc-control-padding-inline: 1rem;
43
45
  --rc-control-gap: 0.5rem;
44
46
  --rc-control-radius: var(--md-sys-shape-corner-full, 1.25rem);
47
+ --rc-list-item-gap: 1rem;
48
+ --rc-list-item-min-block-size: 3rem;
49
+ --rc-list-item-padding-block: 0;
50
+ --rc-list-item-padding-inline: 1rem;
51
+ --rc-list-item-selected-bg: var(--md-sys-color-secondary-container, Highlight);
52
+ --rc-list-item-selected-color: var(--md-sys-color-on-secondary-container, HighlightText);
53
+ --rc-button-bg: var(--md-sys-color-primary, ButtonFace);
54
+ --rc-button-color: var(--md-sys-color-on-primary, ButtonText);
55
+ --rc-button-block-size: var(--rc-control-block-size);
56
+ --rc-button-radius: var(--rc-control-radius);
57
+ --rc-button-border: 0;
58
+ --rc-button-padding-block: 0;
59
+ --rc-button-padding-inline: 1.5rem;
60
+ --rc-button-gap: var(--rc-control-gap);
61
+ --rc-button-font: 500 var(--md-sys-typescale-label-large-size, 0.875rem) /
62
+ var(--md-sys-typescale-label-large-line-height, 1.25rem) var(--rc-font-family);
63
+ --rc-button-hover-state-layer-opacity: 0.08;
64
+ --rc-button-focus-state-layer-opacity: 0.12;
65
+ --rc-button-pressed-state-layer-opacity: 0.12;
66
+ --rc-card-bg: var(--md-sys-color-surface-container-low, Canvas);
67
+ --rc-card-color: var(--md-sys-color-on-surface, CanvasText);
68
+ --rc-card-radius: var(--md-sys-shape-corner-medium, 0.75rem);
69
+ --rc-card-padding-block: 1rem;
70
+ --rc-card-padding-inline: 1rem;
71
+ --rc-card-actions-gap: 0.5rem;
72
+ --rc-card-hover-state-layer-opacity: 0.08;
73
+ --rc-card-pressed-state-layer-opacity: 0.12;
74
+ --rc-chip-block-size: 2rem;
75
+ --rc-chip-gap: 0px;
76
+ --rc-chip-padding-inline: 1rem;
77
+ --rc-chip-border: 1px solid var(--md-sys-color-outline, ButtonBorder);
78
+ --rc-chip-radius: var(--md-sys-shape-corner-small, 0.5rem);
79
+ --rc-chip-bg: var(--md-sys-color-surface-container-low, ButtonFace);
80
+ --rc-chip-color: var(--md-sys-color-on-surface-variant, ButtonText);
81
+ --rc-chip-font: inherit;
82
+ --rc-chip-text-decoration: none;
83
+ --rc-chip-selected-bg: var(--md-sys-color-secondary-container, Highlight);
84
+ --rc-chip-state-layer-color: var(--md-sys-color-on-surface-variant, CanvasText);
85
+ --rc-chip-selected-state-layer-color: var(--md-sys-color-on-secondary-container, CanvasText);
86
+ --rc-chip-hover-state-layer-opacity: var(--md-sys-state-hover-state-layer-opacity, 0.08);
87
+ --rc-chip-focus-state-layer-opacity: var(--md-sys-state-focus-state-layer-opacity, 0.12);
88
+ --rc-chip-pressed-state-layer-opacity: var(--md-sys-state-pressed-state-layer-opacity, 0.12);
89
+ --rc-chip-state-layer-transition-duration: var(--rc-motion-effects-duration-fast, 150ms);
90
+ --rc-chip-state-layer-transition-easing: var(--rc-motion-effects-easing-fast, ease-out);
91
+ --rc-switch-native-appearance: none;
92
+ --rc-switch-native-inline-size: 100%;
93
+ --rc-switch-native-block-size: 100%;
94
+ --rc-switch-native-margin: 0;
95
+ --rc-switch-native-opacity: 0;
96
+ --rc-switch-decoration-display: block;
97
+ --rc-switch-icon-display: grid;
98
+ --rc-switch-track-inline-size: 3.25rem;
99
+ --rc-switch-track-block-size: 2rem;
100
+ --rc-switch-selected-track-bg: var(--md-sys-color-primary, Highlight);
101
+ --rc-switch-thumb-translate: 1.125rem;
102
+ --rc-segmented-button-segment-min-block-size: 2.5rem;
103
+ --rc-segmented-button-selected-bg: var(--md-sys-color-secondary-container, Highlight);
104
+ --rc-snackbar-bg: var(--md-sys-color-inverse-surface, CanvasText);
105
+ --rc-snackbar-color: var(--md-sys-color-inverse-on-surface, Canvas);
106
+ --rc-snackbar-border: 0;
107
+ --rc-snackbar-action-color: var(--md-sys-color-inverse-primary, LinkText);
108
+ --rc-snackbar-action-border: 0;
109
+ --rc-snackbar-action-radius: 9999px;
110
+ --rc-snackbar-action-padding-block: 0.5rem;
111
+ --rc-snackbar-action-padding-inline: 0.75rem;
112
+ --rc-snackbar-action-bg: transparent;
113
+ --rc-snackbar-action-font: inherit;
45
114
  --rc-toolbar-radius: var(--md-sys-shape-corner-large, 1rem);
46
115
  --rc-toolbar-vertical-radius: 0;
47
116
  --rc-item-padding-block: 0.75rem;
@@ -52,7 +121,30 @@
52
121
  --rc-focus-ring: 2px solid var(--md-sys-color-primary, Highlight);
53
122
  --rc-focus-ring-offset: 2px;
54
123
  --rc-disabled-opacity: var(--md-sys-state-disabled-state-layer-opacity, 0.38);
55
- --rc-motion-duration: 200ms;
124
+ --rc-motion-effects-duration-fast: var(--md-sys-motion-duration-150, 150ms);
125
+ --rc-motion-effects-easing-fast: cubic-bezier(
126
+ var(--md-sys-motion-easing-standard-x0, 0.2),
127
+ var(--md-sys-motion-easing-standard-y0, 0),
128
+ var(--md-sys-motion-easing-standard-x1, 0),
129
+ var(--md-sys-motion-easing-standard-y1, 1)
130
+ );
131
+ --rc-motion-effects-duration-default: var(--md-sys-motion-duration-200, 200ms);
132
+ --rc-motion-effects-easing-default: var(--rc-motion-effects-easing-fast);
133
+ --rc-motion-effects-duration-slow: var(--md-sys-motion-duration-300, 300ms);
134
+ --rc-motion-effects-easing-slow: var(--rc-motion-effects-easing-fast);
135
+ --rc-motion-spatial-duration-fast: var(--md-sys-motion-duration-350, 350ms);
136
+ --rc-motion-spatial-easing-fast: cubic-bezier(
137
+ var(--md-sys-motion-easing-emphasized-x0, 0.2),
138
+ var(--md-sys-motion-easing-emphasized-y0, 0),
139
+ var(--md-sys-motion-easing-emphasized-x1, 0),
140
+ var(--md-sys-motion-easing-emphasized-y1, 1)
141
+ );
142
+ --rc-motion-spatial-duration-default: var(--md-sys-motion-duration-500, 500ms);
143
+ --rc-motion-spatial-easing-default: var(--rc-motion-spatial-easing-fast);
144
+ --rc-motion-spatial-duration-slow: var(--md-sys-motion-duration-700, 700ms);
145
+ --rc-motion-spatial-easing-slow: var(--rc-motion-spatial-easing-fast);
146
+ --rc-motion-duration: var(--rc-motion-effects-duration-default);
147
+ --rc-dialog-scrim: color-mix(in srgb, var(--md-sys-color-scrim, #000) 32%, transparent);
56
148
  }
57
149
 
58
150
  .rc-theme-material rc-select,
@@ -91,10 +183,10 @@
91
183
 
92
184
  .rc-theme-material rc-listbox,
93
185
  :host(.rc-theme-material) rc-listbox {
94
- --rc-listbox-option-gap: 0.75rem;
95
- --rc-listbox-option-min-block-size: 3rem;
96
- --rc-listbox-option-padding-block: 0;
97
- --rc-listbox-option-padding-inline: 0.75rem;
186
+ --rc-listbox-option-gap: var(--rc-list-item-gap, 0.75rem);
187
+ --rc-listbox-option-min-block-size: var(--rc-list-item-min-block-size, 3rem);
188
+ --rc-listbox-option-padding-block: var(--rc-list-item-padding-block, 0);
189
+ --rc-listbox-option-padding-inline: var(--rc-list-item-padding-inline, 0.75rem);
98
190
  --rc-listbox-option-transition: background-color 150ms ease, color 150ms ease;
99
191
  --rc-listbox-hover-bg: color-mix(
100
192
  in srgb,
@@ -108,8 +200,8 @@
108
200
  transparent
109
201
  );
110
202
  --rc-listbox-active-color: var(--md-sys-color-on-surface, CanvasText);
111
- --rc-listbox-selected-bg: var(--md-sys-color-secondary-container, Highlight);
112
- --rc-listbox-selected-color: var(--md-sys-color-on-secondary-container, HighlightText);
203
+ --rc-listbox-selected-bg: var(--rc-list-item-selected-bg, Highlight);
204
+ --rc-listbox-selected-color: var(--rc-list-item-selected-color, HighlightText);
113
205
  --rc-listbox-disabled-opacity: var(--md-sys-state-disabled-state-layer-opacity, 0.38);
114
206
  }
115
207
 
@@ -252,6 +344,27 @@
252
344
  --md-search-bar-input-text-size,
253
345
  var(--md-sys-typescale-body-large-size, 1rem)
254
346
  );
347
+ --rc-search-bar-view-bg: var(
348
+ --md-search-view-container-color,
349
+ var(--md-sys-color-surface-container-high, Field)
350
+ );
351
+ --rc-search-bar-view-color: var(
352
+ --md-search-view-input-text-color,
353
+ var(--md-sys-color-on-surface, FieldText)
354
+ );
355
+ --rc-search-bar-view-radius: var(
356
+ --md-search-view-container-shape,
357
+ var(--md-sys-shape-corner-extra-large, 1.75rem)
358
+ );
359
+ --rc-search-bar-view-shadow: var(--rc-shadow-level3);
360
+ --rc-search-bar-view-padding-block: 0.5rem;
361
+ --rc-search-bar-suggestion-min-block-size: 3rem;
362
+ --rc-search-bar-suggestion-padding-inline: 1rem;
363
+ --rc-search-bar-suggestion-hover-bg: color-mix(
364
+ in srgb,
365
+ var(--md-sys-color-on-surface, CanvasText) 8%,
366
+ transparent
367
+ );
255
368
  }
256
369
 
257
370
  .rc-theme-material rc-app-bar,
@@ -315,8 +428,6 @@
315
428
  --rc-menu-check-color: var(--md-sys-color-primary, Highlight);
316
429
  --rc-menu-shortcut-size: var(--md-sys-typescale-label-large-size, 0.875rem);
317
430
  --rc-menu-shortcut-color: var(--md-sys-color-on-surface-variant, GrayText);
318
- --rc-menu-submenu-indicator-size: 1.25rem;
319
- --rc-menu-submenu-indicator-color: var(--md-sys-color-on-surface-variant, CanvasText);
320
431
  --rc-menu-disabled-color: var(--md-sys-color-on-surface, GrayText);
321
432
  --rc-menu-disabled-opacity: var(--md-sys-state-disabled-state-layer-opacity, 0.38);
322
433
  --rc-menu-separator-border: 1px solid var(--md-sys-color-outline-variant, ButtonBorder);
@@ -345,6 +456,8 @@
345
456
  --rc-menu-button-trigger-hover-color: var(--md-sys-color-primary, ButtonText);
346
457
  --rc-menu-button-trigger-open-background: var(--md-sys-color-secondary-container, ButtonFace);
347
458
  --rc-menu-button-trigger-open-color: var(--md-sys-color-on-secondary-container, ButtonText);
459
+ --rc-menu-button-indicator-size: 1.5rem;
460
+ --rc-menu-button-indicator-color: var(--md-sys-color-on-surface-variant, CanvasText);
348
461
  }
349
462
 
350
463
  .rc-theme-material rc-menubar,
@@ -411,18 +524,59 @@
411
524
  --rc-transfer-list-listbox-border: 1px solid var(--md-sys-color-outline-variant, ButtonBorder);
412
525
  }
413
526
 
527
+ .rc-theme-material rc-navigation-bar,
528
+ :host(.rc-theme-material) rc-navigation-bar {
529
+ --rc-navigation-bar-bg: var(--md-sys-color-surface-container, Canvas);
530
+ --rc-navigation-bar-color: var(--md-sys-color-on-surface-variant, CanvasText);
531
+ --rc-navigation-bar-item-text-decoration: none;
532
+ --rc-navigation-bar-indicator-bg: var(--md-sys-color-secondary-container, Highlight);
533
+ --rc-navigation-bar-indicator-border: 0;
534
+ }
535
+
536
+ .rc-theme-material rc-navigation-rail,
537
+ :host(.rc-theme-material) rc-navigation-rail {
538
+ --rc-navigation-rail-bg: var(--md-sys-color-surface, Canvas);
539
+ --rc-navigation-rail-color: var(--md-sys-color-on-surface-variant, CanvasText);
540
+ --rc-navigation-rail-item-text-decoration: none;
541
+ --rc-navigation-rail-indicator-bg: var(--md-sys-color-secondary-container, Highlight);
542
+ --rc-navigation-rail-indicator-border: 0;
543
+ --rc-navigation-rail-toggle-padding: 0;
544
+ --rc-navigation-rail-toggle-border: 0;
545
+ --rc-navigation-rail-toggle-font: inherit;
546
+ }
547
+ .rc-theme-material rc-navigation-rail > rc-fab[slot='header'],
548
+ :host(.rc-theme-material) rc-navigation-rail > rc-fab[slot='header'] {
549
+ --rc-fab-shadow: none;
550
+ --rc-fab-shadow-hover: none;
551
+ --rc-fab-shadow-active: none;
552
+ }
553
+
414
554
  .rc-theme-material rc-fab,
415
- :host(.rc-theme-material) rc-fab {
555
+ .rc-theme-material rc-fab-menu,
556
+ :host(.rc-theme-material) rc-fab,
557
+ :host(.rc-theme-material) rc-fab-menu {
416
558
  --rc-fab-bg: var(--md-fab-container-color, var(--md-sys-color-primary-container, ButtonFace));
417
559
  --rc-fab-color: var(--md-fab-icon-color, var(--md-sys-color-on-primary-container, ButtonText));
418
560
  --rc-fab-shadow: var(--rc-shadow-level3);
419
561
  --rc-fab-shadow-hover: var(--rc-shadow-level4);
420
562
  --rc-fab-shadow-active: var(--rc-shadow-level3);
421
563
  --rc-fab-radius: var(--md-fab-container-shape, var(--md-sys-shape-corner-large, 1rem));
422
- --rc-fab-font-family: var(--md-fab-label-text-font, var(--md-sys-typescale-label-large-font, inherit));
423
- --rc-fab-font-size: var(--md-fab-label-text-size, var(--md-sys-typescale-label-large-size, 0.875rem));
424
- --rc-fab-font-weight: var(--md-fab-label-text-weight, var(--md-sys-typescale-label-large-weight, 500));
425
- --rc-fab-letter-spacing: var(--md-fab-label-text-tracking, var(--md-sys-typescale-label-large-tracking, 0.00625em));
564
+ --rc-fab-font-family: var(
565
+ --md-fab-label-text-font,
566
+ var(--md-sys-typescale-label-large-font, inherit)
567
+ );
568
+ --rc-fab-font-size: var(
569
+ --md-fab-label-text-size,
570
+ var(--md-sys-typescale-label-large-size, 0.875rem)
571
+ );
572
+ --rc-fab-font-weight: var(
573
+ --md-fab-label-text-weight,
574
+ var(--md-sys-typescale-label-large-weight, 500)
575
+ );
576
+ --rc-fab-letter-spacing: var(
577
+ --md-fab-label-text-tracking,
578
+ var(--md-sys-typescale-label-large-tracking, 0.00625em)
579
+ );
426
580
  --rc-fab-focus-ring: var(--rc-focus-ring);
427
581
  --rc-fab-focus-ring-offset: var(--rc-focus-ring-offset);
428
582
  }
@@ -434,6 +588,23 @@
434
588
  --rc-splitter-handle-color: var(--md-sys-color-on-surface-variant, ButtonBorder);
435
589
  }
436
590
 
591
+ .rc-theme-material rc-bottom-sheet,
592
+ :host(.rc-theme-material) rc-bottom-sheet {
593
+ --rc-bottom-sheet-bg: var(--md-sys-color-surface, Canvas);
594
+ --rc-bottom-sheet-color: var(--md-sys-color-on-surface, CanvasText);
595
+ --rc-bottom-sheet-radius: var(--md-sys-shape-corner-extra-large, 1.75rem)
596
+ var(--md-sys-shape-corner-extra-large, 1.75rem) 0 0;
597
+ --rc-bottom-sheet-shadow: var(--rc-shadow-level1);
598
+ --rc-bottom-sheet-max-inline-size: 40rem;
599
+ --rc-bottom-sheet-max-block-size: 70dvh;
600
+ --rc-bottom-sheet-scrim: color-mix(in srgb, var(--md-sys-color-scrim, #000) 32%, transparent);
601
+ --rc-bottom-sheet-handle-color: color-mix(
602
+ in srgb,
603
+ var(--md-sys-color-on-surface-variant, GrayText) 40%,
604
+ transparent
605
+ );
606
+ --rc-bottom-sheet-handle-radius: var(--md-sys-shape-corner-full, 999px);
607
+ }
437
608
  .rc-theme-material rc-virtual-canvas,
438
609
  :host(.rc-theme-material) rc-virtual-canvas {
439
610
  --rc-virtual-canvas-scrollbar-thumb-background: var(--md-sys-color-outline, ButtonFace);
@@ -27,4 +27,32 @@
27
27
  :is(button, [role='button']):hover {
28
28
  background: color-mix(in srgb, var(--md-sys-color-on-surface, CanvasText) 8%, transparent);
29
29
  }
30
+
31
+ :where(.rc-theme-material, :host(.rc-theme-material)) rc-app-bar.rc-app-bar--center-aligned {
32
+ --rc-app-bar-title-font-size: var(
33
+ --md-top-app-bar-headline-size,
34
+ var(--md-sys-typescale-title-large-size, inherit)
35
+ );
36
+ }
37
+
38
+ :where(.rc-theme-material, :host(.rc-theme-material))
39
+ rc-app-bar.rc-app-bar--center-aligned::part(title) {
40
+ text-align: center;
41
+ }
42
+
43
+ :where(.rc-theme-material, :host(.rc-theme-material)) rc-app-bar.rc-app-bar--medium {
44
+ --rc-app-bar-expanded-title-font-size: var(
45
+ --md-medium-top-app-bar-headline-size,
46
+ var(--md-sys-typescale-headline-small-size, inherit)
47
+ );
48
+ --rc-app-bar-expanded-padding-block: 1rem;
49
+ }
50
+
51
+ :where(.rc-theme-material, :host(.rc-theme-material)) rc-app-bar.rc-app-bar--large {
52
+ --rc-app-bar-expanded-title-font-size: var(
53
+ --md-large-top-app-bar-headline-size,
54
+ var(--md-sys-typescale-headline-medium-size, inherit)
55
+ );
56
+ --rc-app-bar-expanded-padding-block: 1.25rem;
57
+ }
30
58
  }
@@ -0,0 +1,132 @@
1
+ @layer rc-theme-material.components {
2
+ :where(.rc-theme-material, :host(.rc-theme-material)) rc-bottom-sheet {
3
+ --rc-bottom-sheet-bg: var(--md-sys-color-surface, Canvas);
4
+ --rc-bottom-sheet-handle-color: color-mix(
5
+ in srgb,
6
+ var(--md-sys-color-on-surface-variant, GrayText) 40%,
7
+ transparent
8
+ );
9
+ --rc-bottom-sheet-handle-radius: var(--md-sys-shape-corner-full, 999px);
10
+ --rc-bottom-sheet-handle-target-block-size: 3rem;
11
+ --rc-bottom-sheet-snap-duration: var(--rc-motion-spatial-duration-default, 500ms);
12
+ --rc-bottom-sheet-snap-easing: var(
13
+ --rc-motion-spatial-easing-default,
14
+ cubic-bezier(0.2, 0, 0, 1)
15
+ );
16
+ }
17
+
18
+ :where(.rc-theme-material, :host(.rc-theme-material)) rc-bottom-sheet > dialog {
19
+ position: fixed;
20
+ inset: auto 0 0;
21
+ box-sizing: border-box;
22
+ inline-size: 100%;
23
+ max-inline-size: var(--rc-bottom-sheet-max-inline-size, 40rem);
24
+ max-block-size: var(--rc-bottom-sheet-max-block-size, 70dvh);
25
+ margin-block: 0;
26
+ margin-inline: auto;
27
+ padding: var(--rc-bottom-sheet-padding, 0 1rem calc(1rem + env(safe-area-inset-bottom, 0px)));
28
+ overflow: auto;
29
+ border: 0;
30
+ border-radius: var(--rc-bottom-sheet-radius, 1.75rem 1.75rem 0 0);
31
+ background: var(--rc-bottom-sheet-bg, var(--md-sys-color-surface, Canvas));
32
+ color: var(--rc-bottom-sheet-color, var(--md-sys-color-on-surface, CanvasText));
33
+ box-shadow: var(--rc-bottom-sheet-shadow, var(--rc-shadow-level1, none));
34
+ font-family: var(--md-sys-typescale-body-medium-font, inherit);
35
+ }
36
+
37
+ :where(.rc-theme-material, :host(.rc-theme-material)) rc-bottom-sheet > dialog::backdrop {
38
+ background: var(
39
+ --rc-bottom-sheet-scrim,
40
+ var(--rc-dialog-scrim, color-mix(in srgb, var(--md-sys-color-scrim, #000) 32%, transparent))
41
+ );
42
+ }
43
+
44
+ :where(.rc-theme-material, :host(.rc-theme-material))
45
+ rc-bottom-sheet
46
+ > dialog
47
+ > [data-rc-bottom-sheet-handle] {
48
+ position: relative;
49
+ display: block;
50
+ inline-size: var(--rc-bottom-sheet-handle-target-inline-size, 100%);
51
+ min-block-size: var(--rc-bottom-sheet-handle-target-block-size, 3rem);
52
+ margin: var(--rc-bottom-sheet-handle-target-margin, 0);
53
+ padding: 0;
54
+ border: 0;
55
+ border-radius: inherit;
56
+ background: transparent;
57
+ appearance: none;
58
+ cursor: ns-resize;
59
+ touch-action: none;
60
+ -webkit-tap-highlight-color: transparent;
61
+ }
62
+
63
+ :where(.rc-theme-material, :host(.rc-theme-material))
64
+ rc-bottom-sheet
65
+ > dialog
66
+ > [data-rc-bottom-sheet-handle]::before {
67
+ content: '';
68
+ position: absolute;
69
+ inset-block-start: 50%;
70
+ inset-inline-start: 50%;
71
+ inline-size: var(--rc-bottom-sheet-handle-inline-size, 2rem);
72
+ block-size: var(--rc-bottom-sheet-handle-block-size, 0.25rem);
73
+ border-radius: var(--rc-bottom-sheet-handle-radius, 999px);
74
+ background: var(--rc-bottom-sheet-handle-color, GrayText);
75
+ translate: -50% -50%;
76
+ }
77
+
78
+ :where(.rc-theme-material, :host(.rc-theme-material))
79
+ rc-bottom-sheet
80
+ > dialog
81
+ > [data-rc-bottom-sheet-handle]:focus-visible {
82
+ outline: 0.125rem solid var(--md-sys-color-primary, Highlight);
83
+ outline-offset: -0.25rem;
84
+ }
85
+
86
+ :where(.rc-theme-material, :host(.rc-theme-material))
87
+ rc-bottom-sheet
88
+ > dialog
89
+ > :is(button, [role='button']):not([data-rc-bottom-sheet-handle]) {
90
+ min-block-size: 2.5rem;
91
+ padding-block: 0;
92
+ padding-inline: 1.5rem;
93
+ border: 0;
94
+ border-radius: var(--md-sys-shape-corner-full, 999px);
95
+ background: transparent;
96
+ color: var(--md-sys-color-primary, ButtonText);
97
+ font: var(--md-sys-typescale-label-large-weight, 500)
98
+ var(--md-sys-typescale-label-large-size, 0.875rem) /
99
+ var(--md-sys-typescale-label-large-line-height, 1.25rem)
100
+ var(--md-sys-typescale-label-large-font, inherit);
101
+ letter-spacing: var(--md-sys-typescale-label-large-tracking, 0.00625em);
102
+ }
103
+
104
+ :where(.rc-theme-material, :host(.rc-theme-material))
105
+ rc-bottom-sheet
106
+ > dialog
107
+ > :is(button, [role='button']):not([data-rc-bottom-sheet-handle], :disabled):hover {
108
+ background: color-mix(in srgb, var(--md-sys-color-primary, ButtonText) 8%, transparent);
109
+ }
110
+
111
+ :where(.rc-theme-material, :host(.rc-theme-material))
112
+ rc-bottom-sheet
113
+ > dialog
114
+ > :is(button, [role='button']):not([data-rc-bottom-sheet-handle]):focus-visible {
115
+ outline: var(--rc-focus-ring, 2px solid Highlight);
116
+ outline-offset: var(--rc-focus-ring-offset, 2px);
117
+ }
118
+
119
+ :where(.rc-theme-material, :host(.rc-theme-material))
120
+ rc-bottom-sheet
121
+ > dialog
122
+ > :is(button, [role='button']):not([data-rc-bottom-sheet-handle], :disabled):active {
123
+ background: color-mix(in srgb, var(--md-sys-color-primary, ButtonText) 12%, transparent);
124
+ }
125
+
126
+ :where(.rc-theme-material, :host(.rc-theme-material))
127
+ rc-bottom-sheet
128
+ > dialog
129
+ > :is(button, [role='button']):not([data-rc-bottom-sheet-handle]):disabled {
130
+ opacity: var(--rc-disabled-opacity, 0.38);
131
+ }
132
+ }
@@ -0,0 +1,57 @@
1
+ @layer rc-theme-material.components {
2
+ :where(.rc-theme-material, :host(.rc-theme-material)) rc-button {
3
+ --rc-button-bg: var(--md-sys-color-primary, ButtonFace);
4
+ --rc-button-color: var(--md-sys-color-on-primary, ButtonText);
5
+ --rc-button-border: 0;
6
+ --rc-button-radius: var(--md-sys-shape-corner-full, 9999px);
7
+ --rc-button-block-size: 2.5rem;
8
+ --rc-button-padding-block: 0;
9
+ --rc-button-padding-inline: 1.5rem;
10
+ --rc-button-gap: 0.5rem;
11
+ --rc-button-font: var(--md-sys-typescale-label-large-weight, 500)
12
+ var(--md-sys-typescale-label-large-size, 0.875rem) /
13
+ var(--md-sys-typescale-label-large-line-height, 1.25rem)
14
+ var(--md-sys-typescale-label-large-font, inherit);
15
+ --rc-button-state-layer-bg: var(--md-sys-color-on-primary, currentColor);
16
+ --rc-button-hover-state-layer-opacity: var(--md-sys-state-hover-state-layer-opacity, 0.08);
17
+ --rc-button-focus-state-layer-opacity: var(--md-sys-state-focus-state-layer-opacity, 0.12);
18
+ --rc-button-pressed-state-layer-opacity: var(--md-sys-state-pressed-state-layer-opacity, 0.12);
19
+ --rc-button-state-layer-easing: var(
20
+ --md-sys-motion-easing-standard,
21
+ cubic-bezier(0.2, 0, 0, 1)
22
+ );
23
+ --_rc-button-ripple-enabled: 1;
24
+ --_rc-button-ripple-color: var(--md-sys-color-on-primary, currentColor);
25
+ --_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-easing: var(
28
+ --md-sys-motion-easing-emphasized-decelerate,
29
+ cubic-bezier(0.05, 0.7, 0.1, 1)
30
+ );
31
+ --rc-button-progress-color: var(--md-sys-color-on-primary, ButtonText);
32
+ }
33
+
34
+ :where(.rc-theme-material, :host(.rc-theme-material)) rc-button > button:focus-visible {
35
+ outline: var(--rc-focus-ring, 2px solid Highlight);
36
+ outline-offset: var(--rc-focus-ring-offset, 2px);
37
+ }
38
+
39
+ :where(.rc-theme-material, :host(.rc-theme-material)) rc-button[disabled] > button:disabled {
40
+ opacity: var(--rc-disabled-opacity, 0.38);
41
+ }
42
+
43
+ :where(.rc-theme-material, :host(.rc-theme-material))
44
+ rc-button[progress][progress-value]::part(progress) {
45
+ font-size: 0;
46
+ }
47
+
48
+ :where(.rc-theme-material, :host(.rc-theme-material))
49
+ rc-button[progress][progress-value]::part(progress)::before {
50
+ display: block;
51
+ }
52
+
53
+ :where(.rc-theme-material, :host(.rc-theme-material)) rc-button[icon-only] {
54
+ --rc-button-icon-size: 2.5rem;
55
+ --rc-icon-font-line-height: var(--rc-button-icon-size, 2.5rem);
56
+ }
57
+ }
@@ -0,0 +1,59 @@
1
+ @layer rc-theme-material.components {
2
+ :where(.rc-theme-material, :host(.rc-theme-material)) rc-card {
3
+ --rc-card-bg: var(--md-sys-color-surface-container-low, Canvas);
4
+ --rc-card-color: var(--md-sys-color-on-surface, CanvasText);
5
+ --rc-card-radius: var(--md-sys-shape-corner-medium, 0.75rem);
6
+ --rc-card-shadow:
7
+ 0 1px 2px color-mix(in srgb, var(--md-sys-color-shadow, #000) 30%, transparent),
8
+ 0 1px 3px 1px color-mix(in srgb, var(--md-sys-color-shadow, #000) 15%, transparent);
9
+ --rc-card-padding-block: 1rem;
10
+ --rc-card-padding-inline: 1rem;
11
+ --rc-card-actions-gap: 0.5rem;
12
+ --rc-card-title-font: var(--md-sys-typescale-title-medium-weight, 500)
13
+ var(--md-sys-typescale-title-medium-size, 1rem) /
14
+ var(--md-sys-typescale-title-medium-line-height, 1.5rem)
15
+ var(--md-sys-typescale-title-medium-font, inherit);
16
+ --rc-card-subtitle-font: var(--md-sys-typescale-body-medium-weight, 400)
17
+ var(--md-sys-typescale-body-medium-size, 0.875rem) /
18
+ var(--md-sys-typescale-body-medium-line-height, 1.25rem)
19
+ var(--md-sys-typescale-body-medium-font, inherit);
20
+ --rc-card-subtitle-color: var(--md-sys-color-on-surface-variant, CanvasText);
21
+ --rc-card-state-layer-bg: var(--md-sys-color-on-surface, currentColor);
22
+ --rc-card-hover-state-layer-opacity: var(--md-sys-state-hover-state-layer-opacity, 0.08);
23
+ --rc-card-pressed-state-layer-opacity: var(--md-sys-state-pressed-state-layer-opacity, 0.12);
24
+ }
25
+
26
+ :where(.rc-theme-material, :host(.rc-theme-material)) rc-card[selected] {
27
+ box-shadow:
28
+ 0 0 0 2px var(--md-sys-color-primary, Highlight),
29
+ var(--rc-card-shadow);
30
+ }
31
+
32
+ :where(.rc-theme-material, :host(.rc-theme-material)) rc-card[disabled] {
33
+ opacity: var(--rc-disabled-opacity, 0.38);
34
+ }
35
+
36
+ :where(.rc-theme-material, :host(.rc-theme-material)) rc-card > :is(h2, h3)[slot='title'] {
37
+ margin: 0;
38
+ color: var(--rc-card-title-color, inherit);
39
+ }
40
+
41
+ :where(.rc-theme-material, :host(.rc-theme-material)) rc-card > h2[slot='title'] {
42
+ font-family: var(--md-sys-typescale-title-large-font, inherit);
43
+ font-size: var(--md-sys-typescale-title-large-size, 1.375rem);
44
+ font-weight: var(--md-sys-typescale-title-large-weight, 500);
45
+ line-height: var(--md-sys-typescale-title-large-line-height, 1.75rem);
46
+ }
47
+
48
+ :where(.rc-theme-material, :host(.rc-theme-material)) rc-card > h3[slot='title'] {
49
+ font-family: var(--md-sys-typescale-title-medium-font, inherit);
50
+ font-size: var(--md-sys-typescale-title-medium-size, 1rem);
51
+ font-weight: var(--md-sys-typescale-title-medium-weight, 500);
52
+ line-height: var(--md-sys-typescale-title-medium-line-height, 1.5rem);
53
+ }
54
+
55
+ :where(.rc-theme-material, :host(.rc-theme-material)) rc-card > :is(h2, h3)[slot='title'] > a {
56
+ color: inherit;
57
+ text-decoration: none;
58
+ }
59
+ }
@@ -0,0 +1,28 @@
1
+ @layer rc-theme-material.components {
2
+ :where(.rc-theme-material, :host(.rc-theme-material)) rc-chip {
3
+ --rc-chip-block-size: 2rem;
4
+ --rc-chip-gap: 0px;
5
+ --rc-chip-padding-inline: 1rem;
6
+ --rc-chip-border: 1px solid var(--md-sys-color-outline, ButtonBorder);
7
+ --rc-chip-radius: var(--md-sys-shape-corner-small, 0.5rem);
8
+ --rc-chip-bg: var(--md-sys-color-surface-container-low, ButtonFace);
9
+ --rc-chip-color: var(--md-sys-color-on-surface-variant, ButtonText);
10
+ --rc-chip-font: inherit;
11
+ --rc-chip-text-decoration: none;
12
+ --rc-chip-selected-border-color: transparent;
13
+ --rc-chip-selected-bg: var(--md-sys-color-secondary-container, Highlight);
14
+ --rc-chip-selected-color: var(--md-sys-color-on-secondary-container, HighlightText);
15
+ --rc-chip-state-layer-color: var(--md-sys-color-on-surface-variant, CanvasText);
16
+ --rc-chip-selected-state-layer-color: var(--md-sys-color-on-secondary-container, CanvasText);
17
+ --rc-chip-hover-state-layer-opacity: var(--md-sys-state-hover-state-layer-opacity, 0.08);
18
+ --rc-chip-focus-state-layer-opacity: var(--md-sys-state-focus-state-layer-opacity, 0.12);
19
+ --rc-chip-pressed-state-layer-opacity: var(--md-sys-state-pressed-state-layer-opacity, 0.12);
20
+ --rc-chip-state-layer-transition-duration: var(--rc-motion-effects-duration-fast, 150ms);
21
+ --rc-chip-state-layer-transition-easing: var(--rc-motion-effects-easing-fast, ease-out);
22
+ --rc-chip-focus-ring: var(--rc-focus-ring);
23
+ --rc-chip-focus-ring-offset: var(--rc-focus-ring-offset);
24
+ --rc-chip-disabled-opacity: var(--rc-disabled-opacity);
25
+ --rc-chip-remove-target-size: 1.5rem;
26
+ --rc-chip-remove-offset-inline: 0.25rem;
27
+ }
28
+ }
@@ -1,12 +1,19 @@
1
1
  @layer rc-theme-material.components {
2
2
  :where(.rc-theme-material, :host(.rc-theme-material)) rc-combobox::part(anchor) {
3
3
  box-sizing: border-box;
4
- transition: border-color 150ms ease, box-shadow 150ms ease, background-color 150ms ease;
4
+ transition:
5
+ border-color 150ms ease,
6
+ box-shadow 150ms ease,
7
+ background-color 150ms ease;
5
8
  }
6
9
 
7
10
  :where(.rc-theme-material, :host(.rc-theme-material)) rc-combobox::part(anchor):hover {
8
11
  border-color: var(--md-sys-color-on-surface, CanvasText);
9
- background: color-mix(in srgb, var(--md-sys-color-on-surface, CanvasText) 4%, var(--md-sys-color-surface, Field));
12
+ background: color-mix(
13
+ in srgb,
14
+ var(--md-sys-color-on-surface, CanvasText) 4%,
15
+ var(--md-sys-color-surface, Field)
16
+ );
10
17
  }
11
18
 
12
19
  :where(.rc-theme-material, :host(.rc-theme-material)) rc-combobox::part(anchor):focus-within {
@@ -27,7 +34,9 @@
27
34
  --md-outlined-text-field-trailing-icon-color,
28
35
  var(--md-sys-color-on-surface-variant, CanvasText)
29
36
  );
30
- transition: color 150ms ease, background-color 150ms ease;
37
+ transition:
38
+ color 150ms ease,
39
+ background-color 150ms ease;
31
40
  }
32
41
 
33
42
  :where(.rc-theme-material, :host(.rc-theme-material)) rc-combobox::part(toggle):hover {
@@ -42,7 +51,11 @@
42
51
  }
43
52
 
44
53
  :where(.rc-theme-material, :host(.rc-theme-material)) rc-combobox::part(chip):hover {
45
- background: color-mix(in srgb, var(--md-sys-color-on-surface-variant, CanvasText) 8%, transparent);
54
+ background: color-mix(
55
+ in srgb,
56
+ var(--md-sys-color-on-surface-variant, CanvasText) 8%,
57
+ transparent
58
+ );
46
59
  color: var(--md-sys-color-on-surface-variant, CanvasText);
47
60
  }
48
61
 
@@ -61,7 +74,7 @@
61
74
  border-radius: var(--md-menu-container-shape, var(--md-sys-shape-corner-extra-small, 0.25rem));
62
75
 
63
76
  /* Option sizing */
64
- --rc-listbox-option-gap: 0.75rem;
77
+ --rc-listbox-option-gap: var(--rc-list-item-gap, 0.75rem);
65
78
  --rc-listbox-option-min-block-size: 3rem;
66
79
  --rc-listbox-option-padding-block: 0;
67
80
  --rc-listbox-option-padding-inline: 0.75rem;