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.
- package/README.md +59 -370
- package/dist/components/badge/index.d.ts +1 -1
- package/dist/components/badge/index.js +1 -1
- package/dist/components/button/index.d.ts +1 -1
- package/dist/components/button/index.js +1 -1
- package/dist/components/card/index.d.ts +1 -1
- package/dist/components/card/index.js +1 -1
- package/dist/components/checkbox/index.d.ts +1 -1
- package/dist/components/checkbox/index.js +1 -1
- package/dist/components/chips/index.d.ts +1 -1
- package/dist/components/chips/index.js +1 -1
- package/dist/components/datepicker/index.d.ts +1 -1
- package/dist/components/datepicker/index.js +1 -1
- package/dist/components/dialog/index.d.ts +1 -1
- package/dist/components/dialog/index.js +1 -1
- package/dist/components/divider/index.d.ts +1 -1
- package/dist/components/divider/index.js +1 -1
- package/dist/components/drawer/index.d.ts +1 -1
- package/dist/components/drawer/index.js +1 -1
- package/dist/components/index.d.ts +1 -1
- package/dist/components/list/config.js +6 -1
- package/dist/components/list/constants.d.ts +10 -0
- package/dist/components/list/constants.js +4 -0
- package/dist/components/list/index.d.ts +3 -3
- package/dist/components/list/index.js +2 -2
- package/dist/components/list/list.d.ts +17 -0
- package/dist/components/list/list.js +2 -2
- package/dist/components/list/types.d.ts +29 -1
- package/dist/components/loading-indicator/index.d.ts +1 -1
- package/dist/components/loading-indicator/index.js +1 -1
- package/dist/components/menu/index.d.ts +1 -1
- package/dist/components/menu/index.js +1 -1
- package/dist/components/progress/index.d.ts +1 -1
- package/dist/components/progress/index.js +1 -1
- package/dist/components/progress/types.d.ts +20 -10
- package/dist/components/radios/index.d.ts +1 -1
- package/dist/components/radios/index.js +1 -1
- package/dist/components/search/index.d.ts +1 -1
- package/dist/components/search/index.js +1 -1
- package/dist/components/select/index.d.ts +1 -1
- package/dist/components/select/index.js +1 -1
- package/dist/components/slider/index.d.ts +1 -1
- package/dist/components/slider/index.js +1 -1
- package/dist/components/slider/types.d.ts +7 -0
- package/dist/components/snackbar/index.d.ts +1 -1
- package/dist/components/snackbar/index.js +1 -1
- package/dist/components/split-button/index.d.ts +1 -1
- package/dist/components/split-button/index.js +1 -1
- package/dist/components/switch/index.d.ts +1 -1
- package/dist/components/switch/index.js +1 -1
- package/dist/components/tabs/index.d.ts +1 -0
- package/dist/components/tabs/index.js +1 -0
- package/dist/components/tabs/types.d.ts +15 -3
- package/dist/components/text-field/features/placement.js +7 -4
- package/dist/components/timepicker/index.d.ts +1 -1
- package/dist/components/timepicker/index.js +1 -1
- package/dist/components/tooltip/index.d.ts +1 -1
- package/dist/components/tooltip/index.js +1 -1
- package/dist/core/compose/features/textinput.js +3 -1
- package/dist/core/compose/index.d.ts +1 -1
- package/dist/core/dom/html.d.ts +1 -1
- package/dist/elements/css/button.css +1 -1
- package/dist/elements/css/button.js +1 -1
- package/dist/elements/css/card.css +1 -1
- package/dist/elements/css/card.js +1 -1
- package/dist/elements/css/checkbox.css +1 -1
- package/dist/elements/css/checkbox.js +1 -1
- package/dist/elements/css/chips.css +1 -1
- package/dist/elements/css/chips.js +1 -1
- package/dist/elements/css/dialog.css +1 -1
- package/dist/elements/css/dialog.js +1 -1
- package/dist/elements/css/extended-fab.css +1 -1
- package/dist/elements/css/extended-fab.js +1 -1
- package/dist/elements/css/fab-menu.css +1 -1
- package/dist/elements/css/fab-menu.js +1 -1
- package/dist/elements/css/fab.css +1 -1
- package/dist/elements/css/fab.js +1 -1
- package/dist/elements/css/hosts/switch.css +1 -1
- package/dist/elements/css/hosts/text-field.css +1 -1
- package/dist/elements/css/icon-button.css +1 -1
- package/dist/elements/css/icon-button.js +1 -1
- package/dist/elements/css/list.css +1 -1
- package/dist/elements/css/list.js +1 -1
- package/dist/elements/css/menu.css +1 -1
- package/dist/elements/css/menu.js +1 -1
- package/dist/elements/css/radios.css +1 -1
- package/dist/elements/css/radios.js +1 -1
- package/dist/elements/css/select.css +1 -1
- package/dist/elements/css/select.js +1 -1
- package/dist/elements/css/side-sheet.css +1 -1
- package/dist/elements/css/side-sheet.js +1 -1
- package/dist/elements/css/slider.css +1 -1
- package/dist/elements/css/slider.js +1 -1
- package/dist/elements/css/snackbar.css +1 -1
- package/dist/elements/css/snackbar.js +1 -1
- package/dist/elements/css/switch.css +1 -1
- package/dist/elements/css/switch.js +1 -1
- package/dist/elements/css/text-field.css +1 -1
- package/dist/elements/css/text-field.js +1 -1
- package/dist/elements/define.d.ts +20 -0
- package/dist/elements/list.d.ts +6 -0
- package/dist/elements/list.js +1 -0
- package/dist/elements/preupgrade/badge.css +1 -1
- package/dist/elements/preupgrade/bottom-app-bar.css +1 -1
- package/dist/elements/preupgrade/bottom-sheet.css +1 -1
- package/dist/elements/preupgrade/button-group.css +1 -1
- package/dist/elements/preupgrade/button.css +2 -2
- package/dist/elements/preupgrade/card.css +1 -1
- package/dist/elements/preupgrade/carousel.css +1 -1
- package/dist/elements/preupgrade/checkbox.css +2 -2
- package/dist/elements/preupgrade/chips.css +1 -1
- package/dist/elements/preupgrade/datepicker.css +1 -1
- package/dist/elements/preupgrade/dialog.css +1 -1
- package/dist/elements/preupgrade/divider.css +1 -1
- package/dist/elements/preupgrade/drawer.css +1 -1
- package/dist/elements/preupgrade/extended-fab.css +1 -1
- package/dist/elements/preupgrade/fab-menu.css +1 -1
- package/dist/elements/preupgrade/fab.css +1 -1
- package/dist/elements/preupgrade/icon-button.css +1 -1
- package/dist/elements/preupgrade/list.css +2 -2
- package/dist/elements/preupgrade/loading-indicator.css +1 -1
- package/dist/elements/preupgrade/menu.css +1 -1
- package/dist/elements/preupgrade/navigation-bar.css +1 -1
- package/dist/elements/preupgrade/navigation-rail.css +1 -1
- package/dist/elements/preupgrade/progress.css +1 -1
- package/dist/elements/preupgrade/radios.css +2 -2
- package/dist/elements/preupgrade/search.css +1 -1
- package/dist/elements/preupgrade/select.css +1 -1
- package/dist/elements/preupgrade/side-sheet.css +1 -1
- package/dist/elements/preupgrade/slider.css +1 -1
- package/dist/elements/preupgrade/snackbar.css +1 -1
- package/dist/elements/preupgrade/split-button.css +1 -1
- package/dist/elements/preupgrade/switch.css +2 -2
- package/dist/elements/preupgrade/tabs.css +1 -1
- package/dist/elements/preupgrade/text-field.css +2 -2
- package/dist/elements/preupgrade/timepicker.css +1 -1
- package/dist/elements/preupgrade/toolbar.css +1 -1
- package/dist/elements/preupgrade/tooltip.css +1 -1
- package/dist/elements/preupgrade/top-app-bar.css +1 -1
- package/dist/elements/preupgrade.css +2 -2
- package/dist/elements/preupgrade.js +1 -1
- package/dist/elements/styles.d.ts +13 -1
- package/dist/elements/switch.d.ts +1 -0
- package/dist/elements/switch.js +1 -0
- package/dist/elements/text-field.js +1 -5
- package/dist/package.json +28 -4
- package/dist/styles/badge.css +1 -1
- package/dist/styles/base.css +1 -1
- package/dist/styles/bottom-app-bar.css +1 -1
- package/dist/styles/bottom-sheet.css +1 -1
- package/dist/styles/button-group.css +1 -1
- package/dist/styles/button.css +2 -2
- package/dist/styles/card.css +2 -2
- package/dist/styles/carousel.css +1 -1
- package/dist/styles/checkbox.css +2 -2
- package/dist/styles/chips.css +2 -2
- package/dist/styles/contrast.css +1 -1
- package/dist/styles/datepicker.css +1 -1
- package/dist/styles/dialog.css +2 -2
- package/dist/styles/divider.css +1 -1
- package/dist/styles/drawer.css +1 -1
- package/dist/styles/extended-fab.css +2 -2
- package/dist/styles/fab-menu.css +2 -2
- package/dist/styles/fab.css +2 -2
- package/dist/styles/icon-button.css +2 -2
- package/dist/styles/list.css +2 -2
- package/dist/styles/loading-indicator.css +1 -1
- package/dist/styles/menu.css +2 -2
- package/dist/styles/navigation-bar.css +1 -1
- package/dist/styles/navigation-rail.css +1 -1
- package/dist/styles/progress.css +1 -1
- package/dist/styles/radios.css +2 -2
- package/dist/styles/search.css +1 -1
- package/dist/styles/select.css +2 -2
- package/dist/styles/side-sheet.css +2 -2
- package/dist/styles/slider.css +2 -2
- package/dist/styles/snackbar.css +2 -2
- package/dist/styles/split-button.css +1 -1
- package/dist/styles/switch.css +2 -2
- package/dist/styles/tabs.css +1 -1
- package/dist/styles/text-field.css +2 -2
- package/dist/styles/timepicker.css +1 -1
- package/dist/styles/toolbar.css +1 -1
- package/dist/styles/tooltip.css +1 -1
- package/dist/styles/top-app-bar.css +1 -1
- package/dist/styles/typography.css +1 -1
- package/dist/styles/utilities.css +1 -1
- package/dist/styles.css +2 -2
- package/dist/themes/autumn-contrast.css +1 -1
- package/dist/themes/autumn.css +1 -1
- package/dist/themes/baseline-contrast.css +1 -1
- package/dist/themes/baseline.css +1 -1
- package/dist/themes/brownbeige-contrast.css +1 -1
- package/dist/themes/brownbeige.css +1 -1
- package/dist/themes/content-contrast.css +1 -1
- package/dist/themes/content.css +1 -1
- package/dist/themes/desert-contrast.css +1 -1
- package/dist/themes/desert.css +1 -1
- package/dist/themes/expressive-contrast.css +1 -1
- package/dist/themes/expressive.css +1 -1
- package/dist/themes/fidelity-contrast.css +1 -1
- package/dist/themes/fidelity.css +1 -1
- package/dist/themes/forest-contrast.css +1 -1
- package/dist/themes/forest.css +1 -1
- package/dist/themes/fruit-salad-contrast.css +1 -1
- package/dist/themes/fruit-salad.css +1 -1
- package/dist/themes/highcontrast-contrast.css +1 -1
- package/dist/themes/highcontrast.css +1 -1
- package/dist/themes/monochrome-contrast.css +1 -1
- package/dist/themes/monochrome.css +1 -1
- package/dist/themes/neutral-contrast.css +1 -1
- package/dist/themes/neutral.css +1 -1
- package/dist/themes/ocean-contrast.css +1 -1
- package/dist/themes/ocean.css +1 -1
- package/dist/themes/rainbow-contrast.css +1 -1
- package/dist/themes/rainbow.css +1 -1
- package/dist/themes/sageivory-contrast.css +1 -1
- package/dist/themes/sageivory.css +1 -1
- package/dist/themes/spring-contrast.css +1 -1
- package/dist/themes/spring.css +1 -1
- package/dist/themes/summer-contrast.css +1 -1
- package/dist/themes/summer.css +1 -1
- package/dist/themes/sunset-contrast.css +1 -1
- package/dist/themes/sunset.css +1 -1
- package/dist/themes/tealcaramel-contrast.css +1 -1
- package/dist/themes/tealcaramel.css +1 -1
- package/dist/themes/vibrant-contrast.css +1 -1
- package/dist/themes/vibrant.css +1 -1
- package/package.json +28 -4
- package/src/styles/abstract/_mixins.scss +17 -5
- package/src/styles/abstract/_variables.scss +1 -1
- package/src/styles/components/_button.scss +10 -7
- package/src/styles/components/_checkbox.scss +10 -0
- package/src/styles/components/_chips.scss +10 -0
- package/src/styles/components/_dialog.scss +16 -0
- package/src/styles/components/_fab-menu.scss +20 -1
- package/src/styles/components/_icon-button.scss +6 -0
- package/src/styles/components/_list.scss +48 -4
- package/src/styles/components/_menu.scss +8 -0
- package/src/styles/components/_radios.scss +22 -4
- package/src/styles/components/_select.scss +13 -29
- package/src/styles/components/_side-sheet.scss +22 -0
- package/src/styles/components/_slider.scss +3 -3
- package/src/styles/components/_switch.scss +19 -0
- package/src/styles/components/_text-field.scss +97 -319
- package/src/styles/elements/_button.scss +17 -1
- package/src/styles/elements/_checkbox.scss +16 -0
- package/src/styles/elements/_list.scss +6 -0
- package/src/styles/elements/_radios.scss +3 -2
- package/src/styles/elements/_switch.scss +52 -0
- package/src/styles/elements/_text-field.scss +21 -0
- package/dist/LICENSE +0 -21
- 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
|
-
|
|
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
|
*/
|
|
@@ -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";
|
|
@@ -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
|
-
/**
|
|
291
|
-
|
|
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
|
-
/**
|
|
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 =
|
|
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
|
-
|
|
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";
|
package/dist/core/dom/html.d.ts
CHANGED
|
@@ -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('
|
|
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}
|