mtrl 0.10.5 → 0.10.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (87) hide show
  1. package/dist/components/button-group/button-group.js +22 -6
  2. package/dist/components/button-group/types.d.ts +3 -1
  3. package/dist/components/card/types.d.ts +1 -1
  4. package/dist/components/carousel/types.d.ts +1 -0
  5. package/dist/components/chips/types.d.ts +5 -1
  6. package/dist/components/icon-button/types.d.ts +3 -0
  7. package/dist/components/navigation-rail/types.d.ts +2 -0
  8. package/dist/components/radios/constants.d.ts +3 -3
  9. package/dist/components/radios/types.d.ts +8 -3
  10. package/dist/components/search/types.d.ts +6 -6
  11. package/dist/components/select/types.d.ts +4 -2
  12. package/dist/components/split-button/types.d.ts +5 -1
  13. package/dist/components/tabs/types.d.ts +1 -1
  14. package/dist/components/timepicker/types.d.ts +2 -1
  15. package/dist/components/tooltip/api.js +20 -18
  16. package/dist/core/compose/features/input.d.ts +9 -2
  17. package/dist/elements/define.d.ts +8 -0
  18. package/dist/elements/define.js +2 -1
  19. package/dist/elements/icon-button.d.ts +3 -2
  20. package/dist/elements/preupgrade.css +1 -1
  21. package/dist/index.cjs +0 -0
  22. package/dist/package.json +1 -1
  23. package/dist/styles/badge.css +1 -1
  24. package/dist/styles/base.css +1 -1
  25. package/dist/styles/bottom-app-bar.css +1 -1
  26. package/dist/styles/bottom-sheet.css +1 -1
  27. package/dist/styles/button-group.css +1 -1
  28. package/dist/styles/button.css +1 -1
  29. package/dist/styles/card.css +1 -1
  30. package/dist/styles/carousel.css +1 -1
  31. package/dist/styles/checkbox.css +1 -1
  32. package/dist/styles/chips.css +1 -1
  33. package/dist/styles/datepicker.css +1 -1
  34. package/dist/styles/dialog.css +1 -1
  35. package/dist/styles/divider.css +1 -1
  36. package/dist/styles/drawer.css +1 -1
  37. package/dist/styles/extended-fab.css +1 -1
  38. package/dist/styles/fab-menu.css +1 -1
  39. package/dist/styles/fab.css +1 -1
  40. package/dist/styles/icon-button.css +1 -1
  41. package/dist/styles/list.css +1 -1
  42. package/dist/styles/loading-indicator.css +1 -1
  43. package/dist/styles/menu.css +1 -1
  44. package/dist/styles/navigation-rail.css +1 -1
  45. package/dist/styles/progress.css +1 -1
  46. package/dist/styles/radios.css +1 -1
  47. package/dist/styles/search.css +1 -1
  48. package/dist/styles/segmented-button.css +1 -1
  49. package/dist/styles/select.css +1 -1
  50. package/dist/styles/side-sheet.css +1 -1
  51. package/dist/styles/slider.css +1 -1
  52. package/dist/styles/snackbar.css +1 -1
  53. package/dist/styles/split-button.css +1 -1
  54. package/dist/styles/switch.css +1 -1
  55. package/dist/styles/tabs.css +1 -1
  56. package/dist/styles/textfield.css +1 -1
  57. package/dist/styles/timepicker.css +1 -1
  58. package/dist/styles/toolbar.css +1 -1
  59. package/dist/styles/tooltip.css +1 -1
  60. package/dist/styles/top-app-bar.css +1 -1
  61. package/dist/styles/utilities.css +1 -1
  62. package/dist/styles.css +1 -1
  63. package/dist/themes/autumn.css +1 -1
  64. package/dist/themes/baseline.css +1 -1
  65. package/dist/themes/brownbeige.css +1 -1
  66. package/dist/themes/browngreen.css +1 -1
  67. package/dist/themes/content.css +1 -1
  68. package/dist/themes/desert.css +1 -1
  69. package/dist/themes/expressive.css +1 -1
  70. package/dist/themes/fidelity.css +1 -1
  71. package/dist/themes/forest.css +1 -1
  72. package/dist/themes/fruit-salad.css +1 -1
  73. package/dist/themes/highcontrast.css +1 -1
  74. package/dist/themes/legacy.css +1 -1
  75. package/dist/themes/material.css +1 -1
  76. package/dist/themes/monochrome.css +1 -1
  77. package/dist/themes/neutral.css +1 -1
  78. package/dist/themes/ocean.css +1 -1
  79. package/dist/themes/rainbow.css +1 -1
  80. package/dist/themes/sageivory.css +1 -1
  81. package/dist/themes/spring.css +1 -1
  82. package/dist/themes/summer.css +1 -1
  83. package/dist/themes/sunset.css +1 -1
  84. package/dist/themes/tealcaramel.css +1 -1
  85. package/dist/themes/vibrant.css +1 -1
  86. package/dist/themes/winter.css +1 -1
  87. package/package.json +1 -1
@@ -56,6 +56,8 @@ const createButtonGroup = (config = {}) => {
56
56
  const releasePress = () => {
57
57
  buttons.forEach(b => {
58
58
  b.element.style.width = '';
59
+ b.element.style.minWidth = '';
60
+ b.element.style.maxWidth = '';
59
61
  b.element.style.paddingLeft = '';
60
62
  b.element.style.paddingRight = '';
61
63
  });
@@ -70,26 +72,40 @@ const createButtonGroup = (config = {}) => {
70
72
  return;
71
73
  const view = component.element.ownerDocument.defaultView;
72
74
  const padding = (i, side) => view ? parseFloat(view.getComputedStyle(buttons[i].element)[side]) || 0 : 0;
75
+ const rtl = view?.getComputedStyle(component.element).direction === 'rtl';
73
76
  const previous = buttons[index - 1] ? index - 1 : -1;
74
77
  const next = buttons[index + 1] ? index + 1 : -1;
75
78
  const middle = previous >= 0 && next >= 0;
76
79
  const share = expandedRatio * widths[index] / (middle ? 2 : 1);
77
80
  let growth = 0;
81
+ const apply = [];
78
82
  const compress = (i, side) => {
79
83
  const limit = Math.min(share, BUTTON_GROUP_COMPRESSION_LIMIT, widths[i]);
80
84
  if (limit <= 0)
81
85
  return;
82
- buttons[i].element.style.width = `${widths[i] - limit}px`;
86
+ const el = buttons[i].element;
87
+ const to = widths[i] - limit;
88
+ el.style.minWidth = `${to}px`;
89
+ el.style.width = `${widths[i]}px`;
83
90
  const facing = padding(i, side);
84
- if (facing > 0)
85
- buttons[i].element.style[side] = `${Math.max(0, facing - limit)}px`;
91
+ apply.push(() => {
92
+ el.style.width = `${to}px`;
93
+ if (facing > 0)
94
+ el.style[side] = `${Math.max(0, facing - limit)}px`;
95
+ });
86
96
  growth += limit;
87
97
  };
88
98
  if (previous >= 0)
89
- compress(previous, 'paddingRight');
99
+ compress(previous, rtl ? 'paddingLeft' : 'paddingRight');
90
100
  if (next >= 0)
91
- compress(next, 'paddingLeft');
92
- buttons[index].element.style.width = `${widths[index] + growth}px`;
101
+ compress(next, rtl ? 'paddingRight' : 'paddingLeft');
102
+ const pressed = buttons[index].element;
103
+ const to = widths[index] + growth;
104
+ pressed.style.maxWidth = `${to}px`;
105
+ pressed.style.width = `${widths[index]}px`;
106
+ void pressed.offsetWidth;
107
+ apply.forEach(fn => fn());
108
+ pressed.style.width = `${to}px`;
93
109
  document.addEventListener('pointerup', releasePress);
94
110
  document.addEventListener('pointercancel', releasePress);
95
111
  };
@@ -217,7 +217,9 @@ export interface ButtonGroupConfig {
217
217
  */
218
218
  ariaLabel?: string;
219
219
  /**
220
- * Event handlers for button group events
220
+ * Event handlers for button group events. On 0.10.x this map is accepted
221
+ * and never called: subscribe with `on(event, handler)` on the group. In 1.0
222
+ * the handlers run, with the listener's argument.
221
223
  */
222
224
  on?: {
223
225
  click?: (event: ButtonGroupEvent) => void;
@@ -224,7 +224,7 @@ export interface BaseComponent {
224
224
  getElementClass: (base: string, element: string) => string;
225
225
  /** Add CSS class(es) */
226
226
  addClass: (...classes: string[]) => BaseComponent;
227
- /** Emit an event */
227
+ /** Emit an event. In 1.0, `emit` accepts only the card's own events ({@link CardEvents}). */
228
228
  emit?: (event: string, data?: unknown) => void;
229
229
  /** Component configuration */
230
230
  config: CardComponentConfig;
@@ -1,6 +1,7 @@
1
1
  import type { ForwardedEventPayload } from "../../core/dom/index.js";
2
2
  /** Current item reported by programmatic navigation or native scrolling. */
3
3
  export interface CarouselChangePayload {
4
+ /** The current item's index. In 1.0 the payload carries it as `value`, and `index` is gone. */
4
5
  index: number;
5
6
  }
6
7
  /** Events emitted by the scroll feature and forwarded from the root. */
@@ -36,7 +36,9 @@ export interface ChipConfig {
36
36
  trailingLabel?: string;
37
37
  /** The trailing button opens a menu: aria-haspopup="menu", and a drop-down arrow unless trailingIcon is set. */
38
38
  trailingMenu?: boolean;
39
+ /** In 1.0 a chip's `onClick` receives the `click` payload, `{ event, originalEvent, element }`, not the chip. */
39
40
  onClick?: (chip: ChipComponent) => void;
41
+ /** In 1.0 a chip's `onChange` receives one object, `{ selected, chip, value }`, the `change` payload. */
40
42
  onChange?: (selected: boolean, chip: ChipComponent) => void;
41
43
  onSelect?: (chip: ChipComponent) => void;
42
44
  class?: string;
@@ -152,7 +154,9 @@ export interface ChipsConfig {
152
154
  */
153
155
  selectionRequired?: boolean;
154
156
  /**
155
- * Callback function when chip selection changes
157
+ * Callback function when chip selection changes.
158
+ * In 1.0 it receives one object, `{ value, selected, changed }` (no array, no
159
+ * second argument), and also hears `selectByValue(values, true)`.
156
160
  */
157
161
  onChange?: (event: ChipsChangeEvent, changedValue: string | null) => void;
158
162
  /**
@@ -74,6 +74,9 @@ export interface IconButtonConfig extends BaseComponentConfig {
74
74
  * Whether the IconButton supports toggle (selection) behavior
75
75
  * When true, the button can be selected/unselected
76
76
  *
77
+ * A click emits `change`. The DOM `toggle` event the button also dispatches
78
+ * is deprecated and removed in 1.0: listen to `change`.
79
+ *
77
80
  * @default false
78
81
  */
79
82
  toggle?: boolean;
@@ -50,7 +50,9 @@ export interface NavigationRailConfig extends BaseComponentConfig {
50
50
  header?: HTMLElement;
51
51
  ripple?: boolean;
52
52
  onSelect?: (event: NavigationRailSelectEvent) => void;
53
+ /** In 1.0 it receives `{ expanded: true }`, the object an `expand` listener receives. */
53
54
  onExpand?: () => void;
55
+ /** In 1.0 it receives `{ expanded: false }`, the object a `collapse` listener receives. */
54
56
  onCollapse?: () => void;
55
57
  }
56
58
  export interface NavigationRailComponent {
@@ -69,13 +69,13 @@ export declare const RADIO_EVENTS: {
69
69
  * Default configuration values
70
70
  */
71
71
  export declare const RADIO_DEFAULTS: {
72
- /** Default radio variant */
72
+ /** @deprecated The radios have no variant option; nothing reads this. Removed in 1.0. */
73
73
  readonly VARIANT: "standard";
74
74
  /** Default radio direction */
75
75
  readonly DIRECTION: "vertical";
76
- /** Default label position */
76
+ /** @deprecated The radios have no label position option; nothing reads this. Removed in 1.0. */
77
77
  readonly LABEL_POSITION: "right";
78
- /** Default radio size */
78
+ /** @deprecated The radios have no size option; nothing reads this. Removed in 1.0. */
79
79
  readonly SIZE: "medium";
80
80
  };
81
81
  /**
@@ -101,7 +101,10 @@ export interface RadioItem {
101
101
  }
102
102
  /** Selection or unknown-value clearing reported by the radio group. */
103
103
  export interface RadiosChangePayload {
104
- /** Selected value, or an empty string when an unknown value clears selection. */
104
+ /**
105
+ * Selected value, or an empty string when an unknown value clears selection.
106
+ * In 1.0 that is `null`, as the select and `<m-radios>` report it.
107
+ */
105
108
  value: string;
106
109
  /** Native input change event; undefined for programmatic clearing. */
107
110
  originalEvent: Event | undefined;
@@ -133,12 +136,14 @@ export interface RadiosComponent {
133
136
  */
134
137
  getClass: (name: string) => string;
135
138
  /**
136
- * Gets the radios component name
139
+ * Gets the radios component name.
140
+ * In 1.0 it returns `null`, not an empty string, when nothing is selected.
137
141
  * @returns Selected radio value or empty string if none selected
138
142
  */
139
143
  getValue: () => string;
140
144
  /**
141
- * Sets the radios component value (selects a radio)
145
+ * Sets the radios component value (selects a radio).
146
+ * In 1.0 it also accepts `null`, which clears the selection.
142
147
  * @param value - Value to select
143
148
  * @returns The radios component for chaining
144
149
  */
@@ -116,17 +116,17 @@ export interface SearchConfig {
116
116
  class?: string;
117
117
  /** Component prefix for class names */
118
118
  prefix?: string;
119
- /** Called when search is submitted */
119
+ /** Called when search is submitted. In 1.0 it receives the `SearchEvent` a `submit` listener receives: read `event.value`. */
120
120
  onSubmit?: (value: string) => void;
121
- /** Called when input value changes */
121
+ /** Called when input value changes. In 1.0 it receives the `SearchEvent` an `input` listener receives: read `event.value`. */
122
122
  onInput?: (value: string) => void;
123
- /** Called when search is cleared */
123
+ /** Called when search is cleared. In 1.0 it receives the `SearchEvent` a `clear` listener receives. */
124
124
  onClear?: () => void;
125
- /** Called when view expands */
125
+ /** Called when view expands. In 1.0 it receives the object an `expand` listener receives. */
126
126
  onExpand?: () => void;
127
- /** Called when view collapses */
127
+ /** Called when view collapses. In 1.0 it receives the object a `collapse` listener receives. */
128
128
  onCollapse?: () => void;
129
- /** Called when a suggestion is selected */
129
+ /** Called when a suggestion is selected. In 1.0 it receives the `SearchEvent`: the suggestion is `event.suggestion`. */
130
130
  onSuggestionSelect?: (suggestion: SearchSuggestion) => void;
131
131
  /** Event handlers map */
132
132
  on?: Partial<Record<SearchEventType, (event: SearchEvent) => void>>;
@@ -160,12 +160,14 @@ export interface SelectComponent {
160
160
  element: HTMLElement;
161
161
  /**
162
162
  * The textfield component
163
- * @deprecated Renamed `textField` in 1.0 (FLO-383); `textfield` remains as an alias through
164
- * 1.x.
163
+ * @deprecated Renamed `textField` in 1.0 (FLO-383), where `select.textfield` is `undefined`.
164
+ * 0.10.x has no `textField`, so rename it when you upgrade.
165
165
  */
166
166
  textfield: TextfieldComponent;
167
167
  /**
168
168
  * The menu component
169
+ * @deprecated Removed in 1.0. Use the select's own methods and events: `open()`,
170
+ * `close()`, `isOpen()`, `getOptions()`, `setOptions()`, and `open`, `close` and `change`.
169
171
  */
170
172
  menu: MenuComponent;
171
173
  /**
@@ -84,7 +84,11 @@ export interface SplitButtonComponent {
84
84
  leadingElement: HTMLButtonElement;
85
85
  /** The trailing button's element */
86
86
  trailingElement: HTMLButtonElement;
87
- /** The menu, when the component was given items */
87
+ /**
88
+ * The menu, when the component was given items
89
+ * @deprecated Removed in 1.0. Use the split button's own methods and events: `expand()`,
90
+ * `collapse()`, `isExpanded()`, and `expand`, `collapse` and `select`.
91
+ */
88
92
  menu?: MenuComponent;
89
93
  /** Sets the leading button's label */
90
94
  setText: (text: string) => SplitButtonComponent;
@@ -407,7 +407,7 @@ export interface TabsComponent {
407
407
  */
408
408
  off(event: string, handler: Function): this;
409
409
  /**
410
- * Emit an event
410
+ * Emit an event. In 1.0, `emit` accepts only the tabs' own events.
411
411
  * @param event - Event name
412
412
  * @param data - Event data
413
413
  * @returns Tabs component for chaining
@@ -222,7 +222,8 @@ export interface TimePickerConfig {
222
222
  */
223
223
  onClose?: () => void;
224
224
  /**
225
- * Callback when time is confirmed; receives the same 24-hour value as getValue()
225
+ * Callback when time is confirmed; receives the same 24-hour value as getValue().
226
+ * In 1.0 it receives `{ value }`, the object a `confirm` listener receives.
226
227
  */
227
228
  onConfirm?: (time: string) => void;
228
229
  /**
@@ -39,7 +39,9 @@ export const withAPI = ({ lifecycle }) => (component) => {
39
39
  const calculatePosition = () => {
40
40
  if (!target)
41
41
  return { top: 0, left: 0 };
42
- const tooltipRect = component.element.getBoundingClientRect();
42
+ component.element.style.left = "0px";
43
+ const tooltipWidth = component.element.offsetWidth;
44
+ const tooltipHeight = component.element.offsetHeight;
43
45
  const targetRect = target.getBoundingClientRect();
44
46
  const scrollY = topLayer ? 0 : window.scrollY || window.pageYOffset;
45
47
  const scrollX = topLayer ? 0 : window.scrollX || window.pageXOffset;
@@ -49,23 +51,23 @@ export const withAPI = ({ lifecycle }) => (component) => {
49
51
  let arrowPosition;
50
52
  switch (position) {
51
53
  case TOOLTIP_POSITIONS.TOP:
52
- top = targetRect.top + scrollY - tooltipRect.height - offset;
54
+ top = targetRect.top + scrollY - tooltipHeight - offset;
53
55
  left =
54
56
  targetRect.left +
55
57
  scrollX +
56
58
  targetRect.width / 2 -
57
- tooltipRect.width / 2;
59
+ tooltipWidth / 2;
58
60
  arrowPosition = "bottom";
59
61
  break;
60
62
  case TOOLTIP_POSITIONS.TOP_START:
61
- top = targetRect.top + scrollY - tooltipRect.height - offset;
63
+ top = targetRect.top + scrollY - tooltipHeight - offset;
62
64
  left = targetRect.left + scrollX;
63
65
  arrowPosition = "bottom-start";
64
66
  break;
65
67
  case TOOLTIP_POSITIONS.TOP_END:
66
- top = targetRect.top + scrollY - tooltipRect.height - offset;
68
+ top = targetRect.top + scrollY - tooltipHeight - offset;
67
69
  left =
68
- targetRect.left + scrollX + targetRect.width - tooltipRect.width;
70
+ targetRect.left + scrollX + targetRect.width - tooltipWidth;
69
71
  arrowPosition = "bottom-end";
70
72
  break;
71
73
  case TOOLTIP_POSITIONS.RIGHT:
@@ -73,7 +75,7 @@ export const withAPI = ({ lifecycle }) => (component) => {
73
75
  targetRect.top +
74
76
  scrollY +
75
77
  targetRect.height / 2 -
76
- tooltipRect.height / 2;
78
+ tooltipHeight / 2;
77
79
  left = targetRect.left + scrollX + targetRect.width + offset;
78
80
  arrowPosition = "left";
79
81
  break;
@@ -84,7 +86,7 @@ export const withAPI = ({ lifecycle }) => (component) => {
84
86
  break;
85
87
  case TOOLTIP_POSITIONS.RIGHT_END:
86
88
  top =
87
- targetRect.top + scrollY + targetRect.height - tooltipRect.height;
89
+ targetRect.top + scrollY + targetRect.height - tooltipHeight;
88
90
  left = targetRect.left + scrollX + targetRect.width + offset;
89
91
  arrowPosition = "left-end";
90
92
  break;
@@ -94,7 +96,7 @@ export const withAPI = ({ lifecycle }) => (component) => {
94
96
  targetRect.left +
95
97
  scrollX +
96
98
  targetRect.width / 2 -
97
- tooltipRect.width / 2;
99
+ tooltipWidth / 2;
98
100
  arrowPosition = "top";
99
101
  break;
100
102
  case TOOLTIP_POSITIONS.BOTTOM_START:
@@ -105,7 +107,7 @@ export const withAPI = ({ lifecycle }) => (component) => {
105
107
  case TOOLTIP_POSITIONS.BOTTOM_END:
106
108
  top = targetRect.top + scrollY + targetRect.height + offset;
107
109
  left =
108
- targetRect.left + scrollX + targetRect.width - tooltipRect.width;
110
+ targetRect.left + scrollX + targetRect.width - tooltipWidth;
109
111
  arrowPosition = "top-end";
110
112
  break;
111
113
  case TOOLTIP_POSITIONS.LEFT:
@@ -113,19 +115,19 @@ export const withAPI = ({ lifecycle }) => (component) => {
113
115
  targetRect.top +
114
116
  scrollY +
115
117
  targetRect.height / 2 -
116
- tooltipRect.height / 2;
117
- left = targetRect.left + scrollX - tooltipRect.width - offset;
118
+ tooltipHeight / 2;
119
+ left = targetRect.left + scrollX - tooltipWidth - offset;
118
120
  arrowPosition = "right";
119
121
  break;
120
122
  case TOOLTIP_POSITIONS.LEFT_START:
121
123
  top = targetRect.top + scrollY;
122
- left = targetRect.left + scrollX - tooltipRect.width - offset;
124
+ left = targetRect.left + scrollX - tooltipWidth - offset;
123
125
  arrowPosition = "right-start";
124
126
  break;
125
127
  case TOOLTIP_POSITIONS.LEFT_END:
126
128
  top =
127
- targetRect.top + scrollY + targetRect.height - tooltipRect.height;
128
- left = targetRect.left + scrollX - tooltipRect.width - offset;
129
+ targetRect.top + scrollY + targetRect.height - tooltipHeight;
130
+ left = targetRect.left + scrollX - tooltipWidth - offset;
129
131
  arrowPosition = "right-end";
130
132
  break;
131
133
  default:
@@ -134,15 +136,15 @@ export const withAPI = ({ lifecycle }) => (component) => {
134
136
  targetRect.left +
135
137
  scrollX +
136
138
  targetRect.width / 2 -
137
- tooltipRect.width / 2;
139
+ tooltipWidth / 2;
138
140
  arrowPosition = "top";
139
141
  }
140
142
  const windowWidth = window.innerWidth;
141
143
  if (left < 0) {
142
144
  left = 0;
143
145
  }
144
- else if (left + tooltipRect.width > windowWidth) {
145
- left = windowWidth - tooltipRect.width;
146
+ else if (left + tooltipWidth > windowWidth) {
147
+ left = windowWidth - tooltipWidth;
146
148
  }
147
149
  return { top, left, arrowPosition };
148
150
  };
@@ -58,12 +58,16 @@ export interface InputFeature {
58
58
  */
59
59
  input: HTMLInputElement;
60
60
  /**
61
- * Gets the current input value
61
+ * Gets the current input value.
62
+ * In 1.0 `getValue()` returns the checked boolean, and the input's string
63
+ * value is `getValueAttribute()`.
62
64
  * @returns Current value
63
65
  */
64
66
  getValue: () => string;
65
67
  /**
66
- * Sets the input value and emits a value event
68
+ * Sets the input value and emits a value event.
69
+ * In 1.0 `setValue()` takes the checked boolean and is silent (no `value`
70
+ * event); the input's string value is set with `setValueAttribute()`.
67
71
  * @param value - New value to set
68
72
  * @returns Component instance for chaining
69
73
  */
@@ -82,6 +86,9 @@ export interface InputComponent extends ElementComponent, InputFeature {
82
86
  * Creates an input element and adds it to a component
83
87
  * Handles both input creation and event emission for state changes
84
88
  *
89
+ * In 1.0 the `change` payload's `value` is the checked boolean, as the checkbox
90
+ * and the switch report it, and the input's string value is `valueAttribute`.
91
+ *
85
92
  * @param config - Input configuration
86
93
  * @returns Function that enhances a component with input functionality
87
94
  */
@@ -141,6 +141,14 @@ export { DEFAULT_PREFIX };
141
141
  * Registered under these names like the component entries.
142
142
  */
143
143
  export declare const SHADOW_BASE_STYLES: readonly ["ripple"];
144
+ /**
145
+ * The sheet every shadow root adopts first. The reduced-motion rule is the
146
+ * document reset's (styles/base/_reset.scss), which does not match inside a
147
+ * shadow tree: transitions are limited to the fades, animations end at once
148
+ * (FLO-549). test/styles/reduced-motion.test.ts keeps the two copies equal.
149
+ * @internal
150
+ */
151
+ export declare const BASE_HOST_STYLES: string;
144
152
  type Camel<S extends string> = S extends `${infer H}-${infer T}` ? `${H}${Capitalize<Camel<T>>}` : S;
145
153
  type ValueOf<T> = T extends "boolean" ? boolean : T extends "number" ? number : string;
146
154
  type Get<S, K extends string> = S extends {
@@ -18,7 +18,8 @@ import { PREFIX } from "../core/config.js";
18
18
  import { applyStyles, DEFAULT_PREFIX, hasStyles, registerStyles, usePreupgradePrefix } from "./styles.js";
19
19
  export { DEFAULT_PREFIX };
20
20
  export const SHADOW_BASE_STYLES = ["ripple"];
21
- const BASE_HOST_STYLES = ":host{display:inline-block}:host([hidden]){display:none}*,*::before,*::after{box-sizing:border-box}";
21
+ export const BASE_HOST_STYLES = ":host{display:inline-block}:host([hidden]){display:none}*,*::before,*::after{box-sizing:border-box}" +
22
+ "@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}}";
22
23
  const camel = (name) => name.replace(/-([a-z])/g, (_, c) => c.toUpperCase());
23
24
  const kebab = (name) => name.replace(/[A-Z]/g, (c) => `-${c.toLowerCase()}`);
24
25
  const read = (host, name, type) => {
@@ -6,8 +6,8 @@
6
6
  * `selected` property the live one: the attribute moves the state until the
7
7
  * user or script changes it. A click dispatches `change` with `{ selected }`
8
8
  * from the host, as `<m-switch>` and `<m-checkbox>` do; `toggle`, which
9
- * clashed with the native ToggleEvent, is dispatched as well for one release
10
- * (deprecated, FLO-295).
9
+ * clashed with the native ToggleEvent, is dispatched as well until 1.0
10
+ * removes it (deprecated, FLO-295): listen to `change`.
11
11
  * `type="submit"` and `type="reset"` act on the host's form.
12
12
  *
13
13
  * Parts: `icon-button`, `icon`, `ripple`.
@@ -96,6 +96,7 @@ declare const iconButtonSpec: {
96
96
  selected: boolean;
97
97
  };
98
98
  };
99
+ /** @deprecated Dispatched beside `change`; removed in 1.0. Listen to `change` (FLO-295). */
99
100
  toggle: {
100
101
  detail: (payload: unknown) => {
101
102
  selected: boolean;
@@ -1,2 +1,2 @@
1
- /*! mtrl v0.10.5 | MIT */
1
+ /*! mtrl v0.10.6 | MIT */
2
2
  @layer mtrl.preupgrade{m-button:not(:defined){display:inline-flex;vertical-align:middle;align-items:center;justify-content:center;box-sizing:border-box;min-width:58px;white-space:nowrap;background-color:var(--mtrl-sys-color-primary);color:var(--mtrl-sys-color-on-primary);height:40px;padding:0 16px;gap:8px;border-radius:20px;font-family:var(--mtrl-ref-typeface-plain, Roboto, sans-serif);font-size:14px;line-height:20px;letter-spacing:.1px;font-weight:500}m-button:not(:defined)[icon]::before{width:20px;height:20px}m-button:not(:defined)[size=xs]{height:32px;padding:0 12px;gap:8px;border-radius:16px;font-family:var(--mtrl-ref-typeface-plain, Roboto, sans-serif);font-size:14px;line-height:20px;letter-spacing:.1px;font-weight:500}m-button:not(:defined)[size=xs][icon]::before{width:20px;height:20px}m-button:not(:defined)[size=s]{height:40px;padding:0 16px;gap:8px;border-radius:20px;font-family:var(--mtrl-ref-typeface-plain, Roboto, sans-serif);font-size:14px;line-height:20px;letter-spacing:.1px;font-weight:500}m-button:not(:defined)[size=s][icon]::before{width:20px;height:20px}m-button:not(:defined)[size=m]{height:56px;padding:0 24px;gap:8px;border-radius:28px;font-family:var(--mtrl-ref-typeface-brand, Roboto, sans-serif);font-size:16px;line-height:24px;letter-spacing:.15px;font-weight:500}m-button:not(:defined)[size=m][icon]::before{width:24px;height:24px}m-button:not(:defined)[size=l]{height:96px;padding:0 48px;gap:12px;border-radius:48px;font-family:var(--mtrl-ref-typeface-brand, Roboto, sans-serif);font-size:24px;line-height:32px;letter-spacing:0;font-weight:400}m-button:not(:defined)[size=l][icon]::before{width:32px;height:32px}m-button:not(:defined)[size=xl]{height:136px;padding:0 64px;gap:16px;border-radius:68px;font-family:var(--mtrl-ref-typeface-brand, Roboto, sans-serif);font-size:32px;line-height:40px;letter-spacing:0;font-weight:400}m-button:not(:defined)[size=xl][icon]::before{width:40px;height:40px}m-button:not(:defined)[variant=filled]{background-color:var(--mtrl-sys-color-primary);color:var(--mtrl-sys-color-on-primary)}m-button:not(:defined)[variant=elevated]{background-color:var(--mtrl-sys-color-surface-container-low);color:var(--mtrl-sys-color-primary)}m-button:not(:defined)[variant=tonal]{background-color:var(--mtrl-sys-color-secondary-container);color:var(--mtrl-sys-color-on-secondary-container)}m-button:not(:defined)[variant=outlined]{background-color:rgba(0,0,0,0);color:var(--mtrl-sys-color-on-surface-variant)}m-button:not(:defined)[variant=text]{background-color:rgba(0,0,0,0);color:var(--mtrl-sys-color-primary)}m-button:not(:defined)[variant=outlined]{border:1px solid var(--mtrl-sys-color-outline-variant)}m-button:not(:defined)[variant=text]{padding:0 12px}m-button:not(:defined)[icon]::before{content:"";flex:none}m-button:not(:defined)[icon]:not([size]),m-button:not(:defined)[icon][size=s]{padding-left:12px}m-switch:not(:defined){display:inline-grid;grid-template-columns:auto auto;align-content:center;align-items:center;column-gap:12px;box-sizing:border-box;min-height:56px;padding:4px 0;color:var(--mtrl-sys-color-on-surface);font-family:var(--mtrl-ref-typeface-plain, Roboto, sans-serif);font-size:16px;line-height:24px;letter-spacing:.5px;font-weight:400}m-switch:not(:defined)::after{content:"";grid-column:2;grid-row:1;box-sizing:border-box;width:52px;height:32px;border:2px solid var(--mtrl-sys-color-outline);border-radius:var(--mtrl-sys-shape-corner-full, 9999px);background:radial-gradient(circle at 14px 50%, var(--mtrl-sys-color-outline) 8px, transparent 8.5px) var(--mtrl-sys-color-surface-container-highest)}m-switch:not(:defined)[checked]::after{border-color:var(--mtrl-sys-color-primary);background:radial-gradient(circle at calc(100% - 14px) 50%, var(--mtrl-sys-color-on-primary) 12px, transparent 12.5px) var(--mtrl-sys-color-primary)}m-switch:not(:defined)[supporting-text]::after{grid-row:1/span 2}m-switch:not(:defined)[supporting-text]::before{content:attr(supporting-text);grid-column:1;grid-row:2;color:var(--mtrl-sys-color-on-surface-variant);font-family:var(--mtrl-ref-typeface-plain, Roboto, sans-serif);font-size:14px;line-height:20px;letter-spacing:.25px;font-weight:400}m-tabs:not(:defined){display:block;box-sizing:border-box;height:48px;overflow:hidden;border-bottom:1px solid var(--mtrl-sys-color-outline-variant)}m-tabs:not(:defined):has(>[icon]){height:64px}m-tabs:not(:defined)>*{visibility:hidden;display:none}m-progress:not(:defined){display:block;box-sizing:border-box;height:4px;padding:0 4px;overflow:hidden;color:rgba(0,0,0,0);background:var(--mtrl-sys-color-secondary-container) content-box}m-progress:not(:defined)[variant=circular]{display:inline-flex;vertical-align:middle;width:40px;height:40px;padding:0;background:none}m-loading-indicator:not(:defined){display:inline-flex;vertical-align:middle;width:48px;height:48px;overflow:hidden;color:rgba(0,0,0,0)}m-badge:not(:defined){display:inline-flex;vertical-align:middle;width:0;height:0;overflow:hidden}m-divider:not(:defined){display:block;height:1px;overflow:hidden;color:rgba(0,0,0,0);background-color:var(--mtrl-sys-color-outline-variant)}m-divider:not(:defined)[orientation=vertical]{display:inline-block;align-self:stretch;width:1px;height:auto}m-icon-button:not(:defined){display:inline-block;vertical-align:middle;box-sizing:border-box;overflow:hidden;color:rgba(0,0,0,0);height:40px;width:40px;border-radius:20px}m-icon-button:not(:defined)[size=xs]{height:32px;width:32px;border-radius:16px}m-icon-button:not(:defined)[size=xs][width=narrow]{height:32px;width:28px;border-radius:16px}m-icon-button:not(:defined)[size=xs][width=wide]{height:32px;width:40px;border-radius:16px}m-icon-button:not(:defined)[width=narrow]{height:40px;width:32px;border-radius:20px}m-icon-button:not(:defined)[width=wide]{height:40px;width:52px;border-radius:20px}m-icon-button:not(:defined)[size=m]{height:56px;width:56px;border-radius:28px}m-icon-button:not(:defined)[size=m][width=narrow]{height:56px;width:48px;border-radius:28px}m-icon-button:not(:defined)[size=m][width=wide]{height:56px;width:72px;border-radius:28px}m-icon-button:not(:defined)[size=l]{height:96px;width:96px;border-radius:48px}m-icon-button:not(:defined)[size=l][width=narrow]{height:96px;width:64px;border-radius:48px}m-icon-button:not(:defined)[size=l][width=wide]{height:96px;width:128px;border-radius:48px}m-icon-button:not(:defined)[size=xl]{height:136px;width:136px;border-radius:68px}m-icon-button:not(:defined)[size=xl][width=narrow]{height:136px;width:104px;border-radius:68px}m-icon-button:not(:defined)[size=xl][width=wide]{height:136px;width:184px;border-radius:68px}m-icon-button:not(:defined)[variant=filled]{background-color:var(--mtrl-sys-color-primary)}m-icon-button:not(:defined)[variant=tonal]{background-color:var(--mtrl-sys-color-secondary-container)}m-icon-button:not(:defined)[variant=outlined]{border:1px solid var(--mtrl-sys-color-outline-variant)}m-fab:not(:defined){display:inline-block;vertical-align:middle;box-sizing:border-box;overflow:hidden;color:rgba(0,0,0,0);background-color:var(--mtrl-sys-color-primary-container);width:56px;height:56px;border-radius:var(--mtrl-sys-shape-corner-large, 16px)}m-fab:not(:defined)[size=small]{width:40px;height:40px;border-radius:var(--mtrl-sys-shape-corner-medium, 12px)}m-fab:not(:defined)[size=default]{width:56px;height:56px;border-radius:var(--mtrl-sys-shape-corner-large, 16px)}m-fab:not(:defined)[size=medium]{width:80px;height:80px;border-radius:var(--mtrl-sys-shape-corner-large-increased, 20px)}m-fab:not(:defined)[size=large]{width:96px;height:96px;border-radius:var(--mtrl-sys-shape-corner-extra-large, 28px)}m-extended-fab:not(:defined){display:inline-flex;vertical-align:middle;align-items:center;justify-content:center;box-sizing:border-box;white-space:nowrap;background-color:var(--mtrl-sys-color-primary-container);color:var(--mtrl-sys-color-on-primary-container);height:56px;min-width:56px;padding:0 16px;gap:8px;border-radius:var(--mtrl-sys-shape-corner-large, 16px);font-family:var(--mtrl-ref-typeface-brand, Roboto, sans-serif);font-size:16px;line-height:24px;letter-spacing:.15px;font-weight:500}m-extended-fab:not(:defined)[icon]::before{width:24px;height:24px}m-extended-fab:not(:defined)[icon]::before{content:"";flex:none}m-extended-fab:not(:defined)[icon-position=end]::before{order:1}m-extended-fab:not(:defined)[size=medium]{height:80px;min-width:80px;padding:0 26px;gap:16px;border-radius:var(--mtrl-sys-shape-corner-large-increased, 20px);font-family:var(--mtrl-ref-typeface-brand, Roboto, sans-serif);font-size:22px;line-height:28px;letter-spacing:0;font-weight:400}m-extended-fab:not(:defined)[size=medium][icon]::before{width:28px;height:28px}m-extended-fab:not(:defined)[size=large]{height:96px;min-width:96px;padding:0 28px;gap:20px;border-radius:var(--mtrl-sys-shape-corner-extra-large, 28px);font-family:var(--mtrl-ref-typeface-brand, Roboto, sans-serif);font-size:24px;line-height:32px;letter-spacing:0;font-weight:400}m-extended-fab:not(:defined)[size=large][icon]::before{width:32px;height:32px}m-checkbox:not(:defined){display:inline-flex;align-items:center;box-sizing:border-box;min-height:48px;padding:4px 0;color:var(--mtrl-sys-color-on-surface);font-family:var(--mtrl-ref-typeface-plain, Roboto, sans-serif);font-size:16px;line-height:24px;letter-spacing:.5px;font-weight:400}m-checkbox:not(:defined)::before{content:"";flex:none;box-sizing:border-box;width:18px;height:18px;margin-inline-end:12px;border:2px solid var(--mtrl-sys-color-on-surface-variant);border-radius:2px}m-checkbox:not(:defined)[checked]::before{border-color:var(--mtrl-sys-color-primary);background-color:var(--mtrl-sys-color-primary)}m-checkbox:not(:defined)[label-position=start]::before{order:1;margin-inline:12px 0}m-slider:not(:defined){display:block;height:48px;overflow:hidden;color:rgba(0,0,0,0)}m-textfield:not(:defined){display:inline-block;position:relative;box-sizing:border-box;width:280px;height:56px;padding:22px 16px 0 16px;border-radius:var(--mtrl-sys-shape-corner-extra-small, 4px) var(--mtrl-sys-shape-corner-extra-small, 4px) 0 0;border-bottom:1px solid var(--mtrl-sys-color-on-surface-variant);background-color:var(--mtrl-sys-color-surface-container-highest);color:var(--mtrl-sys-color-on-surface);white-space:nowrap;overflow:clip;font-family:var(--mtrl-ref-typeface-plain, Roboto, sans-serif);font-size:16px;line-height:24px;letter-spacing:.5px;font-weight:400}m-textfield:not(:defined)::before{content:attr(value) " ";white-space:pre}m-textfield:not(:defined)[label]::after{content:attr(label);position:absolute;top:16px;left:16px;color:var(--mtrl-sys-color-on-surface-variant)}m-textfield:not(:defined)[label][value]:not([value=""])::after{top:8px;font-family:var(--mtrl-ref-typeface-plain, Roboto, sans-serif);font-size:12px;line-height:16px;letter-spacing:.4px;font-weight:400}m-textfield:not(:defined)[variant=outlined]{padding-top:15.5px;border:1px solid var(--mtrl-sys-color-outline);border-radius:var(--mtrl-sys-shape-corner-extra-small, 4px);background:none}m-textfield:not(:defined)[variant=outlined][label][value]:not([value=""])::after{top:-8px;padding:0 4px;left:12px}m-textfield:not(:defined)[density=compact]{height:40px;padding-top:13.5px;font-family:var(--mtrl-ref-typeface-plain, Roboto, sans-serif);font-size:14px;line-height:20px;letter-spacing:.25px;font-weight:400}m-textfield:not(:defined)[density=compact]::after{top:10px;font-family:var(--mtrl-ref-typeface-plain, Roboto, sans-serif);font-size:14px;line-height:20px;letter-spacing:.25px;font-weight:400}m-textfield:not(:defined)[density=compact][variant=outlined]{padding-top:9.5px}m-textfield:not(:defined)[supporting-text]:not([supporting-text=""]),m-textfield:not(:defined)[maxlength]{height:calc(56px + 20px);border-bottom:20px solid rgba(0,0,0,0);background-clip:padding-box;background-image:linear-gradient(to top, var(--mtrl-sys-color-on-surface-variant) 1px, transparent 1px)}m-textfield:not(:defined)[supporting-text]:not([supporting-text=""])[variant=outlined],m-textfield:not(:defined)[maxlength][variant=outlined]{padding-top:calc(15.5px + 1px);padding-left:calc(16px + 1px);border-width:0 0 20px;border-radius:var(--mtrl-sys-shape-corner-extra-small, 4px)/var(--mtrl-sys-shape-corner-extra-small, 4px) var(--mtrl-sys-shape-corner-extra-small, 4px) calc(var(--mtrl-sys-shape-corner-extra-small, 4px) + 20px) calc(var(--mtrl-sys-shape-corner-extra-small, 4px) + 20px);background-image:none;box-shadow:inset 0 0 0 1px var(--mtrl-sys-color-outline)}m-textfield:not(:defined)[supporting-text]:not([supporting-text=""])[density=compact],m-textfield:not(:defined)[maxlength][density=compact]{height:calc(40px + 20px)}m-textfield:not(:defined)>*{display:none}m-radios:not(:defined){display:block;font-family:var(--mtrl-ref-typeface-plain, Roboto, sans-serif);font-size:16px;line-height:24px;letter-spacing:.5px;font-weight:400}m-radios:not(:defined)[direction=horizontal]{display:flex;flex-wrap:wrap}m-radios:not(:defined)>*{visibility:hidden;display:flex;align-items:center;box-sizing:border-box;height:48px;padding-inline-start:48px}m-navigation-rail:not(:defined){display:block;box-sizing:border-box;padding:132px 0 16px;background:linear-gradient(var(--mtrl-sys-color-surface), var(--mtrl-sys-color-surface)) no-repeat 0 0/96px 100%}m-navigation-rail:not(:defined)>*{visibility:hidden;display:block;height:64px;overflow:hidden}m-navigation-rail:not(:defined)>*+*{margin-top:4px}m-drawer:not(:defined){display:block;flex-shrink:0;padding:12px 0}m-drawer:not(:defined)[open]{background-color:var(--mtrl-sys-color-surface)}m-drawer:not(:defined)>*{visibility:hidden;display:block;height:56px;overflow:hidden}m-top-app-bar:not(:defined){position:absolute;top:0;left:0;right:0;z-index:50;display:flex;align-items:center;box-sizing:border-box;height:64px;padding:0 12px 0 28px;background-color:var(--mtrl-sys-color-surface);color:var(--mtrl-sys-color-on-surface);white-space:nowrap;overflow:hidden;font-family:var(--mtrl-ref-typeface-brand, Roboto, sans-serif);font-size:22px;line-height:28px;letter-spacing:0;font-weight:400}m-top-app-bar:not(:defined)[type=center]{justify-content:center}m-top-app-bar:not(:defined)[type=medium],m-top-app-bar:not(:defined)[type=large]{align-items:flex-end;padding-left:44px;padding-bottom:24px;height:112px;font-family:var(--mtrl-ref-typeface-brand, Roboto, sans-serif);font-size:24px;line-height:32px;letter-spacing:0;font-weight:400}m-top-app-bar:not(:defined)[type=large]{padding-bottom:28px;height:152px;font-family:var(--mtrl-ref-typeface-brand, Roboto, sans-serif);font-size:28px;line-height:36px;letter-spacing:0;font-weight:400}m-top-app-bar:not(:defined)>[slot=leading]{order:-1}m-top-app-bar:not(:defined)>[slot=trailing]{order:1;margin-left:auto}m-bottom-app-bar:not(:defined){position:absolute;bottom:0;left:0;right:0;display:flex;align-items:center;gap:4px;box-sizing:border-box;height:80px;padding:12px 16px 12px 4px;background-color:var(--mtrl-sys-color-surface-container)}m-bottom-app-bar:not(:defined)>[slot=fab]{margin-left:auto}m-button-group:not(:defined){display:inline-flex;vertical-align:middle;gap:12px;white-space:nowrap}m-button-group:not(:defined)>*{visibility:hidden;display:inline-flex;align-items:center;box-sizing:border-box;height:40px;padding:0 16px;border:1px solid rgba(0,0,0,0);font-family:var(--mtrl-ref-typeface-plain, Roboto, sans-serif);font-size:14px;line-height:20px;letter-spacing:.1px;font-weight:500}m-chips:not(:defined){display:flex;flex-wrap:wrap;gap:8px}m-chips:not(:defined)[vertical]{flex-direction:column;align-items:flex-start}m-chips:not(:defined)[scrollable]{flex-wrap:nowrap;overflow:hidden}m-chips:not(:defined)>*{visibility:hidden;display:inline-flex;align-items:center;box-sizing:border-box;height:32px;padding:0 16px;white-space:nowrap;font-family:var(--mtrl-ref-typeface-plain, Roboto, sans-serif);font-size:14px;line-height:20px;letter-spacing:.1px;font-weight:500}m-list:not(:defined){display:block;padding:8px 0;background-color:var(--mtrl-sys-color-surface)}m-list:not(:defined)>*{visibility:hidden;display:block;height:56px;overflow:hidden}m-list:not(:defined)>*[supporting-text],m-list:not(:defined)>*[overline]{height:72px}m-list:not(:defined)>*[kind=divider]{height:1px}m-list:not(:defined)>*[kind=subheader]{height:auto;padding:16px 16px 8px;font-family:var(--mtrl-ref-typeface-plain, Roboto, sans-serif);font-size:14px;line-height:20px;letter-spacing:.1px;font-weight:500}m-card:not(:defined){display:flex;flex-direction:column;box-sizing:border-box;padding:16px;border-radius:var(--mtrl-sys-shape-corner-medium, 12px);background-color:var(--mtrl-sys-color-surface-container-low);color:var(--mtrl-sys-color-on-surface);font-family:var(--mtrl-ref-typeface-plain, Roboto, sans-serif);font-size:14px;line-height:20px;letter-spacing:.25px;font-weight:400}m-card:not(:defined)[variant=filled]{background-color:var(--mtrl-sys-color-surface-container-highest)}m-card:not(:defined)[variant=outlined]{border:1px solid var(--mtrl-sys-color-outline-variant);background-color:var(--mtrl-sys-color-surface)}m-card:not(:defined)[headline]::before{content:attr(headline);order:-2;font-family:var(--mtrl-ref-typeface-brand, Roboto, sans-serif);font-size:22px;line-height:28px;letter-spacing:0;font-weight:400}m-card:not(:defined)[subhead]::after{content:attr(subhead);order:-1;color:var(--mtrl-sys-color-on-surface-variant)}m-card:not(:defined)[headline]:not([subhead])::before,m-card:not(:defined)[subhead]::after{margin-bottom:16px}m-card:not(:defined)>[slot=headline]{order:-2;font-family:var(--mtrl-ref-typeface-brand, Roboto, sans-serif);font-size:22px;line-height:28px;letter-spacing:0;font-weight:400}m-card:not(:defined)>[slot=subhead]{order:-1;color:var(--mtrl-sys-color-on-surface-variant)}m-carousel:not(:defined){display:block}m-carousel:not(:defined)>*{visibility:hidden;display:none}m-menu:not(:defined){display:none}m-fab-menu:not(:defined){display:inline-block;vertical-align:middle;box-sizing:border-box;overflow:hidden;background-color:var(--mtrl-sys-color-primary-container);width:56px;height:56px;border-radius:var(--mtrl-sys-shape-corner-large, 16px)}m-fab-menu:not(:defined)[size=default]{width:56px;height:56px;border-radius:var(--mtrl-sys-shape-corner-large, 16px)}m-fab-menu:not(:defined)[size=medium]{width:80px;height:80px;border-radius:var(--mtrl-sys-shape-corner-large-increased, 20px)}m-fab-menu:not(:defined)[size=large]{width:96px;height:96px;border-radius:var(--mtrl-sys-shape-corner-extra-large, 28px)}m-fab-menu:not(:defined)[color=secondary]{background-color:var(--mtrl-sys-color-secondary-container)}m-fab-menu:not(:defined)[color=tertiary]{background-color:var(--mtrl-sys-color-tertiary-container)}m-fab-menu:not(:defined)>*{visibility:hidden;display:none}m-select:not(:defined){display:inline-block;position:relative;box-sizing:border-box;width:280px;height:56px;padding:22px 44px 0 16px;border-radius:var(--mtrl-sys-shape-corner-extra-small, 4px) var(--mtrl-sys-shape-corner-extra-small, 4px) 0 0;border-bottom:1px solid var(--mtrl-sys-color-on-surface-variant);background-color:var(--mtrl-sys-color-surface-container-highest);color:var(--mtrl-sys-color-on-surface);white-space:nowrap;overflow:clip;font-family:var(--mtrl-ref-typeface-plain, Roboto, sans-serif);font-size:16px;line-height:24px;letter-spacing:.5px;font-weight:400}m-select:not(:defined)::before{content:attr(value) " ";white-space:pre}m-select:not(:defined)[label]::after{content:attr(label);position:absolute;top:16px;left:16px;color:var(--mtrl-sys-color-on-surface-variant)}m-select:not(:defined)[label][value]:not([value=""])::after{top:8px;font-family:var(--mtrl-ref-typeface-plain, Roboto, sans-serif);font-size:12px;line-height:16px;letter-spacing:.4px;font-weight:400}m-select:not(:defined)[variant=outlined]{padding-top:15.5px;border:1px solid var(--mtrl-sys-color-outline);border-radius:var(--mtrl-sys-shape-corner-extra-small, 4px);background:none}m-select:not(:defined)[variant=outlined][label][value]:not([value=""])::after{top:-8px;padding:0 4px;left:12px}m-select:not(:defined)[density=compact]{height:40px;padding-top:13.5px;font-family:var(--mtrl-ref-typeface-plain, Roboto, sans-serif);font-size:14px;line-height:20px;letter-spacing:.25px;font-weight:400}m-select:not(:defined)[density=compact]::after{top:10px;font-family:var(--mtrl-ref-typeface-plain, Roboto, sans-serif);font-size:14px;line-height:20px;letter-spacing:.25px;font-weight:400}m-select:not(:defined)[density=compact][variant=outlined]{padding-top:9.5px}m-select:not(:defined)[supporting-text]:not([supporting-text=""]),m-select:not(:defined)[maxlength]{height:calc(56px + 20px);border-bottom:20px solid rgba(0,0,0,0);background-clip:padding-box;background-image:linear-gradient(to top, var(--mtrl-sys-color-on-surface-variant) 1px, transparent 1px)}m-select:not(:defined)[supporting-text]:not([supporting-text=""])[variant=outlined],m-select:not(:defined)[maxlength][variant=outlined]{padding-top:calc(15.5px + 1px);padding-left:calc(16px + 1px);border-width:0 0 20px;border-radius:var(--mtrl-sys-shape-corner-extra-small, 4px)/var(--mtrl-sys-shape-corner-extra-small, 4px) var(--mtrl-sys-shape-corner-extra-small, 4px) calc(var(--mtrl-sys-shape-corner-extra-small, 4px) + 20px) calc(var(--mtrl-sys-shape-corner-extra-small, 4px) + 20px);background-image:none;box-shadow:inset 0 0 0 1px var(--mtrl-sys-color-outline)}m-select:not(:defined)[supporting-text]:not([supporting-text=""])[density=compact],m-select:not(:defined)[maxlength][density=compact]{height:calc(40px + 20px)}m-select:not(:defined)>*{display:none}m-select:not(:defined)::before{content:" "}m-split-button:not(:defined){display:inline-flex;vertical-align:middle;align-items:center;position:relative;z-index:0;box-sizing:border-box;height:40px;padding:0 calc(12px + 50px) 0 16px;color:var(--mtrl-sys-color-on-primary);white-space:nowrap;font-family:var(--mtrl-ref-typeface-plain, Roboto, sans-serif);font-size:14px;line-height:20px;letter-spacing:.1px;font-weight:500}m-split-button:not(:defined)::before,m-split-button:not(:defined)::after{content:"";position:absolute;z-index:-1;top:0;bottom:0;background-color:var(--mtrl-sys-color-primary)}m-split-button:not(:defined)::before{left:0;right:50px;border-radius:20px 4px 4px 20px}m-split-button:not(:defined)::after{right:0;width:48px;border-radius:4px 20px 20px 4px}m-split-button:not(:defined)>*{display:none}m-tooltip:not(:defined){display:none}m-toolbar:not(:defined){display:flex;align-items:center;justify-content:space-between;gap:8px;box-sizing:border-box;min-height:64px;padding-inline:16px;background-color:var(--mtrl-sys-color-surface-container)}m-toolbar:not(:defined)[arrangement=center]{justify-content:center;gap:32px}m-toolbar:not(:defined)[variant=floating]{width:fit-content;justify-content:center;gap:4px;padding:8px;border-radius:var(--mtrl-sys-shape-corner-full, 9999px)}m-toolbar:not(:defined)[variant=floating]:not([flat]){box-shadow:0px 1px 2px rgba(0,0,0,.3),0px 1px 3px 1px rgba(0,0,0,.15)}m-toolbar:not(:defined)[variant=floating][orientation=vertical]{flex-direction:column;min-height:0;min-width:64px}m-toolbar:not(:defined)[color=vibrant]{background-color:var(--mtrl-sys-color-primary-container)}m-snackbar:not(:defined){display:none}m-dialog:not(:defined){display:none}m-bottom-sheet:not(:defined){display:none}m-side-sheet:not(:defined){display:none}m-datepicker:not(:defined){display:inline-block;box-sizing:border-box;width:280px;vertical-align:baseline;white-space:nowrap}m-datepicker:not(:defined)::before{content:attr(label) " ";white-space:pre;display:inline-block;width:100%;padding-bottom:80px;color:var(--mtrl-sys-color-on-surface);font-family:var(--mtrl-ref-typeface-plain, Roboto, sans-serif);font-size:12px;line-height:16px;letter-spacing:.4px;font-weight:400}m-datepicker:not(:defined)>*{display:none}m-timepicker:not(:defined){display:none}m-search:not(:defined){display:flex;align-items:center;box-sizing:border-box;height:56px;padding:0 56px 0 60px;border-radius:var(--mtrl-sys-shape-corner-full, 9999px);background-color:var(--mtrl-sys-color-surface-container-high);color:var(--mtrl-sys-color-on-surface-variant);white-space:nowrap;overflow:hidden;font-family:var(--mtrl-ref-typeface-plain, Roboto, sans-serif);font-size:16px;line-height:24px;letter-spacing:.5px;font-weight:400}m-search:not(:defined)::before{content:attr(placeholder)}m-search:not(:defined)[value]:not([value=""])::before{content:attr(value);color:var(--mtrl-sys-color-on-surface)}m-search:not(:defined)>*{visibility:hidden;display:none}}
package/dist/index.cjs CHANGED
Binary file
package/dist/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "mtrl",
3
- "version": "0.10.5",
3
+ "version": "0.10.6",
4
4
  "description": "Material Design 3 components for the web: plain JavaScript, web components, and React, Vue, Svelte and Solid components. TypeScript, zero dependencies.",
5
5
  "author": "floor",
6
6
  "license": "MIT",
@@ -1,2 +1,2 @@
1
- /*! mtrl v0.10.5 | MIT */
1
+ /*! mtrl v0.10.6 | MIT */
2
2
  @layer mtrl.base,mtrl.utilities,mtrl.textfield,mtrl.badge,mtrl.bottom-app-bar,mtrl.bottom-sheet,mtrl.side-sheet,mtrl.menu,mtrl.slider,mtrl.switch,mtrl.select,mtrl.progress,mtrl.button,mtrl.tabs,mtrl.top-app-bar,mtrl.icon-button,mtrl.button-group,mtrl.fab,mtrl.fab-menu,mtrl.extended-fab,mtrl.segmented-button,mtrl.card,mtrl.carousel,mtrl.checkbox,mtrl.chips,mtrl.divider,mtrl.dialog,mtrl.drawer,mtrl.loading-indicator,mtrl.split-button,mtrl.radios,mtrl.datepicker,mtrl.timepicker,mtrl.search,mtrl.snackbar,mtrl.navigation-rail,mtrl.list,mtrl.tooltip,mtrl.toolbar;@layer mtrl.badge{.mtrl-badge__wrapper{position:relative;display:inline-flex;flex-shrink:0}.mtrl-badge{position:absolute;display:flex;align-items:center;justify-content:center;font-weight:500;box-sizing:border-box;overflow:hidden;transition:all 200ms ease;text-overflow:ellipsis}.mtrl-badge--invisible{display:none}.mtrl-badge--small{width:6px;height:6px;min-width:6px;border-radius:var(--mtrl-sys-shape-corner-full, 9999px);font-size:0;padding:0}.mtrl-badge--large{height:16px;min-width:16px;border-radius:var(--mtrl-sys-shape-corner-full, 9999px);padding:0 4px;font-size:11px;line-height:16px;padding-top:.5px}.mtrl-badge--large.mtrl-badge--overflow{min-width:auto;max-width:34px;padding:0 4px}.mtrl-badge--positioned.mtrl-badge--small.mtrl-badge--top-right{top:-3px;right:-3px}.mtrl-badge--positioned.mtrl-badge--small.mtrl-badge--top-left{top:-3px;left:-3px}.mtrl-badge--positioned.mtrl-badge--small.mtrl-badge--bottom-right{bottom:-3px;right:-3px}.mtrl-badge--positioned.mtrl-badge--small.mtrl-badge--bottom-left{bottom:-3px;left:-3px}.mtrl-badge--positioned.mtrl-badge--large.mtrl-badge--top-right{top:-8px;right:-8px}.mtrl-badge--positioned.mtrl-badge--large.mtrl-badge--top-left{top:-8px;left:-8px}.mtrl-badge--positioned.mtrl-badge--large.mtrl-badge--bottom-right{bottom:-8px;right:-8px}.mtrl-badge--positioned.mtrl-badge--large.mtrl-badge--bottom-left{bottom:-8px;left:-8px}.mtrl-badge--error{background-color:var(--mtrl-sys-color-error);color:var(--mtrl-sys-color-on-error)}.mtrl-badge--primary{background-color:var(--mtrl-sys-color-primary);color:var(--mtrl-sys-color-on-primary)}.mtrl-badge--secondary{background-color:var(--mtrl-sys-color-secondary);color:var(--mtrl-sys-color-on-secondary)}.mtrl-badge--tertiary{background-color:var(--mtrl-sys-color-tertiary);color:var(--mtrl-sys-color-on-tertiary)}.mtrl-badge--success{background-color:var(--mtrl-sys-color-success);color:var(--mtrl-sys-color-on-success)}.mtrl-badge--warning{background-color:var(--mtrl-sys-color-warning);color:var(--mtrl-sys-color-on-warning)}.mtrl-badge--info{background-color:var(--mtrl-sys-color-info);color:var(--mtrl-sys-color-on-info)}[dir=rtl] .mtrl-badge--positioned.mtrl-badge--top-right{right:auto;left:-8px}[dir=rtl] .mtrl-badge--positioned.mtrl-badge--top-left{left:auto;right:-8px}[dir=rtl] .mtrl-badge--positioned.mtrl-badge--bottom-right{right:auto;left:-8px}[dir=rtl] .mtrl-badge--positioned.mtrl-badge--bottom-left{left:auto;right:-8px}}