material 3.0.6 → 3.2.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 (293) hide show
  1. package/README.md +4 -4
  2. package/dist/components/tabs/tab.js +8 -1
  3. package/dist/components/text-field/api.d.ts +2 -0
  4. package/dist/components/text-field/api.js +54 -63
  5. package/dist/core/shapes/material.js +0 -85
  6. package/dist/elements/css/hosts/tabs.css +1 -1
  7. package/dist/elements/css/tabs.css +1 -1
  8. package/dist/elements/css/tabs.js +1 -1
  9. package/dist/elements/define.d.ts +2 -0
  10. package/dist/elements/define.js +24 -0
  11. package/dist/elements/index.d.ts +2 -2
  12. package/dist/elements/preupgrade/badge.css +1 -1
  13. package/dist/elements/preupgrade/bottom-app-bar.css +1 -1
  14. package/dist/elements/preupgrade/bottom-sheet.css +1 -1
  15. package/dist/elements/preupgrade/button-group.css +1 -1
  16. package/dist/elements/preupgrade/button.css +1 -1
  17. package/dist/elements/preupgrade/card.css +1 -1
  18. package/dist/elements/preupgrade/carousel.css +1 -1
  19. package/dist/elements/preupgrade/checkbox.css +1 -1
  20. package/dist/elements/preupgrade/chips.css +1 -1
  21. package/dist/elements/preupgrade/datepicker.css +1 -1
  22. package/dist/elements/preupgrade/dialog.css +1 -1
  23. package/dist/elements/preupgrade/divider.css +1 -1
  24. package/dist/elements/preupgrade/drawer.css +1 -1
  25. package/dist/elements/preupgrade/extended-fab.css +1 -1
  26. package/dist/elements/preupgrade/fab-menu.css +1 -1
  27. package/dist/elements/preupgrade/fab.css +1 -1
  28. package/dist/elements/preupgrade/icon-button.css +1 -1
  29. package/dist/elements/preupgrade/list.css +1 -1
  30. package/dist/elements/preupgrade/loading-indicator.css +1 -1
  31. package/dist/elements/preupgrade/menu.css +1 -1
  32. package/dist/elements/preupgrade/navigation-bar.css +1 -1
  33. package/dist/elements/preupgrade/navigation-rail.css +1 -1
  34. package/dist/elements/preupgrade/progress.css +1 -1
  35. package/dist/elements/preupgrade/radios.css +1 -1
  36. package/dist/elements/preupgrade/search.css +1 -1
  37. package/dist/elements/preupgrade/select.css +1 -1
  38. package/dist/elements/preupgrade/side-sheet.css +1 -1
  39. package/dist/elements/preupgrade/slider.css +1 -1
  40. package/dist/elements/preupgrade/snackbar.css +1 -1
  41. package/dist/elements/preupgrade/split-button.css +1 -1
  42. package/dist/elements/preupgrade/switch.css +1 -1
  43. package/dist/elements/preupgrade/tabs.css +1 -1
  44. package/dist/elements/preupgrade/text-field.css +1 -1
  45. package/dist/elements/preupgrade/timepicker.css +1 -1
  46. package/dist/elements/preupgrade/toolbar.css +1 -1
  47. package/dist/elements/preupgrade/tooltip.css +1 -1
  48. package/dist/elements/preupgrade/top-app-bar.css +1 -1
  49. package/dist/elements/preupgrade.css +1 -1
  50. package/dist/elements/split-button.d.ts +29 -12
  51. package/dist/elements/split-button.js +21 -2
  52. package/dist/elements/tabs.js +3 -1
  53. package/dist/elements/text-field.d.ts +27 -4
  54. package/dist/elements/text-field.js +33 -1
  55. package/dist/package.json +1 -1
  56. package/dist/react/badge.js +0 -2
  57. package/dist/react/bottom-app-bar.js +0 -2
  58. package/dist/react/bottom-sheet.js +0 -2
  59. package/dist/react/button-group-item.js +0 -2
  60. package/dist/react/button-group.js +0 -2
  61. package/dist/react/button.js +0 -2
  62. package/dist/react/card.js +0 -2
  63. package/dist/react/carousel-item.js +0 -2
  64. package/dist/react/carousel.js +0 -2
  65. package/dist/react/checkbox.js +0 -2
  66. package/dist/react/chip.js +0 -2
  67. package/dist/react/chips.js +0 -2
  68. package/dist/react/datepicker.js +0 -2
  69. package/dist/react/dialog.js +0 -2
  70. package/dist/react/divider.js +0 -2
  71. package/dist/react/drawer-item.js +0 -2
  72. package/dist/react/drawer.js +0 -2
  73. package/dist/react/extended-fab.js +0 -2
  74. package/dist/react/fab-menu-item.js +0 -2
  75. package/dist/react/fab-menu.js +0 -2
  76. package/dist/react/fab.js +0 -2
  77. package/dist/react/icon-button.js +0 -2
  78. package/dist/react/list-item.js +0 -2
  79. package/dist/react/list.js +0 -2
  80. package/dist/react/loading-indicator.js +0 -2
  81. package/dist/react/menu-item.js +0 -2
  82. package/dist/react/menu.js +0 -2
  83. package/dist/react/navigation-bar-item.js +0 -2
  84. package/dist/react/navigation-bar.js +0 -2
  85. package/dist/react/navigation-rail-item.js +0 -2
  86. package/dist/react/navigation-rail.js +0 -2
  87. package/dist/react/progress.js +0 -2
  88. package/dist/react/radio.js +0 -2
  89. package/dist/react/radios.js +0 -2
  90. package/dist/react/search-suggestion.js +0 -2
  91. package/dist/react/search.js +0 -2
  92. package/dist/react/select-option.js +0 -2
  93. package/dist/react/select.js +0 -2
  94. package/dist/react/side-sheet.js +0 -2
  95. package/dist/react/slider.js +0 -2
  96. package/dist/react/snackbar.js +0 -2
  97. package/dist/react/split-button.js +0 -2
  98. package/dist/react/switch.js +0 -2
  99. package/dist/react/tab.js +0 -2
  100. package/dist/react/tabs.js +0 -2
  101. package/dist/react/text-field.js +0 -2
  102. package/dist/react/timepicker.js +0 -2
  103. package/dist/react/toolbar.js +0 -2
  104. package/dist/react/tooltip.js +0 -2
  105. package/dist/react/top-app-bar.js +0 -2
  106. package/dist/solid/badge.js +0 -2
  107. package/dist/solid/bottom-app-bar.js +0 -2
  108. package/dist/solid/bottom-sheet.js +0 -2
  109. package/dist/solid/button-group-item.js +0 -2
  110. package/dist/solid/button-group.js +0 -2
  111. package/dist/solid/button.js +0 -2
  112. package/dist/solid/card.js +0 -2
  113. package/dist/solid/carousel-item.js +0 -2
  114. package/dist/solid/carousel.js +0 -2
  115. package/dist/solid/checkbox.js +0 -2
  116. package/dist/solid/chip.js +0 -2
  117. package/dist/solid/chips.js +0 -2
  118. package/dist/solid/datepicker.js +0 -2
  119. package/dist/solid/dialog.js +0 -2
  120. package/dist/solid/divider.js +0 -2
  121. package/dist/solid/drawer-item.js +0 -2
  122. package/dist/solid/drawer.js +0 -2
  123. package/dist/solid/extended-fab.js +0 -2
  124. package/dist/solid/fab-menu-item.js +0 -2
  125. package/dist/solid/fab-menu.js +0 -2
  126. package/dist/solid/fab.js +0 -2
  127. package/dist/solid/icon-button.js +0 -2
  128. package/dist/solid/jsx.d.ts +3 -2
  129. package/dist/solid/list-item.js +0 -2
  130. package/dist/solid/list.js +0 -2
  131. package/dist/solid/loading-indicator.js +0 -2
  132. package/dist/solid/menu-item.js +0 -2
  133. package/dist/solid/menu.js +0 -2
  134. package/dist/solid/navigation-bar-item.js +0 -2
  135. package/dist/solid/navigation-bar.js +0 -2
  136. package/dist/solid/navigation-rail-item.js +0 -2
  137. package/dist/solid/navigation-rail.js +0 -2
  138. package/dist/solid/progress.js +0 -2
  139. package/dist/solid/radio.js +0 -2
  140. package/dist/solid/radios.js +0 -2
  141. package/dist/solid/search-suggestion.js +0 -2
  142. package/dist/solid/search.js +0 -2
  143. package/dist/solid/select-option.js +0 -2
  144. package/dist/solid/select.js +0 -2
  145. package/dist/solid/side-sheet.js +0 -2
  146. package/dist/solid/slider.js +0 -2
  147. package/dist/solid/snackbar.js +0 -2
  148. package/dist/solid/split-button.js +0 -2
  149. package/dist/solid/switch.js +0 -2
  150. package/dist/solid/tab.js +0 -2
  151. package/dist/solid/tabs.js +0 -2
  152. package/dist/solid/text-field.js +0 -2
  153. package/dist/solid/timepicker.js +0 -2
  154. package/dist/solid/toolbar.js +0 -2
  155. package/dist/solid/tooltip.js +0 -2
  156. package/dist/solid/top-app-bar.js +0 -2
  157. package/dist/styles/badge.css +1 -1
  158. package/dist/styles/base.css +2 -2
  159. package/dist/styles/bottom-app-bar.css +1 -1
  160. package/dist/styles/bottom-sheet.css +1 -1
  161. package/dist/styles/button-group.css +1 -1
  162. package/dist/styles/button.css +1 -1
  163. package/dist/styles/card.css +1 -1
  164. package/dist/styles/carousel.css +1 -1
  165. package/dist/styles/checkbox.css +1 -1
  166. package/dist/styles/chips.css +1 -1
  167. package/dist/styles/contrast.css +1 -1
  168. package/dist/styles/datepicker.css +1 -1
  169. package/dist/styles/dialog.css +1 -1
  170. package/dist/styles/divider.css +1 -1
  171. package/dist/styles/drawer.css +1 -1
  172. package/dist/styles/extended-fab.css +1 -1
  173. package/dist/styles/fab-menu.css +1 -1
  174. package/dist/styles/fab.css +1 -1
  175. package/dist/styles/icon-button.css +1 -1
  176. package/dist/styles/list.css +1 -1
  177. package/dist/styles/loading-indicator.css +1 -1
  178. package/dist/styles/menu.css +1 -1
  179. package/dist/styles/navigation-bar.css +1 -1
  180. package/dist/styles/navigation-rail.css +1 -1
  181. package/dist/styles/progress.css +1 -1
  182. package/dist/styles/radios.css +1 -1
  183. package/dist/styles/search.css +1 -1
  184. package/dist/styles/select.css +1 -1
  185. package/dist/styles/side-sheet.css +1 -1
  186. package/dist/styles/slider.css +1 -1
  187. package/dist/styles/snackbar.css +1 -1
  188. package/dist/styles/split-button.css +1 -1
  189. package/dist/styles/switch.css +1 -1
  190. package/dist/styles/tabs.css +2 -2
  191. package/dist/styles/text-field.css +1 -1
  192. package/dist/styles/timepicker.css +1 -1
  193. package/dist/styles/toolbar.css +1 -1
  194. package/dist/styles/tooltip.css +1 -1
  195. package/dist/styles/top-app-bar.css +1 -1
  196. package/dist/styles/typography.css +1 -1
  197. package/dist/styles/utilities.css +1 -1
  198. package/dist/styles.css +2 -2
  199. package/dist/themes/autumn-contrast.css +1 -1
  200. package/dist/themes/autumn.css +1 -1
  201. package/dist/themes/baseline-contrast.css +1 -1
  202. package/dist/themes/baseline.css +2 -2
  203. package/dist/themes/brownbeige-contrast.css +1 -1
  204. package/dist/themes/brownbeige.css +1 -1
  205. package/dist/themes/content-contrast.css +1 -1
  206. package/dist/themes/content.css +1 -1
  207. package/dist/themes/desert-contrast.css +1 -1
  208. package/dist/themes/desert.css +1 -1
  209. package/dist/themes/expressive-contrast.css +1 -1
  210. package/dist/themes/expressive.css +1 -1
  211. package/dist/themes/fidelity-contrast.css +1 -1
  212. package/dist/themes/fidelity.css +1 -1
  213. package/dist/themes/forest-contrast.css +1 -1
  214. package/dist/themes/forest.css +1 -1
  215. package/dist/themes/fruit-salad-contrast.css +1 -1
  216. package/dist/themes/fruit-salad.css +1 -1
  217. package/dist/themes/highcontrast-contrast.css +1 -1
  218. package/dist/themes/highcontrast.css +1 -1
  219. package/dist/themes/monochrome-contrast.css +1 -1
  220. package/dist/themes/monochrome.css +1 -1
  221. package/dist/themes/neutral-contrast.css +1 -1
  222. package/dist/themes/neutral.css +1 -1
  223. package/dist/themes/ocean-contrast.css +1 -1
  224. package/dist/themes/ocean.css +1 -1
  225. package/dist/themes/rainbow-contrast.css +1 -1
  226. package/dist/themes/rainbow.css +1 -1
  227. package/dist/themes/sageivory-contrast.css +1 -1
  228. package/dist/themes/sageivory.css +1 -1
  229. package/dist/themes/spring-contrast.css +1 -1
  230. package/dist/themes/spring.css +1 -1
  231. package/dist/themes/summer-contrast.css +1 -1
  232. package/dist/themes/summer.css +1 -1
  233. package/dist/themes/sunset-contrast.css +1 -1
  234. package/dist/themes/sunset.css +1 -1
  235. package/dist/themes/tealcaramel-contrast.css +1 -1
  236. package/dist/themes/tealcaramel.css +1 -1
  237. package/dist/themes/vibrant-contrast.css +1 -1
  238. package/dist/themes/vibrant.css +1 -1
  239. package/dist/vue/badge.js +0 -2
  240. package/dist/vue/bottom-app-bar.js +0 -2
  241. package/dist/vue/bottom-sheet.js +0 -2
  242. package/dist/vue/button-group-item.js +0 -2
  243. package/dist/vue/button-group.js +0 -2
  244. package/dist/vue/button.js +0 -2
  245. package/dist/vue/card.js +0 -2
  246. package/dist/vue/carousel-item.js +0 -2
  247. package/dist/vue/carousel.js +0 -2
  248. package/dist/vue/checkbox.js +0 -2
  249. package/dist/vue/chip.js +0 -2
  250. package/dist/vue/chips.js +0 -2
  251. package/dist/vue/datepicker.js +0 -2
  252. package/dist/vue/dialog.js +0 -2
  253. package/dist/vue/divider.js +0 -2
  254. package/dist/vue/drawer-item.js +0 -2
  255. package/dist/vue/drawer.js +0 -2
  256. package/dist/vue/extended-fab.js +0 -2
  257. package/dist/vue/fab-menu-item.js +0 -2
  258. package/dist/vue/fab-menu.js +0 -2
  259. package/dist/vue/fab.js +0 -2
  260. package/dist/vue/icon-button.js +0 -2
  261. package/dist/vue/list-item.js +0 -2
  262. package/dist/vue/list.js +0 -2
  263. package/dist/vue/loading-indicator.js +0 -2
  264. package/dist/vue/menu-item.js +0 -2
  265. package/dist/vue/menu.js +0 -2
  266. package/dist/vue/navigation-bar-item.js +0 -2
  267. package/dist/vue/navigation-bar.js +0 -2
  268. package/dist/vue/navigation-rail-item.js +0 -2
  269. package/dist/vue/navigation-rail.js +0 -2
  270. package/dist/vue/progress.js +0 -2
  271. package/dist/vue/radio.js +0 -2
  272. package/dist/vue/radios.js +0 -2
  273. package/dist/vue/search-suggestion.js +0 -2
  274. package/dist/vue/search.js +0 -2
  275. package/dist/vue/select-option.js +0 -2
  276. package/dist/vue/select.js +0 -2
  277. package/dist/vue/side-sheet.js +0 -2
  278. package/dist/vue/slider.js +0 -2
  279. package/dist/vue/snackbar.js +0 -2
  280. package/dist/vue/split-button.js +0 -2
  281. package/dist/vue/switch.js +0 -2
  282. package/dist/vue/tab.js +0 -2
  283. package/dist/vue/tabs.js +0 -2
  284. package/dist/vue/text-field.js +0 -2
  285. package/dist/vue/timepicker.js +0 -2
  286. package/dist/vue/toolbar.js +0 -2
  287. package/dist/vue/tooltip.js +0 -2
  288. package/dist/vue/top-app-bar.js +0 -2
  289. package/package.json +1 -1
  290. package/src/styles/components/_tabs.scss +20 -11
  291. package/src/styles/main.scss +3 -0
  292. package/src/styles/themes/_base-theme.scss +9 -3
  293. package/src/styles/themes/_baseline.scss +13 -4
@@ -1,5 +1,3 @@
1
- // src/vue/slider.ts
2
- // Generated by scripts/generate-adapters.ts from src/elements. Do not edit.
3
1
  import "material/elements/css/slider";
4
2
  import { sliderElement, defineSlider } from "../elements/slider.js";
5
3
  import { createComponent } from "./create.js";
@@ -1,5 +1,3 @@
1
- // src/vue/snackbar.ts
2
- // Generated by scripts/generate-adapters.ts from src/elements. Do not edit.
3
1
  import "material/elements/css/progress";
4
2
  import "material/elements/css/button";
5
3
  import "material/elements/css/icon-button";
@@ -1,5 +1,3 @@
1
- // src/vue/split-button.ts
2
- // Generated by scripts/generate-adapters.ts from src/elements. Do not edit.
3
1
  import "material/elements/css/progress";
4
2
  import "material/elements/css/button";
5
3
  import "material/elements/css/menu";
@@ -1,5 +1,3 @@
1
- // src/vue/switch.ts
2
- // Generated by scripts/generate-adapters.ts from src/elements. Do not edit.
3
1
  import "material/elements/css/switch";
4
2
  import { switchElement, defineSwitch } from "../elements/switch.js";
5
3
  import { createComponent } from "./create.js";
package/dist/vue/tab.js CHANGED
@@ -1,5 +1,3 @@
1
- // src/vue/tab.ts
2
- // Generated by scripts/generate-adapters.ts from src/elements. Do not edit.
3
1
  import { tabDeclaration } from "../elements/tabs.js";
4
2
  import { createDeclaration } from "./create.js";
5
3
  export const MTab = /*#__PURE__*/ createDeclaration(tabDeclaration, "MTab");
package/dist/vue/tabs.js CHANGED
@@ -1,5 +1,3 @@
1
- // src/vue/tabs.ts
2
- // Generated by scripts/generate-adapters.ts from src/elements. Do not edit.
3
1
  import "material/elements/css/badge";
4
2
  import "material/elements/css/progress";
5
3
  import "material/elements/css/button";
@@ -1,5 +1,3 @@
1
- // src/vue/text-field.ts
2
- // Generated by scripts/generate-adapters.ts from src/elements. Do not edit.
3
1
  import "material/elements/css/text-field";
4
2
  import { textFieldElement, defineTextField } from "../elements/text-field.js";
5
3
  import { createComponent } from "./create.js";
@@ -1,5 +1,3 @@
1
- // src/vue/timepicker.ts
2
- // Generated by scripts/generate-adapters.ts from src/elements. Do not edit.
3
1
  import "material/elements/css/timepicker";
4
2
  import { timepickerElement, defineTimepicker } from "../elements/timepicker.js";
5
3
  import { createComponent } from "./create.js";
@@ -1,5 +1,3 @@
1
- // src/vue/toolbar.ts
2
- // Generated by scripts/generate-adapters.ts from src/elements. Do not edit.
3
1
  import "material/elements/css/icon-button";
4
2
  import "material/elements/css/toolbar";
5
3
  import { toolbarElement, defineToolbar } from "../elements/toolbar.js";
@@ -1,5 +1,3 @@
1
- // src/vue/tooltip.ts
2
- // Generated by scripts/generate-adapters.ts from src/elements. Do not edit.
3
1
  import "material/elements/css/tooltip";
4
2
  import { tooltipElement, defineTooltip } from "../elements/tooltip.js";
5
3
  import { createComponent } from "./create.js";
@@ -1,5 +1,3 @@
1
- // src/vue/top-app-bar.ts
2
- // Generated by scripts/generate-adapters.ts from src/elements. Do not edit.
3
1
  import "material/elements/css/top-app-bar";
4
2
  import { topAppBarElement, defineTopAppBar } from "../elements/top-app-bar.js";
5
3
  import { createComponent } from "./create.js";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "material",
3
- "version": "3.0.6",
3
+ "version": "3.2.0",
4
4
  "description": "Material Design 3 components for the web: plain JavaScript, web components, and React, Vue, Svelte and Solid components. TypeScript, zero dependencies.",
5
5
  "author": "floor",
6
6
  "license": "MIT",
@@ -291,21 +291,30 @@ $container: "#{base.$prefix}-tabs";
291
291
  @include m.visually-hidden;
292
292
  }
293
293
 
294
- // Badge positioning (2. Badge - optional). The layout modifier is on the tab
295
- // itself, so these hang off &, not off a nested tab.
296
- &--icon-only .#{base.$prefix}-badge__wrapper .#{base.$prefix}-badge--top-right {
297
- top: 4px;
298
- right: 4px;
294
+ // Badge on the icon, else the label (tab.ts): 6dp over the icon, 4dp after the
295
+ // label, mirrored in RTL (m3.material.io/components/{tabs/specs,badges/guidelines}).
296
+ &--icon-only .#{base.$prefix}-badge__wrapper .#{base.$prefix}-badge--top-right,
297
+ &--icon-and-text .#{base.$prefix}-badge__wrapper .#{base.$prefix}-badge--top-right {
298
+ top: 0;
299
+ right: auto;
300
+ left: calc(100% - 6px);
301
+
302
+ @include m.rtl {
303
+ right: calc(100% - 6px);
304
+ left: auto;
305
+ }
299
306
  }
300
307
 
301
308
  &--text-only .#{base.$prefix}-badge__wrapper .#{base.$prefix}-badge--top-right {
302
- top: 8px;
303
- right: 8px;
304
- }
309
+ top: 50%;
310
+ right: auto;
311
+ left: calc(100% + 4px);
312
+ transform: translateY(-50%);
305
313
 
306
- &--icon-and-text .#{base.$prefix}-badge__wrapper .#{base.$prefix}-badge--top-right {
307
- top: 4px;
308
- right: calc(50% - 20px);
314
+ @include m.rtl {
315
+ right: calc(100% + 4px);
316
+ left: auto;
317
+ }
309
318
  }
310
319
 
311
320
  // ACTIVE TAB STATES - PRIMARY VARIANT
@@ -1,5 +1,8 @@
1
1
  // src/styles/main.scss
2
2
 
3
+ // Configure before any theme module is loaded.
4
+ @forward "themes/base-theme" show $contrast-emit;
5
+
3
6
  // Import Sass modules
4
7
  @use "sass:map";
5
8
  @use "sass:list" as sasslist;
@@ -1,13 +1,19 @@
1
1
  // src/styles/themes/_base-theme.scss
2
2
  @use 'sass:map';
3
+ @use 'sass:list';
3
4
  @use '../abstract/base' as *;
4
5
 
5
- // Build switch, not a public API (the README's Sass `@use … with` is unsupported).
6
+ // Public compilation option, forwarded by the themes and main Sass entries.
6
7
  // all: explicit attribute rules and the prefers-contrast block (the full stylesheet).
7
8
  // explicit: the attribute rules only (material/styles/contrast, material/themes/<name>-contrast).
8
9
  // preference: the prefers-contrast block only (material/styles/base, material/themes/<name>).
10
+ // none: standard roles only, with neither activation family.
9
11
  $contrast-emit: all !default;
10
12
 
13
+ @if not list.index((all, explicit, preference, none), $contrast-emit) {
14
+ @error "$contrast-emit must be all, explicit, preference, or none.";
15
+ }
16
+
11
17
  // Base theme definition with common properties and structure
12
18
  @mixin create-theme($name) {
13
19
  [data-theme="#{$name}"] {
@@ -80,7 +86,7 @@ $contrast-emit: all !default;
80
86
  }
81
87
  }
82
88
  }
83
- @if $contrast-emit != preference {
89
+ @if $contrast-emit == all or $contrast-emit == explicit {
84
90
  #{$scope}:is([data-theme-contrast="medium"], [data-theme-contrast="high"]) {
85
91
  @include contrast-modes($name, $shared);
86
92
  }
@@ -90,7 +96,7 @@ $contrast-emit: all !default;
90
96
  }
91
97
  }
92
98
  }
93
- @if $contrast-emit != explicit {
99
+ @if $contrast-emit == all or $contrast-emit == preference {
94
100
  @media (prefers-contrast: more) {
95
101
  #{$scope}:not([data-theme-contrast]) {
96
102
  @include contrast-modes($name, $high);
@@ -145,8 +145,13 @@
145
145
  --#{$prefix}-sys-color-inverse-primary: #6750a4;
146
146
  }
147
147
 
148
- // Apply baseline light theme to :root by default
149
- :root {
148
+ // Apply baseline light theme to :root by default. `:where()` keeps these
149
+ // declarations at zero specificity: `:root` and `[data-theme="name"]` share
150
+ // specificity (0,1,0), so an unconditional :root block wins wherever baseline
151
+ // is emitted after another theme (an app compiling the partials in its own
152
+ // order). At (0,0,0) a selected theme always wins, in any order, while the
153
+ // roles a theme does not declare still inherit from here.
154
+ :where(:root) {
150
155
  @include baseline-light-variables;
151
156
 
152
157
  // Apply dark theme based on system preference
@@ -155,8 +160,12 @@
155
160
  }
156
161
  }
157
162
 
158
- // Dark theme class for manual switching
159
- .dark-theme {
163
+ // Dark theme class for manual switching. `:where()` for the same reason: a
164
+ // page that selected a theme uses data-theme-mode="dark" instead, and a stray
165
+ // dark-theme class on a themed element must not override it. On an unthemed
166
+ // page (or a nested container, where nothing else declares the roles) the
167
+ // class behaves exactly as before.
168
+ :where(.dark-theme) {
160
169
  @include baseline-dark-variables;
161
170
  }
162
171