material 3.0.0-next.0 → 3.0.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 (253) hide show
  1. package/README.md +59 -370
  2. package/dist/components/badge/index.d.ts +1 -1
  3. package/dist/components/badge/index.js +1 -1
  4. package/dist/components/button/index.d.ts +1 -1
  5. package/dist/components/button/index.js +1 -1
  6. package/dist/components/card/index.d.ts +1 -1
  7. package/dist/components/card/index.js +1 -1
  8. package/dist/components/checkbox/index.d.ts +1 -1
  9. package/dist/components/checkbox/index.js +1 -1
  10. package/dist/components/chips/index.d.ts +1 -1
  11. package/dist/components/chips/index.js +1 -1
  12. package/dist/components/datepicker/index.d.ts +1 -1
  13. package/dist/components/datepicker/index.js +1 -1
  14. package/dist/components/dialog/index.d.ts +1 -1
  15. package/dist/components/dialog/index.js +1 -1
  16. package/dist/components/divider/index.d.ts +1 -1
  17. package/dist/components/divider/index.js +1 -1
  18. package/dist/components/drawer/index.d.ts +1 -1
  19. package/dist/components/drawer/index.js +1 -1
  20. package/dist/components/index.d.ts +1 -1
  21. package/dist/components/list/config.js +6 -1
  22. package/dist/components/list/constants.d.ts +10 -0
  23. package/dist/components/list/constants.js +4 -0
  24. package/dist/components/list/index.d.ts +3 -3
  25. package/dist/components/list/index.js +2 -2
  26. package/dist/components/list/list.d.ts +17 -0
  27. package/dist/components/list/list.js +2 -2
  28. package/dist/components/list/types.d.ts +29 -1
  29. package/dist/components/loading-indicator/index.d.ts +1 -1
  30. package/dist/components/loading-indicator/index.js +1 -1
  31. package/dist/components/menu/index.d.ts +1 -1
  32. package/dist/components/menu/index.js +1 -1
  33. package/dist/components/progress/index.d.ts +1 -1
  34. package/dist/components/progress/index.js +1 -1
  35. package/dist/components/progress/types.d.ts +20 -10
  36. package/dist/components/radios/index.d.ts +1 -1
  37. package/dist/components/radios/index.js +1 -1
  38. package/dist/components/search/index.d.ts +1 -1
  39. package/dist/components/search/index.js +1 -1
  40. package/dist/components/select/index.d.ts +1 -1
  41. package/dist/components/select/index.js +1 -1
  42. package/dist/components/slider/index.d.ts +1 -1
  43. package/dist/components/slider/index.js +1 -1
  44. package/dist/components/slider/types.d.ts +7 -0
  45. package/dist/components/snackbar/index.d.ts +1 -1
  46. package/dist/components/snackbar/index.js +1 -1
  47. package/dist/components/split-button/index.d.ts +1 -1
  48. package/dist/components/split-button/index.js +1 -1
  49. package/dist/components/switch/index.d.ts +1 -1
  50. package/dist/components/switch/index.js +1 -1
  51. package/dist/components/tabs/index.d.ts +1 -0
  52. package/dist/components/tabs/index.js +1 -0
  53. package/dist/components/tabs/types.d.ts +15 -3
  54. package/dist/components/text-field/features/placement.js +7 -4
  55. package/dist/components/timepicker/index.d.ts +1 -1
  56. package/dist/components/timepicker/index.js +1 -1
  57. package/dist/components/tooltip/index.d.ts +1 -1
  58. package/dist/components/tooltip/index.js +1 -1
  59. package/dist/core/compose/features/textinput.js +3 -1
  60. package/dist/core/compose/index.d.ts +1 -1
  61. package/dist/core/dom/html.d.ts +1 -1
  62. package/dist/elements/css/button.css +1 -1
  63. package/dist/elements/css/button.js +1 -1
  64. package/dist/elements/css/card.css +1 -1
  65. package/dist/elements/css/card.js +1 -1
  66. package/dist/elements/css/checkbox.css +1 -1
  67. package/dist/elements/css/checkbox.js +1 -1
  68. package/dist/elements/css/chips.css +1 -1
  69. package/dist/elements/css/chips.js +1 -1
  70. package/dist/elements/css/dialog.css +1 -1
  71. package/dist/elements/css/dialog.js +1 -1
  72. package/dist/elements/css/extended-fab.css +1 -1
  73. package/dist/elements/css/extended-fab.js +1 -1
  74. package/dist/elements/css/fab-menu.css +1 -1
  75. package/dist/elements/css/fab-menu.js +1 -1
  76. package/dist/elements/css/fab.css +1 -1
  77. package/dist/elements/css/fab.js +1 -1
  78. package/dist/elements/css/hosts/switch.css +1 -1
  79. package/dist/elements/css/hosts/text-field.css +1 -1
  80. package/dist/elements/css/icon-button.css +1 -1
  81. package/dist/elements/css/icon-button.js +1 -1
  82. package/dist/elements/css/list.css +1 -1
  83. package/dist/elements/css/list.js +1 -1
  84. package/dist/elements/css/menu.css +1 -1
  85. package/dist/elements/css/menu.js +1 -1
  86. package/dist/elements/css/radios.css +1 -1
  87. package/dist/elements/css/radios.js +1 -1
  88. package/dist/elements/css/select.css +1 -1
  89. package/dist/elements/css/select.js +1 -1
  90. package/dist/elements/css/side-sheet.css +1 -1
  91. package/dist/elements/css/side-sheet.js +1 -1
  92. package/dist/elements/css/slider.css +1 -1
  93. package/dist/elements/css/slider.js +1 -1
  94. package/dist/elements/css/snackbar.css +1 -1
  95. package/dist/elements/css/snackbar.js +1 -1
  96. package/dist/elements/css/switch.css +1 -1
  97. package/dist/elements/css/switch.js +1 -1
  98. package/dist/elements/css/text-field.css +1 -1
  99. package/dist/elements/css/text-field.js +1 -1
  100. package/dist/elements/define.d.ts +20 -0
  101. package/dist/elements/list.d.ts +6 -0
  102. package/dist/elements/list.js +1 -0
  103. package/dist/elements/preupgrade/badge.css +1 -1
  104. package/dist/elements/preupgrade/bottom-app-bar.css +1 -1
  105. package/dist/elements/preupgrade/bottom-sheet.css +1 -1
  106. package/dist/elements/preupgrade/button-group.css +1 -1
  107. package/dist/elements/preupgrade/button.css +2 -2
  108. package/dist/elements/preupgrade/card.css +1 -1
  109. package/dist/elements/preupgrade/carousel.css +1 -1
  110. package/dist/elements/preupgrade/checkbox.css +2 -2
  111. package/dist/elements/preupgrade/chips.css +1 -1
  112. package/dist/elements/preupgrade/datepicker.css +1 -1
  113. package/dist/elements/preupgrade/dialog.css +1 -1
  114. package/dist/elements/preupgrade/divider.css +1 -1
  115. package/dist/elements/preupgrade/drawer.css +1 -1
  116. package/dist/elements/preupgrade/extended-fab.css +1 -1
  117. package/dist/elements/preupgrade/fab-menu.css +1 -1
  118. package/dist/elements/preupgrade/fab.css +1 -1
  119. package/dist/elements/preupgrade/icon-button.css +1 -1
  120. package/dist/elements/preupgrade/list.css +2 -2
  121. package/dist/elements/preupgrade/loading-indicator.css +1 -1
  122. package/dist/elements/preupgrade/menu.css +1 -1
  123. package/dist/elements/preupgrade/navigation-bar.css +1 -1
  124. package/dist/elements/preupgrade/navigation-rail.css +1 -1
  125. package/dist/elements/preupgrade/progress.css +1 -1
  126. package/dist/elements/preupgrade/radios.css +2 -2
  127. package/dist/elements/preupgrade/search.css +1 -1
  128. package/dist/elements/preupgrade/select.css +1 -1
  129. package/dist/elements/preupgrade/side-sheet.css +1 -1
  130. package/dist/elements/preupgrade/slider.css +1 -1
  131. package/dist/elements/preupgrade/snackbar.css +1 -1
  132. package/dist/elements/preupgrade/split-button.css +1 -1
  133. package/dist/elements/preupgrade/switch.css +2 -2
  134. package/dist/elements/preupgrade/tabs.css +1 -1
  135. package/dist/elements/preupgrade/text-field.css +2 -2
  136. package/dist/elements/preupgrade/timepicker.css +1 -1
  137. package/dist/elements/preupgrade/toolbar.css +1 -1
  138. package/dist/elements/preupgrade/tooltip.css +1 -1
  139. package/dist/elements/preupgrade/top-app-bar.css +1 -1
  140. package/dist/elements/preupgrade.css +2 -2
  141. package/dist/elements/preupgrade.js +1 -1
  142. package/dist/elements/styles.d.ts +13 -1
  143. package/dist/elements/switch.d.ts +1 -0
  144. package/dist/elements/switch.js +1 -0
  145. package/dist/elements/text-field.js +1 -5
  146. package/dist/package.json +28 -4
  147. package/dist/styles/badge.css +1 -1
  148. package/dist/styles/base.css +1 -1
  149. package/dist/styles/bottom-app-bar.css +1 -1
  150. package/dist/styles/bottom-sheet.css +1 -1
  151. package/dist/styles/button-group.css +1 -1
  152. package/dist/styles/button.css +2 -2
  153. package/dist/styles/card.css +2 -2
  154. package/dist/styles/carousel.css +1 -1
  155. package/dist/styles/checkbox.css +2 -2
  156. package/dist/styles/chips.css +2 -2
  157. package/dist/styles/contrast.css +1 -1
  158. package/dist/styles/datepicker.css +1 -1
  159. package/dist/styles/dialog.css +2 -2
  160. package/dist/styles/divider.css +1 -1
  161. package/dist/styles/drawer.css +1 -1
  162. package/dist/styles/extended-fab.css +2 -2
  163. package/dist/styles/fab-menu.css +2 -2
  164. package/dist/styles/fab.css +2 -2
  165. package/dist/styles/icon-button.css +2 -2
  166. package/dist/styles/list.css +2 -2
  167. package/dist/styles/loading-indicator.css +1 -1
  168. package/dist/styles/menu.css +2 -2
  169. package/dist/styles/navigation-bar.css +1 -1
  170. package/dist/styles/navigation-rail.css +1 -1
  171. package/dist/styles/progress.css +1 -1
  172. package/dist/styles/radios.css +2 -2
  173. package/dist/styles/search.css +1 -1
  174. package/dist/styles/select.css +2 -2
  175. package/dist/styles/side-sheet.css +2 -2
  176. package/dist/styles/slider.css +2 -2
  177. package/dist/styles/snackbar.css +2 -2
  178. package/dist/styles/split-button.css +1 -1
  179. package/dist/styles/switch.css +2 -2
  180. package/dist/styles/tabs.css +1 -1
  181. package/dist/styles/text-field.css +2 -2
  182. package/dist/styles/timepicker.css +1 -1
  183. package/dist/styles/toolbar.css +1 -1
  184. package/dist/styles/tooltip.css +1 -1
  185. package/dist/styles/top-app-bar.css +1 -1
  186. package/dist/styles/typography.css +1 -1
  187. package/dist/styles/utilities.css +1 -1
  188. package/dist/styles.css +2 -2
  189. package/dist/themes/autumn-contrast.css +1 -1
  190. package/dist/themes/autumn.css +1 -1
  191. package/dist/themes/baseline-contrast.css +1 -1
  192. package/dist/themes/baseline.css +1 -1
  193. package/dist/themes/brownbeige-contrast.css +1 -1
  194. package/dist/themes/brownbeige.css +1 -1
  195. package/dist/themes/content-contrast.css +1 -1
  196. package/dist/themes/content.css +1 -1
  197. package/dist/themes/desert-contrast.css +1 -1
  198. package/dist/themes/desert.css +1 -1
  199. package/dist/themes/expressive-contrast.css +1 -1
  200. package/dist/themes/expressive.css +1 -1
  201. package/dist/themes/fidelity-contrast.css +1 -1
  202. package/dist/themes/fidelity.css +1 -1
  203. package/dist/themes/forest-contrast.css +1 -1
  204. package/dist/themes/forest.css +1 -1
  205. package/dist/themes/fruit-salad-contrast.css +1 -1
  206. package/dist/themes/fruit-salad.css +1 -1
  207. package/dist/themes/highcontrast-contrast.css +1 -1
  208. package/dist/themes/highcontrast.css +1 -1
  209. package/dist/themes/monochrome-contrast.css +1 -1
  210. package/dist/themes/monochrome.css +1 -1
  211. package/dist/themes/neutral-contrast.css +1 -1
  212. package/dist/themes/neutral.css +1 -1
  213. package/dist/themes/ocean-contrast.css +1 -1
  214. package/dist/themes/ocean.css +1 -1
  215. package/dist/themes/rainbow-contrast.css +1 -1
  216. package/dist/themes/rainbow.css +1 -1
  217. package/dist/themes/sageivory-contrast.css +1 -1
  218. package/dist/themes/sageivory.css +1 -1
  219. package/dist/themes/spring-contrast.css +1 -1
  220. package/dist/themes/spring.css +1 -1
  221. package/dist/themes/summer-contrast.css +1 -1
  222. package/dist/themes/summer.css +1 -1
  223. package/dist/themes/sunset-contrast.css +1 -1
  224. package/dist/themes/sunset.css +1 -1
  225. package/dist/themes/tealcaramel-contrast.css +1 -1
  226. package/dist/themes/tealcaramel.css +1 -1
  227. package/dist/themes/vibrant-contrast.css +1 -1
  228. package/dist/themes/vibrant.css +1 -1
  229. package/package.json +28 -4
  230. package/src/styles/abstract/_mixins.scss +17 -5
  231. package/src/styles/abstract/_variables.scss +1 -1
  232. package/src/styles/components/_button.scss +10 -7
  233. package/src/styles/components/_checkbox.scss +10 -0
  234. package/src/styles/components/_chips.scss +10 -0
  235. package/src/styles/components/_dialog.scss +16 -0
  236. package/src/styles/components/_fab-menu.scss +20 -1
  237. package/src/styles/components/_icon-button.scss +6 -0
  238. package/src/styles/components/_list.scss +48 -4
  239. package/src/styles/components/_menu.scss +8 -0
  240. package/src/styles/components/_radios.scss +22 -4
  241. package/src/styles/components/_select.scss +13 -29
  242. package/src/styles/components/_side-sheet.scss +22 -0
  243. package/src/styles/components/_slider.scss +3 -3
  244. package/src/styles/components/_switch.scss +19 -0
  245. package/src/styles/components/_text-field.scss +97 -319
  246. package/src/styles/elements/_button.scss +17 -1
  247. package/src/styles/elements/_checkbox.scss +16 -0
  248. package/src/styles/elements/_list.scss +6 -0
  249. package/src/styles/elements/_radios.scss +3 -2
  250. package/src/styles/elements/_switch.scss +52 -0
  251. package/src/styles/elements/_text-field.scss +21 -0
  252. package/dist/LICENSE +0 -21
  253. package/dist/README.md +0 -438
@@ -1,2 +1,2 @@
1
1
  import { createDivider } from "./divider.js";
2
- export { createDivider };
2
+ export { createDivider, createDivider as default };
@@ -2,5 +2,5 @@
2
2
  * Drawer component module
3
3
  * @module components/drawer
4
4
  */
5
- export { default } from "./drawer.js";
5
+ export { default, default as createDrawer } from "./drawer.js";
6
6
  export type { DrawerConfig, DrawerComponent, DrawerVariant, DrawerPosition, DrawerItemConfig, DrawerSelectEvent, DrawerEvents, } from "./types.js";
@@ -1 +1 @@
1
- export { default } from "./drawer.js";
1
+ export { default, default as createDrawer } from "./drawer.js";
@@ -68,7 +68,7 @@ export type { FabConfig, FabComponent, FabVariant } from "./fab/types.js";
68
68
  export type { ExtendedFabConfig, ExtendedFabComponent, ExtendedFabVariant, } from "./extended-fab/types.js";
69
69
  export type { IconButtonConfig, IconButtonComponent, } from "./icon-button/types.js";
70
70
  export type { IconButtonVariant } from "./icon-button/constants.js";
71
- export type { ListConfig, ListItem, ListSlot, ListComponent, SelectEvent as ListSelectEvent, LoadEvent, } from "./list/types.js";
71
+ export type { ListConfig, ListVariant, ListItem, ListSlot, ListComponent, SelectEvent as ListSelectEvent, LoadEvent, } from "./list/types.js";
72
72
  export type { MenuConfig, MenuVariant, MenuComponent, MenuItem } from "./menu/types.js";
73
73
  export type { SplitButtonConfig, SplitButtonComponent, SplitButtonVariant, } from "./split-button/types.js";
74
74
  export type { LoadingIndicatorConfig, LoadingIndicatorComponent, } from "./loading-indicator/types.js";
@@ -1,5 +1,7 @@
1
1
  import { createComponentConfig, createElementConfig as coreCreateElementConfig, } from "../../core/config/component.js";
2
+ import { LIST_VARIANTS } from "./constants.js";
2
3
  export const defaultConfig = {
4
+ variant: LIST_VARIANTS.STANDARD,
3
5
  items: [],
4
6
  trackSelection: true,
5
7
  multiSelect: false,
@@ -10,7 +12,10 @@ export const createBaseConfig = (config = {}) => {
10
12
  throw new TypeError("List items must be an array");
11
13
  }
12
14
  const merged = createComponentConfig(defaultConfig, config, "list");
13
- return { ...merged, items: merged.items ?? [] };
15
+ const variant = Object.values(LIST_VARIANTS).includes(merged.variant)
16
+ ? merged.variant
17
+ : LIST_VARIANTS.STANDARD;
18
+ return { ...merged, variant, items: merged.items ?? [] };
14
19
  };
15
20
  export const getElementConfig = (config) => {
16
21
  const attributes = {
@@ -13,6 +13,16 @@ export declare const LIST_DEFAULTS: {
13
13
  /** Default item height in pixels */
14
14
  readonly ITEM_HEIGHT: 56;
15
15
  };
16
+ /**
17
+ * List variants (m3.material.io lists)
18
+ * - STANDARD: the baseline list: no container, square rows (default)
19
+ * - SEGMENTED: the expressive list: each row paints its own container and
20
+ * shape, 2px apart
21
+ */
22
+ export declare const LIST_VARIANTS: {
23
+ readonly STANDARD: "standard";
24
+ readonly SEGMENTED: "segmented";
25
+ };
16
26
  /**
17
27
  * List types for rendering and behavior
18
28
  */
@@ -5,6 +5,10 @@ export const LIST_DEFAULTS = {
5
5
  RENDER_BUFFER_SIZE: 5,
6
6
  ITEM_HEIGHT: 56
7
7
  };
8
+ export const LIST_VARIANTS = {
9
+ STANDARD: 'standard',
10
+ SEGMENTED: 'segmented'
11
+ };
8
12
  export const LIST_TYPES = {
9
13
  DEFAULT: 'default',
10
14
  SINGLE_SELECT: 'single-select',
@@ -1,4 +1,4 @@
1
1
  /** Material list anatomy for static data. */
2
- export { default } from "./list.js";
3
- export { LIST_DEFAULTS, LIST_TYPES, LIST_SELECTION_MODES, LIST_EVENTS, LIST_SCROLL_POSITIONS, LIST_CLASSES, } from "./constants.js";
4
- export type { ListConfig, ListItem, ListSlot, ListComponent, SelectEvent, LoadEvent, } from "./types.js";
2
+ export { default, default as createList } from "./list.js";
3
+ export { LIST_DEFAULTS, LIST_VARIANTS, LIST_TYPES, LIST_SELECTION_MODES, LIST_EVENTS, LIST_SCROLL_POSITIONS, LIST_CLASSES, } from "./constants.js";
4
+ export type { ListConfig, ListVariant, ListItem, ListSlot, ListComponent, SelectEvent, LoadEvent, } from "./types.js";
@@ -1,2 +1,2 @@
1
- export { default } from "./list.js";
2
- export { LIST_DEFAULTS, LIST_TYPES, LIST_SELECTION_MODES, LIST_EVENTS, LIST_SCROLL_POSITIONS, LIST_CLASSES, } from "./constants.js";
1
+ export { default, default as createList } from "./list.js";
2
+ export { LIST_DEFAULTS, LIST_VARIANTS, LIST_TYPES, LIST_SELECTION_MODES, LIST_EVENTS, LIST_SCROLL_POSITIONS, LIST_CLASSES, } from "./constants.js";
@@ -5,6 +5,23 @@ import type { ListComponent, ListConfig, ListItem } from "./types.js";
5
5
  * The List component provides a simple way to render static arrays of data
6
6
  * with Material item anatomy and built-in selection capabilities.
7
7
  *
8
+ * `variant` is the list's style. `'standard'` (the default) is the baseline
9
+ * list: no container, square rows in every state. `'segmented'` is the
10
+ * expressive list: each row paints its own container colour and shape, with
11
+ * a gap between rows; the list itself has no background and no radius.
12
+ *
13
+ * A segmented list reads five custom properties, named as the button's
14
+ * `--mtrl-button-shape` and `--mtrl-button-shape-pressed`:
15
+ * `--mtrl-list-item-shape` (4px at rest), `--mtrl-list-item-shape-outer`
16
+ * (16px, the outer corners of the first and the last row),
17
+ * `--mtrl-list-item-shape-hover` (12px), `--mtrl-list-item-shape-active`
18
+ * (16px focused, pressed or selected) and `--mtrl-list-segmented-gap` (2px
19
+ * between rows). The row colour is `--mtrl-list-item-container-color` in
20
+ * both variants (surface by default in standard, surface-container in
21
+ * segmented); set it to `transparent` for rows without their own colour.
22
+ * The list reads these and does not declare them, so set them on the list,
23
+ * on any ancestor, or on the `<m-list>` element.
24
+ *
8
25
  * @param config - Configuration options for the list
9
26
  * @returns List component instance
10
27
  */
@@ -1,13 +1,13 @@
1
1
  import { pipe } from "../../core/compose/pipe.js";
2
2
  import { createBase, withElement } from "../../core/compose/component.js";
3
- import { withEvents, withLifecycle } from "../../core/compose/features/index.js";
3
+ import { withEvents, withLifecycle, withVariant } from "../../core/compose/features/index.js";
4
4
  import { withRenderer, withSelection } from "./features/index.js";
5
5
  import { withAPI } from "./api.js";
6
6
  import { createBaseConfig, getElementConfig, getApiConfig } from "./config.js";
7
7
  const createList = (config = {}) => {
8
8
  try {
9
9
  const baseConfig = createBaseConfig(config);
10
- const component = pipe(createBase, withEvents(), withElement(getElementConfig(baseConfig)), withRenderer(baseConfig), withSelection(baseConfig), withLifecycle(), (comp) => withAPI(getApiConfig(comp, baseConfig))(comp))(baseConfig);
10
+ const component = pipe(createBase, withEvents(), withElement(getElementConfig(baseConfig)), withVariant(baseConfig), withRenderer(baseConfig), withSelection(baseConfig), withLifecycle(), (comp) => withAPI(getApiConfig(comp, baseConfig))(comp))(baseConfig);
11
11
  return component;
12
12
  }
13
13
  catch (error) {
@@ -1,9 +1,24 @@
1
1
  import type { ForwardedEventPayload } from "../../core/dom/index.js";
2
+ /**
3
+ * List variant types following Material Design 3 guidelines.
4
+ * - standard: the baseline list: no container, square rows (default)
5
+ * - segmented: the expressive list: each row paints its own container and
6
+ * shape, 2px apart
7
+ *
8
+ * @category Components
9
+ */
10
+ export type ListVariant = 'standard' | 'segmented';
2
11
  /**
3
12
  * Configuration for the List component
4
13
  * @interface ListConfig
5
14
  */
6
15
  export interface ListConfig<T = unknown> {
16
+ /**
17
+ * The list's visual style. It does not change the list's behavior.
18
+ * An unknown value is the default.
19
+ * @default 'standard'
20
+ */
21
+ variant?: ListVariant;
7
22
  /**
8
23
  * Static array of items to display
9
24
  * @required
@@ -18,7 +33,14 @@ export interface ListConfig<T = unknown> {
18
33
  renderItem?: (item: T, index: number) => HTMLElement;
19
34
  /**
20
35
  * Whether to track item selection
21
- * When true, clicked items will receive a selected class
36
+ * When true, clicked items will receive a selected class.
37
+ *
38
+ * With `trackSelection`, each row's action is a button with `aria-pressed`,
39
+ * inside its `listitem`. That is this option's contract and it stays: a row
40
+ * can also hold a control of the app's, and pressing the selected row again
41
+ * deselects it. A listbox of options (`role="listbox"`, `aria-selected`,
42
+ * one tab stop), which allows neither, would be a separate opt-in mode, not
43
+ * a change to this one.
22
44
  * @default true
23
45
  */
24
46
  trackSelection?: boolean;
@@ -83,6 +105,12 @@ export interface ListItem {
83
105
  overline?: string;
84
106
  supportingText?: string;
85
107
  leading?: ListSlot;
108
+ /**
109
+ * The slot at the row's end: text, an icon, or a control of the app's
110
+ * (a checkbox, a radio, a switch). It is sized by its content: a control
111
+ * that fills its container, such as a slider, is not a list-row control
112
+ * and goes outside the row.
113
+ */
86
114
  trailing?: ListSlot;
87
115
  /** Blocks user activation; programmatic selection is still allowed. */
88
116
  disabled?: boolean;
@@ -1,3 +1,3 @@
1
- export { default } from "./loading-indicator.js";
1
+ export { default, default as createLoadingIndicator } from "./loading-indicator.js";
2
2
  export type { LoadingIndicatorConfig, LoadingIndicatorComponent } from "./types.js";
3
3
  export { LOADING_INDICATOR_SHAPES, LOADING_INDICATOR_DEFAULTS } from "./constants.js";
@@ -1,2 +1,2 @@
1
- export { default } from "./loading-indicator.js";
1
+ export { default, default as createLoadingIndicator } from "./loading-indicator.js";
2
2
  export { LOADING_INDICATOR_SHAPES, LOADING_INDICATOR_DEFAULTS } from "./constants.js";
@@ -7,7 +7,7 @@
7
7
  * @module components/menu
8
8
  * @category Components
9
9
  */
10
- export { default } from "./menu.js";
10
+ export { default, default as createMenu } from "./menu.js";
11
11
  export type { MenuEvents } from "./types.js";
12
12
  export type { MenuConfig, MenuVariant, MenuComponent, MenuItem, MenuDivider, MenuGap, MenuContent, MenuEvent, MenuSelectEvent, MenuPosition } from "./types.js";
13
13
  /**
@@ -1,2 +1,2 @@
1
- export { default } from "./menu.js";
1
+ export { default, default as createMenu } from "./menu.js";
2
2
  export { MENU_POSITION, MENU_DEFAULTS, MENU_INTERACTION_TYPES, MENU_ITEM_TYPES, MENU_EVENTS, MENU_CLASSES } from "./constants.js";
@@ -1,2 +1,2 @@
1
- export { default } from "./progress.js";
1
+ export { default, default as createProgress } from "./progress.js";
2
2
  export type { ProgressConfig, ProgressVariant, ProgressComponent, ProgressShape, ProgressEvents, ProgressEventPayload } from "./types.js";
@@ -1 +1 @@
1
- export { default } from "./progress.js";
1
+ export { default, default as createProgress } from "./progress.js";
@@ -132,19 +132,29 @@ export interface ProgressEvents {
132
132
  /** The value reached the maximum */
133
133
  complete: (event: ProgressEventPayload) => void;
134
134
  }
135
+ /**
136
+ * What the progress draws with. **Not part of the public contract** (3.0.0):
137
+ * these five were on `ProgressComponent`, which tied the public type to one
138
+ * way of drawing the indicator. They are still on the object the factory
139
+ * returns, for the library's own code and tests; how the indicator is drawn
140
+ * may change in any release. The canvas is the element's own:
141
+ * `progress.element.querySelector('canvas')`. Nothing needs to call `resize`:
142
+ * the component observes its own size.
143
+ * @internal
144
+ */
145
+ export interface ProgressInternals {
146
+ /** The canvas the indicator is drawn on */
147
+ canvas: HTMLCanvasElement;
148
+ /** Re-measures the canvas and redraws; the component does this on resize */
149
+ resize: () => void;
150
+ /** The canvas again: these three named the parts of the SVG this replaced */
151
+ track: SVGElement;
152
+ indicator: SVGElement;
153
+ buffer: SVGElement;
154
+ }
135
155
  export interface ProgressComponent {
136
156
  /** The component's root DOM element */
137
157
  element: HTMLElement;
138
- /** The track element (unfilled part) - always an SVG element */
139
- track: SVGElement;
140
- /** The indicator element (filled part) - always an SVG element */
141
- indicator: SVGElement;
142
- /** The canvas the indicator is drawn on */
143
- canvas?: HTMLCanvasElement;
144
- /** Re-measures the canvas and redraws; the component does this on resize */
145
- resize?: () => void;
146
- /** The buffer element for linear variant (pre-loaded state) - always an SVG element */
147
- buffer?: SVGElement;
148
158
  /**
149
159
  * Gets a class name with the component's prefix
150
160
  * @param name - Base class name
@@ -1,3 +1,3 @@
1
- export { default } from "./radios.js";
1
+ export { default, default as createRadios } from "./radios.js";
2
2
  export type { RadiosConfig, RadiosComponent, RadiosEvents, RadiosChangePayload, RadioOptionConfig } from "./types.js";
3
3
  export { RADIO_STATES, RADIO_DIRECTIONS, RADIO_EVENTS, RADIO_DEFAULTS } from "./constants.js";
@@ -1,2 +1,2 @@
1
- export { default } from "./radios.js";
1
+ export { default, default as createRadios } from "./radios.js";
2
2
  export { RADIO_STATES, RADIO_DIRECTIONS, RADIO_EVENTS, RADIO_DEFAULTS } from "./constants.js";
@@ -1,2 +1,2 @@
1
- export { default } from "./search.js";
1
+ export { default, default as createSearch } from "./search.js";
2
2
  export type { SearchConfig, SearchComponent, SearchEvent, SearchEvents, SearchStateEvent, SearchState, SearchViewMode, SearchVariant, SearchEventType, SearchSuggestion, SearchTrailingItem, } from "./types.js";
@@ -1 +1 @@
1
- export { default } from "./search.js";
1
+ export { default, default as createSearch } from "./search.js";
@@ -7,7 +7,7 @@
7
7
  * @module components/select
8
8
  * @category Components
9
9
  */
10
- export { default } from "./select.js";
10
+ export { default, default as createSelect } from "./select.js";
11
11
  export type { SelectEvents } from "./types.js";
12
12
  export type { SelectConfig, SelectVariant, SelectComponent, SelectOption, SelectEvent, SelectChangeEvent } from "./types.js";
13
13
  /**
@@ -1,2 +1,2 @@
1
- export { default } from "./select.js";
1
+ export { default, default as createSelect } from "./select.js";
2
2
  export { SELECT_VARIANTS, SELECT_PLACEMENT, SELECT_INTERACTION, SELECT_EVENTS, SELECT_ICONS, SELECT_DEFAULTS, SELECT_CLASSES } from "./constants.js";
@@ -1,2 +1,2 @@
1
- export { default } from "./slider.js";
1
+ export { default, default as createSlider } from "./slider.js";
2
2
  export type { SliderConfig, SliderComponent, SliderEvent, SliderEvents, } from "./types.js";
@@ -1 +1 @@
1
- export { default } from "./slider.js";
1
+ export { default, default as createSlider } from "./slider.js";
@@ -171,6 +171,13 @@ export interface SliderStateComponent {
171
171
  valueBubble?: HTMLElement | null;
172
172
  secondHandle?: HTMLElement | null;
173
173
  secondValueBubble?: HTMLElement | null;
174
+ /**
175
+ * The older bag the same elements were kept in. **Internal, and not part of
176
+ * the public contract** (3.0.0): nothing in the library fills it, the
177
+ * controller and the handlers only fall back to it, and it may go in any
178
+ * release. `SliderComponent` has no `components`.
179
+ * @internal
180
+ */
174
181
  components?: Record<string, HTMLElement | null | undefined>;
175
182
  getClass: (name: string) => string;
176
183
  emit: (event: string, data: unknown) => unknown;
@@ -1,4 +1,4 @@
1
- export { default } from "./snackbar.js";
1
+ export { default, default as createSnackbar } from "./snackbar.js";
2
2
  export { clearSnackbars } from "./snackbar.js";
3
3
  export type { SnackbarConfig, SnackbarComponent, SnackbarEvent, SnackbarEvents, SnackbarPosition, SnackbarDuration, SnackbarCloseReason, SnackbarQueueBehavior, } from "./types.js";
4
4
  export { SNACKBAR_POSITIONS, SNACKBAR_DURATIONS, SNACKBAR_CLOSE_REASONS, SNACKBAR_QUEUE_BEHAVIORS, } from "./constants.js";
@@ -1,3 +1,3 @@
1
- export { default } from "./snackbar.js";
1
+ export { default, default as createSnackbar } from "./snackbar.js";
2
2
  export { clearSnackbars } from "./snackbar.js";
3
3
  export { SNACKBAR_POSITIONS, SNACKBAR_DURATIONS, SNACKBAR_CLOSE_REASONS, SNACKBAR_QUEUE_BEHAVIORS, } from "./constants.js";
@@ -1,3 +1,3 @@
1
- export { default } from "./split-button.js";
1
+ export { default, default as createSplitButton } from "./split-button.js";
2
2
  export type { SplitButtonConfig, SplitButtonComponent, SplitButtonEvent, SplitButtonVariant, SplitButtonSize, } from "./types.js";
3
3
  export { SPLIT_BUTTON_VARIANTS, SPLIT_BUTTON_SIZES, SPLIT_BUTTON_EVENTS, } from "./constants.js";
@@ -1,2 +1,2 @@
1
- export { default } from "./split-button.js";
1
+ export { default, default as createSplitButton } from "./split-button.js";
2
2
  export { SPLIT_BUTTON_VARIANTS, SPLIT_BUTTON_SIZES, SPLIT_BUTTON_EVENTS, } from "./constants.js";
@@ -1,3 +1,3 @@
1
- export { default } from "./switch.js";
1
+ export { default, default as createSwitch } from "./switch.js";
2
2
  export { SWITCH_LABEL_POSITIONS, SWITCH_STATES, SWITCH_EVENTS, SWITCH_DEFAULTS, SWITCH_CLASSES } from "./constants.js";
3
3
  export type { SwitchConfig, SwitchComponent, SwitchEvents, SwitchChangePayload } from "./types.js";
@@ -1,2 +1,2 @@
1
- export { default } from "./switch.js";
1
+ export { default, default as createSwitch } from "./switch.js";
2
2
  export { SWITCH_LABEL_POSITIONS, SWITCH_STATES, SWITCH_EVENTS, SWITCH_DEFAULTS, SWITCH_CLASSES } from "./constants.js";
@@ -8,4 +8,5 @@ export { tabIdFor, tabPanelIdFor };
8
8
  export type { ResponsiveConfig } from "./responsive.js";
9
9
  export type { TabIndicator } from "./indicator.js";
10
10
  export default createTabs;
11
+ export { createTabs };
11
12
  export { createTab } from "./tab.js";
@@ -5,4 +5,5 @@ export { TAB_VARIANTS, TAB_STATES, TAB_INDICATOR_WIDTH_STRATEGIES, TAB_EVENTS, T
5
5
  export { setupResponsiveBehavior };
6
6
  export { tabIdFor, tabPanelIdFor };
7
7
  export default createTabs;
8
+ export { createTabs };
8
9
  export { createTab } from "./tab.js";
@@ -287,8 +287,17 @@ export interface TabComponent {
287
287
  element: HTMLElement;
288
288
  /** The button the tab is built on */
289
289
  button?: TabButton;
290
- /** The tab's badge component (if any) */
291
- badge?: BadgeComponent;
290
+ /**
291
+ * The tab's badge component, or `undefined`. **It may be undefined until
292
+ * the badge is shown**, whatever the `badge` option said: the contract
293
+ * (3.0.0) is that a tab creates its badge no later than when it shows it,
294
+ * so that a later release can create it only then. Today it exists from
295
+ * the first `setBadge()`, or from creation with the `badge` option. To set,
296
+ * read, show or hide the badge, use `setBadge()`, `getBadge()`,
297
+ * `showBadge()` and `hideBadge()`, which work whether it exists yet or not;
298
+ * check this for `undefined` before reading it.
299
+ */
300
+ badge?: BadgeComponent | undefined;
292
301
  /** Gets a class name with the component's prefix */
293
302
  getClass: (name: string) => string;
294
303
  /** Gets the tab's value attribute */
@@ -323,7 +332,10 @@ export interface TabComponent {
323
332
  showBadge: () => TabComponent;
324
333
  /** Hides the tab's badge */
325
334
  hideBadge: () => TabComponent;
326
- /** Gets the badge component instance */
335
+ /**
336
+ * Gets the badge component instance, or `undefined`: it may not exist
337
+ * until the badge is shown (see `badge`)
338
+ */
327
339
  getBadgeComponent: () => BadgeComponent | undefined;
328
340
  /** Updates the tab's layout style based on content */
329
341
  updateLayoutStyle: () => void;
@@ -67,16 +67,15 @@ export const withPlacement = () => (component) => {
67
67
  const isOutlined = has("outlined");
68
68
  const isFocused = has("focused");
69
69
  const isEmpty = has("empty");
70
- const rtl = isOutlined ? getComputedStyle(element).direction === "rtl" : false;
70
+ const rtl = globalThis.getComputedStyle?.(element).direction === "rtl";
71
71
  const labelWidth = isOutlined && labelEl ? labelEl.offsetWidth : 0;
72
72
  const affixes = [prefixEl, suffixEl].map((affix) => affix?.getBoundingClientRect().width);
73
73
  return () => {
74
74
  if (destroyed)
75
75
  return;
76
- if (isOutlined) {
76
+ if (isOutlined)
77
77
  ensureOutline();
78
- element.classList.toggle(`${PREFIX}-${COMPONENT}--rtl`, rtl);
79
- }
78
+ element.classList.toggle(`${PREFIX}-${COMPONENT}--rtl`, rtl);
80
79
  if (outline && notch) {
81
80
  if (labelWidth > 0)
82
81
  notch.style.width = `${labelWidth * FLOATED_LABEL_SCALE + NOTCH_PADDING * 2}px`;
@@ -118,8 +117,11 @@ export const withPlacement = () => (component) => {
118
117
  const needsPlacement = has("outlined") ||
119
118
  has("with-leading-icon") ||
120
119
  component.element.querySelector(`.${PREFIX}-${COMPONENT}__prefix, .${PREFIX}-${COMPONENT}__suffix`) !== null;
120
+ const inShadowRoot = () => (component.element.getRootNode().host ? measure() : () => { });
121
121
  if (needsPlacement)
122
122
  schedulePositionUpdate();
123
+ else
124
+ schedule(inShadowRoot);
123
125
  if ("lifecycle" in component && component.lifecycle?.destroy) {
124
126
  const originalDestroy = component.lifecycle.destroy;
125
127
  component.lifecycle.destroy = () => {
@@ -127,6 +129,7 @@ export const withPlacement = () => (component) => {
127
129
  return;
128
130
  destroyed = true;
129
131
  pending.delete(measure);
132
+ pending.delete(inShadowRoot);
130
133
  if (!pending.size && flushing !== null) {
131
134
  clearTimeout(flushing);
132
135
  flushing = null;
@@ -1,4 +1,4 @@
1
- export { default } from "./timepicker.js";
1
+ export { default, default as createTimePicker } from "./timepicker.js";
2
2
  export { TIMEPICKER_TYPES, TIMEPICKER_ORIENTATIONS, TIMEPICKER_FORMATS, TIMEPICKER_PERIODS, TIMEPICKER_EVENTS, TIMEPICKER_VALUES, TIMEPICKER_SELECTORS, TIMEPICKER_ICONS, TIMEPICKER_DEFAULTS } from "./constants.js";
3
3
  export type { TimePickerConfig, TimePickerComponent, TimeValue, TimePickerEvents, TimePickerValueEvent, TimePickerInputEvent, TimePickerTapPayload, TimePickerSwipePayload } from "./types.js";
4
4
  export { TIME_PICKER_TYPE, TIME_PICKER_ORIENTATION, TIME_FORMAT, TIME_PERIOD } from "./types.js";
@@ -1,3 +1,3 @@
1
- export { default } from "./timepicker.js";
1
+ export { default, default as createTimePicker } from "./timepicker.js";
2
2
  export { TIMEPICKER_TYPES, TIMEPICKER_ORIENTATIONS, TIMEPICKER_FORMATS, TIMEPICKER_PERIODS, TIMEPICKER_EVENTS, TIMEPICKER_VALUES, TIMEPICKER_SELECTORS, TIMEPICKER_ICONS, TIMEPICKER_DEFAULTS } from "./constants.js";
3
3
  export { TIME_PICKER_TYPE, TIME_PICKER_ORIENTATION, TIME_FORMAT, TIME_PERIOD } from "./types.js";
@@ -1,3 +1,3 @@
1
- export { default } from "./tooltip.js";
1
+ export { default, default as createTooltip } from "./tooltip.js";
2
2
  export { TOOLTIP_POSITIONS, TOOLTIP_VARIANTS, TOOLTIP_EVENTS, TOOLTIP_DEFAULTS, TOOLTIP_CLASSES } from "./constants.js";
3
3
  export type { TooltipConfig, TooltipVariant, TooltipComponent } from "./types.js";
@@ -1,2 +1,2 @@
1
- export { default } from "./tooltip.js";
1
+ export { default, default as createTooltip } from "./tooltip.js";
2
2
  export { TOOLTIP_POSITIONS, TOOLTIP_VARIANTS, TOOLTIP_EVENTS, TOOLTIP_DEFAULTS, TOOLTIP_CLASSES } from "./constants.js";
@@ -11,7 +11,7 @@ export const withTextInput = (config = {}) => (component) => {
11
11
  maxLength: config.maxLength,
12
12
  pattern: config.pattern,
13
13
  autocomplete: config.autocomplete,
14
- value: config.value || "",
14
+ value: isMultiline ? undefined : config.value || "",
15
15
  placeholder: config.placeholder || " ",
16
16
  };
17
17
  if (!isMultiline) {
@@ -32,6 +32,8 @@ export const withTextInput = (config = {}) => (component) => {
32
32
  }
33
33
  }
34
34
  });
35
+ if (isMultiline)
36
+ input.defaultValue = config.value || "";
35
37
  const updateInputState = () => {
36
38
  const isEmpty = !input.value;
37
39
  component.element.classList.toggle(`${component.getClass("text-field")}--empty`, isEmpty);
@@ -8,6 +8,6 @@ export { createBase, withElement } from "./component.js";
8
8
  export { withEvents, withIcon, withSize, withPosition, withText, withVariant, withDisabled, withLifecycle, withRipple, withInput, withCheckable, withStyle, withTextInput, withTextLabel, withTrack, withEnhancedEvents, withThrottle, withDebounce, } from "./features/index.js";
9
9
  export type { Component } from "./base.js";
10
10
  export type { BaseComponent, BaseConfig, ElementComponent, TouchState, WithElementOptions, } from "./component.js";
11
- export type { EventComponent, TextComponent, IconComponent, LifecycleComponent, Lifecycle, DisabledComponent, DisabledManager, RippleComponent, InputComponent, CheckableComponent, CheckableManager, TextInputComponent, LabelComponent, TrackComponent, EnhancedEventComponent, ThrottleComponent, ThrottleConfig, DebounceComponent, DebounceConfig, } from "./features/index.js";
11
+ export type { EventComponent, TextComponent, IconComponent, LifecycleComponent, Lifecycle, DisabledComponent, DisabledManager, RippleComponent, InputComponent, CheckableComponent, CheckableManager, TextInputComponent, LabelComponent, LabelManager, TrackComponent, EnhancedEventComponent, ThrottleComponent, ThrottleConfig, DebounceComponent, DebounceConfig, } from "./features/index.js";
12
12
  export { hasLifecycle, hasEmit } from "./utils/type-guards.js";
13
13
  export type { ComponentWithLifecycle, ComponentWithEmit, } from "./utils/type-guards.js";
@@ -21,7 +21,7 @@ export interface HTMLPolicy {
21
21
  * configureHTML({ sanitize: (html) => DOMPurify.sanitize(html) });
22
22
  *
23
23
  * // Trusted Types: a policy the page's CSP allows
24
- * const trusted = window.trustedTypes.createPolicy('mtrl', { createHTML: (html) => DOMPurify.sanitize(html) });
24
+ * const trusted = window.trustedTypes.createPolicy('app', { createHTML: (html) => DOMPurify.sanitize(html) });
25
25
  * configureHTML({ sanitize: (html) => trusted.createHTML(html) });
26
26
  */
27
27
  export declare const configureHTML: (next: HTMLPolicy | null) => void;
@@ -1 +1 @@
1
- .mtrl-button{position:relative;display:inline-flex;align-items:center;justify-content:center;gap:8px;min-width:58px;height:40px;padding:0 16px;border:none;border-radius:var(--mtrl-button-shape, 20px);background-color:rgba(0,0,0,0);color:inherit;font:inherit;text-decoration:none;cursor:pointer;user-select:none;vertical-align:middle;appearance:none;will-change:border-radius;font-family:var(--mtrl-ref-typeface-plain, Roboto, sans-serif);font-size:14px;line-height:20px;letter-spacing:.1px;font-weight:500;transition:background-color 250ms linear(0, 0.066, 0.203, 0.355, 0.496, 0.616, 0.713, 0.788, 0.845, 0.888, 0.92, 0.943, 0.96, 0.971, 0.98, 0.986, 0.99, 0.993, 0.995, 0.997, 0.998, 0.998, 0.999, 0.999, 1),color 250ms linear(0, 0.066, 0.203, 0.355, 0.496, 0.616, 0.713, 0.788, 0.845, 0.888, 0.92, 0.943, 0.96, 0.971, 0.98, 0.986, 0.99, 0.993, 0.995, 0.997, 0.998, 0.998, 0.999, 0.999, 1),box-shadow 250ms linear(0, 0.066, 0.203, 0.355, 0.496, 0.616, 0.713, 0.788, 0.845, 0.888, 0.92, 0.943, 0.96, 0.971, 0.98, 0.986, 0.99, 0.993, 0.995, 0.997, 0.998, 0.998, 0.999, 0.999, 1),border-color 250ms linear(0, 0.066, 0.203, 0.355, 0.496, 0.616, 0.713, 0.788, 0.845, 0.888, 0.92, 0.943, 0.96, 0.971, 0.98, 0.986, 0.99, 0.993, 0.995, 0.997, 0.998, 0.998, 0.999, 0.999, 1),border-radius 425ms linear(0, 0.102, 0.323, 0.57, 0.784, 0.942, 1.039, 1.085, 1.094, 1.082, 1.06, 1.037, 1.018, 1.004, 0.995, 0.992, 0.991, 0.992, 0.995, 0.997, 0.999, 1, 1.001, 1.001, 1)}.mtrl-button:focus{outline:none}.mtrl-button:focus-visible{outline:3px solid var(--mtrl-sys-color-secondary);outline-offset:2px}.mtrl-button:disabled{pointer-events:none;color:color-mix(in srgb, var(--mtrl-sys-color-on-surface-variant) 38%, transparent);background-color:color-mix(in srgb, var(--mtrl-sys-color-on-surface) 10%, transparent);box-shadow:none}.mtrl-button:disabled .mtrl-button__icon{color:color-mix(in srgb, var(--mtrl-sys-color-on-surface-variant) 38%, transparent)}.mtrl-button::before{content:"";position:absolute;inset:0;background-color:currentColor;opacity:0;pointer-events:none;border-radius:inherit;transition:opacity 100ms cubic-bezier(0.2, 0, 0, 1)}.mtrl-button:hover::before{opacity:.08}.mtrl-button:focus-visible::before{opacity:.1}.mtrl-button:active:not(:has(>.mtrl-ripple))::before,.mtrl-button--active:not(:has(>.mtrl-ripple))::before{opacity:.1}.mtrl-button__icon{display:inline-flex;align-items:center;justify-content:center;flex:none;width:20px;height:20px}.mtrl-button__icon svg{width:100%;height:100%}.mtrl-button__progress{display:inline-flex;align-items:center;justify-content:center;flex:none;width:20px;height:20px}.mtrl-button__progress.mtrl-progress{width:20px;height:20px;transition:opacity 100ms cubic-bezier(0.2, 0, 0, 1)}.mtrl-button__progress .mtrl-progress__canvas{color:currentColor}.mtrl-button__text{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.mtrl-button--xs{height:32px;padding:0 12px;gap:8px;font-family:var(--mtrl-ref-typeface-plain, Roboto, sans-serif);font-size:14px;line-height:20px;letter-spacing:.1px;font-weight:500;border-radius:var(--mtrl-button-shape, 16px)}.mtrl-button--xs .mtrl-button__icon,.mtrl-button--xs .mtrl-button__progress,.mtrl-button--xs .mtrl-button__progress.mtrl-progress{width:20px;height:20px}.mtrl-button--xs.mtrl-button--square{border-radius:var(--mtrl-button-shape, var(--mtrl-sys-shape-corner-medium, 12px))}.mtrl-button--xs.mtrl-button--outlined{border-width:1px}.mtrl-button--s{height:40px;padding:0 16px;gap:8px;font-family:var(--mtrl-ref-typeface-plain, Roboto, sans-serif);font-size:14px;line-height:20px;letter-spacing:.1px;font-weight:500;border-radius:var(--mtrl-button-shape, 20px)}.mtrl-button--s .mtrl-button__icon,.mtrl-button--s .mtrl-button__progress,.mtrl-button--s .mtrl-button__progress.mtrl-progress{width:20px;height:20px}.mtrl-button--s.mtrl-button--square{border-radius:var(--mtrl-button-shape, var(--mtrl-sys-shape-corner-medium, 12px))}.mtrl-button--s.mtrl-button--outlined{border-width:1px}.mtrl-button--m{height:56px;padding:0 24px;gap:8px;font-family:var(--mtrl-ref-typeface-brand, Roboto, sans-serif);font-size:16px;line-height:24px;letter-spacing:.15px;font-weight:500;border-radius:var(--mtrl-button-shape, 28px)}.mtrl-button--m .mtrl-button__icon,.mtrl-button--m .mtrl-button__progress,.mtrl-button--m .mtrl-button__progress.mtrl-progress{width:24px;height:24px}.mtrl-button--m.mtrl-button--square{border-radius:var(--mtrl-button-shape, var(--mtrl-sys-shape-corner-large, 16px))}.mtrl-button--m.mtrl-button--outlined{border-width:1px}.mtrl-button--l{height:96px;padding:0 48px;gap:12px;font-family:var(--mtrl-ref-typeface-brand, Roboto, sans-serif);font-size:24px;line-height:32px;letter-spacing:0;font-weight:400;border-radius:var(--mtrl-button-shape, 48px)}.mtrl-button--l .mtrl-button__icon,.mtrl-button--l .mtrl-button__progress,.mtrl-button--l .mtrl-button__progress.mtrl-progress{width:32px;height:32px}.mtrl-button--l.mtrl-button--square{border-radius:var(--mtrl-button-shape, var(--mtrl-sys-shape-corner-extra-large, 28px))}.mtrl-button--l.mtrl-button--outlined{border-width:2px}.mtrl-button--xl{height:136px;padding:0 64px;gap:16px;font-family:var(--mtrl-ref-typeface-brand, Roboto, sans-serif);font-size:32px;line-height:40px;letter-spacing:0;font-weight:400;border-radius:var(--mtrl-button-shape, 68px)}.mtrl-button--xl .mtrl-button__icon,.mtrl-button--xl .mtrl-button__progress,.mtrl-button--xl .mtrl-button__progress.mtrl-progress{width:40px;height:40px}.mtrl-button--xl.mtrl-button--square{border-radius:var(--mtrl-button-shape, var(--mtrl-sys-shape-corner-extra-large, 28px))}.mtrl-button--xl.mtrl-button--outlined{border-width:3px}.mtrl-button--s.mtrl-button--icon{padding-left:12px}.mtrl-button--s.mtrl-button--icon:has(.mtrl-button__icon--end){padding-left:16px;padding-right:12px}.mtrl-button--xs::after,.mtrl-button--s::after{content:"";position:absolute;left:0;right:0;top:50%;height:48px;transform:translateY(-50%)}.mtrl-button:active,.mtrl-button--active{border-radius:var(--mtrl-button-shape-pressed, var(--mtrl-sys-shape-corner-small, 8px));box-shadow:none}.mtrl-button--xs:active,.mtrl-button--xs.mtrl-button--active{border-radius:var(--mtrl-button-shape-pressed, var(--mtrl-sys-shape-corner-small, 8px))}.mtrl-button--s:active,.mtrl-button--s.mtrl-button--active{border-radius:var(--mtrl-button-shape-pressed, var(--mtrl-sys-shape-corner-small, 8px))}.mtrl-button--m:active,.mtrl-button--m.mtrl-button--active{border-radius:var(--mtrl-button-shape-pressed, var(--mtrl-sys-shape-corner-medium, 12px))}.mtrl-button--l:active,.mtrl-button--l.mtrl-button--active{border-radius:var(--mtrl-button-shape-pressed, var(--mtrl-sys-shape-corner-large, 16px))}.mtrl-button--xl:active,.mtrl-button--xl.mtrl-button--active{border-radius:var(--mtrl-button-shape-pressed, var(--mtrl-sys-shape-corner-large, 16px))}.mtrl-button--filled{color:var(--mtrl-sys-color-on-primary)}.mtrl-button--elevated{color:var(--mtrl-sys-color-primary)}.mtrl-button--tonal{color:var(--mtrl-sys-color-on-secondary-container)}.mtrl-button--outlined{color:var(--mtrl-sys-color-on-surface-variant)}.mtrl-button--text{color:var(--mtrl-button-text-color, var(--mtrl-sys-color-primary))}.mtrl-button--filled{background-color:var(--mtrl-sys-color-primary)}.mtrl-button--filled:hover{box-shadow:0px 1px 2px rgba(0,0,0,.3),0px 1px 3px 1px rgba(0,0,0,.15)}.mtrl-button--filled:active,.mtrl-button--filled.mtrl-button--active,.mtrl-button--filled:disabled{box-shadow:none}.mtrl-button--elevated{background-color:var(--mtrl-sys-color-surface-container-low);box-shadow:0px 1px 2px rgba(0,0,0,.3),0px 1px 3px 1px rgba(0,0,0,.15)}.mtrl-button--elevated:hover{box-shadow:0px 1px 2px rgba(0,0,0,.3),0px 2px 6px 2px rgba(0,0,0,.15)}.mtrl-button--elevated:active,.mtrl-button--elevated.mtrl-button--active{box-shadow:0px 1px 2px rgba(0,0,0,.3),0px 1px 3px 1px rgba(0,0,0,.15)}.mtrl-button--elevated:disabled{box-shadow:none}.mtrl-button--tonal{background-color:var(--mtrl-sys-color-secondary-container)}.mtrl-button--tonal:hover{box-shadow:0px 1px 2px rgba(0,0,0,.3),0px 1px 3px 1px rgba(0,0,0,.15)}.mtrl-button--tonal:active,.mtrl-button--tonal.mtrl-button--active,.mtrl-button--tonal:disabled{box-shadow:none}.mtrl-button--outlined{border:1px solid var(--mtrl-sys-color-outline-variant)}.mtrl-button--outlined:disabled{background-color:rgba(0,0,0,0);border-color:color-mix(in srgb, var(--mtrl-sys-color-outline-variant) 10%, transparent)}.mtrl-button--text{padding:0 12px}.mtrl-button--text.mtrl-button--icon{padding:0 16px 0 12px}.mtrl-button--text.mtrl-button--icon:has(.mtrl-button__icon--end){padding:0 12px 0 16px}.mtrl-button--text.mtrl-button--m{padding:0 24px}.mtrl-button--text.mtrl-button--l{padding:0 48px}.mtrl-button--text.mtrl-button--xl{padding:0 64px}.mtrl-button--text:disabled{background-color:rgba(0,0,0,0)}.mtrl-button--toggle.mtrl-button--filled,.mtrl-button--toggle.mtrl-button--filled:hover,.mtrl-button--toggle.mtrl-button--filled:active,.mtrl-button--toggle.mtrl-button--filled.mtrl-button--active,.mtrl-button--toggle.mtrl-button--tonal,.mtrl-button--toggle.mtrl-button--tonal:hover,.mtrl-button--toggle.mtrl-button--tonal:active,.mtrl-button--toggle.mtrl-button--tonal.mtrl-button--active{box-shadow:none}.mtrl-button--toggle.mtrl-button--filled{background-color:var(--mtrl-sys-color-surface-container);color:var(--mtrl-sys-color-on-surface-variant)}.mtrl-button--toggle.mtrl-button--selected.mtrl-button--filled{background-color:var(--mtrl-sys-color-primary);color:var(--mtrl-sys-color-on-primary)}.mtrl-button--toggle.mtrl-button--selected.mtrl-button--elevated{background-color:var(--mtrl-sys-color-primary);color:var(--mtrl-sys-color-on-primary)}.mtrl-button--toggle.mtrl-button--selected.mtrl-button--tonal{background-color:var(--mtrl-sys-color-secondary);color:var(--mtrl-sys-color-on-secondary)}.mtrl-button--toggle.mtrl-button--selected.mtrl-button--outlined{background-color:var(--mtrl-sys-color-inverse-surface);color:var(--mtrl-sys-color-inverse-on-surface)}.mtrl-button--toggle.mtrl-button--selected.mtrl-button--outlined{border-color:rgba(0,0,0,0)}.mtrl-button--toggle.mtrl-button--selected.mtrl-button--xs{border-radius:var(--mtrl-button-shape-selected, var(--mtrl-sys-shape-corner-medium, 12px))}.mtrl-button--toggle.mtrl-button--selected.mtrl-button--s{border-radius:var(--mtrl-button-shape-selected, var(--mtrl-sys-shape-corner-medium, 12px))}.mtrl-button--toggle.mtrl-button--selected.mtrl-button--m{border-radius:var(--mtrl-button-shape-selected, var(--mtrl-sys-shape-corner-large, 16px))}.mtrl-button--toggle.mtrl-button--selected.mtrl-button--l{border-radius:var(--mtrl-button-shape-selected, var(--mtrl-sys-shape-corner-extra-large, 28px))}.mtrl-button--toggle.mtrl-button--selected.mtrl-button--xl{border-radius:var(--mtrl-button-shape-selected, var(--mtrl-sys-shape-corner-extra-large, 28px))}.mtrl-button--toggle.mtrl-button--selected.mtrl-button--square.mtrl-button--xs{border-radius:var(--mtrl-button-shape-selected, 16px)}.mtrl-button--toggle.mtrl-button--selected.mtrl-button--square.mtrl-button--s{border-radius:var(--mtrl-button-shape-selected, 20px)}.mtrl-button--toggle.mtrl-button--selected.mtrl-button--square.mtrl-button--m{border-radius:var(--mtrl-button-shape-selected, 28px)}.mtrl-button--toggle.mtrl-button--selected.mtrl-button--square.mtrl-button--l{border-radius:var(--mtrl-button-shape-selected, 48px)}.mtrl-button--toggle.mtrl-button--selected.mtrl-button--square.mtrl-button--xl{border-radius:var(--mtrl-button-shape-selected, 68px)}.mtrl-button--toggle.mtrl-button--selected.mtrl-button--xs:active,.mtrl-button--toggle.mtrl-button--selected.mtrl-button--xs.mtrl-button--active{border-radius:var(--mtrl-button-shape-pressed, var(--mtrl-sys-shape-corner-small, 8px))}.mtrl-button--toggle.mtrl-button--selected.mtrl-button--s:active,.mtrl-button--toggle.mtrl-button--selected.mtrl-button--s.mtrl-button--active{border-radius:var(--mtrl-button-shape-pressed, var(--mtrl-sys-shape-corner-small, 8px))}.mtrl-button--toggle.mtrl-button--selected.mtrl-button--m:active,.mtrl-button--toggle.mtrl-button--selected.mtrl-button--m.mtrl-button--active{border-radius:var(--mtrl-button-shape-pressed, var(--mtrl-sys-shape-corner-medium, 12px))}.mtrl-button--toggle.mtrl-button--selected.mtrl-button--l:active,.mtrl-button--toggle.mtrl-button--selected.mtrl-button--l.mtrl-button--active{border-radius:var(--mtrl-button-shape-pressed, var(--mtrl-sys-shape-corner-large, 16px))}.mtrl-button--toggle.mtrl-button--selected.mtrl-button--xl:active,.mtrl-button--toggle.mtrl-button--selected.mtrl-button--xl.mtrl-button--active{border-radius:var(--mtrl-button-shape-pressed, var(--mtrl-sys-shape-corner-large, 16px))}.mtrl-button--toggle:disabled,.mtrl-button--toggle.mtrl-button--selected:disabled{color:color-mix(in srgb, var(--mtrl-sys-color-on-surface-variant) 38%, transparent);background-color:color-mix(in srgb, var(--mtrl-sys-color-on-surface) 10%, transparent);border-color:color-mix(in srgb, var(--mtrl-sys-color-outline-variant) 10%, transparent);box-shadow:none}.mtrl-button--toggle.mtrl-button--outlined:disabled{background-color:rgba(0,0,0,0)}.mtrl-button--circular{flex:none !important;border-radius:50%;padding:8px;min-width:unset;width:40px !important;height:40px}.mtrl-button--circular:active,.mtrl-button--circular.mtrl-button--active{border-radius:50%}.mtrl-button--circular:active.mtrl-button--square,.mtrl-button--circular.mtrl-button--active.mtrl-button--square{border-radius:var(--mtrl-sys-shape-corner-medium, 12px) !important}.mtrl-button--circular.mtrl-button--square{border-radius:var(--mtrl-sys-shape-corner-medium, 12px)}.mtrl-button--circular.mtrl-button--xs{width:32px;height:32px;padding:0}.mtrl-button--circular.mtrl-button--s{width:40px;height:40px;padding:0}.mtrl-button--circular.mtrl-button--m{width:56px;height:56px;padding:0}.mtrl-button--circular.mtrl-button--l{width:96px;height:96px;padding:0}.mtrl-button--circular.mtrl-button--xl{width:136px;height:136px;padding:0}.mtrl-button--circular .mtrl-button__text{display:none}.mtrl-button--circular.mtrl-button--progress{padding:0 !important}.mtrl-button[disabled].mtrl-button--progress .mtrl-button__progress{opacity:.7}
1
+ .mtrl-button{position:relative;display:inline-flex;align-items:center;justify-content:center;gap:8px;min-width:58px;height:40px;padding:0 16px;border:none;border-radius:var(--mtrl-button-shape, 20px);background-color:rgba(0,0,0,0);color:inherit;font:inherit;text-decoration:none;cursor:pointer;user-select:none;vertical-align:middle;appearance:none;will-change:border-radius;font-family:var(--mtrl-ref-typeface-plain, Roboto, sans-serif);font-size:14px;line-height:20px;letter-spacing:.1px;font-weight:500;transition:background-color 250ms linear(0, 0.066, 0.203, 0.355, 0.496, 0.616, 0.713, 0.788, 0.845, 0.888, 0.92, 0.943, 0.96, 0.971, 0.98, 0.986, 0.99, 0.993, 0.995, 0.997, 0.998, 0.998, 0.999, 0.999, 1),color 250ms linear(0, 0.066, 0.203, 0.355, 0.496, 0.616, 0.713, 0.788, 0.845, 0.888, 0.92, 0.943, 0.96, 0.971, 0.98, 0.986, 0.99, 0.993, 0.995, 0.997, 0.998, 0.998, 0.999, 0.999, 1),box-shadow 250ms linear(0, 0.066, 0.203, 0.355, 0.496, 0.616, 0.713, 0.788, 0.845, 0.888, 0.92, 0.943, 0.96, 0.971, 0.98, 0.986, 0.99, 0.993, 0.995, 0.997, 0.998, 0.998, 0.999, 0.999, 1),border-color 250ms linear(0, 0.066, 0.203, 0.355, 0.496, 0.616, 0.713, 0.788, 0.845, 0.888, 0.92, 0.943, 0.96, 0.971, 0.98, 0.986, 0.99, 0.993, 0.995, 0.997, 0.998, 0.998, 0.999, 0.999, 1),border-radius 425ms linear(0, 0.102, 0.323, 0.57, 0.784, 0.942, 1.039, 1.085, 1.094, 1.082, 1.06, 1.037, 1.018, 1.004, 0.995, 0.992, 0.991, 0.992, 0.995, 0.997, 0.999, 1, 1.001, 1.001, 1)}.mtrl-button:focus{outline:none}.mtrl-button:focus-visible{outline:3px solid var(--mtrl-sys-color-secondary);outline-offset:2px}.mtrl-button:disabled{pointer-events:none;color:color-mix(in srgb, var(--mtrl-sys-color-on-surface-variant) 38%, transparent);background-color:color-mix(in srgb, var(--mtrl-sys-color-on-surface) 10%, transparent);box-shadow:none}.mtrl-button:disabled .mtrl-button__icon{color:color-mix(in srgb, var(--mtrl-sys-color-on-surface-variant) 38%, transparent)}.mtrl-button::before{content:"";position:absolute;inset:0;background-color:currentColor;opacity:0;pointer-events:none;border-radius:inherit;transition:opacity 100ms cubic-bezier(0.2, 0, 0, 1)}.mtrl-button:hover::before{opacity:.08}.mtrl-button:focus-visible::before{opacity:.1}.mtrl-button:active:not(:has(>.mtrl-ripple))::before,.mtrl-button--active:not(:has(>.mtrl-ripple))::before{opacity:.1}.mtrl-button__icon{display:inline-flex;align-items:center;justify-content:center;flex:none;width:20px;height:20px}.mtrl-button__icon svg{width:100%;height:100%}.mtrl-button__progress{display:inline-flex;align-items:center;justify-content:center;flex:none;width:20px;height:20px}.mtrl-button__progress.mtrl-progress{width:20px;height:20px;transition:opacity 100ms cubic-bezier(0.2, 0, 0, 1)}.mtrl-button__progress .mtrl-progress__canvas{color:currentColor}.mtrl-button__text{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.mtrl-button--xs{height:32px;padding:0 12px;gap:4px;font-family:var(--mtrl-ref-typeface-plain, Roboto, sans-serif);font-size:14px;line-height:20px;letter-spacing:.1px;font-weight:500;border-radius:var(--mtrl-button-shape, 16px)}.mtrl-button--xs .mtrl-button__icon,.mtrl-button--xs .mtrl-button__progress,.mtrl-button--xs .mtrl-button__progress.mtrl-progress{width:20px;height:20px}.mtrl-button--xs.mtrl-button--square{border-radius:var(--mtrl-button-shape, var(--mtrl-sys-shape-corner-medium, 12px))}.mtrl-button--xs.mtrl-button--outlined{border-width:1px}.mtrl-button--s{height:40px;padding:0 16px;gap:8px;font-family:var(--mtrl-ref-typeface-plain, Roboto, sans-serif);font-size:14px;line-height:20px;letter-spacing:.1px;font-weight:500;border-radius:var(--mtrl-button-shape, 20px)}.mtrl-button--s .mtrl-button__icon,.mtrl-button--s .mtrl-button__progress,.mtrl-button--s .mtrl-button__progress.mtrl-progress{width:20px;height:20px}.mtrl-button--s.mtrl-button--square{border-radius:var(--mtrl-button-shape, var(--mtrl-sys-shape-corner-medium, 12px))}.mtrl-button--s.mtrl-button--outlined{border-width:1px}.mtrl-button--m{height:56px;padding:0 24px;gap:8px;font-family:var(--mtrl-ref-typeface-brand, Roboto, sans-serif);font-size:16px;line-height:24px;letter-spacing:.15px;font-weight:500;border-radius:var(--mtrl-button-shape, 28px)}.mtrl-button--m .mtrl-button__icon,.mtrl-button--m .mtrl-button__progress,.mtrl-button--m .mtrl-button__progress.mtrl-progress{width:24px;height:24px}.mtrl-button--m.mtrl-button--square{border-radius:var(--mtrl-button-shape, var(--mtrl-sys-shape-corner-large, 16px))}.mtrl-button--m.mtrl-button--outlined{border-width:1px}.mtrl-button--l{height:96px;padding:0 48px;gap:12px;font-family:var(--mtrl-ref-typeface-brand, Roboto, sans-serif);font-size:24px;line-height:32px;letter-spacing:0;font-weight:400;border-radius:var(--mtrl-button-shape, 48px)}.mtrl-button--l .mtrl-button__icon,.mtrl-button--l .mtrl-button__progress,.mtrl-button--l .mtrl-button__progress.mtrl-progress{width:32px;height:32px}.mtrl-button--l.mtrl-button--square{border-radius:var(--mtrl-button-shape, var(--mtrl-sys-shape-corner-extra-large, 28px))}.mtrl-button--l.mtrl-button--outlined{border-width:2px}.mtrl-button--xl{height:136px;padding:0 64px;gap:16px;font-family:var(--mtrl-ref-typeface-brand, Roboto, sans-serif);font-size:32px;line-height:40px;letter-spacing:0;font-weight:400;border-radius:var(--mtrl-button-shape, 68px)}.mtrl-button--xl .mtrl-button__icon,.mtrl-button--xl .mtrl-button__progress,.mtrl-button--xl .mtrl-button__progress.mtrl-progress{width:40px;height:40px}.mtrl-button--xl.mtrl-button--square{border-radius:var(--mtrl-button-shape, var(--mtrl-sys-shape-corner-extra-large, 28px))}.mtrl-button--xl.mtrl-button--outlined{border-width:3px}.mtrl-button--s.mtrl-button--icon{padding-inline-start:12px}.mtrl-button--s.mtrl-button--icon:has(.mtrl-button__icon--end){padding-inline-start:16px;padding-inline-end:12px}.mtrl-button--xs::after,.mtrl-button--s::after{content:"";position:absolute;left:0;right:0;top:50%;height:48px;transform:translateY(-50%)}.mtrl-button:active,.mtrl-button--active{border-radius:var(--mtrl-button-shape-pressed, var(--mtrl-sys-shape-corner-small, 8px));box-shadow:none}.mtrl-button--xs:active,.mtrl-button--xs.mtrl-button--active{border-radius:var(--mtrl-button-shape-pressed, var(--mtrl-sys-shape-corner-small, 8px))}.mtrl-button--s:active,.mtrl-button--s.mtrl-button--active{border-radius:var(--mtrl-button-shape-pressed, var(--mtrl-sys-shape-corner-small, 8px))}.mtrl-button--m:active,.mtrl-button--m.mtrl-button--active{border-radius:var(--mtrl-button-shape-pressed, var(--mtrl-sys-shape-corner-medium, 12px))}.mtrl-button--l:active,.mtrl-button--l.mtrl-button--active{border-radius:var(--mtrl-button-shape-pressed, var(--mtrl-sys-shape-corner-large, 16px))}.mtrl-button--xl:active,.mtrl-button--xl.mtrl-button--active{border-radius:var(--mtrl-button-shape-pressed, var(--mtrl-sys-shape-corner-large, 16px))}.mtrl-button--filled{color:var(--mtrl-sys-color-on-primary)}.mtrl-button--elevated{color:var(--mtrl-sys-color-primary)}.mtrl-button--tonal{color:var(--mtrl-sys-color-on-secondary-container)}.mtrl-button--outlined{color:var(--mtrl-sys-color-on-surface-variant)}.mtrl-button--text{color:var(--mtrl-button-text-color, var(--mtrl-sys-color-primary))}.mtrl-button--filled{background-color:var(--mtrl-sys-color-primary)}.mtrl-button--filled:hover{box-shadow:0px 1px 2px rgba(0,0,0,.3),0px 1px 3px 1px rgba(0,0,0,.15)}.mtrl-button--filled:active,.mtrl-button--filled.mtrl-button--active,.mtrl-button--filled:disabled{box-shadow:none}.mtrl-button--elevated{background-color:var(--mtrl-sys-color-surface-container-low);box-shadow:0px 1px 2px rgba(0,0,0,.3),0px 1px 3px 1px rgba(0,0,0,.15)}.mtrl-button--elevated:hover{box-shadow:0px 1px 2px rgba(0,0,0,.3),0px 2px 6px 2px rgba(0,0,0,.15)}.mtrl-button--elevated:active,.mtrl-button--elevated.mtrl-button--active{box-shadow:0px 1px 2px rgba(0,0,0,.3),0px 1px 3px 1px rgba(0,0,0,.15)}.mtrl-button--elevated:disabled{box-shadow:none}.mtrl-button--tonal{background-color:var(--mtrl-sys-color-secondary-container)}.mtrl-button--tonal:hover{box-shadow:0px 1px 2px rgba(0,0,0,.3),0px 1px 3px 1px rgba(0,0,0,.15)}.mtrl-button--tonal:active,.mtrl-button--tonal.mtrl-button--active,.mtrl-button--tonal:disabled{box-shadow:none}.mtrl-button--outlined{border:1px solid var(--mtrl-sys-color-outline-variant)}.mtrl-button--outlined:disabled{background-color:rgba(0,0,0,0);border-color:color-mix(in srgb, var(--mtrl-sys-color-outline-variant) 10%, transparent)}.mtrl-button--text{padding:0 12px}.mtrl-button--text.mtrl-button--icon{padding-inline:12px 16px}.mtrl-button--text.mtrl-button--icon:has(.mtrl-button__icon--end){padding-inline:16px 12px}.mtrl-button--text.mtrl-button--m{padding:0 24px}.mtrl-button--text.mtrl-button--l{padding:0 48px}.mtrl-button--text.mtrl-button--xl{padding:0 64px}.mtrl-button--text:disabled{background-color:rgba(0,0,0,0)}.mtrl-button--toggle.mtrl-button--filled,.mtrl-button--toggle.mtrl-button--filled:hover,.mtrl-button--toggle.mtrl-button--filled:active,.mtrl-button--toggle.mtrl-button--filled.mtrl-button--active,.mtrl-button--toggle.mtrl-button--tonal,.mtrl-button--toggle.mtrl-button--tonal:hover,.mtrl-button--toggle.mtrl-button--tonal:active,.mtrl-button--toggle.mtrl-button--tonal.mtrl-button--active{box-shadow:none}.mtrl-button--toggle.mtrl-button--filled{background-color:var(--mtrl-sys-color-surface-container);color:var(--mtrl-sys-color-on-surface-variant)}.mtrl-button--toggle.mtrl-button--selected.mtrl-button--filled{background-color:var(--mtrl-sys-color-primary);color:var(--mtrl-sys-color-on-primary)}.mtrl-button--toggle.mtrl-button--selected.mtrl-button--elevated{background-color:var(--mtrl-sys-color-primary);color:var(--mtrl-sys-color-on-primary)}.mtrl-button--toggle.mtrl-button--selected.mtrl-button--tonal{background-color:var(--mtrl-sys-color-secondary);color:var(--mtrl-sys-color-on-secondary)}.mtrl-button--toggle.mtrl-button--selected.mtrl-button--outlined{background-color:var(--mtrl-sys-color-inverse-surface);color:var(--mtrl-sys-color-inverse-on-surface)}.mtrl-button--toggle.mtrl-button--selected.mtrl-button--outlined{border-color:rgba(0,0,0,0)}.mtrl-button--toggle.mtrl-button--selected.mtrl-button--xs{border-radius:var(--mtrl-button-shape-selected, var(--mtrl-sys-shape-corner-medium, 12px))}.mtrl-button--toggle.mtrl-button--selected.mtrl-button--s{border-radius:var(--mtrl-button-shape-selected, var(--mtrl-sys-shape-corner-medium, 12px))}.mtrl-button--toggle.mtrl-button--selected.mtrl-button--m{border-radius:var(--mtrl-button-shape-selected, var(--mtrl-sys-shape-corner-large, 16px))}.mtrl-button--toggle.mtrl-button--selected.mtrl-button--l{border-radius:var(--mtrl-button-shape-selected, var(--mtrl-sys-shape-corner-extra-large, 28px))}.mtrl-button--toggle.mtrl-button--selected.mtrl-button--xl{border-radius:var(--mtrl-button-shape-selected, var(--mtrl-sys-shape-corner-extra-large, 28px))}.mtrl-button--toggle.mtrl-button--selected.mtrl-button--square.mtrl-button--xs{border-radius:var(--mtrl-button-shape-selected, 16px)}.mtrl-button--toggle.mtrl-button--selected.mtrl-button--square.mtrl-button--s{border-radius:var(--mtrl-button-shape-selected, 20px)}.mtrl-button--toggle.mtrl-button--selected.mtrl-button--square.mtrl-button--m{border-radius:var(--mtrl-button-shape-selected, 28px)}.mtrl-button--toggle.mtrl-button--selected.mtrl-button--square.mtrl-button--l{border-radius:var(--mtrl-button-shape-selected, 48px)}.mtrl-button--toggle.mtrl-button--selected.mtrl-button--square.mtrl-button--xl{border-radius:var(--mtrl-button-shape-selected, 68px)}.mtrl-button--toggle.mtrl-button--selected.mtrl-button--xs:active,.mtrl-button--toggle.mtrl-button--selected.mtrl-button--xs.mtrl-button--active{border-radius:var(--mtrl-button-shape-pressed, var(--mtrl-sys-shape-corner-small, 8px))}.mtrl-button--toggle.mtrl-button--selected.mtrl-button--s:active,.mtrl-button--toggle.mtrl-button--selected.mtrl-button--s.mtrl-button--active{border-radius:var(--mtrl-button-shape-pressed, var(--mtrl-sys-shape-corner-small, 8px))}.mtrl-button--toggle.mtrl-button--selected.mtrl-button--m:active,.mtrl-button--toggle.mtrl-button--selected.mtrl-button--m.mtrl-button--active{border-radius:var(--mtrl-button-shape-pressed, var(--mtrl-sys-shape-corner-medium, 12px))}.mtrl-button--toggle.mtrl-button--selected.mtrl-button--l:active,.mtrl-button--toggle.mtrl-button--selected.mtrl-button--l.mtrl-button--active{border-radius:var(--mtrl-button-shape-pressed, var(--mtrl-sys-shape-corner-large, 16px))}.mtrl-button--toggle.mtrl-button--selected.mtrl-button--xl:active,.mtrl-button--toggle.mtrl-button--selected.mtrl-button--xl.mtrl-button--active{border-radius:var(--mtrl-button-shape-pressed, var(--mtrl-sys-shape-corner-large, 16px))}.mtrl-button--toggle:disabled,.mtrl-button--toggle.mtrl-button--selected:disabled{color:color-mix(in srgb, var(--mtrl-sys-color-on-surface-variant) 38%, transparent);background-color:color-mix(in srgb, var(--mtrl-sys-color-on-surface) 10%, transparent);border-color:color-mix(in srgb, var(--mtrl-sys-color-outline-variant) 10%, transparent);box-shadow:none}.mtrl-button--toggle.mtrl-button--outlined:disabled{background-color:rgba(0,0,0,0)}.mtrl-button--circular{flex:none !important;border-radius:50%;padding:8px;min-width:unset;width:40px !important;height:40px}.mtrl-button--circular:active,.mtrl-button--circular.mtrl-button--active{border-radius:50%}.mtrl-button--circular:active.mtrl-button--square,.mtrl-button--circular.mtrl-button--active.mtrl-button--square{border-radius:var(--mtrl-sys-shape-corner-medium, 12px) !important}.mtrl-button--circular.mtrl-button--square{border-radius:var(--mtrl-sys-shape-corner-medium, 12px)}.mtrl-button--circular.mtrl-button--xs{width:32px;height:32px;padding:0}.mtrl-button--circular.mtrl-button--s{width:40px;height:40px;padding:0}.mtrl-button--circular.mtrl-button--m{width:56px;height:56px;padding:0}.mtrl-button--circular.mtrl-button--l{width:96px;height:96px;padding:0}.mtrl-button--circular.mtrl-button--xl{width:136px;height:136px;padding:0}.mtrl-button--circular .mtrl-button__text{display:none}.mtrl-button--circular.mtrl-button--progress{padding:0 !important}.mtrl-button[disabled].mtrl-button--progress .mtrl-button__progress{opacity:.7}