material 3.0.6 → 3.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +4 -4
- package/dist/components/tabs/tab.js +8 -1
- package/dist/components/text-field/api.d.ts +2 -0
- package/dist/components/text-field/api.js +54 -63
- package/dist/core/shapes/material.js +0 -85
- package/dist/elements/css/hosts/tabs.css +1 -1
- package/dist/elements/css/tabs.css +1 -1
- package/dist/elements/css/tabs.js +1 -1
- package/dist/elements/define.d.ts +2 -0
- package/dist/elements/define.js +24 -0
- package/dist/elements/index.d.ts +2 -2
- 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 +1 -1
- package/dist/elements/preupgrade/card.css +1 -1
- package/dist/elements/preupgrade/carousel.css +1 -1
- package/dist/elements/preupgrade/checkbox.css +1 -1
- 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 +1 -1
- 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 +1 -1
- 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 +1 -1
- package/dist/elements/preupgrade/tabs.css +1 -1
- package/dist/elements/preupgrade/text-field.css +1 -1
- 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 +1 -1
- package/dist/elements/split-button.d.ts +29 -12
- package/dist/elements/split-button.js +21 -2
- package/dist/elements/tabs.js +3 -1
- package/dist/elements/text-field.d.ts +27 -4
- package/dist/elements/text-field.js +33 -1
- package/dist/package.json +1 -1
- package/dist/react/badge.js +0 -2
- package/dist/react/bottom-app-bar.js +0 -2
- package/dist/react/bottom-sheet.js +0 -2
- package/dist/react/button-group-item.js +0 -2
- package/dist/react/button-group.js +0 -2
- package/dist/react/button.js +0 -2
- package/dist/react/card.js +0 -2
- package/dist/react/carousel-item.js +0 -2
- package/dist/react/carousel.js +0 -2
- package/dist/react/checkbox.js +0 -2
- package/dist/react/chip.js +0 -2
- package/dist/react/chips.js +0 -2
- package/dist/react/datepicker.js +0 -2
- package/dist/react/dialog.js +0 -2
- package/dist/react/divider.js +0 -2
- package/dist/react/drawer-item.js +0 -2
- package/dist/react/drawer.js +0 -2
- package/dist/react/extended-fab.js +0 -2
- package/dist/react/fab-menu-item.js +0 -2
- package/dist/react/fab-menu.js +0 -2
- package/dist/react/fab.js +0 -2
- package/dist/react/icon-button.js +0 -2
- package/dist/react/list-item.js +0 -2
- package/dist/react/list.js +0 -2
- package/dist/react/loading-indicator.js +0 -2
- package/dist/react/menu-item.js +0 -2
- package/dist/react/menu.js +0 -2
- package/dist/react/navigation-bar-item.js +0 -2
- package/dist/react/navigation-bar.js +0 -2
- package/dist/react/navigation-rail-item.js +0 -2
- package/dist/react/navigation-rail.js +0 -2
- package/dist/react/progress.js +0 -2
- package/dist/react/radio.js +0 -2
- package/dist/react/radios.js +0 -2
- package/dist/react/search-suggestion.js +0 -2
- package/dist/react/search.js +0 -2
- package/dist/react/select-option.js +0 -2
- package/dist/react/select.js +0 -2
- package/dist/react/side-sheet.js +0 -2
- package/dist/react/slider.js +0 -2
- package/dist/react/snackbar.js +0 -2
- package/dist/react/split-button.js +0 -2
- package/dist/react/switch.js +0 -2
- package/dist/react/tab.js +0 -2
- package/dist/react/tabs.js +0 -2
- package/dist/react/text-field.js +0 -2
- package/dist/react/timepicker.js +0 -2
- package/dist/react/toolbar.js +0 -2
- package/dist/react/tooltip.js +0 -2
- package/dist/react/top-app-bar.js +0 -2
- package/dist/solid/badge.js +0 -2
- package/dist/solid/bottom-app-bar.js +0 -2
- package/dist/solid/bottom-sheet.js +0 -2
- package/dist/solid/button-group-item.js +0 -2
- package/dist/solid/button-group.js +0 -2
- package/dist/solid/button.js +0 -2
- package/dist/solid/card.js +0 -2
- package/dist/solid/carousel-item.js +0 -2
- package/dist/solid/carousel.js +0 -2
- package/dist/solid/checkbox.js +0 -2
- package/dist/solid/chip.js +0 -2
- package/dist/solid/chips.js +0 -2
- package/dist/solid/datepicker.js +0 -2
- package/dist/solid/dialog.js +0 -2
- package/dist/solid/divider.js +0 -2
- package/dist/solid/drawer-item.js +0 -2
- package/dist/solid/drawer.js +0 -2
- package/dist/solid/extended-fab.js +0 -2
- package/dist/solid/fab-menu-item.js +0 -2
- package/dist/solid/fab-menu.js +0 -2
- package/dist/solid/fab.js +0 -2
- package/dist/solid/icon-button.js +0 -2
- package/dist/solid/jsx.d.ts +3 -2
- package/dist/solid/list-item.js +0 -2
- package/dist/solid/list.js +0 -2
- package/dist/solid/loading-indicator.js +0 -2
- package/dist/solid/menu-item.js +0 -2
- package/dist/solid/menu.js +0 -2
- package/dist/solid/navigation-bar-item.js +0 -2
- package/dist/solid/navigation-bar.js +0 -2
- package/dist/solid/navigation-rail-item.js +0 -2
- package/dist/solid/navigation-rail.js +0 -2
- package/dist/solid/progress.js +0 -2
- package/dist/solid/radio.js +0 -2
- package/dist/solid/radios.js +0 -2
- package/dist/solid/search-suggestion.js +0 -2
- package/dist/solid/search.js +0 -2
- package/dist/solid/select-option.js +0 -2
- package/dist/solid/select.js +0 -2
- package/dist/solid/side-sheet.js +0 -2
- package/dist/solid/slider.js +0 -2
- package/dist/solid/snackbar.js +0 -2
- package/dist/solid/split-button.js +0 -2
- package/dist/solid/switch.js +0 -2
- package/dist/solid/tab.js +0 -2
- package/dist/solid/tabs.js +0 -2
- package/dist/solid/text-field.js +0 -2
- package/dist/solid/timepicker.js +0 -2
- package/dist/solid/toolbar.js +0 -2
- package/dist/solid/tooltip.js +0 -2
- package/dist/solid/top-app-bar.js +0 -2
- package/dist/styles/badge.css +1 -1
- package/dist/styles/base.css +2 -2
- 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 +1 -1
- package/dist/styles/card.css +1 -1
- package/dist/styles/carousel.css +1 -1
- package/dist/styles/checkbox.css +1 -1
- package/dist/styles/chips.css +1 -1
- package/dist/styles/contrast.css +1 -1
- package/dist/styles/datepicker.css +1 -1
- package/dist/styles/dialog.css +1 -1
- package/dist/styles/divider.css +1 -1
- package/dist/styles/drawer.css +1 -1
- package/dist/styles/extended-fab.css +1 -1
- package/dist/styles/fab-menu.css +1 -1
- package/dist/styles/fab.css +1 -1
- package/dist/styles/icon-button.css +1 -1
- package/dist/styles/list.css +1 -1
- package/dist/styles/loading-indicator.css +1 -1
- package/dist/styles/menu.css +1 -1
- 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 +1 -1
- package/dist/styles/search.css +1 -1
- package/dist/styles/select.css +1 -1
- package/dist/styles/side-sheet.css +1 -1
- package/dist/styles/slider.css +1 -1
- package/dist/styles/snackbar.css +1 -1
- package/dist/styles/split-button.css +1 -1
- package/dist/styles/switch.css +1 -1
- package/dist/styles/tabs.css +2 -2
- package/dist/styles/text-field.css +1 -1
- 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 +2 -2
- 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/dist/vue/badge.js +0 -2
- package/dist/vue/bottom-app-bar.js +0 -2
- package/dist/vue/bottom-sheet.js +0 -2
- package/dist/vue/button-group-item.js +0 -2
- package/dist/vue/button-group.js +0 -2
- package/dist/vue/button.js +0 -2
- package/dist/vue/card.js +0 -2
- package/dist/vue/carousel-item.js +0 -2
- package/dist/vue/carousel.js +0 -2
- package/dist/vue/checkbox.js +0 -2
- package/dist/vue/chip.js +0 -2
- package/dist/vue/chips.js +0 -2
- package/dist/vue/datepicker.js +0 -2
- package/dist/vue/dialog.js +0 -2
- package/dist/vue/divider.js +0 -2
- package/dist/vue/drawer-item.js +0 -2
- package/dist/vue/drawer.js +0 -2
- package/dist/vue/extended-fab.js +0 -2
- package/dist/vue/fab-menu-item.js +0 -2
- package/dist/vue/fab-menu.js +0 -2
- package/dist/vue/fab.js +0 -2
- package/dist/vue/icon-button.js +0 -2
- package/dist/vue/list-item.js +0 -2
- package/dist/vue/list.js +0 -2
- package/dist/vue/loading-indicator.js +0 -2
- package/dist/vue/menu-item.js +0 -2
- package/dist/vue/menu.js +0 -2
- package/dist/vue/navigation-bar-item.js +0 -2
- package/dist/vue/navigation-bar.js +0 -2
- package/dist/vue/navigation-rail-item.js +0 -2
- package/dist/vue/navigation-rail.js +0 -2
- package/dist/vue/progress.js +0 -2
- package/dist/vue/radio.js +0 -2
- package/dist/vue/radios.js +0 -2
- package/dist/vue/search-suggestion.js +0 -2
- package/dist/vue/search.js +0 -2
- package/dist/vue/select-option.js +0 -2
- package/dist/vue/select.js +0 -2
- package/dist/vue/side-sheet.js +0 -2
- package/dist/vue/slider.js +0 -2
- package/dist/vue/snackbar.js +0 -2
- package/dist/vue/split-button.js +0 -2
- package/dist/vue/switch.js +0 -2
- package/dist/vue/tab.js +0 -2
- package/dist/vue/tabs.js +0 -2
- package/dist/vue/text-field.js +0 -2
- package/dist/vue/timepicker.js +0 -2
- package/dist/vue/toolbar.js +0 -2
- package/dist/vue/tooltip.js +0 -2
- package/dist/vue/top-app-bar.js +0 -2
- package/package.json +1 -1
- package/src/styles/components/_tabs.scss +20 -11
- package/src/styles/main.scss +3 -0
- package/src/styles/themes/_base-theme.scss +9 -3
- package/src/styles/themes/_baseline.scss +13 -4
package/README.md
CHANGED
|
@@ -93,11 +93,11 @@ What a bundler keeps, minified and gzipped (kB is 1,000 bytes), measured from th
|
|
|
93
93
|
|--------|-----:|
|
|
94
94
|
| `createButton` from `material`, with code splitting: the initial chunks (the progress indicator loads on demand) | 7.4 kB |
|
|
95
95
|
| `createButton`, without code splitting (the progress indicator included) | 13.7 kB |
|
|
96
|
-
| `createButton`, `createTextField` and `createCheckbox`, without code splitting |
|
|
97
|
-
| Everything the root exports (`export * from 'material'`), without code splitting | 127.
|
|
96
|
+
| `createButton`, `createTextField` and `createCheckbox`, without code splitting | 20.0 kB |
|
|
97
|
+
| Everything the root exports (`export * from 'material'`), without code splitting | 127.1 kB |
|
|
98
98
|
| `material/styles/base` | 2.9 kB |
|
|
99
99
|
| `material/styles/base` and `material/styles/button` | 5.2 kB |
|
|
100
|
-
| `material/styles`, the full stylesheet | 62.
|
|
100
|
+
| `material/styles`, the full stylesheet | 62.8 kB |
|
|
101
101
|
<!-- /sizes -->
|
|
102
102
|
|
|
103
103
|
`material` publishes ESM only, so bundlers drop what you do not import. Each component's page on [md3.io/components](https://md3.io/components/) gives its size.
|
|
@@ -108,7 +108,7 @@ Current Chrome, Edge, Firefox and Safari. The spring motion uses CSS `linear()`
|
|
|
108
108
|
|
|
109
109
|
## Upgrading
|
|
110
110
|
|
|
111
|
-
Upgrade to the latest `mtrl` 0.10.x first, then change the package name to `material` and follow the [migration guide](https://github.com/floor/material/blob/main/
|
|
111
|
+
Upgrade to the latest `mtrl` 0.10.x first, then change the package name to `material` and follow the [migration guide](https://github.com/floor/material/blob/main/MIGRATING.md), verified against 3.0.5. It starts with silent theme fallbacks and lists renamed and removed APIs, with their replacements.
|
|
112
112
|
|
|
113
113
|
## Where this came from
|
|
114
114
|
|
|
@@ -49,6 +49,7 @@ export const createTab = (config = {}) => {
|
|
|
49
49
|
for (const type of ["focus", "blur"]) {
|
|
50
50
|
button.element.addEventListener(type, (event) => baseComponent.emit?.(type, event));
|
|
51
51
|
}
|
|
52
|
+
const badgeAnchor = () => button.element.querySelector(`.${baseComponent.getClass("button__icon")},.${baseComponent.getClass("button__text")}`) ?? button.element;
|
|
52
53
|
const tab = {
|
|
53
54
|
...baseComponent,
|
|
54
55
|
button,
|
|
@@ -125,7 +126,7 @@ export const createTab = (config = {}) => {
|
|
|
125
126
|
const badgeConfig = {
|
|
126
127
|
label: content,
|
|
127
128
|
standalone: false,
|
|
128
|
-
target:
|
|
129
|
+
target: badgeAnchor(),
|
|
129
130
|
prefix: baseConfig.prefix,
|
|
130
131
|
...(baseConfig.badgeConfig || {}),
|
|
131
132
|
};
|
|
@@ -184,6 +185,12 @@ export const createTab = (config = {}) => {
|
|
|
184
185
|
this.element.classList.remove(`${this.getClass("tab")}--${layout}`);
|
|
185
186
|
});
|
|
186
187
|
this.element.classList.add(`${this.getClass("tab")}--${layoutClass}`);
|
|
188
|
+
const wrapper = this.badge?.wrapper;
|
|
189
|
+
const anchor = badgeAnchor();
|
|
190
|
+
if (wrapper && anchor !== this.element && wrapper.firstElementChild !== anchor) {
|
|
191
|
+
wrapper.replaceWith(...wrapper.childNodes);
|
|
192
|
+
this.badge?.attachTo(anchor);
|
|
193
|
+
}
|
|
187
194
|
},
|
|
188
195
|
};
|
|
189
196
|
if (baseConfig.badge !== undefined) {
|
|
@@ -24,4 +24,6 @@ type ComponentWithDensity = BaseComponent & {
|
|
|
24
24
|
* @returns {Function} Higher-order function that adds API methods to component
|
|
25
25
|
*/
|
|
26
26
|
export declare const withAPI: ({ disabled, lifecycle }: ApiOptions) => (component: ComponentWithDensity) => TextFieldComponent;
|
|
27
|
+
/** Development diagnostic, shared by the factory and its element host. */
|
|
28
|
+
export declare const checkTrailingLabel: (element: HTMLElement) => void;
|
|
27
29
|
export {};
|
|
@@ -1,12 +1,21 @@
|
|
|
1
|
+
import { warnDev } from "../../core/utils/warn.js";
|
|
1
2
|
export const withAPI = ({ disabled, lifecycle }) => (component) => {
|
|
3
|
+
const element = component.element;
|
|
4
|
+
const classes = element.classList;
|
|
5
|
+
const fieldClass = component.getClass("text-field");
|
|
6
|
+
const variantClass = (variant) => `${fieldClass}--${variant}`;
|
|
7
|
+
const schedulePlacement = () => {
|
|
8
|
+
if (component.updateElementPositions)
|
|
9
|
+
component.schedulePositionUpdate?.();
|
|
10
|
+
};
|
|
2
11
|
const setTrailingDisabled = (off) => {
|
|
3
12
|
const icon = component.trailingIcon;
|
|
4
13
|
if (icon?.tagName === "BUTTON")
|
|
5
14
|
icon.disabled = off;
|
|
6
15
|
};
|
|
7
16
|
return {
|
|
8
|
-
element:
|
|
9
|
-
field: component.field ??
|
|
17
|
+
element: element,
|
|
18
|
+
field: component.field ?? element,
|
|
10
19
|
input: component.input,
|
|
11
20
|
getValue: component.getValue || (() => ""),
|
|
12
21
|
setValue(value) {
|
|
@@ -25,28 +34,20 @@ export const withAPI = ({ disabled, lifecycle }) => (component) => {
|
|
|
25
34
|
return this;
|
|
26
35
|
},
|
|
27
36
|
setVariant(variant) {
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
component.element.classList.add(`${PREFIX}-${COMPONENT}--${variant}`);
|
|
32
|
-
if (component.updateElementPositions) {
|
|
33
|
-
component.schedulePositionUpdate?.();
|
|
34
|
-
}
|
|
37
|
+
classes.remove(variantClass("filled"), variantClass("outlined"));
|
|
38
|
+
classes.add(variantClass(variant));
|
|
39
|
+
schedulePlacement();
|
|
35
40
|
return this;
|
|
36
41
|
},
|
|
37
42
|
getVariant() {
|
|
38
|
-
|
|
39
|
-
const COMPONENT = component.config?.componentName || "text-field";
|
|
40
|
-
if (component.element.classList.contains(`${PREFIX}-${COMPONENT}--outlined`)) {
|
|
43
|
+
if (classes.contains(variantClass("outlined"))) {
|
|
41
44
|
return "outlined";
|
|
42
45
|
}
|
|
43
46
|
return "filled";
|
|
44
47
|
},
|
|
45
48
|
setLabel(text) {
|
|
46
49
|
component.label?.setText(text);
|
|
47
|
-
|
|
48
|
-
component.schedulePositionUpdate?.();
|
|
49
|
-
}
|
|
50
|
+
schedulePlacement();
|
|
50
51
|
return this;
|
|
51
52
|
},
|
|
52
53
|
getLabel() {
|
|
@@ -58,18 +59,14 @@ export const withAPI = ({ disabled, lifecycle }) => (component) => {
|
|
|
58
59
|
setLeadingIcon(html) {
|
|
59
60
|
if (component.setLeadingIcon) {
|
|
60
61
|
component.setLeadingIcon(html);
|
|
61
|
-
|
|
62
|
-
component.schedulePositionUpdate?.();
|
|
63
|
-
}
|
|
62
|
+
schedulePlacement();
|
|
64
63
|
}
|
|
65
64
|
return this;
|
|
66
65
|
},
|
|
67
66
|
removeLeadingIcon() {
|
|
68
67
|
if (component.removeLeadingIcon) {
|
|
69
68
|
component.removeLeadingIcon();
|
|
70
|
-
|
|
71
|
-
component.schedulePositionUpdate?.();
|
|
72
|
-
}
|
|
69
|
+
schedulePlacement();
|
|
73
70
|
}
|
|
74
71
|
return this;
|
|
75
72
|
},
|
|
@@ -79,34 +76,26 @@ export const withAPI = ({ disabled, lifecycle }) => (component) => {
|
|
|
79
76
|
setTrailingIcon(html, label) {
|
|
80
77
|
if (component.setTrailingIcon) {
|
|
81
78
|
component.setTrailingIcon(html, label);
|
|
82
|
-
|
|
83
|
-
component.schedulePositionUpdate?.();
|
|
84
|
-
}
|
|
79
|
+
schedulePlacement();
|
|
85
80
|
}
|
|
86
81
|
return this;
|
|
87
82
|
},
|
|
88
83
|
removeTrailingIcon() {
|
|
89
84
|
if (component.removeTrailingIcon) {
|
|
90
85
|
component.removeTrailingIcon();
|
|
91
|
-
|
|
92
|
-
component.schedulePositionUpdate?.();
|
|
93
|
-
}
|
|
86
|
+
schedulePlacement();
|
|
94
87
|
}
|
|
95
88
|
return this;
|
|
96
89
|
},
|
|
97
90
|
get supportingTextElement() {
|
|
98
|
-
return
|
|
91
|
+
return element.querySelector(`.${component.getClass("text-field__helper")}`);
|
|
99
92
|
},
|
|
100
93
|
setSupportingText(text, isError) {
|
|
101
|
-
|
|
102
|
-
component.setSupportingText(text, isError);
|
|
103
|
-
}
|
|
94
|
+
component.setSupportingText?.(text, isError);
|
|
104
95
|
return this;
|
|
105
96
|
},
|
|
106
97
|
removeSupportingText() {
|
|
107
|
-
|
|
108
|
-
component.removeSupportingText();
|
|
109
|
-
}
|
|
98
|
+
component.removeSupportingText?.();
|
|
110
99
|
return this;
|
|
111
100
|
},
|
|
112
101
|
get prefixTextElement() {
|
|
@@ -115,18 +104,14 @@ export const withAPI = ({ disabled, lifecycle }) => (component) => {
|
|
|
115
104
|
setPrefixText(text) {
|
|
116
105
|
if (component.setPrefixText) {
|
|
117
106
|
component.setPrefixText(text);
|
|
118
|
-
|
|
119
|
-
component.schedulePositionUpdate?.();
|
|
120
|
-
}
|
|
107
|
+
schedulePlacement();
|
|
121
108
|
}
|
|
122
109
|
return this;
|
|
123
110
|
},
|
|
124
111
|
removePrefixText() {
|
|
125
112
|
if (component.removePrefixText) {
|
|
126
113
|
component.removePrefixText();
|
|
127
|
-
|
|
128
|
-
component.schedulePositionUpdate?.();
|
|
129
|
-
}
|
|
114
|
+
schedulePlacement();
|
|
130
115
|
}
|
|
131
116
|
return this;
|
|
132
117
|
},
|
|
@@ -136,55 +121,40 @@ export const withAPI = ({ disabled, lifecycle }) => (component) => {
|
|
|
136
121
|
setSuffixText(text) {
|
|
137
122
|
if (component.setSuffixText) {
|
|
138
123
|
component.setSuffixText(text);
|
|
139
|
-
|
|
140
|
-
component.schedulePositionUpdate?.();
|
|
141
|
-
}
|
|
124
|
+
schedulePlacement();
|
|
142
125
|
}
|
|
143
126
|
return this;
|
|
144
127
|
},
|
|
145
128
|
removeSuffixText() {
|
|
146
129
|
if (component.removeSuffixText) {
|
|
147
130
|
component.removeSuffixText();
|
|
148
|
-
|
|
149
|
-
component.schedulePositionUpdate?.();
|
|
150
|
-
}
|
|
131
|
+
schedulePlacement();
|
|
151
132
|
}
|
|
152
133
|
return this;
|
|
153
134
|
},
|
|
154
135
|
updatePositions() {
|
|
155
|
-
if (component.input
|
|
156
|
-
const hasValue = component.input.value
|
|
136
|
+
if (component.input) {
|
|
137
|
+
const hasValue = component.input.value;
|
|
157
138
|
let isAutofilled = false;
|
|
158
139
|
try {
|
|
159
140
|
isAutofilled = component.input.matches?.(":-webkit-autofill") || false;
|
|
160
141
|
}
|
|
161
142
|
catch {
|
|
162
143
|
}
|
|
163
|
-
|
|
164
|
-
component.element.classList.remove(`${component.config?.prefix || "mtrl"}-text-field--empty`);
|
|
165
|
-
}
|
|
166
|
-
else {
|
|
167
|
-
component.element.classList.add(`${component.config?.prefix || "mtrl"}-text-field--empty`);
|
|
168
|
-
}
|
|
169
|
-
}
|
|
170
|
-
if (component.updateElementPositions) {
|
|
171
|
-
component.updateElementPositions();
|
|
144
|
+
classes.toggle(`${fieldClass}--empty`, !(hasValue || isAutofilled));
|
|
172
145
|
}
|
|
146
|
+
component.updateElementPositions?.();
|
|
173
147
|
return this;
|
|
174
148
|
},
|
|
175
149
|
setError(error, message) {
|
|
176
|
-
|
|
177
|
-
component.setError(error, message);
|
|
178
|
-
}
|
|
150
|
+
component.setError?.(error, message);
|
|
179
151
|
return this;
|
|
180
152
|
},
|
|
181
153
|
isError() {
|
|
182
154
|
return component.isError?.() || false;
|
|
183
155
|
},
|
|
184
156
|
setDensity(density) {
|
|
185
|
-
|
|
186
|
-
component.density.set(density);
|
|
187
|
-
}
|
|
157
|
+
component.density?.set?.(density);
|
|
188
158
|
component.schedulePositionUpdate?.();
|
|
189
159
|
return this;
|
|
190
160
|
},
|
|
@@ -193,6 +163,20 @@ export const withAPI = ({ disabled, lifecycle }) => (component) => {
|
|
|
193
163
|
},
|
|
194
164
|
on(event, handler) {
|
|
195
165
|
component.on?.(event, handler);
|
|
166
|
+
if (event === "trailing" && /*#__PURE__*/ (() => {
|
|
167
|
+
try {
|
|
168
|
+
return process.env.NODE_ENV !== "production";
|
|
169
|
+
}
|
|
170
|
+
catch {
|
|
171
|
+
return false;
|
|
172
|
+
}
|
|
173
|
+
})() && process.env.NODE_ENV !== "production") {
|
|
174
|
+
const host = handler.__h;
|
|
175
|
+
if (host)
|
|
176
|
+
element.__h = host;
|
|
177
|
+
else if (component.trailingIcon?.tagName === "SPAN")
|
|
178
|
+
checkTrailingLabel(element.__h ?? element);
|
|
179
|
+
}
|
|
196
180
|
return this;
|
|
197
181
|
},
|
|
198
182
|
off(event, handler) {
|
|
@@ -225,3 +209,10 @@ export const withAPI = ({ disabled, lifecycle }) => (component) => {
|
|
|
225
209
|
},
|
|
226
210
|
};
|
|
227
211
|
};
|
|
212
|
+
const warned = /*#__PURE__*/ new WeakSet();
|
|
213
|
+
export const checkTrailingLabel = (element) => {
|
|
214
|
+
if (!warned.has(element)) {
|
|
215
|
+
warned.add(element);
|
|
216
|
+
warnDev('text-field', 'Set trailingIconLabel/trailing-icon-label');
|
|
217
|
+
}
|
|
218
|
+
};
|
|
@@ -1,20 +1,3 @@
|
|
|
1
|
-
// src/core/shapes/material.ts
|
|
2
|
-
//
|
|
3
|
-
// The Material 3 Expressive shapes: all 35 of Compose Material 3's
|
|
4
|
-
// `MaterialShapes`, built as it builds them (vertex lists repeated around a
|
|
5
|
-
// centre, stars, rectangles, circles), normalised into the unit square.
|
|
6
|
-
//
|
|
7
|
-
// Ported from androidx (Apache License 2.0, Copyright The Android Open Source
|
|
8
|
-
// Project): compose/material3/material3/src/commonMain/kotlin/androidx/compose/
|
|
9
|
-
// material3/MaterialShapes.kt at 080d2b3e5326ba80392d93442c4a51a02dc22650, on
|
|
10
|
-
// the geometry of androidx.graphics:graphics-shapes 1.0.1, the version Compose
|
|
11
|
-
// Material 3 depends on. test/fixtures/material-shapes.json holds every shape
|
|
12
|
-
// as Compose builds it (scripts/generate-material-shapes.kt), and the tests
|
|
13
|
-
// hold this port to it.
|
|
14
|
-
//
|
|
15
|
-
// Each shape is its own export, built once on first use, so a bundle carries
|
|
16
|
-
// only the shapes it names. `materialShape(name)` looks any of them up by name,
|
|
17
|
-
// and carries them all.
|
|
18
1
|
import { pointOnCurve } from "./cubic.js";
|
|
19
2
|
import { circle, normalizePolygon, polygonBounds, polygonMaxRadius, rectangle, regularPolygon, rotatePolygon, roundedPolygon, scalePolygon, star, } from "./polygon.js";
|
|
20
3
|
const cornerRound15 = { radius: 0.15 };
|
|
@@ -24,10 +7,6 @@ const cornerRound50 = { radius: 0.5 };
|
|
|
24
7
|
const cornerRound100 = { radius: 1 };
|
|
25
8
|
const point = (x, y, radius = 0, smoothing = 0) => ({ x, y, r: { radius, smoothing } });
|
|
26
9
|
const toRadians = (degrees) => (degrees / 360) * 2 * Math.PI;
|
|
27
|
-
/**
|
|
28
|
-
* Repeats a few points around the centre, `reps` times, optionally mirroring
|
|
29
|
-
* every other repetition (MaterialShapes.doRepeat)
|
|
30
|
-
*/
|
|
31
10
|
const repeat = (points, reps, cx, cy, mirroring) => {
|
|
32
11
|
const result = [];
|
|
33
12
|
if (mirroring) {
|
|
@@ -56,7 +35,6 @@ const repeat = (points, reps, cx, cy, mirroring) => {
|
|
|
56
35
|
}
|
|
57
36
|
return result;
|
|
58
37
|
};
|
|
59
|
-
/** MaterialShapes.customPolygon: points repeated around (0.5, 0.5) */
|
|
60
38
|
const custom = (pnr, reps, mirroring = false) => {
|
|
61
39
|
const points = repeat(pnr, reps, 0.5, 0.5, mirroring);
|
|
62
40
|
const vertices = [];
|
|
@@ -64,91 +42,55 @@ const custom = (pnr, reps, mirroring = false) => {
|
|
|
64
42
|
vertices.push(p.x, p.y);
|
|
65
43
|
return roundedPolygon(vertices, undefined, points.map((p) => p.r), 0.5, 0.5);
|
|
66
44
|
};
|
|
67
|
-
/** A shape built once, on first use, and normalised into the unit square */
|
|
68
45
|
const shape = (build) => {
|
|
69
46
|
let built;
|
|
70
47
|
return () => (built ?? (built = normalizePolygon(build())));
|
|
71
48
|
};
|
|
72
|
-
/** Circle */
|
|
73
49
|
export const shapeCircle = /*#__PURE__*/ shape(() => circle(10));
|
|
74
|
-
/** A rounded square */
|
|
75
50
|
export const shapeSquare = /*#__PURE__*/ shape(() => rectangle(1, 1, cornerRound30));
|
|
76
|
-
/** A slanted square */
|
|
77
51
|
export const shapeSlanted = /*#__PURE__*/ shape(() => custom([point(0.926, 0.97, 0.189, 0.811), point(-0.021, 0.967, 0.187, 0.057)], 2));
|
|
78
|
-
/** An arch */
|
|
79
52
|
export const shapeArch = /*#__PURE__*/ shape(() => rotatePolygon(regularPolygon(4, 1, 0, 0, undefined, [cornerRound100, cornerRound100, cornerRound20, cornerRound20]), -135));
|
|
80
|
-
/** A fan */
|
|
81
53
|
export const shapeFan = /*#__PURE__*/ shape(() => custom([point(1.004, 1.0, 0.148, 0.417), point(0.0, 1.0, 0.151), point(0.0, -0.003, 0.148), point(0.978, 0.02, 0.803)], 1));
|
|
82
|
-
/** An arrow */
|
|
83
54
|
export const shapeArrow = /*#__PURE__*/ shape(() => custom([point(0.5, 0.892, 0.313), point(-0.216, 1.05, 0.207), point(0.499, -0.16, 0.215, 1.0), point(1.225, 1.06, 0.211)], 1));
|
|
84
|
-
/** A semicircle */
|
|
85
55
|
export const shapeSemiCircle = /*#__PURE__*/ shape(() => rectangle(1.6, 1, undefined, [cornerRound20, cornerRound20, cornerRound100, cornerRound100]));
|
|
86
|
-
/** An oval */
|
|
87
56
|
export const shapeOval = /*#__PURE__*/ shape(() => rotatePolygon(scalePolygon(circle(), 1, 0.64), -45));
|
|
88
|
-
/** A pill */
|
|
89
57
|
export const shapePill = /*#__PURE__*/ shape(() => custom([point(0.961, 0.039, 0.426), point(1.001, 0.428), point(1.0, 0.609, 1.0)], 2, true));
|
|
90
|
-
/** A triangle */
|
|
91
58
|
export const shapeTriangle = /*#__PURE__*/ shape(() => rotatePolygon(regularPolygon(3, 1, 0, 0, cornerRound20), -90));
|
|
92
|
-
/** A diamond */
|
|
93
59
|
export const shapeDiamond = /*#__PURE__*/ shape(() => custom([point(0.5, 1.096, 0.151, 0.524), point(0.04, 0.5, 0.159)], 2));
|
|
94
|
-
/** A clam shell */
|
|
95
60
|
export const shapeClamShell = /*#__PURE__*/ shape(() => custom([point(0.171, 0.841, 0.159), point(-0.02, 0.5, 0.14), point(0.17, 0.159, 0.159)], 2));
|
|
96
|
-
/** A pentagon */
|
|
97
61
|
export const shapePentagon = /*#__PURE__*/ shape(() => custom([point(0.5, -0.009, 0.172), point(1.03, 0.365, 0.164), point(0.828, 0.97, 0.169)], 1, true));
|
|
98
|
-
/** A gem */
|
|
99
62
|
export const shapeGem = /*#__PURE__*/ shape(() => custom([point(0.499, 1.023, 0.241, 0.778), point(-0.005, 0.792, 0.208), point(0.073, 0.258, 0.228), point(0.433, -0.0, 0.491)], 1, true));
|
|
100
|
-
/** A sunny shape: an 8-point star */
|
|
101
63
|
export const shapeSunny = /*#__PURE__*/ shape(() => star(8, 1, 0.8, cornerRound15));
|
|
102
|
-
/** A very sunny shape */
|
|
103
64
|
export const shapeVerySunny = /*#__PURE__*/ shape(() => custom([point(0.5, 1.08, 0.085), point(0.358, 0.843, 0.085)], 8));
|
|
104
|
-
/** A 4-sided cookie */
|
|
105
65
|
export const shapeCookie4Sided = /*#__PURE__*/ shape(() => custom([point(1.237, 1.236, 0.258), point(0.5, 0.918, 0.233)], 4));
|
|
106
|
-
/** A 6-sided cookie */
|
|
107
66
|
export const shapeCookie6Sided = /*#__PURE__*/ shape(() => custom([point(0.723, 0.884, 0.394), point(0.5, 1.099, 0.398)], 6));
|
|
108
|
-
/** A 7-sided cookie */
|
|
109
67
|
export const shapeCookie7Sided = /*#__PURE__*/ shape(() => rotatePolygon(star(7, 1, 0.75, cornerRound50), -90));
|
|
110
|
-
/** A 9-sided cookie */
|
|
111
68
|
export const shapeCookie9Sided = /*#__PURE__*/ shape(() => rotatePolygon(star(9, 1, 0.8, cornerRound50), -90));
|
|
112
|
-
/** A 12-sided cookie */
|
|
113
69
|
export const shapeCookie12Sided = /*#__PURE__*/ shape(() => rotatePolygon(star(12, 1, 0.8, cornerRound50), -90));
|
|
114
|
-
/** A ghost-ish shape */
|
|
115
70
|
export const shapeGhostish = /*#__PURE__*/ shape(() => custom([point(0.5, 0, 1.0), point(1, 0, 1.0), point(1, 1.14, 0.254, 0.106), point(0.575, 0.906, 0.253)], 1, true));
|
|
116
|
-
/** A 4-leaf clover */
|
|
117
71
|
export const shapeClover4Leaf = /*#__PURE__*/ shape(() => custom([point(0.5, 0.074), point(0.725, -0.099, 0.476)], 4, true));
|
|
118
|
-
/** An 8-leaf clover */
|
|
119
72
|
export const shapeClover8Leaf = /*#__PURE__*/ shape(() => custom([point(0.5, 0.036), point(0.758, -0.101, 0.209)], 8));
|
|
120
|
-
/** A burst */
|
|
121
73
|
export const shapeBurst = /*#__PURE__*/ shape(() => custom([point(0.5, -0.006, 0.006), point(0.592, 0.158, 0.006)], 12));
|
|
122
|
-
/** A soft burst */
|
|
123
74
|
export const shapeSoftBurst = /*#__PURE__*/ shape(() => custom([point(0.193, 0.277, 0.053), point(0.176, 0.055, 0.053)], 10));
|
|
124
|
-
/** A boom */
|
|
125
75
|
export const shapeBoom = /*#__PURE__*/ shape(() => custom([point(0.457, 0.296, 0.007), point(0.5, -0.051, 0.007)], 15));
|
|
126
|
-
/** A soft boom */
|
|
127
76
|
export const shapeSoftBoom = /*#__PURE__*/ shape(() => custom([point(0.733, 0.454), point(0.839, 0.437, 0.532), point(0.949, 0.449, 0.439, 1.0), point(0.998, 0.478, 0.174)], 16, true));
|
|
128
|
-
/** A flower */
|
|
129
77
|
export const shapeFlower = /*#__PURE__*/ shape(() => custom([point(0.37, 0.187), point(0.416, 0.049, 0.381), point(0.479, 0.001, 0.095)], 8, true));
|
|
130
|
-
/** A puffy shape */
|
|
131
78
|
export const shapePuffy = /*#__PURE__*/ shape(() => scalePolygon(custom([
|
|
132
79
|
point(0.5, 0.053), point(0.545, -0.04, 0.405), point(0.67, -0.035, 0.426), point(0.717, 0.066, 0.574),
|
|
133
80
|
point(0.722, 0.128), point(0.777, 0.002, 0.36), point(0.914, 0.149, 0.66), point(0.926, 0.289, 0.66),
|
|
134
81
|
point(0.881, 0.346), point(0.94, 0.344, 0.126), point(1.003, 0.437, 0.255),
|
|
135
82
|
], 2, true), 1, 0.742));
|
|
136
|
-
/** A puffy diamond */
|
|
137
83
|
export const shapePuffyDiamond = /*#__PURE__*/ shape(() => custom([point(0.87, 0.13, 0.146), point(0.818, 0.357), point(1.0, 0.332, 0.853)], 4, true));
|
|
138
|
-
/** A pixelated circle */
|
|
139
84
|
export const shapePixelCircle = /*#__PURE__*/ shape(() => custom([
|
|
140
85
|
point(0.5, 0.0), point(0.704, 0.0), point(0.704, 0.065), point(0.843, 0.065),
|
|
141
86
|
point(0.843, 0.148), point(0.926, 0.148), point(0.926, 0.296), point(1.0, 0.296),
|
|
142
87
|
], 2, true));
|
|
143
|
-
/** A pixelated triangle */
|
|
144
88
|
export const shapePixelTriangle = /*#__PURE__*/ shape(() => custom([
|
|
145
89
|
point(0.11, 0.5), point(0.113, 0.0), point(0.287, 0.0), point(0.287, 0.087), point(0.421, 0.087),
|
|
146
90
|
point(0.421, 0.17), point(0.56, 0.17), point(0.56, 0.265), point(0.674, 0.265), point(0.675, 0.344),
|
|
147
91
|
point(0.789, 0.344), point(0.789, 0.439), point(0.888, 0.439),
|
|
148
92
|
], 1, true));
|
|
149
|
-
/** A bun */
|
|
150
93
|
export const shapeBun = /*#__PURE__*/ shape(() => custom([point(0.796, 0.5), point(0.853, 0.518, 1), point(0.992, 0.631, 1), point(0.968, 1.0, 1)], 2, true));
|
|
151
|
-
/** A heart */
|
|
152
94
|
export const shapeHeart = /*#__PURE__*/ shape(() => custom([point(0.5, 0.268, 0.016), point(0.792, -0.066, 0.958), point(1.064, 0.276, 1.0), point(0.501, 0.946, 0.129)], 1, true));
|
|
153
95
|
const byName = {
|
|
154
96
|
circle: shapeCircle,
|
|
@@ -187,16 +129,11 @@ const byName = {
|
|
|
187
129
|
bun: shapeBun,
|
|
188
130
|
heart: shapeHeart,
|
|
189
131
|
};
|
|
190
|
-
/** A Material shape by name, normalised into the unit square. Carries every shape; import `shapeX` to carry one. */
|
|
191
132
|
export const materialShape = (name) => byName[name]();
|
|
192
133
|
const num = (value) => {
|
|
193
134
|
const rounded = Math.round(value * 1000) / 1000;
|
|
194
135
|
return String(Object.is(rounded, -0) ? 0 : rounded);
|
|
195
136
|
};
|
|
196
|
-
/**
|
|
197
|
-
* A polygon's outline as an SVG path ("M … C … Z"), scaled by `size`: a
|
|
198
|
-
* normalised shape fills a `size` × `size` box. Coordinates keep three decimals.
|
|
199
|
-
*/
|
|
200
137
|
export const polygonPath = (polygon, size = 1) => {
|
|
201
138
|
const cubics = polygon.cubics;
|
|
202
139
|
if (!cubics.length)
|
|
@@ -207,25 +144,14 @@ export const polygonPath = (polygon, size = 1) => {
|
|
|
207
144
|
d += `C${s(c[2])} ${s(c[3])} ${s(c[4])} ${s(c[5])} ${s(c[6])} ${s(c[7])}`;
|
|
208
145
|
return `${d}Z`;
|
|
209
146
|
};
|
|
210
|
-
/** A Material shape as an SVG path in a `size` × `size` box. Carries every shape, as materialShape does. */
|
|
211
147
|
export const materialShapePath = (name, size = 1) => polygonPath(materialShape(name), size);
|
|
212
148
|
const TWO_PI = Math.PI * 2;
|
|
213
|
-
/**
|
|
214
|
-
* radialProfile without its star-shape check, for callers whose shapes are
|
|
215
|
-
* known to be star-shaped: the loading indicator's, which the tests check.
|
|
216
|
-
* The centroid, not the bounds centre, is the pivot: a pentagon's mass sits
|
|
217
|
-
* below the middle of its box, and turning it about the box would make it
|
|
218
|
-
* orbit.
|
|
219
|
-
* @internal
|
|
220
|
-
*/
|
|
221
149
|
export const sampleProfile = (polygon, samples = 360, stepsPerCubic = 24) => {
|
|
222
|
-
// The outline as a dense polygon
|
|
223
150
|
const points = [];
|
|
224
151
|
for (const cubic of polygon.cubics) {
|
|
225
152
|
for (let s = 0; s < stepsPerCubic; s++)
|
|
226
153
|
points.push(pointOnCurve(cubic, s / stepsPerCubic));
|
|
227
154
|
}
|
|
228
|
-
// Its area centroid (shoelace formula)
|
|
229
155
|
let area = 0;
|
|
230
156
|
let centerX = 0;
|
|
231
157
|
let centerY = 0;
|
|
@@ -246,7 +172,6 @@ export const sampleProfile = (polygon, samples = 360, stepsPerCubic = 24) => {
|
|
|
246
172
|
centerX = (bounds[0] + bounds[2]) / 2;
|
|
247
173
|
centerY = (bounds[1] + bounds[3]) / 2;
|
|
248
174
|
}
|
|
249
|
-
// The outline as (angle, radius) pairs, sorted by angle
|
|
250
175
|
const outline = [];
|
|
251
176
|
for (const [x, y] of points) {
|
|
252
177
|
const dx = x - centerX;
|
|
@@ -278,13 +203,6 @@ export const sampleProfile = (polygon, samples = 360, stepsPerCubic = 24) => {
|
|
|
278
203
|
}
|
|
279
204
|
return { radii, centerX, centerY, maxRadius };
|
|
280
205
|
};
|
|
281
|
-
/**
|
|
282
|
-
* Samples the outline at `samples` angles around the shape's area centroid.
|
|
283
|
-
* Throws for a shape that is not star-shaped around it. Of the Material
|
|
284
|
-
* shapes, 33 are; Puffy and PixelTriangle are not (their outlines double back
|
|
285
|
-
* as seen from the centroid, Puffy by about 0.1°): a ray from the centroid
|
|
286
|
-
* would cross the outline more than once, and the profile would be wrong.
|
|
287
|
-
*/
|
|
288
206
|
export const radialProfile = (polygon, samples = 360, stepsPerCubic = 24) => {
|
|
289
207
|
const profile = sampleProfile(polygon, samples, stepsPerCubic);
|
|
290
208
|
const { centerX, centerY } = profile;
|
|
@@ -293,9 +211,6 @@ export const radialProfile = (polygon, samples = 360, stepsPerCubic = 24) => {
|
|
|
293
211
|
for (let s = 0; s < stepsPerCubic; s++)
|
|
294
212
|
points.push(pointOnCurve(cubic, s / stepsPerCubic));
|
|
295
213
|
}
|
|
296
|
-
// Star-shaped around the centroid: walking the outline, the angle seen from
|
|
297
|
-
// the centroid only ever turns one way. A shape that doubles back (a heart's
|
|
298
|
-
// notch, an arch's inner curve) would be sampled wrong: refuse it.
|
|
299
214
|
let turn = 0;
|
|
300
215
|
for (let i = 0; i < points.length; i++) {
|
|
301
216
|
const [x0, y0] = points[i];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
:host{display:inline-block}:host([hidden]){display:none}*,*::before,*::after{box-sizing:border-box}@media (prefers-reduced-motion:reduce){*,*::before,*::after{animation-duration:.01ms!important;animation-iteration-count:1!important;transition-property:opacity,color,background-color,border-color,outline-color,box-shadow,visibility!important;scroll-behavior:auto!important}}:host{display:block}
|
|
1
|
+
:host{display:inline-block}:host([hidden]){display:none}*,*::before,*::after{box-sizing:border-box}@media (prefers-reduced-motion:reduce){*,*::before,*::after{animation-duration:.01ms!important;animation-iteration-count:1!important;transition-property:opacity,color,background-color,border-color,outline-color,box-shadow,visibility!important;scroll-behavior:auto!important}}:host{display:block}:host(:dir(rtl)) :is(.mtrl-tab--icon-only,.mtrl-tab--icon-and-text) .mtrl-badge__wrapper .mtrl-badge--top-right{right:calc(100% - 6px);left:auto}:host(:dir(rtl)) .mtrl-tab--text-only .mtrl-badge__wrapper .mtrl-badge--top-right{right:calc(100% + 4px);left:auto}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
.mtrl-tabs{position:relative;display:flex;flex-direction:column;width:100%;box-sizing:border-box}.mtrl-tabs--primary{min-height:48px}.mtrl-tabs--primary:has(.mtrl-button.mtrl-tab--icon-and-text){min-height:64px}.mtrl-tabs--primary .mtrl-tabs__indicator{border-radius:3px 3px 0 0;background-color:var(--mtrl-sys-color-primary)}.mtrl-tabs--secondary{min-height:48px}.mtrl-tabs--secondary .mtrl-tabs__indicator{border-radius:0;background-color:var(--mtrl-sys-color-primary)}.mtrl-tabs .mtrl-button.mtrl-tab::before{content:none}.mtrl-tabs:not(.mtrl-tabs--scrollable){flex-direction:row}.mtrl-tabs:not(.mtrl-tabs--scrollable)>.mtrl-button.mtrl-tab{flex:1}.mtrl-tabs--scrollable{overflow:hidden}.mtrl-tabs--scrollable .mtrl-tabs__scroll{display:flex;padding-inline:52px;overflow-x:auto;scroll-behavior:smooth;scrollbar-width:none;-ms-overflow-style:none}.mtrl-tabs--scrollable .mtrl-tabs__scroll::-webkit-scrollbar{display:none}.mtrl-tabs__divider{position:absolute;bottom:0;left:0;right:0;height:1px;background-color:var(--mtrl-sys-color-outline-variant)}.mtrl-tabs__indicator{position:absolute;bottom:0;left:0;transition:transform 450ms linear(0, 0.055, 0.18, 0.332, 0.483, 0.619, 0.733, 0.823, 0.891, 0.94, 0.973, 0.994, 1.007, 1.013, 1.015, 1.015, 1.013, 1.011, 1.009, 1.006, 1.005, 1.003, 1.002, 1.001, 1),width 450ms linear(0, 0.055, 0.18, 0.332, 0.483, 0.619, 0.733, 0.823, 0.891, 0.94, 0.973, 0.994, 1.007, 1.013, 1.015, 1.015, 1.013, 1.011, 1.009, 1.006, 1.005, 1.003, 1.002, 1.001, 1);z-index:1}@supports(anchor-name: --a){.mtrl-tabs{anchor-scope:--mtrl-tabs-indicator}.mtrl-tabs__indicator{position-anchor:--mtrl-tabs-indicator}.mtrl-tabs .mtrl-tab--active{anchor-name:--mtrl-tabs-indicator}.mtrl-tabs--primary:not(:has(.mtrl-tabs__indicator--fixed)):not(:has(.mtrl-tabs__indicator--dynamic)) .mtrl-tab--active:has(.mtrl-button__text){anchor-name:none}.mtrl-tabs--primary:not(:has(.mtrl-tabs__indicator--fixed)):not(:has(.mtrl-tabs__indicator--dynamic)) .mtrl-tab--active .mtrl-button__text{anchor-name:--mtrl-tabs-indicator}.mtrl-tabs--primary .mtrl-tabs__indicator,.mtrl-tabs--secondary .mtrl-tabs__indicator{transition:left 450ms linear(0, 0.055, 0.18, 0.332, 0.483, 0.619, 0.733, 0.823, 0.891, 0.94, 0.973, 0.994, 1.007, 1.013, 1.015, 1.015, 1.013, 1.011, 1.009, 1.006, 1.005, 1.003, 1.002, 1.001, 1),width 450ms linear(0, 0.055, 0.18, 0.332, 0.483, 0.619, 0.733, 0.823, 0.891, 0.94, 0.973, 0.994, 1.007, 1.013, 1.015, 1.015, 1.013, 1.011, 1.009, 1.006, 1.005, 1.003, 1.002, 1.001, 1)}.mtrl-tabs--primary .mtrl-tabs__indicator{width:max(24px, calc(anchor-size(width) - 4px));left:calc(anchor(center) - 0.5 * max(24px, anchor-size(width) - 4px))}.mtrl-tabs--secondary .mtrl-tabs__indicator{left:anchor(left);width:anchor-size(width);min-width:0}.mtrl-tabs--primary:has(.mtrl-tab--active:not(:has(.mtrl-button__text))) .mtrl-tabs__indicator:not(.mtrl-tabs__indicator--fixed):not(.mtrl-tabs__indicator--content),.mtrl-tabs--primary .mtrl-tabs__indicator--dynamic,.mtrl-tabs--secondary .mtrl-tabs__indicator--dynamic{width:max(30px, calc(anchor-size(width) / 2));left:calc(anchor(center) - 0.5 * max(30px, calc(anchor-size(width) / 2)))}.mtrl-tabs--primary .mtrl-tabs__indicator--content,.mtrl-tabs--secondary .mtrl-tabs__indicator--content{width:max(30px, anchor-size(width));left:calc(anchor(center) - 0.5 * max(30px, anchor-size(width)))}.mtrl-tabs:has(.mtrl-tab--active:not(:has(.mtrl-button__text))) .mtrl-tabs__indicator--content,.mtrl-tabs--primary .mtrl-tabs__indicator--fixed,.mtrl-tabs--secondary .mtrl-tabs__indicator--fixed{width:var(--mtrl-tabs-indicator-width, 40px);left:calc(anchor(center) - 0.5 * var(--mtrl-tabs-indicator-width, 40px))}}.mtrl-button.mtrl-tab{position:relative;display:inline-flex;align-items:center;justify-content:center;min-width:90px;max-width:360px;padding:0 16px;border:none;border-radius:0;background-color:rgba(0,0,0,0);color:var(--mtrl-sys-color-on-surface-variant);cursor:pointer;user-select:none;flex-shrink:0;font-family:var(--mtrl-ref-typeface-brand, Roboto, sans-serif);font-size:14px;line-height:20px;letter-spacing:.1px;font-weight:500;transition:background-color .2s cubic-bezier(0.4, 0, 0.2, 1),color .2s cubic-bezier(0.4, 0, 0.2, 1)}.mtrl-button.mtrl-tab--text-only{height:48px}.mtrl-button.mtrl-tab--icon-only{height:48px}.mtrl-button.mtrl-tab--icon-and-text{height:64px;flex-direction:column}.mtrl-button.mtrl-tab.mtrl-button--icon{padding:0 16px}.mtrl-button.mtrl-tab:focus{outline:none}.mtrl-button.mtrl-tab:focus-visible{outline:3px solid var(--mtrl-sys-color-secondary);outline-offset:-3px;z-index:1}.mtrl-button.mtrl-tab--disabled,.mtrl-button.mtrl-tab:disabled{pointer-events:none;opacity:.38}.mtrl-button.mtrl-tab .mtrl-button__icon{display:flex;align-items:center;justify-content:center;width:24px;height:24px}.mtrl-button.mtrl-tab .mtrl-button__icon svg{width:100%;height:100%;fill:currentColor}.mtrl-button.mtrl-tab--icon-and-text .mtrl-button__icon{margin-bottom:4px}.mtrl-button.mtrl-tab .mtrl-button__text{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:100%;text-align:center;line-height:1.2}.mtrl-button.mtrl-tab--icon-only .mtrl-button__text{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);white-space:nowrap;border:0}.mtrl-button.mtrl-tab--icon-only .mtrl-badge__wrapper .mtrl-badge--top-right{top:4px;right:4px}.mtrl-button.mtrl-tab--text-only .mtrl-badge__wrapper .mtrl-badge--top-right{top:8px;right:8px}.mtrl-button.mtrl-tab--icon-and-text .mtrl-badge__wrapper .mtrl-badge--top-right{top:4px;right:calc(50% - 20px)}.mtrl-tabs--primary .mtrl-button.mtrl-tab--active{color:var(--mtrl-sys-color-primary);border-radius:0}.mtrl-tabs--primary .mtrl-button.mtrl-tab--active .mtrl-button__icon{color:var(--mtrl-sys-color-primary)}.mtrl-tabs--primary .mtrl-button.mtrl-tab--active:hover,.mtrl-tabs--primary .mtrl-button.mtrl-tab--active.mtrl-button.mtrl-tab--hover{background-color:color-mix(in srgb, var(--mtrl-sys-color-primary) 8%, transparent)}.mtrl-tabs--primary .mtrl-button.mtrl-tab--active:focus-visible,.mtrl-tabs--primary .mtrl-button.mtrl-tab--active.mtrl-button.mtrl-tab--focus{background-color:color-mix(in srgb, var(--mtrl-sys-color-primary) 10%, transparent)}.mtrl-tabs--primary .mtrl-button.mtrl-tab--active:active:not(:has(>.mtrl-ripple)),.mtrl-tabs--primary .mtrl-button.mtrl-tab--active.mtrl-button.mtrl-tab--pressed{background-color:color-mix(in srgb, var(--mtrl-sys-color-primary) 10%, transparent)}.mtrl-tabs--primary .mtrl-button.mtrl-tab:not(.mtrl-button.mtrl-tab--active):not(.mtrl-button.mtrl-tab--disabled):not(:disabled){color:var(--mtrl-sys-color-on-surface-variant)}.mtrl-tabs--primary .mtrl-button.mtrl-tab:not(.mtrl-button.mtrl-tab--active):not(.mtrl-button.mtrl-tab--disabled):not(:disabled):hover,.mtrl-tabs--primary .mtrl-button.mtrl-tab:not(.mtrl-button.mtrl-tab--active):not(.mtrl-button.mtrl-tab--disabled):not(:disabled).mtrl-button.mtrl-tab--hover{color:var(--mtrl-sys-color-on-surface);background-color:color-mix(in srgb, var(--mtrl-sys-color-on-surface) 8%, transparent)}.mtrl-tabs--primary .mtrl-button.mtrl-tab:not(.mtrl-button.mtrl-tab--active):not(.mtrl-button.mtrl-tab--disabled):not(:disabled):focus-visible,.mtrl-tabs--primary .mtrl-button.mtrl-tab:not(.mtrl-button.mtrl-tab--active):not(.mtrl-button.mtrl-tab--disabled):not(:disabled).mtrl-button.mtrl-tab--focus{color:var(--mtrl-sys-color-on-surface);background-color:color-mix(in srgb, var(--mtrl-sys-color-on-surface) 10%, transparent)}.mtrl-tabs--primary .mtrl-button.mtrl-tab:not(.mtrl-button.mtrl-tab--active):not(.mtrl-button.mtrl-tab--disabled):not(:disabled):active,.mtrl-tabs--primary .mtrl-button.mtrl-tab:not(.mtrl-button.mtrl-tab--active):not(.mtrl-button.mtrl-tab--disabled):not(:disabled).mtrl-button.mtrl-tab--pressed{color:var(--mtrl-sys-color-on-surface)}.mtrl-tabs--primary .mtrl-button.mtrl-tab:not(.mtrl-button.mtrl-tab--active):not(.mtrl-button.mtrl-tab--disabled):not(:disabled):active:not(:has(>.mtrl-ripple)),.mtrl-tabs--primary .mtrl-button.mtrl-tab:not(.mtrl-button.mtrl-tab--active):not(.mtrl-button.mtrl-tab--disabled):not(:disabled).mtrl-button.mtrl-tab--pressed{background-color:color-mix(in srgb, var(--mtrl-sys-color-primary) 10%, transparent)}.mtrl-tabs--primary .mtrl-button.mtrl-tab:not(.mtrl-button.mtrl-tab--active):not(.mtrl-button.mtrl-tab--disabled):not(:disabled) .mtrl-ripple-wave{background-color:var(--mtrl-sys-color-primary)}.mtrl-tabs--secondary .mtrl-button.mtrl-tab--active{color:var(--mtrl-sys-color-on-surface);border-radius:0}.mtrl-tabs--secondary .mtrl-button.mtrl-tab--active .mtrl-button__icon{color:var(--mtrl-sys-color-on-surface)}.mtrl-tabs--secondary .mtrl-button.mtrl-tab--active:hover,.mtrl-tabs--secondary .mtrl-button.mtrl-tab--active.mtrl-button.mtrl-tab--hover{background-color:color-mix(in srgb, var(--mtrl-sys-color-on-surface) 8%, transparent)}.mtrl-tabs--secondary .mtrl-button.mtrl-tab--active:focus-visible,.mtrl-tabs--secondary .mtrl-button.mtrl-tab--active.mtrl-button.mtrl-tab--focus{background-color:color-mix(in srgb, var(--mtrl-sys-color-on-surface) 10%, transparent)}.mtrl-tabs--secondary .mtrl-button.mtrl-tab--active:active:not(:has(>.mtrl-ripple)),.mtrl-tabs--secondary .mtrl-button.mtrl-tab--active.mtrl-button.mtrl-tab--pressed{background-color:color-mix(in srgb, var(--mtrl-sys-color-on-surface) 10%, transparent)}.mtrl-tabs--secondary .mtrl-button.mtrl-tab:not(.mtrl-button.mtrl-tab--active):not(.mtrl-button.mtrl-tab--disabled):not(:disabled){color:var(--mtrl-sys-color-on-surface-variant)}.mtrl-tabs--secondary .mtrl-button.mtrl-tab:not(.mtrl-button.mtrl-tab--active):not(.mtrl-button.mtrl-tab--disabled):not(:disabled):hover,.mtrl-tabs--secondary .mtrl-button.mtrl-tab:not(.mtrl-button.mtrl-tab--active):not(.mtrl-button.mtrl-tab--disabled):not(:disabled).mtrl-button.mtrl-tab--hover{color:var(--mtrl-sys-color-on-surface);background-color:color-mix(in srgb, var(--mtrl-sys-color-on-surface) 8%, transparent)}.mtrl-tabs--secondary .mtrl-button.mtrl-tab:not(.mtrl-button.mtrl-tab--active):not(.mtrl-button.mtrl-tab--disabled):not(:disabled):focus-visible,.mtrl-tabs--secondary .mtrl-button.mtrl-tab:not(.mtrl-button.mtrl-tab--active):not(.mtrl-button.mtrl-tab--disabled):not(:disabled).mtrl-button.mtrl-tab--focus{color:var(--mtrl-sys-color-on-surface);background-color:color-mix(in srgb, var(--mtrl-sys-color-on-surface) 10%, transparent)}.mtrl-tabs--secondary .mtrl-button.mtrl-tab:not(.mtrl-button.mtrl-tab--active):not(.mtrl-button.mtrl-tab--disabled):not(:disabled):active,.mtrl-tabs--secondary .mtrl-button.mtrl-tab:not(.mtrl-button.mtrl-tab--active):not(.mtrl-button.mtrl-tab--disabled):not(:disabled).mtrl-button.mtrl-tab--pressed{color:var(--mtrl-sys-color-on-surface)}.mtrl-tabs--secondary .mtrl-button.mtrl-tab:not(.mtrl-button.mtrl-tab--active):not(.mtrl-button.mtrl-tab--disabled):not(:disabled):active:not(:has(>.mtrl-ripple)),.mtrl-tabs--secondary .mtrl-button.mtrl-tab:not(.mtrl-button.mtrl-tab--active):not(.mtrl-button.mtrl-tab--disabled):not(:disabled).mtrl-button.mtrl-tab--pressed{background-color:color-mix(in srgb, var(--mtrl-sys-color-on-surface) 10%, transparent)}.mtrl-tab-panel{padding:16px}.mtrl-tab-panel[hidden]{display:none}.mtrl-tabs__scroll-indicator{position:absolute;top:0;bottom:0;width:24px;pointer-events:none;z-index:1;opacity:0;transition:opacity .2s ease}.mtrl-tabs__scroll-indicator.visible{opacity:1}.mtrl-tabs__scroll-indicator--left{left:0;background:linear-gradient(to right, var(--mtrl-sys-color-surface), transparent)}.mtrl-tabs__scroll-indicator--right{right:0;background:linear-gradient(to left, var(--mtrl-sys-color-surface), transparent)}.mtrl-tabs__scroll-indicator--shadow.mtrl-tabs__scroll-indicator--left{box-shadow:2px 0 4px -2px rgba(0,0,0,.2);background:none}.mtrl-tabs__scroll-indicator--shadow.mtrl-tabs__scroll-indicator--right{box-shadow:-2px 0 4px -2px rgba(0,0,0,.2);background:none}.mtrl-tabs__scroll-button{position:absolute;top:50%;transform:translateY(-50%);width:40px;height:40px;border-radius:50%;background-color:var(--mtrl-sys-color-surface-container-high);border:none;box-shadow:0 1px 3px rgba(0,0,0,.12);display:flex;align-items:center;justify-content:center;cursor:pointer;z-index:2}.mtrl-tabs__scroll-button:disabled{opacity:.38;cursor:default}.mtrl-tabs__scroll-button svg{width:24px;height:24px;fill:var(--mtrl-sys-color-on-surface)}.mtrl-tabs__scroll-button--left{left:4px}.mtrl-tabs__scroll-button--right{right:4px}.mtrl-tabs__scroll-button:focus{outline:none}.mtrl-tabs__scroll-button:focus-visible{outline:2px solid var(--mtrl-sys-color-primary)}.mtrl-tabs--responsive-small .mtrl-button.mtrl-tab{padding:0 12px;min-width:72px}
|
|
1
|
+
.mtrl-tabs{position:relative;display:flex;flex-direction:column;width:100%;box-sizing:border-box}.mtrl-tabs--primary{min-height:48px}.mtrl-tabs--primary:has(.mtrl-button.mtrl-tab--icon-and-text){min-height:64px}.mtrl-tabs--primary .mtrl-tabs__indicator{border-radius:3px 3px 0 0;background-color:var(--mtrl-sys-color-primary)}.mtrl-tabs--secondary{min-height:48px}.mtrl-tabs--secondary .mtrl-tabs__indicator{border-radius:0;background-color:var(--mtrl-sys-color-primary)}.mtrl-tabs .mtrl-button.mtrl-tab::before{content:none}.mtrl-tabs:not(.mtrl-tabs--scrollable){flex-direction:row}.mtrl-tabs:not(.mtrl-tabs--scrollable)>.mtrl-button.mtrl-tab{flex:1}.mtrl-tabs--scrollable{overflow:hidden}.mtrl-tabs--scrollable .mtrl-tabs__scroll{display:flex;padding-inline:52px;overflow-x:auto;scroll-behavior:smooth;scrollbar-width:none;-ms-overflow-style:none}.mtrl-tabs--scrollable .mtrl-tabs__scroll::-webkit-scrollbar{display:none}.mtrl-tabs__divider{position:absolute;bottom:0;left:0;right:0;height:1px;background-color:var(--mtrl-sys-color-outline-variant)}.mtrl-tabs__indicator{position:absolute;bottom:0;left:0;transition:transform 450ms linear(0, 0.055, 0.18, 0.332, 0.483, 0.619, 0.733, 0.823, 0.891, 0.94, 0.973, 0.994, 1.007, 1.013, 1.015, 1.015, 1.013, 1.011, 1.009, 1.006, 1.005, 1.003, 1.002, 1.001, 1),width 450ms linear(0, 0.055, 0.18, 0.332, 0.483, 0.619, 0.733, 0.823, 0.891, 0.94, 0.973, 0.994, 1.007, 1.013, 1.015, 1.015, 1.013, 1.011, 1.009, 1.006, 1.005, 1.003, 1.002, 1.001, 1);z-index:1}@supports(anchor-name: --a){.mtrl-tabs{anchor-scope:--mtrl-tabs-indicator}.mtrl-tabs__indicator{position-anchor:--mtrl-tabs-indicator}.mtrl-tabs .mtrl-tab--active{anchor-name:--mtrl-tabs-indicator}.mtrl-tabs--primary:not(:has(.mtrl-tabs__indicator--fixed)):not(:has(.mtrl-tabs__indicator--dynamic)) .mtrl-tab--active:has(.mtrl-button__text){anchor-name:none}.mtrl-tabs--primary:not(:has(.mtrl-tabs__indicator--fixed)):not(:has(.mtrl-tabs__indicator--dynamic)) .mtrl-tab--active .mtrl-button__text{anchor-name:--mtrl-tabs-indicator}.mtrl-tabs--primary .mtrl-tabs__indicator,.mtrl-tabs--secondary .mtrl-tabs__indicator{transition:left 450ms linear(0, 0.055, 0.18, 0.332, 0.483, 0.619, 0.733, 0.823, 0.891, 0.94, 0.973, 0.994, 1.007, 1.013, 1.015, 1.015, 1.013, 1.011, 1.009, 1.006, 1.005, 1.003, 1.002, 1.001, 1),width 450ms linear(0, 0.055, 0.18, 0.332, 0.483, 0.619, 0.733, 0.823, 0.891, 0.94, 0.973, 0.994, 1.007, 1.013, 1.015, 1.015, 1.013, 1.011, 1.009, 1.006, 1.005, 1.003, 1.002, 1.001, 1)}.mtrl-tabs--primary .mtrl-tabs__indicator{width:max(24px, calc(anchor-size(width) - 4px));left:calc(anchor(center) - 0.5 * max(24px, anchor-size(width) - 4px))}.mtrl-tabs--secondary .mtrl-tabs__indicator{left:anchor(left);width:anchor-size(width);min-width:0}.mtrl-tabs--primary:has(.mtrl-tab--active:not(:has(.mtrl-button__text))) .mtrl-tabs__indicator:not(.mtrl-tabs__indicator--fixed):not(.mtrl-tabs__indicator--content),.mtrl-tabs--primary .mtrl-tabs__indicator--dynamic,.mtrl-tabs--secondary .mtrl-tabs__indicator--dynamic{width:max(30px, calc(anchor-size(width) / 2));left:calc(anchor(center) - 0.5 * max(30px, calc(anchor-size(width) / 2)))}.mtrl-tabs--primary .mtrl-tabs__indicator--content,.mtrl-tabs--secondary .mtrl-tabs__indicator--content{width:max(30px, anchor-size(width));left:calc(anchor(center) - 0.5 * max(30px, anchor-size(width)))}.mtrl-tabs:has(.mtrl-tab--active:not(:has(.mtrl-button__text))) .mtrl-tabs__indicator--content,.mtrl-tabs--primary .mtrl-tabs__indicator--fixed,.mtrl-tabs--secondary .mtrl-tabs__indicator--fixed{width:var(--mtrl-tabs-indicator-width, 40px);left:calc(anchor(center) - 0.5 * var(--mtrl-tabs-indicator-width, 40px))}}.mtrl-button.mtrl-tab{position:relative;display:inline-flex;align-items:center;justify-content:center;min-width:90px;max-width:360px;padding:0 16px;border:none;border-radius:0;background-color:rgba(0,0,0,0);color:var(--mtrl-sys-color-on-surface-variant);cursor:pointer;user-select:none;flex-shrink:0;font-family:var(--mtrl-ref-typeface-brand, Roboto, sans-serif);font-size:14px;line-height:20px;letter-spacing:.1px;font-weight:500;transition:background-color .2s cubic-bezier(0.4, 0, 0.2, 1),color .2s cubic-bezier(0.4, 0, 0.2, 1)}.mtrl-button.mtrl-tab--text-only{height:48px}.mtrl-button.mtrl-tab--icon-only{height:48px}.mtrl-button.mtrl-tab--icon-and-text{height:64px;flex-direction:column}.mtrl-button.mtrl-tab.mtrl-button--icon{padding:0 16px}.mtrl-button.mtrl-tab:focus{outline:none}.mtrl-button.mtrl-tab:focus-visible{outline:3px solid var(--mtrl-sys-color-secondary);outline-offset:-3px;z-index:1}.mtrl-button.mtrl-tab--disabled,.mtrl-button.mtrl-tab:disabled{pointer-events:none;opacity:.38}.mtrl-button.mtrl-tab .mtrl-button__icon{display:flex;align-items:center;justify-content:center;width:24px;height:24px}.mtrl-button.mtrl-tab .mtrl-button__icon svg{width:100%;height:100%;fill:currentColor}.mtrl-button.mtrl-tab--icon-and-text .mtrl-button__icon{margin-bottom:4px}.mtrl-button.mtrl-tab .mtrl-button__text{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:100%;text-align:center;line-height:1.2}.mtrl-button.mtrl-tab--icon-only .mtrl-button__text{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);white-space:nowrap;border:0}.mtrl-button.mtrl-tab--icon-only .mtrl-badge__wrapper .mtrl-badge--top-right,.mtrl-button.mtrl-tab--icon-and-text .mtrl-badge__wrapper .mtrl-badge--top-right{top:0;right:auto;left:calc(100% - 6px)}[dir=rtl] .mtrl-button.mtrl-tab--icon-only .mtrl-badge__wrapper .mtrl-badge--top-right,[dir=rtl] .mtrl-button.mtrl-tab--icon-and-text .mtrl-badge__wrapper .mtrl-badge--top-right{right:calc(100% - 6px);left:auto}.mtrl-button.mtrl-tab--text-only .mtrl-badge__wrapper .mtrl-badge--top-right{top:50%;right:auto;left:calc(100% + 4px);transform:translateY(-50%)}[dir=rtl] .mtrl-button.mtrl-tab--text-only .mtrl-badge__wrapper .mtrl-badge--top-right{right:calc(100% + 4px);left:auto}.mtrl-tabs--primary .mtrl-button.mtrl-tab--active{color:var(--mtrl-sys-color-primary);border-radius:0}.mtrl-tabs--primary .mtrl-button.mtrl-tab--active .mtrl-button__icon{color:var(--mtrl-sys-color-primary)}.mtrl-tabs--primary .mtrl-button.mtrl-tab--active:hover,.mtrl-tabs--primary .mtrl-button.mtrl-tab--active.mtrl-button.mtrl-tab--hover{background-color:color-mix(in srgb, var(--mtrl-sys-color-primary) 8%, transparent)}.mtrl-tabs--primary .mtrl-button.mtrl-tab--active:focus-visible,.mtrl-tabs--primary .mtrl-button.mtrl-tab--active.mtrl-button.mtrl-tab--focus{background-color:color-mix(in srgb, var(--mtrl-sys-color-primary) 10%, transparent)}.mtrl-tabs--primary .mtrl-button.mtrl-tab--active:active:not(:has(>.mtrl-ripple)),.mtrl-tabs--primary .mtrl-button.mtrl-tab--active.mtrl-button.mtrl-tab--pressed{background-color:color-mix(in srgb, var(--mtrl-sys-color-primary) 10%, transparent)}.mtrl-tabs--primary .mtrl-button.mtrl-tab:not(.mtrl-button.mtrl-tab--active):not(.mtrl-button.mtrl-tab--disabled):not(:disabled){color:var(--mtrl-sys-color-on-surface-variant)}.mtrl-tabs--primary .mtrl-button.mtrl-tab:not(.mtrl-button.mtrl-tab--active):not(.mtrl-button.mtrl-tab--disabled):not(:disabled):hover,.mtrl-tabs--primary .mtrl-button.mtrl-tab:not(.mtrl-button.mtrl-tab--active):not(.mtrl-button.mtrl-tab--disabled):not(:disabled).mtrl-button.mtrl-tab--hover{color:var(--mtrl-sys-color-on-surface);background-color:color-mix(in srgb, var(--mtrl-sys-color-on-surface) 8%, transparent)}.mtrl-tabs--primary .mtrl-button.mtrl-tab:not(.mtrl-button.mtrl-tab--active):not(.mtrl-button.mtrl-tab--disabled):not(:disabled):focus-visible,.mtrl-tabs--primary .mtrl-button.mtrl-tab:not(.mtrl-button.mtrl-tab--active):not(.mtrl-button.mtrl-tab--disabled):not(:disabled).mtrl-button.mtrl-tab--focus{color:var(--mtrl-sys-color-on-surface);background-color:color-mix(in srgb, var(--mtrl-sys-color-on-surface) 10%, transparent)}.mtrl-tabs--primary .mtrl-button.mtrl-tab:not(.mtrl-button.mtrl-tab--active):not(.mtrl-button.mtrl-tab--disabled):not(:disabled):active,.mtrl-tabs--primary .mtrl-button.mtrl-tab:not(.mtrl-button.mtrl-tab--active):not(.mtrl-button.mtrl-tab--disabled):not(:disabled).mtrl-button.mtrl-tab--pressed{color:var(--mtrl-sys-color-on-surface)}.mtrl-tabs--primary .mtrl-button.mtrl-tab:not(.mtrl-button.mtrl-tab--active):not(.mtrl-button.mtrl-tab--disabled):not(:disabled):active:not(:has(>.mtrl-ripple)),.mtrl-tabs--primary .mtrl-button.mtrl-tab:not(.mtrl-button.mtrl-tab--active):not(.mtrl-button.mtrl-tab--disabled):not(:disabled).mtrl-button.mtrl-tab--pressed{background-color:color-mix(in srgb, var(--mtrl-sys-color-primary) 10%, transparent)}.mtrl-tabs--primary .mtrl-button.mtrl-tab:not(.mtrl-button.mtrl-tab--active):not(.mtrl-button.mtrl-tab--disabled):not(:disabled) .mtrl-ripple-wave{background-color:var(--mtrl-sys-color-primary)}.mtrl-tabs--secondary .mtrl-button.mtrl-tab--active{color:var(--mtrl-sys-color-on-surface);border-radius:0}.mtrl-tabs--secondary .mtrl-button.mtrl-tab--active .mtrl-button__icon{color:var(--mtrl-sys-color-on-surface)}.mtrl-tabs--secondary .mtrl-button.mtrl-tab--active:hover,.mtrl-tabs--secondary .mtrl-button.mtrl-tab--active.mtrl-button.mtrl-tab--hover{background-color:color-mix(in srgb, var(--mtrl-sys-color-on-surface) 8%, transparent)}.mtrl-tabs--secondary .mtrl-button.mtrl-tab--active:focus-visible,.mtrl-tabs--secondary .mtrl-button.mtrl-tab--active.mtrl-button.mtrl-tab--focus{background-color:color-mix(in srgb, var(--mtrl-sys-color-on-surface) 10%, transparent)}.mtrl-tabs--secondary .mtrl-button.mtrl-tab--active:active:not(:has(>.mtrl-ripple)),.mtrl-tabs--secondary .mtrl-button.mtrl-tab--active.mtrl-button.mtrl-tab--pressed{background-color:color-mix(in srgb, var(--mtrl-sys-color-on-surface) 10%, transparent)}.mtrl-tabs--secondary .mtrl-button.mtrl-tab:not(.mtrl-button.mtrl-tab--active):not(.mtrl-button.mtrl-tab--disabled):not(:disabled){color:var(--mtrl-sys-color-on-surface-variant)}.mtrl-tabs--secondary .mtrl-button.mtrl-tab:not(.mtrl-button.mtrl-tab--active):not(.mtrl-button.mtrl-tab--disabled):not(:disabled):hover,.mtrl-tabs--secondary .mtrl-button.mtrl-tab:not(.mtrl-button.mtrl-tab--active):not(.mtrl-button.mtrl-tab--disabled):not(:disabled).mtrl-button.mtrl-tab--hover{color:var(--mtrl-sys-color-on-surface);background-color:color-mix(in srgb, var(--mtrl-sys-color-on-surface) 8%, transparent)}.mtrl-tabs--secondary .mtrl-button.mtrl-tab:not(.mtrl-button.mtrl-tab--active):not(.mtrl-button.mtrl-tab--disabled):not(:disabled):focus-visible,.mtrl-tabs--secondary .mtrl-button.mtrl-tab:not(.mtrl-button.mtrl-tab--active):not(.mtrl-button.mtrl-tab--disabled):not(:disabled).mtrl-button.mtrl-tab--focus{color:var(--mtrl-sys-color-on-surface);background-color:color-mix(in srgb, var(--mtrl-sys-color-on-surface) 10%, transparent)}.mtrl-tabs--secondary .mtrl-button.mtrl-tab:not(.mtrl-button.mtrl-tab--active):not(.mtrl-button.mtrl-tab--disabled):not(:disabled):active,.mtrl-tabs--secondary .mtrl-button.mtrl-tab:not(.mtrl-button.mtrl-tab--active):not(.mtrl-button.mtrl-tab--disabled):not(:disabled).mtrl-button.mtrl-tab--pressed{color:var(--mtrl-sys-color-on-surface)}.mtrl-tabs--secondary .mtrl-button.mtrl-tab:not(.mtrl-button.mtrl-tab--active):not(.mtrl-button.mtrl-tab--disabled):not(:disabled):active:not(:has(>.mtrl-ripple)),.mtrl-tabs--secondary .mtrl-button.mtrl-tab:not(.mtrl-button.mtrl-tab--active):not(.mtrl-button.mtrl-tab--disabled):not(:disabled).mtrl-button.mtrl-tab--pressed{background-color:color-mix(in srgb, var(--mtrl-sys-color-on-surface) 10%, transparent)}.mtrl-tab-panel{padding:16px}.mtrl-tab-panel[hidden]{display:none}.mtrl-tabs__scroll-indicator{position:absolute;top:0;bottom:0;width:24px;pointer-events:none;z-index:1;opacity:0;transition:opacity .2s ease}.mtrl-tabs__scroll-indicator.visible{opacity:1}.mtrl-tabs__scroll-indicator--left{left:0;background:linear-gradient(to right, var(--mtrl-sys-color-surface), transparent)}.mtrl-tabs__scroll-indicator--right{right:0;background:linear-gradient(to left, var(--mtrl-sys-color-surface), transparent)}.mtrl-tabs__scroll-indicator--shadow.mtrl-tabs__scroll-indicator--left{box-shadow:2px 0 4px -2px rgba(0,0,0,.2);background:none}.mtrl-tabs__scroll-indicator--shadow.mtrl-tabs__scroll-indicator--right{box-shadow:-2px 0 4px -2px rgba(0,0,0,.2);background:none}.mtrl-tabs__scroll-button{position:absolute;top:50%;transform:translateY(-50%);width:40px;height:40px;border-radius:50%;background-color:var(--mtrl-sys-color-surface-container-high);border:none;box-shadow:0 1px 3px rgba(0,0,0,.12);display:flex;align-items:center;justify-content:center;cursor:pointer;z-index:2}.mtrl-tabs__scroll-button:disabled{opacity:.38;cursor:default}.mtrl-tabs__scroll-button svg{width:24px;height:24px;fill:var(--mtrl-sys-color-on-surface)}.mtrl-tabs__scroll-button--left{left:4px}.mtrl-tabs__scroll-button--right{right:4px}.mtrl-tabs__scroll-button:focus{outline:none}.mtrl-tabs__scroll-button:focus-visible{outline:2px solid var(--mtrl-sys-color-primary)}.mtrl-tabs--responsive-small .mtrl-button.mtrl-tab{padding:0 12px;min-width:72px}
|
|
@@ -2,4 +2,4 @@ import "./ripple.js";
|
|
|
2
2
|
import "./badge.js";
|
|
3
3
|
import "./button.js";
|
|
4
4
|
import { registerStyles } from "../styles.js";
|
|
5
|
-
registerStyles({ "tabs": ".mtrl-tabs{position:relative;display:flex;flex-direction:column;width:100%;box-sizing:border-box}.mtrl-tabs--primary{min-height:48px}.mtrl-tabs--primary:has(.mtrl-button.mtrl-tab--icon-and-text){min-height:64px}.mtrl-tabs--primary .mtrl-tabs__indicator{border-radius:3px 3px 0 0;background-color:var(--mtrl-sys-color-primary)}.mtrl-tabs--secondary{min-height:48px}.mtrl-tabs--secondary .mtrl-tabs__indicator{border-radius:0;background-color:var(--mtrl-sys-color-primary)}.mtrl-tabs .mtrl-button.mtrl-tab::before{content:none}.mtrl-tabs:not(.mtrl-tabs--scrollable){flex-direction:row}.mtrl-tabs:not(.mtrl-tabs--scrollable)>.mtrl-button.mtrl-tab{flex:1}.mtrl-tabs--scrollable{overflow:hidden}.mtrl-tabs--scrollable .mtrl-tabs__scroll{display:flex;padding-inline:52px;overflow-x:auto;scroll-behavior:smooth;scrollbar-width:none;-ms-overflow-style:none}.mtrl-tabs--scrollable .mtrl-tabs__scroll::-webkit-scrollbar{display:none}.mtrl-tabs__divider{position:absolute;bottom:0;left:0;right:0;height:1px;background-color:var(--mtrl-sys-color-outline-variant)}.mtrl-tabs__indicator{position:absolute;bottom:0;left:0;transition:transform 450ms linear(0, 0.055, 0.18, 0.332, 0.483, 0.619, 0.733, 0.823, 0.891, 0.94, 0.973, 0.994, 1.007, 1.013, 1.015, 1.015, 1.013, 1.011, 1.009, 1.006, 1.005, 1.003, 1.002, 1.001, 1),width 450ms linear(0, 0.055, 0.18, 0.332, 0.483, 0.619, 0.733, 0.823, 0.891, 0.94, 0.973, 0.994, 1.007, 1.013, 1.015, 1.015, 1.013, 1.011, 1.009, 1.006, 1.005, 1.003, 1.002, 1.001, 1);z-index:1}@supports(anchor-name: --a){.mtrl-tabs{anchor-scope:--mtrl-tabs-indicator}.mtrl-tabs__indicator{position-anchor:--mtrl-tabs-indicator}.mtrl-tabs .mtrl-tab--active{anchor-name:--mtrl-tabs-indicator}.mtrl-tabs--primary:not(:has(.mtrl-tabs__indicator--fixed)):not(:has(.mtrl-tabs__indicator--dynamic)) .mtrl-tab--active:has(.mtrl-button__text){anchor-name:none}.mtrl-tabs--primary:not(:has(.mtrl-tabs__indicator--fixed)):not(:has(.mtrl-tabs__indicator--dynamic)) .mtrl-tab--active .mtrl-button__text{anchor-name:--mtrl-tabs-indicator}.mtrl-tabs--primary .mtrl-tabs__indicator,.mtrl-tabs--secondary .mtrl-tabs__indicator{transition:left 450ms linear(0, 0.055, 0.18, 0.332, 0.483, 0.619, 0.733, 0.823, 0.891, 0.94, 0.973, 0.994, 1.007, 1.013, 1.015, 1.015, 1.013, 1.011, 1.009, 1.006, 1.005, 1.003, 1.002, 1.001, 1),width 450ms linear(0, 0.055, 0.18, 0.332, 0.483, 0.619, 0.733, 0.823, 0.891, 0.94, 0.973, 0.994, 1.007, 1.013, 1.015, 1.015, 1.013, 1.011, 1.009, 1.006, 1.005, 1.003, 1.002, 1.001, 1)}.mtrl-tabs--primary .mtrl-tabs__indicator{width:max(24px, calc(anchor-size(width) - 4px));left:calc(anchor(center) - 0.5 * max(24px, anchor-size(width) - 4px))}.mtrl-tabs--secondary .mtrl-tabs__indicator{left:anchor(left);width:anchor-size(width);min-width:0}.mtrl-tabs--primary:has(.mtrl-tab--active:not(:has(.mtrl-button__text))) .mtrl-tabs__indicator:not(.mtrl-tabs__indicator--fixed):not(.mtrl-tabs__indicator--content),.mtrl-tabs--primary .mtrl-tabs__indicator--dynamic,.mtrl-tabs--secondary .mtrl-tabs__indicator--dynamic{width:max(30px, calc(anchor-size(width) / 2));left:calc(anchor(center) - 0.5 * max(30px, calc(anchor-size(width) / 2)))}.mtrl-tabs--primary .mtrl-tabs__indicator--content,.mtrl-tabs--secondary .mtrl-tabs__indicator--content{width:max(30px, anchor-size(width));left:calc(anchor(center) - 0.5 * max(30px, anchor-size(width)))}.mtrl-tabs:has(.mtrl-tab--active:not(:has(.mtrl-button__text))) .mtrl-tabs__indicator--content,.mtrl-tabs--primary .mtrl-tabs__indicator--fixed,.mtrl-tabs--secondary .mtrl-tabs__indicator--fixed{width:var(--mtrl-tabs-indicator-width, 40px);left:calc(anchor(center) - 0.5 * var(--mtrl-tabs-indicator-width, 40px))}}.mtrl-button.mtrl-tab{position:relative;display:inline-flex;align-items:center;justify-content:center;min-width:90px;max-width:360px;padding:0 16px;border:none;border-radius:0;background-color:rgba(0,0,0,0);color:var(--mtrl-sys-color-on-surface-variant);cursor:pointer;user-select:none;flex-shrink:0;font-family:var(--mtrl-ref-typeface-brand, Roboto, sans-serif);font-size:14px;line-height:20px;letter-spacing:.1px;font-weight:500;transition:background-color .2s cubic-bezier(0.4, 0, 0.2, 1),color .2s cubic-bezier(0.4, 0, 0.2, 1)}.mtrl-button.mtrl-tab--text-only{height:48px}.mtrl-button.mtrl-tab--icon-only{height:48px}.mtrl-button.mtrl-tab--icon-and-text{height:64px;flex-direction:column}.mtrl-button.mtrl-tab.mtrl-button--icon{padding:0 16px}.mtrl-button.mtrl-tab:focus{outline:none}.mtrl-button.mtrl-tab:focus-visible{outline:3px solid var(--mtrl-sys-color-secondary);outline-offset:-3px;z-index:1}.mtrl-button.mtrl-tab--disabled,.mtrl-button.mtrl-tab:disabled{pointer-events:none;opacity:.38}.mtrl-button.mtrl-tab .mtrl-button__icon{display:flex;align-items:center;justify-content:center;width:24px;height:24px}.mtrl-button.mtrl-tab .mtrl-button__icon svg{width:100%;height:100%;fill:currentColor}.mtrl-button.mtrl-tab--icon-and-text .mtrl-button__icon{margin-bottom:4px}.mtrl-button.mtrl-tab .mtrl-button__text{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:100%;text-align:center;line-height:1.2}.mtrl-button.mtrl-tab--icon-only .mtrl-button__text{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);white-space:nowrap;border:0}.mtrl-button.mtrl-tab--icon-only .mtrl-badge__wrapper .mtrl-badge--top-right{top:4px;right:4px}.mtrl-button.mtrl-tab--text-only .mtrl-badge__wrapper .mtrl-badge--top-right{top:8px;right:8px}.mtrl-button.mtrl-tab--icon-and-text .mtrl-badge__wrapper .mtrl-badge--top-right{top:4px;right:calc(50% - 20px)}.mtrl-tabs--primary .mtrl-button.mtrl-tab--active{color:var(--mtrl-sys-color-primary);border-radius:0}.mtrl-tabs--primary .mtrl-button.mtrl-tab--active .mtrl-button__icon{color:var(--mtrl-sys-color-primary)}.mtrl-tabs--primary .mtrl-button.mtrl-tab--active:hover,.mtrl-tabs--primary .mtrl-button.mtrl-tab--active.mtrl-button.mtrl-tab--hover{background-color:color-mix(in srgb, var(--mtrl-sys-color-primary) 8%, transparent)}.mtrl-tabs--primary .mtrl-button.mtrl-tab--active:focus-visible,.mtrl-tabs--primary .mtrl-button.mtrl-tab--active.mtrl-button.mtrl-tab--focus{background-color:color-mix(in srgb, var(--mtrl-sys-color-primary) 10%, transparent)}.mtrl-tabs--primary .mtrl-button.mtrl-tab--active:active:not(:has(>.mtrl-ripple)),.mtrl-tabs--primary .mtrl-button.mtrl-tab--active.mtrl-button.mtrl-tab--pressed{background-color:color-mix(in srgb, var(--mtrl-sys-color-primary) 10%, transparent)}.mtrl-tabs--primary .mtrl-button.mtrl-tab:not(.mtrl-button.mtrl-tab--active):not(.mtrl-button.mtrl-tab--disabled):not(:disabled){color:var(--mtrl-sys-color-on-surface-variant)}.mtrl-tabs--primary .mtrl-button.mtrl-tab:not(.mtrl-button.mtrl-tab--active):not(.mtrl-button.mtrl-tab--disabled):not(:disabled):hover,.mtrl-tabs--primary .mtrl-button.mtrl-tab:not(.mtrl-button.mtrl-tab--active):not(.mtrl-button.mtrl-tab--disabled):not(:disabled).mtrl-button.mtrl-tab--hover{color:var(--mtrl-sys-color-on-surface);background-color:color-mix(in srgb, var(--mtrl-sys-color-on-surface) 8%, transparent)}.mtrl-tabs--primary .mtrl-button.mtrl-tab:not(.mtrl-button.mtrl-tab--active):not(.mtrl-button.mtrl-tab--disabled):not(:disabled):focus-visible,.mtrl-tabs--primary .mtrl-button.mtrl-tab:not(.mtrl-button.mtrl-tab--active):not(.mtrl-button.mtrl-tab--disabled):not(:disabled).mtrl-button.mtrl-tab--focus{color:var(--mtrl-sys-color-on-surface);background-color:color-mix(in srgb, var(--mtrl-sys-color-on-surface) 10%, transparent)}.mtrl-tabs--primary .mtrl-button.mtrl-tab:not(.mtrl-button.mtrl-tab--active):not(.mtrl-button.mtrl-tab--disabled):not(:disabled):active,.mtrl-tabs--primary .mtrl-button.mtrl-tab:not(.mtrl-button.mtrl-tab--active):not(.mtrl-button.mtrl-tab--disabled):not(:disabled).mtrl-button.mtrl-tab--pressed{color:var(--mtrl-sys-color-on-surface)}.mtrl-tabs--primary .mtrl-button.mtrl-tab:not(.mtrl-button.mtrl-tab--active):not(.mtrl-button.mtrl-tab--disabled):not(:disabled):active:not(:has(>.mtrl-ripple)),.mtrl-tabs--primary .mtrl-button.mtrl-tab:not(.mtrl-button.mtrl-tab--active):not(.mtrl-button.mtrl-tab--disabled):not(:disabled).mtrl-button.mtrl-tab--pressed{background-color:color-mix(in srgb, var(--mtrl-sys-color-primary) 10%, transparent)}.mtrl-tabs--primary .mtrl-button.mtrl-tab:not(.mtrl-button.mtrl-tab--active):not(.mtrl-button.mtrl-tab--disabled):not(:disabled) .mtrl-ripple-wave{background-color:var(--mtrl-sys-color-primary)}.mtrl-tabs--secondary .mtrl-button.mtrl-tab--active{color:var(--mtrl-sys-color-on-surface);border-radius:0}.mtrl-tabs--secondary .mtrl-button.mtrl-tab--active .mtrl-button__icon{color:var(--mtrl-sys-color-on-surface)}.mtrl-tabs--secondary .mtrl-button.mtrl-tab--active:hover,.mtrl-tabs--secondary .mtrl-button.mtrl-tab--active.mtrl-button.mtrl-tab--hover{background-color:color-mix(in srgb, var(--mtrl-sys-color-on-surface) 8%, transparent)}.mtrl-tabs--secondary .mtrl-button.mtrl-tab--active:focus-visible,.mtrl-tabs--secondary .mtrl-button.mtrl-tab--active.mtrl-button.mtrl-tab--focus{background-color:color-mix(in srgb, var(--mtrl-sys-color-on-surface) 10%, transparent)}.mtrl-tabs--secondary .mtrl-button.mtrl-tab--active:active:not(:has(>.mtrl-ripple)),.mtrl-tabs--secondary .mtrl-button.mtrl-tab--active.mtrl-button.mtrl-tab--pressed{background-color:color-mix(in srgb, var(--mtrl-sys-color-on-surface) 10%, transparent)}.mtrl-tabs--secondary .mtrl-button.mtrl-tab:not(.mtrl-button.mtrl-tab--active):not(.mtrl-button.mtrl-tab--disabled):not(:disabled){color:var(--mtrl-sys-color-on-surface-variant)}.mtrl-tabs--secondary .mtrl-button.mtrl-tab:not(.mtrl-button.mtrl-tab--active):not(.mtrl-button.mtrl-tab--disabled):not(:disabled):hover,.mtrl-tabs--secondary .mtrl-button.mtrl-tab:not(.mtrl-button.mtrl-tab--active):not(.mtrl-button.mtrl-tab--disabled):not(:disabled).mtrl-button.mtrl-tab--hover{color:var(--mtrl-sys-color-on-surface);background-color:color-mix(in srgb, var(--mtrl-sys-color-on-surface) 8%, transparent)}.mtrl-tabs--secondary .mtrl-button.mtrl-tab:not(.mtrl-button.mtrl-tab--active):not(.mtrl-button.mtrl-tab--disabled):not(:disabled):focus-visible,.mtrl-tabs--secondary .mtrl-button.mtrl-tab:not(.mtrl-button.mtrl-tab--active):not(.mtrl-button.mtrl-tab--disabled):not(:disabled).mtrl-button.mtrl-tab--focus{color:var(--mtrl-sys-color-on-surface);background-color:color-mix(in srgb, var(--mtrl-sys-color-on-surface) 10%, transparent)}.mtrl-tabs--secondary .mtrl-button.mtrl-tab:not(.mtrl-button.mtrl-tab--active):not(.mtrl-button.mtrl-tab--disabled):not(:disabled):active,.mtrl-tabs--secondary .mtrl-button.mtrl-tab:not(.mtrl-button.mtrl-tab--active):not(.mtrl-button.mtrl-tab--disabled):not(:disabled).mtrl-button.mtrl-tab--pressed{color:var(--mtrl-sys-color-on-surface)}.mtrl-tabs--secondary .mtrl-button.mtrl-tab:not(.mtrl-button.mtrl-tab--active):not(.mtrl-button.mtrl-tab--disabled):not(:disabled):active:not(:has(>.mtrl-ripple)),.mtrl-tabs--secondary .mtrl-button.mtrl-tab:not(.mtrl-button.mtrl-tab--active):not(.mtrl-button.mtrl-tab--disabled):not(:disabled).mtrl-button.mtrl-tab--pressed{background-color:color-mix(in srgb, var(--mtrl-sys-color-on-surface) 10%, transparent)}.mtrl-tab-panel{padding:16px}.mtrl-tab-panel[hidden]{display:none}.mtrl-tabs__scroll-indicator{position:absolute;top:0;bottom:0;width:24px;pointer-events:none;z-index:1;opacity:0;transition:opacity .2s ease}.mtrl-tabs__scroll-indicator.visible{opacity:1}.mtrl-tabs__scroll-indicator--left{left:0;background:linear-gradient(to right, var(--mtrl-sys-color-surface), transparent)}.mtrl-tabs__scroll-indicator--right{right:0;background:linear-gradient(to left, var(--mtrl-sys-color-surface), transparent)}.mtrl-tabs__scroll-indicator--shadow.mtrl-tabs__scroll-indicator--left{box-shadow:2px 0 4px -2px rgba(0,0,0,.2);background:none}.mtrl-tabs__scroll-indicator--shadow.mtrl-tabs__scroll-indicator--right{box-shadow:-2px 0 4px -2px rgba(0,0,0,.2);background:none}.mtrl-tabs__scroll-button{position:absolute;top:50%;transform:translateY(-50%);width:40px;height:40px;border-radius:50%;background-color:var(--mtrl-sys-color-surface-container-high);border:none;box-shadow:0 1px 3px rgba(0,0,0,.12);display:flex;align-items:center;justify-content:center;cursor:pointer;z-index:2}.mtrl-tabs__scroll-button:disabled{opacity:.38;cursor:default}.mtrl-tabs__scroll-button svg{width:24px;height:24px;fill:var(--mtrl-sys-color-on-surface)}.mtrl-tabs__scroll-button--left{left:4px}.mtrl-tabs__scroll-button--right{right:4px}.mtrl-tabs__scroll-button:focus{outline:none}.mtrl-tabs__scroll-button:focus-visible{outline:2px solid var(--mtrl-sys-color-primary)}.mtrl-tabs--responsive-small .mtrl-button.mtrl-tab{padding:0 12px;min-width:72px}" });
|
|
5
|
+
registerStyles({ "tabs": ".mtrl-tabs{position:relative;display:flex;flex-direction:column;width:100%;box-sizing:border-box}.mtrl-tabs--primary{min-height:48px}.mtrl-tabs--primary:has(.mtrl-button.mtrl-tab--icon-and-text){min-height:64px}.mtrl-tabs--primary .mtrl-tabs__indicator{border-radius:3px 3px 0 0;background-color:var(--mtrl-sys-color-primary)}.mtrl-tabs--secondary{min-height:48px}.mtrl-tabs--secondary .mtrl-tabs__indicator{border-radius:0;background-color:var(--mtrl-sys-color-primary)}.mtrl-tabs .mtrl-button.mtrl-tab::before{content:none}.mtrl-tabs:not(.mtrl-tabs--scrollable){flex-direction:row}.mtrl-tabs:not(.mtrl-tabs--scrollable)>.mtrl-button.mtrl-tab{flex:1}.mtrl-tabs--scrollable{overflow:hidden}.mtrl-tabs--scrollable .mtrl-tabs__scroll{display:flex;padding-inline:52px;overflow-x:auto;scroll-behavior:smooth;scrollbar-width:none;-ms-overflow-style:none}.mtrl-tabs--scrollable .mtrl-tabs__scroll::-webkit-scrollbar{display:none}.mtrl-tabs__divider{position:absolute;bottom:0;left:0;right:0;height:1px;background-color:var(--mtrl-sys-color-outline-variant)}.mtrl-tabs__indicator{position:absolute;bottom:0;left:0;transition:transform 450ms linear(0, 0.055, 0.18, 0.332, 0.483, 0.619, 0.733, 0.823, 0.891, 0.94, 0.973, 0.994, 1.007, 1.013, 1.015, 1.015, 1.013, 1.011, 1.009, 1.006, 1.005, 1.003, 1.002, 1.001, 1),width 450ms linear(0, 0.055, 0.18, 0.332, 0.483, 0.619, 0.733, 0.823, 0.891, 0.94, 0.973, 0.994, 1.007, 1.013, 1.015, 1.015, 1.013, 1.011, 1.009, 1.006, 1.005, 1.003, 1.002, 1.001, 1);z-index:1}@supports(anchor-name: --a){.mtrl-tabs{anchor-scope:--mtrl-tabs-indicator}.mtrl-tabs__indicator{position-anchor:--mtrl-tabs-indicator}.mtrl-tabs .mtrl-tab--active{anchor-name:--mtrl-tabs-indicator}.mtrl-tabs--primary:not(:has(.mtrl-tabs__indicator--fixed)):not(:has(.mtrl-tabs__indicator--dynamic)) .mtrl-tab--active:has(.mtrl-button__text){anchor-name:none}.mtrl-tabs--primary:not(:has(.mtrl-tabs__indicator--fixed)):not(:has(.mtrl-tabs__indicator--dynamic)) .mtrl-tab--active .mtrl-button__text{anchor-name:--mtrl-tabs-indicator}.mtrl-tabs--primary .mtrl-tabs__indicator,.mtrl-tabs--secondary .mtrl-tabs__indicator{transition:left 450ms linear(0, 0.055, 0.18, 0.332, 0.483, 0.619, 0.733, 0.823, 0.891, 0.94, 0.973, 0.994, 1.007, 1.013, 1.015, 1.015, 1.013, 1.011, 1.009, 1.006, 1.005, 1.003, 1.002, 1.001, 1),width 450ms linear(0, 0.055, 0.18, 0.332, 0.483, 0.619, 0.733, 0.823, 0.891, 0.94, 0.973, 0.994, 1.007, 1.013, 1.015, 1.015, 1.013, 1.011, 1.009, 1.006, 1.005, 1.003, 1.002, 1.001, 1)}.mtrl-tabs--primary .mtrl-tabs__indicator{width:max(24px, calc(anchor-size(width) - 4px));left:calc(anchor(center) - 0.5 * max(24px, anchor-size(width) - 4px))}.mtrl-tabs--secondary .mtrl-tabs__indicator{left:anchor(left);width:anchor-size(width);min-width:0}.mtrl-tabs--primary:has(.mtrl-tab--active:not(:has(.mtrl-button__text))) .mtrl-tabs__indicator:not(.mtrl-tabs__indicator--fixed):not(.mtrl-tabs__indicator--content),.mtrl-tabs--primary .mtrl-tabs__indicator--dynamic,.mtrl-tabs--secondary .mtrl-tabs__indicator--dynamic{width:max(30px, calc(anchor-size(width) / 2));left:calc(anchor(center) - 0.5 * max(30px, calc(anchor-size(width) / 2)))}.mtrl-tabs--primary .mtrl-tabs__indicator--content,.mtrl-tabs--secondary .mtrl-tabs__indicator--content{width:max(30px, anchor-size(width));left:calc(anchor(center) - 0.5 * max(30px, anchor-size(width)))}.mtrl-tabs:has(.mtrl-tab--active:not(:has(.mtrl-button__text))) .mtrl-tabs__indicator--content,.mtrl-tabs--primary .mtrl-tabs__indicator--fixed,.mtrl-tabs--secondary .mtrl-tabs__indicator--fixed{width:var(--mtrl-tabs-indicator-width, 40px);left:calc(anchor(center) - 0.5 * var(--mtrl-tabs-indicator-width, 40px))}}.mtrl-button.mtrl-tab{position:relative;display:inline-flex;align-items:center;justify-content:center;min-width:90px;max-width:360px;padding:0 16px;border:none;border-radius:0;background-color:rgba(0,0,0,0);color:var(--mtrl-sys-color-on-surface-variant);cursor:pointer;user-select:none;flex-shrink:0;font-family:var(--mtrl-ref-typeface-brand, Roboto, sans-serif);font-size:14px;line-height:20px;letter-spacing:.1px;font-weight:500;transition:background-color .2s cubic-bezier(0.4, 0, 0.2, 1),color .2s cubic-bezier(0.4, 0, 0.2, 1)}.mtrl-button.mtrl-tab--text-only{height:48px}.mtrl-button.mtrl-tab--icon-only{height:48px}.mtrl-button.mtrl-tab--icon-and-text{height:64px;flex-direction:column}.mtrl-button.mtrl-tab.mtrl-button--icon{padding:0 16px}.mtrl-button.mtrl-tab:focus{outline:none}.mtrl-button.mtrl-tab:focus-visible{outline:3px solid var(--mtrl-sys-color-secondary);outline-offset:-3px;z-index:1}.mtrl-button.mtrl-tab--disabled,.mtrl-button.mtrl-tab:disabled{pointer-events:none;opacity:.38}.mtrl-button.mtrl-tab .mtrl-button__icon{display:flex;align-items:center;justify-content:center;width:24px;height:24px}.mtrl-button.mtrl-tab .mtrl-button__icon svg{width:100%;height:100%;fill:currentColor}.mtrl-button.mtrl-tab--icon-and-text .mtrl-button__icon{margin-bottom:4px}.mtrl-button.mtrl-tab .mtrl-button__text{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:100%;text-align:center;line-height:1.2}.mtrl-button.mtrl-tab--icon-only .mtrl-button__text{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);white-space:nowrap;border:0}.mtrl-button.mtrl-tab--icon-only .mtrl-badge__wrapper .mtrl-badge--top-right,.mtrl-button.mtrl-tab--icon-and-text .mtrl-badge__wrapper .mtrl-badge--top-right{top:0;right:auto;left:calc(100% - 6px)}[dir=rtl] .mtrl-button.mtrl-tab--icon-only .mtrl-badge__wrapper .mtrl-badge--top-right,[dir=rtl] .mtrl-button.mtrl-tab--icon-and-text .mtrl-badge__wrapper .mtrl-badge--top-right{right:calc(100% - 6px);left:auto}.mtrl-button.mtrl-tab--text-only .mtrl-badge__wrapper .mtrl-badge--top-right{top:50%;right:auto;left:calc(100% + 4px);transform:translateY(-50%)}[dir=rtl] .mtrl-button.mtrl-tab--text-only .mtrl-badge__wrapper .mtrl-badge--top-right{right:calc(100% + 4px);left:auto}.mtrl-tabs--primary .mtrl-button.mtrl-tab--active{color:var(--mtrl-sys-color-primary);border-radius:0}.mtrl-tabs--primary .mtrl-button.mtrl-tab--active .mtrl-button__icon{color:var(--mtrl-sys-color-primary)}.mtrl-tabs--primary .mtrl-button.mtrl-tab--active:hover,.mtrl-tabs--primary .mtrl-button.mtrl-tab--active.mtrl-button.mtrl-tab--hover{background-color:color-mix(in srgb, var(--mtrl-sys-color-primary) 8%, transparent)}.mtrl-tabs--primary .mtrl-button.mtrl-tab--active:focus-visible,.mtrl-tabs--primary .mtrl-button.mtrl-tab--active.mtrl-button.mtrl-tab--focus{background-color:color-mix(in srgb, var(--mtrl-sys-color-primary) 10%, transparent)}.mtrl-tabs--primary .mtrl-button.mtrl-tab--active:active:not(:has(>.mtrl-ripple)),.mtrl-tabs--primary .mtrl-button.mtrl-tab--active.mtrl-button.mtrl-tab--pressed{background-color:color-mix(in srgb, var(--mtrl-sys-color-primary) 10%, transparent)}.mtrl-tabs--primary .mtrl-button.mtrl-tab:not(.mtrl-button.mtrl-tab--active):not(.mtrl-button.mtrl-tab--disabled):not(:disabled){color:var(--mtrl-sys-color-on-surface-variant)}.mtrl-tabs--primary .mtrl-button.mtrl-tab:not(.mtrl-button.mtrl-tab--active):not(.mtrl-button.mtrl-tab--disabled):not(:disabled):hover,.mtrl-tabs--primary .mtrl-button.mtrl-tab:not(.mtrl-button.mtrl-tab--active):not(.mtrl-button.mtrl-tab--disabled):not(:disabled).mtrl-button.mtrl-tab--hover{color:var(--mtrl-sys-color-on-surface);background-color:color-mix(in srgb, var(--mtrl-sys-color-on-surface) 8%, transparent)}.mtrl-tabs--primary .mtrl-button.mtrl-tab:not(.mtrl-button.mtrl-tab--active):not(.mtrl-button.mtrl-tab--disabled):not(:disabled):focus-visible,.mtrl-tabs--primary .mtrl-button.mtrl-tab:not(.mtrl-button.mtrl-tab--active):not(.mtrl-button.mtrl-tab--disabled):not(:disabled).mtrl-button.mtrl-tab--focus{color:var(--mtrl-sys-color-on-surface);background-color:color-mix(in srgb, var(--mtrl-sys-color-on-surface) 10%, transparent)}.mtrl-tabs--primary .mtrl-button.mtrl-tab:not(.mtrl-button.mtrl-tab--active):not(.mtrl-button.mtrl-tab--disabled):not(:disabled):active,.mtrl-tabs--primary .mtrl-button.mtrl-tab:not(.mtrl-button.mtrl-tab--active):not(.mtrl-button.mtrl-tab--disabled):not(:disabled).mtrl-button.mtrl-tab--pressed{color:var(--mtrl-sys-color-on-surface)}.mtrl-tabs--primary .mtrl-button.mtrl-tab:not(.mtrl-button.mtrl-tab--active):not(.mtrl-button.mtrl-tab--disabled):not(:disabled):active:not(:has(>.mtrl-ripple)),.mtrl-tabs--primary .mtrl-button.mtrl-tab:not(.mtrl-button.mtrl-tab--active):not(.mtrl-button.mtrl-tab--disabled):not(:disabled).mtrl-button.mtrl-tab--pressed{background-color:color-mix(in srgb, var(--mtrl-sys-color-primary) 10%, transparent)}.mtrl-tabs--primary .mtrl-button.mtrl-tab:not(.mtrl-button.mtrl-tab--active):not(.mtrl-button.mtrl-tab--disabled):not(:disabled) .mtrl-ripple-wave{background-color:var(--mtrl-sys-color-primary)}.mtrl-tabs--secondary .mtrl-button.mtrl-tab--active{color:var(--mtrl-sys-color-on-surface);border-radius:0}.mtrl-tabs--secondary .mtrl-button.mtrl-tab--active .mtrl-button__icon{color:var(--mtrl-sys-color-on-surface)}.mtrl-tabs--secondary .mtrl-button.mtrl-tab--active:hover,.mtrl-tabs--secondary .mtrl-button.mtrl-tab--active.mtrl-button.mtrl-tab--hover{background-color:color-mix(in srgb, var(--mtrl-sys-color-on-surface) 8%, transparent)}.mtrl-tabs--secondary .mtrl-button.mtrl-tab--active:focus-visible,.mtrl-tabs--secondary .mtrl-button.mtrl-tab--active.mtrl-button.mtrl-tab--focus{background-color:color-mix(in srgb, var(--mtrl-sys-color-on-surface) 10%, transparent)}.mtrl-tabs--secondary .mtrl-button.mtrl-tab--active:active:not(:has(>.mtrl-ripple)),.mtrl-tabs--secondary .mtrl-button.mtrl-tab--active.mtrl-button.mtrl-tab--pressed{background-color:color-mix(in srgb, var(--mtrl-sys-color-on-surface) 10%, transparent)}.mtrl-tabs--secondary .mtrl-button.mtrl-tab:not(.mtrl-button.mtrl-tab--active):not(.mtrl-button.mtrl-tab--disabled):not(:disabled){color:var(--mtrl-sys-color-on-surface-variant)}.mtrl-tabs--secondary .mtrl-button.mtrl-tab:not(.mtrl-button.mtrl-tab--active):not(.mtrl-button.mtrl-tab--disabled):not(:disabled):hover,.mtrl-tabs--secondary .mtrl-button.mtrl-tab:not(.mtrl-button.mtrl-tab--active):not(.mtrl-button.mtrl-tab--disabled):not(:disabled).mtrl-button.mtrl-tab--hover{color:var(--mtrl-sys-color-on-surface);background-color:color-mix(in srgb, var(--mtrl-sys-color-on-surface) 8%, transparent)}.mtrl-tabs--secondary .mtrl-button.mtrl-tab:not(.mtrl-button.mtrl-tab--active):not(.mtrl-button.mtrl-tab--disabled):not(:disabled):focus-visible,.mtrl-tabs--secondary .mtrl-button.mtrl-tab:not(.mtrl-button.mtrl-tab--active):not(.mtrl-button.mtrl-tab--disabled):not(:disabled).mtrl-button.mtrl-tab--focus{color:var(--mtrl-sys-color-on-surface);background-color:color-mix(in srgb, var(--mtrl-sys-color-on-surface) 10%, transparent)}.mtrl-tabs--secondary .mtrl-button.mtrl-tab:not(.mtrl-button.mtrl-tab--active):not(.mtrl-button.mtrl-tab--disabled):not(:disabled):active,.mtrl-tabs--secondary .mtrl-button.mtrl-tab:not(.mtrl-button.mtrl-tab--active):not(.mtrl-button.mtrl-tab--disabled):not(:disabled).mtrl-button.mtrl-tab--pressed{color:var(--mtrl-sys-color-on-surface)}.mtrl-tabs--secondary .mtrl-button.mtrl-tab:not(.mtrl-button.mtrl-tab--active):not(.mtrl-button.mtrl-tab--disabled):not(:disabled):active:not(:has(>.mtrl-ripple)),.mtrl-tabs--secondary .mtrl-button.mtrl-tab:not(.mtrl-button.mtrl-tab--active):not(.mtrl-button.mtrl-tab--disabled):not(:disabled).mtrl-button.mtrl-tab--pressed{background-color:color-mix(in srgb, var(--mtrl-sys-color-on-surface) 10%, transparent)}.mtrl-tab-panel{padding:16px}.mtrl-tab-panel[hidden]{display:none}.mtrl-tabs__scroll-indicator{position:absolute;top:0;bottom:0;width:24px;pointer-events:none;z-index:1;opacity:0;transition:opacity .2s ease}.mtrl-tabs__scroll-indicator.visible{opacity:1}.mtrl-tabs__scroll-indicator--left{left:0;background:linear-gradient(to right, var(--mtrl-sys-color-surface), transparent)}.mtrl-tabs__scroll-indicator--right{right:0;background:linear-gradient(to left, var(--mtrl-sys-color-surface), transparent)}.mtrl-tabs__scroll-indicator--shadow.mtrl-tabs__scroll-indicator--left{box-shadow:2px 0 4px -2px rgba(0,0,0,.2);background:none}.mtrl-tabs__scroll-indicator--shadow.mtrl-tabs__scroll-indicator--right{box-shadow:-2px 0 4px -2px rgba(0,0,0,.2);background:none}.mtrl-tabs__scroll-button{position:absolute;top:50%;transform:translateY(-50%);width:40px;height:40px;border-radius:50%;background-color:var(--mtrl-sys-color-surface-container-high);border:none;box-shadow:0 1px 3px rgba(0,0,0,.12);display:flex;align-items:center;justify-content:center;cursor:pointer;z-index:2}.mtrl-tabs__scroll-button:disabled{opacity:.38;cursor:default}.mtrl-tabs__scroll-button svg{width:24px;height:24px;fill:var(--mtrl-sys-color-on-surface)}.mtrl-tabs__scroll-button--left{left:4px}.mtrl-tabs__scroll-button--right{right:4px}.mtrl-tabs__scroll-button:focus{outline:none}.mtrl-tabs__scroll-button:focus-visible{outline:2px solid var(--mtrl-sys-color-primary)}.mtrl-tabs--responsive-small .mtrl-button.mtrl-tab{padding:0 12px;min-width:72px}" });
|
|
@@ -49,6 +49,8 @@ export interface EventSpec {
|
|
|
49
49
|
* `expanded`), not of the model: dispatching it leaves the element clean.
|
|
50
50
|
*/
|
|
51
51
|
state?: boolean;
|
|
52
|
+
/** @internal Development diagnostic for a direct application listener. */
|
|
53
|
+
listen?: (host: HTMLElement) => void;
|
|
52
54
|
}
|
|
53
55
|
export interface SlotSpec {
|
|
54
56
|
/** Attribute whose text is the slot's fallback content. */
|