material 3.2.0 → 3.2.2

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 (209) hide show
  1. package/README.md +5 -5
  2. package/dist/components/carousel/features/scroll.js +35 -22
  3. package/dist/components/slider/features/axis.d.ts +6 -1
  4. package/dist/components/slider/features/axis.js +6 -1
  5. package/dist/core/compose/component.js +2 -0
  6. package/dist/core/dom/direction.d.ts +16 -0
  7. package/dist/core/dom/direction.js +38 -0
  8. package/dist/elements/button-group.d.ts +1 -0
  9. package/dist/elements/button-group.js +1 -0
  10. package/dist/elements/button.js +1 -1
  11. package/dist/elements/checkbox.d.ts +1 -0
  12. package/dist/elements/checkbox.js +1 -0
  13. package/dist/elements/css/badge.css +1 -1
  14. package/dist/elements/css/badge.js +1 -1
  15. package/dist/elements/css/bottom-app-bar.css +1 -1
  16. package/dist/elements/css/bottom-app-bar.js +1 -1
  17. package/dist/elements/css/card.css +1 -1
  18. package/dist/elements/css/card.js +1 -1
  19. package/dist/elements/css/datepicker.css +1 -1
  20. package/dist/elements/css/datepicker.js +1 -1
  21. package/dist/elements/css/dialog.css +1 -1
  22. package/dist/elements/css/dialog.js +1 -1
  23. package/dist/elements/css/drawer.css +1 -1
  24. package/dist/elements/css/drawer.js +1 -1
  25. package/dist/elements/css/hosts/badge.css +1 -1
  26. package/dist/elements/css/hosts/bottom-app-bar.css +1 -1
  27. package/dist/elements/css/hosts/bottom-sheet.css +1 -1
  28. package/dist/elements/css/hosts/button-group.css +1 -1
  29. package/dist/elements/css/hosts/button.css +1 -1
  30. package/dist/elements/css/hosts/card.css +1 -1
  31. package/dist/elements/css/hosts/carousel.css +1 -1
  32. package/dist/elements/css/hosts/checkbox.css +1 -1
  33. package/dist/elements/css/hosts/chips.css +1 -1
  34. package/dist/elements/css/hosts/datepicker.css +1 -1
  35. package/dist/elements/css/hosts/dialog.css +1 -1
  36. package/dist/elements/css/hosts/divider.css +1 -1
  37. package/dist/elements/css/hosts/drawer.css +1 -1
  38. package/dist/elements/css/hosts/icon-button.css +1 -1
  39. package/dist/elements/css/hosts/list.css +1 -1
  40. package/dist/elements/css/hosts/loading-indicator.css +1 -1
  41. package/dist/elements/css/hosts/menu.css +1 -1
  42. package/dist/elements/css/hosts/navigation-bar.css +1 -1
  43. package/dist/elements/css/hosts/navigation-rail.css +1 -1
  44. package/dist/elements/css/hosts/progress.css +1 -1
  45. package/dist/elements/css/hosts/radios.css +1 -1
  46. package/dist/elements/css/hosts/search.css +1 -1
  47. package/dist/elements/css/hosts/select.css +1 -1
  48. package/dist/elements/css/hosts/side-sheet.css +1 -1
  49. package/dist/elements/css/hosts/slider.css +1 -1
  50. package/dist/elements/css/hosts/snackbar.css +1 -1
  51. package/dist/elements/css/hosts/split-button.css +1 -1
  52. package/dist/elements/css/hosts/switch.css +1 -1
  53. package/dist/elements/css/hosts/tabs.css +1 -1
  54. package/dist/elements/css/hosts/timepicker.css +1 -1
  55. package/dist/elements/css/hosts/toolbar.css +1 -1
  56. package/dist/elements/css/hosts/tooltip.css +1 -1
  57. package/dist/elements/css/hosts/top-app-bar.css +1 -1
  58. package/dist/elements/css/side-sheet.css +1 -1
  59. package/dist/elements/css/side-sheet.js +1 -1
  60. package/dist/elements/css/split-button.css +1 -1
  61. package/dist/elements/css/split-button.js +1 -1
  62. package/dist/elements/css/tabs.css +1 -1
  63. package/dist/elements/css/tabs.js +1 -1
  64. package/dist/elements/css/toolbar.css +1 -1
  65. package/dist/elements/css/toolbar.js +1 -1
  66. package/dist/elements/css/top-app-bar.css +1 -1
  67. package/dist/elements/css/top-app-bar.js +1 -1
  68. package/dist/elements/datepicker.d.ts +1 -0
  69. package/dist/elements/datepicker.js +1 -0
  70. package/dist/elements/define.d.ts +6 -7
  71. package/dist/elements/define.js +55 -2
  72. package/dist/elements/icon-button.js +1 -1
  73. package/dist/elements/preupgrade/badge.css +1 -1
  74. package/dist/elements/preupgrade/bottom-app-bar.css +1 -1
  75. package/dist/elements/preupgrade/bottom-sheet.css +1 -1
  76. package/dist/elements/preupgrade/button-group.css +2 -2
  77. package/dist/elements/preupgrade/button.css +1 -1
  78. package/dist/elements/preupgrade/card.css +1 -1
  79. package/dist/elements/preupgrade/carousel.css +1 -1
  80. package/dist/elements/preupgrade/checkbox.css +1 -1
  81. package/dist/elements/preupgrade/chips.css +1 -1
  82. package/dist/elements/preupgrade/datepicker.css +2 -2
  83. package/dist/elements/preupgrade/dialog.css +1 -1
  84. package/dist/elements/preupgrade/divider.css +1 -1
  85. package/dist/elements/preupgrade/drawer.css +1 -1
  86. package/dist/elements/preupgrade/extended-fab.css +1 -1
  87. package/dist/elements/preupgrade/fab-menu.css +1 -1
  88. package/dist/elements/preupgrade/fab.css +1 -1
  89. package/dist/elements/preupgrade/icon-button.css +1 -1
  90. package/dist/elements/preupgrade/list.css +1 -1
  91. package/dist/elements/preupgrade/loading-indicator.css +1 -1
  92. package/dist/elements/preupgrade/menu.css +1 -1
  93. package/dist/elements/preupgrade/navigation-bar.css +1 -1
  94. package/dist/elements/preupgrade/navigation-rail.css +1 -1
  95. package/dist/elements/preupgrade/progress.css +1 -1
  96. package/dist/elements/preupgrade/radios.css +1 -1
  97. package/dist/elements/preupgrade/search.css +1 -1
  98. package/dist/elements/preupgrade/select.css +1 -1
  99. package/dist/elements/preupgrade/side-sheet.css +1 -1
  100. package/dist/elements/preupgrade/slider.css +1 -1
  101. package/dist/elements/preupgrade/snackbar.css +1 -1
  102. package/dist/elements/preupgrade/split-button.css +1 -1
  103. package/dist/elements/preupgrade/switch.css +1 -1
  104. package/dist/elements/preupgrade/tabs.css +1 -1
  105. package/dist/elements/preupgrade/text-field.css +1 -1
  106. package/dist/elements/preupgrade/timepicker.css +1 -1
  107. package/dist/elements/preupgrade/toolbar.css +1 -1
  108. package/dist/elements/preupgrade/tooltip.css +1 -1
  109. package/dist/elements/preupgrade/top-app-bar.css +1 -1
  110. package/dist/elements/preupgrade.css +2 -2
  111. package/dist/elements/preupgrade.js +1 -1
  112. package/dist/elements/select.js +1 -1
  113. package/dist/elements/split-button.js +1 -1
  114. package/dist/package.json +1 -1
  115. package/dist/styles/badge.css +2 -2
  116. package/dist/styles/base.css +1 -1
  117. package/dist/styles/bottom-app-bar.css +2 -2
  118. package/dist/styles/bottom-sheet.css +1 -1
  119. package/dist/styles/button-group.css +1 -1
  120. package/dist/styles/button.css +1 -1
  121. package/dist/styles/card.css +2 -2
  122. package/dist/styles/carousel.css +1 -1
  123. package/dist/styles/checkbox.css +1 -1
  124. package/dist/styles/chips.css +1 -1
  125. package/dist/styles/contrast.css +1 -1
  126. package/dist/styles/datepicker.css +2 -2
  127. package/dist/styles/dialog.css +2 -2
  128. package/dist/styles/divider.css +1 -1
  129. package/dist/styles/drawer.css +2 -2
  130. package/dist/styles/extended-fab.css +1 -1
  131. package/dist/styles/fab-menu.css +1 -1
  132. package/dist/styles/fab.css +1 -1
  133. package/dist/styles/icon-button.css +1 -1
  134. package/dist/styles/list.css +1 -1
  135. package/dist/styles/loading-indicator.css +1 -1
  136. package/dist/styles/menu.css +1 -1
  137. package/dist/styles/navigation-bar.css +1 -1
  138. package/dist/styles/navigation-rail.css +1 -1
  139. package/dist/styles/progress.css +1 -1
  140. package/dist/styles/radios.css +1 -1
  141. package/dist/styles/search.css +1 -1
  142. package/dist/styles/select.css +1 -1
  143. package/dist/styles/side-sheet.css +2 -2
  144. package/dist/styles/slider.css +1 -1
  145. package/dist/styles/snackbar.css +1 -1
  146. package/dist/styles/split-button.css +2 -2
  147. package/dist/styles/switch.css +1 -1
  148. package/dist/styles/tabs.css +2 -2
  149. package/dist/styles/text-field.css +1 -1
  150. package/dist/styles/timepicker.css +1 -1
  151. package/dist/styles/toolbar.css +2 -2
  152. package/dist/styles/tooltip.css +1 -1
  153. package/dist/styles/top-app-bar.css +2 -2
  154. package/dist/styles/typography.css +1 -1
  155. package/dist/styles/utilities.css +1 -1
  156. package/dist/styles.css +2 -2
  157. package/dist/themes/autumn-contrast.css +1 -1
  158. package/dist/themes/autumn.css +1 -1
  159. package/dist/themes/baseline-contrast.css +1 -1
  160. package/dist/themes/baseline.css +1 -1
  161. package/dist/themes/brownbeige-contrast.css +1 -1
  162. package/dist/themes/brownbeige.css +1 -1
  163. package/dist/themes/content-contrast.css +1 -1
  164. package/dist/themes/content.css +1 -1
  165. package/dist/themes/desert-contrast.css +1 -1
  166. package/dist/themes/desert.css +1 -1
  167. package/dist/themes/expressive-contrast.css +1 -1
  168. package/dist/themes/expressive.css +1 -1
  169. package/dist/themes/fidelity-contrast.css +1 -1
  170. package/dist/themes/fidelity.css +1 -1
  171. package/dist/themes/forest-contrast.css +1 -1
  172. package/dist/themes/forest.css +1 -1
  173. package/dist/themes/fruit-salad-contrast.css +1 -1
  174. package/dist/themes/fruit-salad.css +1 -1
  175. package/dist/themes/highcontrast-contrast.css +1 -1
  176. package/dist/themes/highcontrast.css +1 -1
  177. package/dist/themes/monochrome-contrast.css +1 -1
  178. package/dist/themes/monochrome.css +1 -1
  179. package/dist/themes/neutral-contrast.css +1 -1
  180. package/dist/themes/neutral.css +1 -1
  181. package/dist/themes/ocean-contrast.css +1 -1
  182. package/dist/themes/ocean.css +1 -1
  183. package/dist/themes/rainbow-contrast.css +1 -1
  184. package/dist/themes/rainbow.css +1 -1
  185. package/dist/themes/sageivory-contrast.css +1 -1
  186. package/dist/themes/sageivory.css +1 -1
  187. package/dist/themes/spring-contrast.css +1 -1
  188. package/dist/themes/spring.css +1 -1
  189. package/dist/themes/summer-contrast.css +1 -1
  190. package/dist/themes/summer.css +1 -1
  191. package/dist/themes/sunset-contrast.css +1 -1
  192. package/dist/themes/sunset.css +1 -1
  193. package/dist/themes/tealcaramel-contrast.css +1 -1
  194. package/dist/themes/tealcaramel.css +1 -1
  195. package/dist/themes/vibrant-contrast.css +1 -1
  196. package/dist/themes/vibrant.css +1 -1
  197. package/package.json +1 -1
  198. package/src/styles/abstract/_mixins.scss +50 -3
  199. package/src/styles/components/_badge.scss +22 -22
  200. package/src/styles/components/_bottom-app-bar.scss +10 -10
  201. package/src/styles/components/_card.scss +22 -2
  202. package/src/styles/components/_datepicker.scss +15 -3
  203. package/src/styles/components/_dialog.scss +2 -4
  204. package/src/styles/components/_drawer.scss +5 -9
  205. package/src/styles/components/_side-sheet.scss +13 -6
  206. package/src/styles/components/_toolbar.scss +13 -10
  207. package/src/styles/components/_top-app-bar.scss +28 -18
  208. package/src/styles/elements/_button-group.scss +87 -24
  209. package/src/styles/elements/_datepicker.scss +1 -1
@@ -20,6 +20,11 @@ $component: '#{base.$prefix}-toolbar';
20
20
  --#{$component}-content: #{t.color('on-surface-variant')};
21
21
  // The window-edge margin of a placed floating toolbar
22
22
  --#{$component}-margin: 16px;
23
+ // The direction multiplier: 1 left-to-right at the root, -1 under the
24
+ // direction arm. Declared here, not only used as a var() fallback, because a
25
+ // custom property inherits: a nested LTR instance must not read its RTL
26
+ // parent's -1.
27
+ --#{$component}-dir: 1;
23
28
 
24
29
  display: flex;
25
30
  align-items: center;
@@ -156,6 +161,10 @@ $component: '#{base.$prefix}-toolbar';
156
161
 
157
162
  // Off screen, past the edge it is placed at
158
163
  &--hidden {
164
+ @include m.rtl($self: true) {
165
+ --#{$component}-dir: -1;
166
+ }
167
+
159
168
  &.#{$component}--bottom {
160
169
  transform: translateY(calc(100% + var(--#{$component}-margin)));
161
170
  }
@@ -168,20 +177,14 @@ $component: '#{base.$prefix}-toolbar';
168
177
  transform: translateY(calc(-100% - var(--#{$component}-margin)));
169
178
  }
170
179
 
180
+ // The edge it leaves is physical: start and end trade sides in right-to-left,
181
+ // where the root's multiplier is -1.
171
182
  &.#{$component}--start {
172
- transform: translateX(calc(-100% - var(--#{$component}-margin)));
183
+ transform: translateX(calc(-1 * var(--#{$component}-dir) * (100% + var(--#{$component}-margin))));
173
184
  }
174
185
 
175
186
  &.#{$component}--end {
176
- transform: translateX(calc(100% + var(--#{$component}-margin)));
177
- }
178
-
179
- &.#{$component}--start:dir(rtl) {
180
- transform: translateX(calc(100% + var(--#{$component}-margin)));
181
- }
182
-
183
- &.#{$component}--end:dir(rtl) {
184
- transform: translateX(calc(-100% - var(--#{$component}-margin)));
187
+ transform: translateX(calc(var(--#{$component}-dir) * (100% + var(--#{$component}-margin))));
185
188
  }
186
189
 
187
190
  // In the flow there is no edge to leave by
@@ -159,34 +159,35 @@ $component: '#{base.$prefix}-top-app-bar';
159
159
  }
160
160
 
161
161
  // RTL Support
162
- [dir="rtl"] & {
162
+ @include m.rtl {
163
163
  .#{$component}__leading {
164
164
  margin-right: 0;
165
165
  margin-left: 24px;
166
166
  }
167
-
167
+
168
168
  .#{$component}__trailing {
169
169
  margin-left: 0;
170
170
  margin-right: auto;
171
171
  }
172
172
 
173
- &--medium,
174
- &--large {
175
- .#{$component}__headline {
176
- margin-left: 0;
177
- margin-right: 16px;
178
- }
179
- }
180
-
181
- &--center {
182
- .#{$component}__headline {
183
- left: auto;
184
- right: 50%;
185
- transform: translateX(50%);
186
- }
187
- }
188
173
  }
189
-
174
+
175
+ @include m.rtl-selector('.#{$component}--medium .#{$component}__headline') {
176
+ margin-left: 0;
177
+ margin-right: 16px;
178
+ }
179
+
180
+ @include m.rtl-selector('.#{$component}--large .#{$component}__headline') {
181
+ margin-left: 0;
182
+ margin-right: 16px;
183
+ }
184
+
185
+ @include m.rtl-selector('.#{$component}--center .#{$component}__headline') {
186
+ left: auto;
187
+ right: 50%;
188
+ transform: translateX(50%);
189
+ }
190
+
190
191
  // Mobile screen adjustments
191
192
  @media (max-width: map.get(v.$breakpoints, 'sm')) {
192
193
  // Reduce side padding slightly on small screens
@@ -195,6 +196,15 @@ $component: '#{base.$prefix}-top-app-bar';
195
196
  .#{$component}__leading {
196
197
  margin-right: 16px;
197
198
  }
199
+
200
+ // The narrow bar reduces the leading's end gap, not its start edges: the
201
+ // direction rule has to be restated here, or this later rule wins over it.
202
+ @include m.rtl {
203
+ .#{$component}__leading {
204
+ margin-right: 0;
205
+ margin-left: 16px;
206
+ }
207
+ }
198
208
 
199
209
  .#{$component}__trailing {
200
210
  gap: 4px;
@@ -1,40 +1,103 @@
1
- // src/styles/elements/_button-group.scss
2
- // <m-button-group> before upgrade: a box per <m-button-group-item>, the size
3
- // of its button, which is drawn on upgrade.
1
+ @use 'sass:list';
2
+ @use 'sass:map';
4
3
  @use '../abstract/variables' as v;
5
- @use '../abstract/mixins' as m;
6
4
  @use 'config' as c;
7
5
 
8
- // As components/_button-group.scss: the standard group's 12px between
9
- // outlined buttons of the small size.
6
+ $sizes: (
7
+ 'xs': (32px, 18px, 13px, 'label-large', 20px),
8
+ 's': (40px, 12px, 17px, 'label-large', 24px),
9
+ 'm': (56px, 8px, 25px, 'title-medium', 24px),
10
+ 'l': (96px, 8px, 50px, 'headline-small', 32px),
11
+ 'xl': (136px, 8px, 67px, 'headline-large', 40px),
12
+ );
13
+ $densities: ('comfortable': 4px, 'compact': 8px);
14
+ $icon-first: ':has(> [icon]:empty:first-child)';
15
+
16
+ @mixin item($size, $font: true, $letter: true, $weight: true) {
17
+ $t: map.get($sizes, $size);
18
+ $type: map.get(v.$typescale, list.nth($t, 4));
19
+ height: list.nth($t, 1);
20
+ padding: 0 list.nth($t, 3);
21
+ @if $font {
22
+ font-size: map.get($type, 'font-size');
23
+ line-height: map.get($type, 'line-height');
24
+ @if $letter { letter-spacing: map.get($type, 'letter-spacing'); }
25
+ }
26
+ @if $weight { font-weight: map.get($type, 'font-weight'); }
27
+ }
28
+
10
29
  @include c.host('button-group') {
11
30
  display: inline-flex;
12
- vertical-align: middle;
31
+ vertical-align: baseline;
13
32
  gap: 12px;
14
33
  white-space: nowrap;
15
34
 
16
- // Only the small/default size is reserved here. Other sizes retain their
17
- // original baseline until their size reservation is addressed in #49.
18
- &:not([size]), &[size='s'] {
19
- vertical-align: baseline;
20
- align-items: baseline;
21
-
22
- // Preserve the inherited line box without adding inline space or a gap.
23
- &::before {
24
- content: " ";
25
- white-space: pre;
26
- width: 0;
27
- margin-inline-end: -12px;
35
+ &::before {
36
+ width: 0;
37
+ height: 32px;
38
+ margin-inline-end: -12px;
39
+ align-self: flex-start;
40
+ }
41
+
42
+ &#{$icon-first} {
43
+ align-items: center;
44
+
45
+ &::before { content: ""; }
46
+ }
47
+
48
+ &[size='xs'] { gap: 18px; }
49
+ &:is([size='m'], [size='l'], [size='xl']) { gap: 8px; }
50
+
51
+ @each $density, $step in $densities {
52
+ &[density='#{$density}'] > * { height: 40px - $step; }
53
+ }
54
+
55
+ @each $size in ('xs', 'm', 'l', 'xl') {
56
+ &[size='#{$size}'] {
57
+ $t: map.get($sizes, $size);
58
+
59
+ > * {
60
+ @if $size == 'xs' { @include item($size, $font: false, $weight: false); }
61
+ @else if $size == 'm' { @include item($size, $weight: false); }
62
+ @else { @include item($size, $letter: false, $weight: false); }
63
+ }
64
+
65
+ @each $density, $step in $densities {
66
+ &[density='#{$density}'] > * { height: list.nth($t, 1) - $step; }
67
+ }
68
+
69
+ &::before {
70
+ height: list.nth($t, 1) * 0.5 + list.nth($t, 5) * 0.5;
71
+ @if $size == 'xs' { margin-inline-end: -1 * list.nth($t, 2); }
72
+ }
28
73
  }
29
74
  }
75
+
76
+ &:is([size='m'], [size='l'], [size='xl'])::before { margin-inline-end: -8px; }
77
+ &:is([size='l'], [size='xl']) > * { letter-spacing: 0; font-weight: 400; }
78
+
79
+ @each $density, $step in $densities {
80
+ &[density='#{$density}']::before { margin-block-start: $step * -0.5; }
81
+ }
30
82
  }
31
83
 
32
84
  @include c.declarations('button-group') {
33
85
  display: inline-flex;
34
86
  align-items: center;
35
- box-sizing: border-box;
36
- height: v.button('height-s');
37
- padding: 0 v.button('padding-s');
38
- border: v.button('outline-width-s') solid transparent;
39
- @include m.typography('label-large');
87
+ flex: none;
88
+ min-width: 58px;
89
+ font-family: var(--mtrl-ref-typeface-plain,Roboto,sans-serif);
90
+ @include item('s');
91
+
92
+ &[icon]:empty { min-width: 0; padding: 0; aspect-ratio: 1; }
93
+ }
94
+
95
+ @include c.host('button-group') {
96
+ &[kind='connected'] {
97
+ gap: 2px;
98
+
99
+ &::before { margin-inline-end: -2px; }
100
+ }
101
+
102
+ &:is(:not([size]), [size='xs'], [size='s'])[kind='connected'] > * { min-width: 48px; }
40
103
  }
@@ -9,7 +9,7 @@
9
9
  // As components/_datepicker.scss: the text field's width, the label 4px above
10
10
  // the 56px field, and 4px + one body-small line under it.
11
11
  @include c.host('datepicker') {
12
- display: inline-block;
12
+ display: inline-flex;
13
13
  box-sizing: border-box;
14
14
  width: v.text-field('width');
15
15
  vertical-align: baseline;