material 3.1.0 → 3.2.1

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 (334) hide show
  1. package/README.md +3 -3
  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/button-group.d.ts +1 -0
  7. package/dist/elements/button-group.js +1 -0
  8. package/dist/elements/button.js +1 -1
  9. package/dist/elements/checkbox.d.ts +1 -0
  10. package/dist/elements/checkbox.js +1 -0
  11. package/dist/elements/css/hosts/badge.css +1 -1
  12. package/dist/elements/css/hosts/bottom-app-bar.css +1 -1
  13. package/dist/elements/css/hosts/bottom-sheet.css +1 -1
  14. package/dist/elements/css/hosts/button-group.css +1 -1
  15. package/dist/elements/css/hosts/button.css +1 -1
  16. package/dist/elements/css/hosts/card.css +1 -1
  17. package/dist/elements/css/hosts/carousel.css +1 -1
  18. package/dist/elements/css/hosts/checkbox.css +1 -1
  19. package/dist/elements/css/hosts/chips.css +1 -1
  20. package/dist/elements/css/hosts/datepicker.css +1 -1
  21. package/dist/elements/css/hosts/dialog.css +1 -1
  22. package/dist/elements/css/hosts/divider.css +1 -1
  23. package/dist/elements/css/hosts/drawer.css +1 -1
  24. package/dist/elements/css/hosts/icon-button.css +1 -1
  25. package/dist/elements/css/hosts/list.css +1 -1
  26. package/dist/elements/css/hosts/loading-indicator.css +1 -1
  27. package/dist/elements/css/hosts/menu.css +1 -1
  28. package/dist/elements/css/hosts/navigation-bar.css +1 -1
  29. package/dist/elements/css/hosts/navigation-rail.css +1 -1
  30. package/dist/elements/css/hosts/progress.css +1 -1
  31. package/dist/elements/css/hosts/radios.css +1 -1
  32. package/dist/elements/css/hosts/search.css +1 -1
  33. package/dist/elements/css/hosts/select.css +1 -1
  34. package/dist/elements/css/hosts/side-sheet.css +1 -1
  35. package/dist/elements/css/hosts/slider.css +1 -1
  36. package/dist/elements/css/hosts/snackbar.css +1 -1
  37. package/dist/elements/css/hosts/split-button.css +1 -1
  38. package/dist/elements/css/hosts/switch.css +1 -1
  39. package/dist/elements/css/hosts/tabs.css +1 -1
  40. package/dist/elements/css/hosts/timepicker.css +1 -1
  41. package/dist/elements/css/hosts/toolbar.css +1 -1
  42. package/dist/elements/css/hosts/tooltip.css +1 -1
  43. package/dist/elements/css/hosts/top-app-bar.css +1 -1
  44. package/dist/elements/css/tabs.css +1 -1
  45. package/dist/elements/css/tabs.js +1 -1
  46. package/dist/elements/datepicker.d.ts +1 -0
  47. package/dist/elements/datepicker.js +1 -0
  48. package/dist/elements/define.d.ts +8 -7
  49. package/dist/elements/define.js +77 -2
  50. package/dist/elements/icon-button.js +1 -1
  51. package/dist/elements/index.d.ts +2 -2
  52. package/dist/elements/preupgrade/badge.css +1 -1
  53. package/dist/elements/preupgrade/bottom-app-bar.css +1 -1
  54. package/dist/elements/preupgrade/bottom-sheet.css +1 -1
  55. package/dist/elements/preupgrade/button-group.css +2 -2
  56. package/dist/elements/preupgrade/button.css +1 -1
  57. package/dist/elements/preupgrade/card.css +1 -1
  58. package/dist/elements/preupgrade/carousel.css +1 -1
  59. package/dist/elements/preupgrade/checkbox.css +1 -1
  60. package/dist/elements/preupgrade/chips.css +1 -1
  61. package/dist/elements/preupgrade/datepicker.css +2 -2
  62. package/dist/elements/preupgrade/dialog.css +1 -1
  63. package/dist/elements/preupgrade/divider.css +1 -1
  64. package/dist/elements/preupgrade/drawer.css +1 -1
  65. package/dist/elements/preupgrade/extended-fab.css +1 -1
  66. package/dist/elements/preupgrade/fab-menu.css +1 -1
  67. package/dist/elements/preupgrade/fab.css +1 -1
  68. package/dist/elements/preupgrade/icon-button.css +1 -1
  69. package/dist/elements/preupgrade/list.css +1 -1
  70. package/dist/elements/preupgrade/loading-indicator.css +1 -1
  71. package/dist/elements/preupgrade/menu.css +1 -1
  72. package/dist/elements/preupgrade/navigation-bar.css +1 -1
  73. package/dist/elements/preupgrade/navigation-rail.css +1 -1
  74. package/dist/elements/preupgrade/progress.css +1 -1
  75. package/dist/elements/preupgrade/radios.css +1 -1
  76. package/dist/elements/preupgrade/search.css +1 -1
  77. package/dist/elements/preupgrade/select.css +1 -1
  78. package/dist/elements/preupgrade/side-sheet.css +1 -1
  79. package/dist/elements/preupgrade/slider.css +1 -1
  80. package/dist/elements/preupgrade/snackbar.css +1 -1
  81. package/dist/elements/preupgrade/split-button.css +1 -1
  82. package/dist/elements/preupgrade/switch.css +1 -1
  83. package/dist/elements/preupgrade/tabs.css +1 -1
  84. package/dist/elements/preupgrade/text-field.css +1 -1
  85. package/dist/elements/preupgrade/timepicker.css +1 -1
  86. package/dist/elements/preupgrade/toolbar.css +1 -1
  87. package/dist/elements/preupgrade/tooltip.css +1 -1
  88. package/dist/elements/preupgrade/top-app-bar.css +1 -1
  89. package/dist/elements/preupgrade.css +2 -2
  90. package/dist/elements/preupgrade.js +1 -1
  91. package/dist/elements/select.js +1 -1
  92. package/dist/elements/split-button.d.ts +29 -12
  93. package/dist/elements/split-button.js +22 -3
  94. package/dist/elements/tabs.js +3 -1
  95. package/dist/elements/text-field.js +15 -0
  96. package/dist/package.json +1 -1
  97. package/dist/react/badge.js +0 -2
  98. package/dist/react/bottom-app-bar.js +0 -2
  99. package/dist/react/bottom-sheet.js +0 -2
  100. package/dist/react/button-group-item.js +0 -2
  101. package/dist/react/button-group.js +0 -2
  102. package/dist/react/button.js +0 -2
  103. package/dist/react/card.js +0 -2
  104. package/dist/react/carousel-item.js +0 -2
  105. package/dist/react/carousel.js +0 -2
  106. package/dist/react/checkbox.js +0 -2
  107. package/dist/react/chip.js +0 -2
  108. package/dist/react/chips.js +0 -2
  109. package/dist/react/datepicker.js +0 -2
  110. package/dist/react/dialog.js +0 -2
  111. package/dist/react/divider.js +0 -2
  112. package/dist/react/drawer-item.js +0 -2
  113. package/dist/react/drawer.js +0 -2
  114. package/dist/react/extended-fab.js +0 -2
  115. package/dist/react/fab-menu-item.js +0 -2
  116. package/dist/react/fab-menu.js +0 -2
  117. package/dist/react/fab.js +0 -2
  118. package/dist/react/icon-button.js +0 -2
  119. package/dist/react/list-item.js +0 -2
  120. package/dist/react/list.js +0 -2
  121. package/dist/react/loading-indicator.js +0 -2
  122. package/dist/react/menu-item.js +0 -2
  123. package/dist/react/menu.js +0 -2
  124. package/dist/react/navigation-bar-item.js +0 -2
  125. package/dist/react/navigation-bar.js +0 -2
  126. package/dist/react/navigation-rail-item.js +0 -2
  127. package/dist/react/navigation-rail.js +0 -2
  128. package/dist/react/progress.js +0 -2
  129. package/dist/react/radio.js +0 -2
  130. package/dist/react/radios.js +0 -2
  131. package/dist/react/search-suggestion.js +0 -2
  132. package/dist/react/search.js +0 -2
  133. package/dist/react/select-option.js +0 -2
  134. package/dist/react/select.js +0 -2
  135. package/dist/react/side-sheet.js +0 -2
  136. package/dist/react/slider.js +0 -2
  137. package/dist/react/snackbar.js +0 -2
  138. package/dist/react/split-button.js +0 -2
  139. package/dist/react/switch.js +0 -2
  140. package/dist/react/tab.js +0 -2
  141. package/dist/react/tabs.js +0 -2
  142. package/dist/react/text-field.js +0 -2
  143. package/dist/react/timepicker.js +0 -2
  144. package/dist/react/toolbar.js +0 -2
  145. package/dist/react/tooltip.js +0 -2
  146. package/dist/react/top-app-bar.js +0 -2
  147. package/dist/solid/badge.js +0 -2
  148. package/dist/solid/bottom-app-bar.js +0 -2
  149. package/dist/solid/bottom-sheet.js +0 -2
  150. package/dist/solid/button-group-item.js +0 -2
  151. package/dist/solid/button-group.js +0 -2
  152. package/dist/solid/button.js +0 -2
  153. package/dist/solid/card.js +0 -2
  154. package/dist/solid/carousel-item.js +0 -2
  155. package/dist/solid/carousel.js +0 -2
  156. package/dist/solid/checkbox.js +0 -2
  157. package/dist/solid/chip.js +0 -2
  158. package/dist/solid/chips.js +0 -2
  159. package/dist/solid/datepicker.js +0 -2
  160. package/dist/solid/dialog.js +0 -2
  161. package/dist/solid/divider.js +0 -2
  162. package/dist/solid/drawer-item.js +0 -2
  163. package/dist/solid/drawer.js +0 -2
  164. package/dist/solid/extended-fab.js +0 -2
  165. package/dist/solid/fab-menu-item.js +0 -2
  166. package/dist/solid/fab-menu.js +0 -2
  167. package/dist/solid/fab.js +0 -2
  168. package/dist/solid/icon-button.js +0 -2
  169. package/dist/solid/jsx.d.ts +2 -2
  170. package/dist/solid/list-item.js +0 -2
  171. package/dist/solid/list.js +0 -2
  172. package/dist/solid/loading-indicator.js +0 -2
  173. package/dist/solid/menu-item.js +0 -2
  174. package/dist/solid/menu.js +0 -2
  175. package/dist/solid/navigation-bar-item.js +0 -2
  176. package/dist/solid/navigation-bar.js +0 -2
  177. package/dist/solid/navigation-rail-item.js +0 -2
  178. package/dist/solid/navigation-rail.js +0 -2
  179. package/dist/solid/progress.js +0 -2
  180. package/dist/solid/radio.js +0 -2
  181. package/dist/solid/radios.js +0 -2
  182. package/dist/solid/search-suggestion.js +0 -2
  183. package/dist/solid/search.js +0 -2
  184. package/dist/solid/select-option.js +0 -2
  185. package/dist/solid/select.js +0 -2
  186. package/dist/solid/side-sheet.js +0 -2
  187. package/dist/solid/slider.js +0 -2
  188. package/dist/solid/snackbar.js +0 -2
  189. package/dist/solid/split-button.js +0 -2
  190. package/dist/solid/switch.js +0 -2
  191. package/dist/solid/tab.js +0 -2
  192. package/dist/solid/tabs.js +0 -2
  193. package/dist/solid/text-field.js +0 -2
  194. package/dist/solid/timepicker.js +0 -2
  195. package/dist/solid/toolbar.js +0 -2
  196. package/dist/solid/tooltip.js +0 -2
  197. package/dist/solid/top-app-bar.js +0 -2
  198. package/dist/styles/badge.css +1 -1
  199. package/dist/styles/base.css +2 -2
  200. package/dist/styles/bottom-app-bar.css +1 -1
  201. package/dist/styles/bottom-sheet.css +1 -1
  202. package/dist/styles/button-group.css +1 -1
  203. package/dist/styles/button.css +1 -1
  204. package/dist/styles/card.css +1 -1
  205. package/dist/styles/carousel.css +1 -1
  206. package/dist/styles/checkbox.css +1 -1
  207. package/dist/styles/chips.css +1 -1
  208. package/dist/styles/contrast.css +1 -1
  209. package/dist/styles/datepicker.css +1 -1
  210. package/dist/styles/dialog.css +1 -1
  211. package/dist/styles/divider.css +1 -1
  212. package/dist/styles/drawer.css +1 -1
  213. package/dist/styles/extended-fab.css +1 -1
  214. package/dist/styles/fab-menu.css +1 -1
  215. package/dist/styles/fab.css +1 -1
  216. package/dist/styles/icon-button.css +1 -1
  217. package/dist/styles/list.css +1 -1
  218. package/dist/styles/loading-indicator.css +1 -1
  219. package/dist/styles/menu.css +1 -1
  220. package/dist/styles/navigation-bar.css +1 -1
  221. package/dist/styles/navigation-rail.css +1 -1
  222. package/dist/styles/progress.css +1 -1
  223. package/dist/styles/radios.css +1 -1
  224. package/dist/styles/search.css +1 -1
  225. package/dist/styles/select.css +1 -1
  226. package/dist/styles/side-sheet.css +1 -1
  227. package/dist/styles/slider.css +1 -1
  228. package/dist/styles/snackbar.css +1 -1
  229. package/dist/styles/split-button.css +1 -1
  230. package/dist/styles/switch.css +1 -1
  231. package/dist/styles/tabs.css +2 -2
  232. package/dist/styles/text-field.css +1 -1
  233. package/dist/styles/timepicker.css +1 -1
  234. package/dist/styles/toolbar.css +1 -1
  235. package/dist/styles/tooltip.css +1 -1
  236. package/dist/styles/top-app-bar.css +1 -1
  237. package/dist/styles/typography.css +1 -1
  238. package/dist/styles/utilities.css +1 -1
  239. package/dist/styles.css +2 -2
  240. package/dist/themes/autumn-contrast.css +1 -1
  241. package/dist/themes/autumn.css +1 -1
  242. package/dist/themes/baseline-contrast.css +1 -1
  243. package/dist/themes/baseline.css +2 -2
  244. package/dist/themes/brownbeige-contrast.css +1 -1
  245. package/dist/themes/brownbeige.css +1 -1
  246. package/dist/themes/content-contrast.css +1 -1
  247. package/dist/themes/content.css +1 -1
  248. package/dist/themes/desert-contrast.css +1 -1
  249. package/dist/themes/desert.css +1 -1
  250. package/dist/themes/expressive-contrast.css +1 -1
  251. package/dist/themes/expressive.css +1 -1
  252. package/dist/themes/fidelity-contrast.css +1 -1
  253. package/dist/themes/fidelity.css +1 -1
  254. package/dist/themes/forest-contrast.css +1 -1
  255. package/dist/themes/forest.css +1 -1
  256. package/dist/themes/fruit-salad-contrast.css +1 -1
  257. package/dist/themes/fruit-salad.css +1 -1
  258. package/dist/themes/highcontrast-contrast.css +1 -1
  259. package/dist/themes/highcontrast.css +1 -1
  260. package/dist/themes/monochrome-contrast.css +1 -1
  261. package/dist/themes/monochrome.css +1 -1
  262. package/dist/themes/neutral-contrast.css +1 -1
  263. package/dist/themes/neutral.css +1 -1
  264. package/dist/themes/ocean-contrast.css +1 -1
  265. package/dist/themes/ocean.css +1 -1
  266. package/dist/themes/rainbow-contrast.css +1 -1
  267. package/dist/themes/rainbow.css +1 -1
  268. package/dist/themes/sageivory-contrast.css +1 -1
  269. package/dist/themes/sageivory.css +1 -1
  270. package/dist/themes/spring-contrast.css +1 -1
  271. package/dist/themes/spring.css +1 -1
  272. package/dist/themes/summer-contrast.css +1 -1
  273. package/dist/themes/summer.css +1 -1
  274. package/dist/themes/sunset-contrast.css +1 -1
  275. package/dist/themes/sunset.css +1 -1
  276. package/dist/themes/tealcaramel-contrast.css +1 -1
  277. package/dist/themes/tealcaramel.css +1 -1
  278. package/dist/themes/vibrant-contrast.css +1 -1
  279. package/dist/themes/vibrant.css +1 -1
  280. package/dist/vue/badge.js +0 -2
  281. package/dist/vue/bottom-app-bar.js +0 -2
  282. package/dist/vue/bottom-sheet.js +0 -2
  283. package/dist/vue/button-group-item.js +0 -2
  284. package/dist/vue/button-group.js +0 -2
  285. package/dist/vue/button.js +0 -2
  286. package/dist/vue/card.js +0 -2
  287. package/dist/vue/carousel-item.js +0 -2
  288. package/dist/vue/carousel.js +0 -2
  289. package/dist/vue/checkbox.js +0 -2
  290. package/dist/vue/chip.js +0 -2
  291. package/dist/vue/chips.js +0 -2
  292. package/dist/vue/datepicker.js +0 -2
  293. package/dist/vue/dialog.js +0 -2
  294. package/dist/vue/divider.js +0 -2
  295. package/dist/vue/drawer-item.js +0 -2
  296. package/dist/vue/drawer.js +0 -2
  297. package/dist/vue/extended-fab.js +0 -2
  298. package/dist/vue/fab-menu-item.js +0 -2
  299. package/dist/vue/fab-menu.js +0 -2
  300. package/dist/vue/fab.js +0 -2
  301. package/dist/vue/icon-button.js +0 -2
  302. package/dist/vue/list-item.js +0 -2
  303. package/dist/vue/list.js +0 -2
  304. package/dist/vue/loading-indicator.js +0 -2
  305. package/dist/vue/menu-item.js +0 -2
  306. package/dist/vue/menu.js +0 -2
  307. package/dist/vue/navigation-bar-item.js +0 -2
  308. package/dist/vue/navigation-bar.js +0 -2
  309. package/dist/vue/navigation-rail-item.js +0 -2
  310. package/dist/vue/navigation-rail.js +0 -2
  311. package/dist/vue/progress.js +0 -2
  312. package/dist/vue/radio.js +0 -2
  313. package/dist/vue/radios.js +0 -2
  314. package/dist/vue/search-suggestion.js +0 -2
  315. package/dist/vue/search.js +0 -2
  316. package/dist/vue/select-option.js +0 -2
  317. package/dist/vue/select.js +0 -2
  318. package/dist/vue/side-sheet.js +0 -2
  319. package/dist/vue/slider.js +0 -2
  320. package/dist/vue/snackbar.js +0 -2
  321. package/dist/vue/split-button.js +0 -2
  322. package/dist/vue/switch.js +0 -2
  323. package/dist/vue/tab.js +0 -2
  324. package/dist/vue/tabs.js +0 -2
  325. package/dist/vue/text-field.js +0 -2
  326. package/dist/vue/timepicker.js +0 -2
  327. package/dist/vue/toolbar.js +0 -2
  328. package/dist/vue/tooltip.js +0 -2
  329. package/dist/vue/top-app-bar.js +0 -2
  330. package/package.json +1 -1
  331. package/src/styles/components/_tabs.scss +20 -11
  332. package/src/styles/elements/_button-group.scss +87 -24
  333. package/src/styles/elements/_datepicker.scss +1 -1
  334. 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.1.0",
3
+ "version": "3.2.1",
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,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;
@@ -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