material-inspired-component-library 9.1.0 → 9.1.2

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 (73) hide show
  1. package/README.md +2 -1
  2. package/components/appbar/index.scss +1 -1
  3. package/components/badge/README.md +43 -12
  4. package/components/badge/index.scss +15 -21
  5. package/components/bottomsheet/README.md +53 -22
  6. package/components/bottomsheet/index.scss +62 -45
  7. package/components/button/_shared.scss +9 -9
  8. package/components/card/README.md +55 -25
  9. package/components/card/index.scss +57 -38
  10. package/components/checkbox/README.md +97 -28
  11. package/components/checkbox/index.scss +39 -29
  12. package/components/chip/index.scss +6 -6
  13. package/components/datepicker/README.md +184 -59
  14. package/components/datepicker/index.scss +85 -21
  15. package/components/dialog/README.md +151 -56
  16. package/components/dialog/index.scss +50 -62
  17. package/components/iconbutton/index.scss +8 -8
  18. package/components/list/index.scss +15 -11
  19. package/components/menu/index.scss +13 -13
  20. package/components/navigationbar/index.scss +7 -1
  21. package/components/navigationrail/index.scss +27 -22
  22. package/components/radio/README.md +52 -12
  23. package/components/radio/index.scss +59 -41
  24. package/components/select/index.scss +3 -3
  25. package/components/sidesheet/README.md +90 -37
  26. package/components/sidesheet/index.scss +51 -41
  27. package/components/slider/README.md +35 -9
  28. package/components/slider/index.scss +182 -153
  29. package/components/snackbar/README.md +43 -25
  30. package/components/snackbar/index.scss +22 -27
  31. package/components/stepper/index.scss +5 -5
  32. package/components/switch/README.md +32 -4
  33. package/components/switch/index.scss +57 -52
  34. package/components/timepicker/README.md +131 -55
  35. package/components/timepicker/index.scss +47 -26
  36. package/dist/appbar.css +1 -1
  37. package/dist/badge.css +1 -1
  38. package/dist/bottomsheet.css +1 -1
  39. package/dist/bottomsheet.js +1 -1
  40. package/dist/button.css +1 -1
  41. package/dist/card.css +1 -1
  42. package/dist/checkbox.css +1 -1
  43. package/dist/checkbox.js +1 -1
  44. package/dist/chip.css +1 -1
  45. package/dist/components/checkbox/index.d.ts +1 -0
  46. package/dist/datepicker.css +1 -1
  47. package/dist/datepicker.js +1 -1
  48. package/dist/dialog.css +1 -1
  49. package/dist/foundations/form/index.js +1 -1
  50. package/dist/iconbutton.css +1 -1
  51. package/dist/layout.css +1 -1
  52. package/dist/list.css +1 -1
  53. package/dist/menu.css +1 -1
  54. package/dist/micl.css +1 -1
  55. package/dist/micl.js +1 -1
  56. package/dist/navigationbar.css +1 -1
  57. package/dist/navigationrail.css +1 -1
  58. package/dist/radio.css +1 -1
  59. package/dist/select.css +1 -1
  60. package/dist/sidesheet.css +1 -1
  61. package/dist/slider.css +1 -1
  62. package/dist/slider.js +1 -1
  63. package/dist/snackbar.css +1 -1
  64. package/dist/snackbar.js +1 -1
  65. package/dist/stepper.css +1 -1
  66. package/dist/stepper.js +1 -1
  67. package/dist/switch.css +1 -1
  68. package/dist/timepicker.css +1 -1
  69. package/dist/timepicker.js +1 -1
  70. package/foundations/layout/_tokens.scss +55 -0
  71. package/foundations/layout/index.scss +5 -35
  72. package/package.json +2 -2
  73. package/{components/checkbox/_label.scss → styles/togglelabel.scss} +11 -3
@@ -1,22 +1,31 @@
1
1
  # Time picker
2
+
2
3
  This component implements the [Material Design 3 Expressive Time picker](https://m3.material.io/components/time-pickers/overview) design. It allows users to select a specific time of day using either a text input or an analog dial interface.
3
4
 
4
5
  ## Basic Usage
5
6
 
6
7
  ### HTML
7
- The Time picker component is an extension of the [**Dialog** component](../dialog/README.md). To create a basic time picker, use a `<dialog>` element with both `micl-dialog` and `micl-timepicker` classes.
8
+
9
+ The Time picker component is an extension of the [**Dialog** component](../dialog/README.md). To create a basic time picker, use a `<dialog>` element with both the `micl-dialog` and `micl-timepicker` classes.
8
10
 
9
11
  ```HTML
10
- <dialog id="mytimepicker" class="micl-dialog micl-timepicker" closedby="closerequest" aria-labelledby="mytitle">
12
+ <dialog
13
+ id="mytimepicker"
14
+ class="micl-dialog micl-timepicker"
15
+ closedby="closerequest"
16
+ aria-labelledby="mytitle"
17
+ data-micldialheadline="Select time"
18
+ data-miclinputheadline="Enter time"
19
+ >
11
20
  <form method="dialog">
12
21
  <div class="micl-dialog__headline">
13
- <h2 id="mytitle">Enter time</h2>
22
+ <h2 id="mytitle">Select time</h2>
14
23
  </div>
15
24
 
16
25
  <div class="micl-dialog__content">
17
- <input type="number" name="hour" value="00" aria-labelledby="myhour">
26
+ <input type="text" name="hour" value="00" aria-labelledby="myhour">
18
27
  <span class="micl-timepicker__separator">:</span>
19
- <input type="number" name="minute" value="00" aria-labelledby="myminute">
28
+ <input type="text" name="minute" value="00" aria-labelledby="myminute">
20
29
  <div class="micl-timepicker__period"></div>
21
30
  <span id="myhour" class="micl-timepicker__supporting-text-hour">Hour</span>
22
31
  <span id="myminute" class="micl-timepicker__supporting-text-minute">Minute</span>
@@ -42,124 +51,191 @@ The Time picker component is an extension of the [**Dialog** component](../dialo
42
51
  </div>
43
52
  </form>
44
53
  </dialog>
54
+
45
55
  ```
46
56
 
47
57
  ### CSS
48
- Import the time picker, dialog and button styles into your project:
58
+
59
+ Import the time picker, dialog, and button styles into your project:
49
60
 
50
61
  ```CSS
51
62
  @use "material-inspired-component-library/dist/dialog";
52
63
  @use "material-inspired-component-library/dist/button";
53
64
  @use "material-inspired-component-library/dist/iconbutton";
54
65
  @use "material-inspired-component-library/dist/timepicker";
66
+
55
67
  ```
56
68
 
57
69
  Or import all MICL styles:
70
+
58
71
  ```CSS
59
72
  @use "material-inspired-component-library/styles";
73
+
60
74
  ```
61
75
 
62
76
  ### JavaScript
77
+
63
78
  This component requires JavaScript to function:
64
79
 
65
80
  ```JavaScript
66
81
  import micl from "material-inspired-component-library/dist/micl";
82
+
67
83
  ```
68
- When loading individual JavaScript files, also load `dist/textfield` — it wires the input field that opens the picker.
69
84
 
70
85
  This will initialize any Time picker component, including those that will be added to the DOM later on.
71
86
 
87
+ If you are loading individual JavaScript modules, ensure you include `dist/textfield` (to wire the triggering input field) and `dist/button` (to manage the `aria-pressed` state and icon of the mode toggle).
88
+
72
89
  ### Live Demo
73
- A live example of the [Time picker component](https://henkpb.github.io/micl/timepicker.html) is available to interact with.
74
90
 
75
- ## Variants
76
- Because the Time picker component relies on the Dialog component, it utilizes the same utility classes for content structure. Refer to the [Dialog component documentation](../dialog/README.md) for structural details.
91
+ A live example of the [Time picker component](https://henkpb.github.io/micl/timepicker.html) is available for interaction.
92
+
93
+ ## Anatomy
94
+
95
+ As an extension of the Dialog component, the Time picker utilizes the same utility classes for its content structure. Refer to the [Dialog component documentation](../dialog/README.md) for base layout details.
77
96
 
78
- ### Time Picker Structure
79
97
  For the picker to function correctly, the `micl-dialog__content` area must contain:
80
98
 
81
- - Hour input: `<input type="number" name="hour">`
82
- - Minute input: `<input type="number" name="minute">`
83
- - Separator: A text element with class `micl-timepicker__separator` (e.g., a colon).
84
- - AM/PM Container: An empty `<div>` with class `micl-timepicker__period`. The component logic will populate this selector if the user's locale uses a 12-hour format.
85
- - Dial Container: An optional empty `<div>` with class `micl-timepicker__dial` for the analog clock interface.
86
- - Optional elements for "Hour" and "Minute" supporting text.
99
+ * **Hour input:** `<input type="text" name="hour">`
100
+ * **Minute input:** `<input type="text" name="minute">`
101
+ * **Separator:** A text element with the class `micl-timepicker__separator` (e.g., a colon).
102
+ * **AM/PM Container:** An empty `<div>` with the class `micl-timepicker__period`. The component logic populates this container automatically when using a 12-hour clock.
103
+ * **Dial Container:** An optional empty `<div>` with the class `micl-timepicker__dial` for the analog clock interface.
104
+ * **Supporting Text:** Optional elements mapping to "Hour" and "Minute" labels.
87
105
 
88
- By default, the layout is **vertical**. To switch to a **horizontal** layout (side-by-side inputs and dial), add the modifier class `micl-timepicker--horizontal` to the `<dialog>`.
106
+ By default, the layout is **vertical**. To switch to a **horizontal** layout (side-by-side inputs and dial), add the `micl-timepicker--horizontal` modifier class to the `<dialog>`. The two layouts only differ visually while the dial is displayed.
89
107
 
90
- #### Input Mode Switching
91
- To allow users to toggle between the text inputs and the analog dial, add an icon [toggle button](../button/README.md#toggle-button) to the `micl-dialog__actions` container, as shown in the basic example above:
108
+ ## Variants
109
+
110
+ #### 12-Hour and 24-Hour Clocks
111
+
112
+ By default, the picker adopts the hour cycle of the user's locale: a 12-hour clock displays an AM/PM selector and hours 1–12 on the dial, while a 24-hour clock displays hours 0–11 on the outer ring and 12–23 on the inner ring. The AM/PM labels reflect the locale's day period names (e.g., a Spanish locale will display *a.m.* / *p.m.*).
113
+
114
+ To explicitly set the clock format regardless of the user's locale (useful for applications with custom locale switchers), add `data-miclhourcycle` to the `<dialog>`:
115
+
116
+ ```HTML
117
+ <dialog class="micl-dialog micl-timepicker" data-miclhourcycle="h12" closedby="closerequest">
118
+ ...
119
+ </dialog>
92
120
 
93
- - Class: `micl-timepicker__inputmode` in addition to the icon button and `micl-button--toggle` classes.
94
- - A self-targeting `commandfor`/`command="--micl-toggle"` pair, which flips the button's `aria-pressed` state on activation.
95
- - Data Attribute: `data-miclicon="keyboard"` (the icon shown in dial mode, when `aria-pressed="false"`).
96
- - Data Attribute: `data-micliconselected="schedule"` (the icon shown in input mode, when `aria-pressed="true"`).
121
+ ```
122
+
123
+ Accepted values are `h11` and `h12` (for 12-hour formatting) and `h23` and `h24` (for 24-hour formatting). These map directly to the [`hourCycle`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/DateTimeFormat/resolvedOptions) values reported by `Intl`.
97
124
 
98
125
  #### Starting in Input Mode
99
- The picker opens in dial mode by default. To open it in input mode instead, add the `micl-timepicker__dial--hidden` class to the `micl-timepicker__dial` element, and set `aria-pressed="true"` on the `micl-timepicker__inputmode` button so it shows the matching `schedule` icon. The two attributes are independent, so they must agree in the initial markup.
126
+
127
+ By default, the picker opens in dial mode. To default to input mode, add the `micl-timepicker__dial--hidden` class to the `micl-timepicker__dial` element, and set `aria-pressed="true"` on the `micl-timepicker__inputmode` button so it displays the matching `schedule` icon. These two attributes operate independently and must be synced in your initial markup.
128
+
129
+ #### Input Mode Switching
130
+
131
+ To allow users to toggle between text inputs and the analog dial, add an icon [toggle button](../iconbutton/README.md) to the `micl-dialog__actions` container, as shown in the basic example:
132
+
133
+ * **Class:** `micl-timepicker__inputmode` alongside the standard icon button and `micl-button--toggle` classes.
134
+ * **Behavior:** A self-targeting `commandfor` / `command="--micl-toggle"` pair flips the button's `aria-pressed` state upon activation.
135
+ * **Dial Icon:** `data-miclicon="keyboard"` (displayed in dial mode when `aria-pressed="false"`).
136
+ * **Input Icon:** `data-micliconselected="schedule"` (displayed in input mode when `aria-pressed="true"`).
137
+
138
+ Material Design specifies different headlines for the two modes. By adding `data-micldialheadline` and `data-miclinputheadline` to the `<dialog>`, the component will dynamically update the headline text to match the current mode. If omitted, the default heading remains static.
100
139
 
101
140
  ### Integration
141
+
102
142
  You can trigger the Time picker component from standard input fields or buttons.
103
143
 
104
144
  #### Connecting to an Input Field
105
- To replace the browser's native time picker, add the `data-timepicker` attribute to an `<input>` element. The value of this attribute must match the `id` of your Time picker dialog.
145
+
146
+ To replace the browser's native time picker, assign the `data-timepicker` attribute to an `<input>` element. The value of this attribute must match the `id` of your Time picker dialog.
106
147
 
107
148
  ```HTML
108
149
  <input type="time" data-timepicker="mytimepicker" value="09:41">
150
+
109
151
  ```
110
152
 
111
- - **Behavior**: Clicking the input opens the picker initialized with the input's current value.
112
- - **Reusability**: Multiple input fields can target the same Time picker component ID. The picker will automatically update to reflect the time of the specific input field engaged by the user.
153
+ * **Behavior**: Clicking the input opens the picker, initialized to the input's current value.
154
+ * **Reusability**: Multiple input fields can target the same Time picker ID. The component will automatically read from and write to the specific input field the user interacted with.
113
155
 
114
156
  #### Connecting to a Button
115
- You can trigger the picker from a button using the standard `popovertarget` attribute.
157
+
158
+ You can trigger the picker from a button using standard `command` / `commandfor` attributes.
116
159
 
117
160
  ```HTML
118
- <button type="button" class="micl-button-text-m" popovertarget="mytimepicker" value="09:41">09:41</button>
161
+ <button
162
+ type="button"
163
+ class="micl-button-text-m"
164
+ command="show-modal"
165
+ commandfor="mytimepicker"
166
+ value="09:41"
167
+ >09:41</button>
168
+
119
169
  ```
120
170
 
121
- - **Behavior**: The Time picker reads from and writes to the button's value attribute.
122
- - **Formatting**: The component automatically updates the button's text content with the selected time, formatted according to the user's locale.
171
+ * **Behavior**: The Time picker reads from and writes to the button's `value` attribute, which must hold the time in 24-hour `HH:MM` format.
172
+ * **Formatting**: The component updates the button's visible text content with the selected time, formatted according to the user's locale.
173
+
174
+ > [!NOTE]
175
+ > Because a time picker requires explicit user confirmation, it must function as a modal dialog. Opening it as a popover (`popovertarget`) is **not supported**. A `<dialog popover>` does not fire the standard `close` event required by the component to write the selected time back to the invoker.
176
+
177
+ ## Accessibility
178
+
179
+ * **Always label the dialog.** Point `aria-labelledby` to the headline element. Additionally, ensure both input fields use `aria-labelledby` to point to their respective supporting text elements (as demonstrated in the HTML snippet).
180
+ * **Ensure full keyboard navigation.** The two input fields serve as the primary keyboard path. Exposed as spin buttons, they respond to <kbd>↑</kbd> and <kbd>↓</kbd> keys in *both* modes, wrapping at the limits of their ranges. On a 12-hour clock, wrapping past 12 or below 1 automatically toggles the AM/PM selector.
181
+ * **Hide the dial from assistive technologies.** The dial is purely a pointer affordance. It uses `aria-hidden="true"` to prevent screen readers from announcing an inoperable list of numbers. Everything configurable via the dial is fully accessible via the input fields.
182
+ * **Manage field states dynamically.** The input fields are marked `read-only` while in dial mode to prevent mobile on-screen keyboards from appearing unnecessarily. Switching to input mode restores editability, moves focus to the hour field, and selects its contents.
183
+ * **Provide context for the toggle button.** The mode toggle is an icon-only button; it requires an `aria-label`. Its `aria-pressed` state programmatically communicates the active mode to screen readers.
184
+ * **Respect motion preferences.** The selector visually sweeps between values only if the user has not enabled OS-level reduced motion.
123
185
 
124
186
  ## Theming
125
- Each time picker can be themed with CSS custom properties that follow the Material Design 3 component-token naming convention. The container color, shape and elevation are inherited from the [Dialog component](../dialog/README.md).
187
+
188
+ Time pickers can be themed using CSS custom properties adhering to the Material Design 3 component-token naming convention. Container color, shape, and elevation are inherited directly from the [Dialog component](../dialog/README.md).
126
189
 
127
190
  | Custom property | Meaning | Default |
128
- |---|---|---|
191
+ | --- | --- | --- |
192
+ | `--md-comp-time-picker-motion-duration` | Duration of the selector sweep and state layer fades | `--md-sys-motion-expressive-fast-spatial-duration` |
129
193
  | `--md-comp-time-picker-time-selector-container-height` | Height of the hour and minute input boxes | `72px` (`80px` in dial mode) |
130
194
  | `--md-comp-time-picker-time-selector-container-width` | Width of the input boxes in 12-hour mode | `96px` |
131
195
  | `--md-comp-time-picker-time-selector-24h-container-width` | Width of the input boxes in 24-hour mode | `114px` |
132
- | `--md-comp-time-picker-time-selector-unselected-container-color` | The background color of the input boxes | `--md-sys-color-surface-container-highest` |
133
- | `--md-comp-time-picker-time-selector-unselected-label-text-color` | The text color of the input boxes | `--md-sys-color-on-surface` |
134
- | `--md-comp-time-picker-time-selector-selected-container-color` | The background color of the active input box | `--md-sys-color-primary-container` |
135
- | `--md-comp-time-picker-time-selector-selected-label-text-color` | The text color of the active input box | `--md-sys-color-on-primary-container` |
136
- | `--md-comp-time-input-focus-outline-color` | The border color of the active input box in keyboard input mode | `--md-sys-color-primary` |
137
- | `--md-comp-time-picker-separator-width` | Width of the space containing the colon separator | `24px` |
138
- | `--md-comp-time-picker-separator-color` | The color of the colon separator | `--md-sys-color-on-surface` |
139
- | `--md-comp-time-picker-headline-color` | The text color of the headline | `--md-sys-color-on-surface-variant` |
140
- | `--md-comp-time-picker-supporting-text-color` | The text color of the labels below the input boxes | `--md-sys-color-on-surface-variant` |
196
+ | `--md-comp-time-picker-time-selector-unselected-container-color` | Background color of inactive input boxes | `--md-sys-color-surface-container-highest` |
197
+ | `--md-comp-time-picker-time-selector-unselected-label-text-color` | Text color of inactive input boxes | `--md-sys-color-on-surface` |
198
+ | `--md-comp-time-picker-time-selector-selected-container-color` | Background color of the active input box | `--md-sys-color-primary-container` |
199
+ | `--md-comp-time-picker-time-selector-selected-label-text-color` | Text color of the active input box | `--md-sys-color-on-primary-container` |
200
+ | `--md-comp-time-input-focus-outline-color` | Border color of the active input box in keyboard input mode | `--md-sys-color-primary` |
201
+ | `--md-comp-time-picker-separator-width` | Width of the container holding the colon separator | `24px` |
202
+ | `--md-comp-time-picker-separator-color` | Color of the colon separator | `--md-sys-color-on-surface` |
203
+ | `--md-comp-time-picker-headline-color` | Text color of the dialog headline | `--md-sys-color-on-surface-variant` |
204
+ | `--md-comp-time-picker-supporting-text-color` | Text color of the labels beneath the input boxes | `--md-sys-color-on-surface-variant` |
141
205
  | `--md-comp-time-picker-period-selector-container-height` | Total height of the AM/PM selector toggle | `72px` (`80px` or `38px` in dial modes) |
142
206
  | `--md-comp-time-picker-period-selector-container-width` | Width of the AM/PM selector toggle | `52px` |
143
- | `--md-comp-time-picker-period-selector-outline-color` | The border color of the AM/PM selector toggle | `--md-sys-color-outline` |
144
- | `--md-comp-time-picker-period-selector-unselected-label-text-color` | The text color of the unselected period | `--md-sys-color-on-surface-variant` |
145
- | `--md-comp-time-picker-period-selector-selected-container-color` | The background color of the selected period | `--md-sys-color-tertiary-container` |
146
- | `--md-comp-time-picker-period-selector-selected-label-text-color` | The text color of the selected period | `--md-sys-color-on-tertiary-container` |
207
+ | `--md-comp-time-picker-period-selector-outline-color` | Border color of the AM/PM selector toggle | `--md-sys-color-outline` |
208
+ | `--md-comp-time-picker-period-selector-unselected-label-text-color` | Text color of the unselected period | `--md-sys-color-on-surface-variant` |
209
+ | `--md-comp-time-picker-period-selector-selected-container-color` | Background color of the selected period | `--md-sys-color-tertiary-container` |
210
+ | `--md-comp-time-picker-period-selector-selected-label-text-color` | Text color of the selected period | `--md-sys-color-on-tertiary-container` |
147
211
  | `--md-comp-time-picker-clock-dial-container-size` | Diameter of the analog clock face | `256px` |
148
- | `--md-comp-time-picker-clock-dial-color` | The background color of the analog clock face | `--md-sys-color-surface-container-highest` |
149
- | `--md-comp-time-picker-clock-dial-unselected-label-text-color` | The text color of the dial marks | `--md-sys-color-on-surface` |
150
- | `--md-comp-time-picker-clock-dial-selected-label-text-color` | The text color of the selected dial mark | `--md-sys-color-on-primary` |
151
- | `--md-comp-time-picker-clock-dial-selector-handle-container-color` | The background color of the selected dial mark | `--md-sys-color-primary` |
152
- | `--md-comp-time-picker-clock-dial-selector-track-container-color` | The color of the selector track line on the dial | `--md-sys-color-primary` |
212
+ | `--md-comp-time-picker-clock-dial-color` | Background color of the analog clock face | `--md-sys-color-surface-container-highest` |
213
+ | `--md-comp-time-picker-clock-dial-unselected-label-text-color` | Text color of the unselected dial marks | `--md-sys-color-on-surface` |
214
+ | `--md-comp-time-picker-clock-dial-selected-label-text-color` | Text color of the selected dial mark | `--md-sys-color-on-primary` |
215
+ | `--md-comp-time-picker-clock-dial-selector-handle-container-color` | Background color of the selected dial mark | `--md-sys-color-primary` |
216
+ | `--md-comp-time-picker-clock-dial-selector-track-container-color` | Color of the selector track line on the dial | `--md-sys-color-primary` |
153
217
  | `--md-comp-time-picker-clock-dial-selector-track-container-width` | Thickness of the selector track line on the dial | `2px` |
154
- | `--md-comp-time-picker-clock-dial-selector-center-container-color` | The color of the center dot of the dial | `--md-sys-color-primary` |
155
- | `--md-comp-time-picker-clock-dial-selector-center-container-size` | Diameter of the center dot of the dial | `8px` |
218
+ | `--md-comp-time-picker-clock-dial-selector-center-container-color` | Color of the center dot on the dial | `--md-sys-color-primary` |
219
+ | `--md-comp-time-picker-clock-dial-selector-center-container-size` | Diameter of the center dot on the dial | `8px` |
156
220
 
157
221
  **Example: Changing the width of the dial track**
158
222
 
159
223
  ```HTML
160
- <div style="--md-comp-time-picker-clock-dial-selector-track-container-width:3px">
224
+ <div style="--md-comp-time-picker-clock-dial-selector-track-container-width: 3px;">
161
225
  <dialog class="micl-dialog micl-timepicker" closedby="closerequest">
162
226
  ...
163
227
  </dialog>
164
228
  </div>
229
+
165
230
  ```
231
+
232
+ ## Compatibility
233
+
234
+ This component relies on modern web platform features. Review *Browser compatibility* before deploying it in production environments.
235
+
236
+ * **Open/Close Mechanisms:** Relies on the `<dialog>` element's [`beforetoggle`](https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/beforetoggle_event) event to load the invoker's time, and on the `close` event to write it back. Buttons open the picker using the [Invoker Commands API](https://developer.mozilla.org/en-US/docs/Web/API/Invoker_Commands_API) (`command` / `commandfor`). In browsers where this is unsupported, you must trigger `showModal()` manually.
237
+ * **Input Mode Toggle:** The icon and `aria-pressed` state of the toggle button are driven by a custom invoker command. Without Invoker Commands support, the dial will still toggle, but the button will not visually reflect the active mode.
238
+ * **Selector Sweep:** The animated dial selector utilizes a registered [`@property`](https://developer.mozilla.org/en-US/docs/Web/CSS/@property) custom property of type `<angle>`. In browsers without `@property` support, the selector will snap to the new value instantly rather than sweeping smoothly.
239
+ * **Dial Geometry:** The clock face calculates mark positions using the [`cos()` and `sin()](https://developer.mozilla.org/en-US/docs/Web/CSS/sin)` trigonometric CSS functions.
240
+ * **Advanced Styling:** Utilizes [`:has()`](https://developer.mozilla.org/en-US/docs/Web/CSS/:has), [`:dir()`](https://developer.mozilla.org/en-US/docs/Web/CSS/:dir), and [relative color syntax](https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_colors/Relative_colors) to handle layout switching, right-to-left rendering, and state layer opacities.
241
+ * **Locale Data:** Locale-specific details (hour cycle, AM/PM labels, button text formatting) are sourced from [`Intl.DateTimeFormat`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/DateTimeFormat). If the lookup fails, the component safely falls back to a 24-hour clock using English day periods.
@@ -40,6 +40,12 @@
40
40
  @include typography.scale('body-small');
41
41
  @include typography.scale('label-medium');
42
42
 
43
+ @property --micl-angle {
44
+ syntax: '<angle>';
45
+ inherits: true;
46
+ initial-value: 0deg;
47
+ }
48
+
43
49
  // State layer background shared by the time fields and the AM/PM toggles.
44
50
  // The state layer color follows the label color of the current state.
45
51
  %statelayer-background {
@@ -49,7 +55,7 @@
49
55
  background-repeat: no-repeat;
50
56
  background-size: 100%;
51
57
  -webkit-tap-highlight-color: transparent;
52
- transition: --statelayer-opacity var(--md-comp-time-picker-motion-duration) linear;
58
+ transition: --statelayer-opacity var(--_timepicker-motion-duration) linear;
53
59
 
54
60
  &:hover {
55
61
  --statelayer-opacity: var(--md-sys-state-hover-state-layer-opacity);
@@ -63,7 +69,7 @@
63
69
  }
64
70
 
65
71
  dialog.micl-dialog.micl-timepicker {
66
- --md-comp-time-picker-motion-duration: #{motion.$md-sys-motion-expressive-fast-spatial-duration};
72
+ --_timepicker-motion-duration: var(--md-comp-time-picker-motion-duration, #{motion.$md-sys-motion-expressive-fast-spatial-duration});
67
73
 
68
74
  // Internal aliases: each public token is referenced from many descendants.
69
75
  // The keyboard-input mode uses the (smaller) time-input defaults; the
@@ -76,7 +82,7 @@ dialog.micl-dialog.micl-timepicker {
76
82
  --_dial-size: var(--md-comp-time-picker-clock-dial-container-size, 256px);
77
83
  --_center-size: var(--md-comp-time-picker-clock-dial-selector-center-container-size, 8px);
78
84
  --_track-width: var(--md-comp-time-picker-clock-dial-selector-track-container-width, 2px);
79
- --_target: var(--md-sys-target-size, 48px);
85
+ --_target: var(--md-sys-state-target-size, 48px);
80
86
 
81
87
  .micl-dialog__headline {
82
88
  padding-block-end: 20px;
@@ -118,7 +124,7 @@ dialog.micl-dialog.micl-timepicker {
118
124
  }
119
125
  .micl-dialog__content {
120
126
  grid-template-areas:
121
- "x x x dial"
127
+ ". . . dial"
122
128
  "hr sep min dial"
123
129
  "per per per dial";
124
130
  grid-template-rows: 72px var(--_input-height) auto;
@@ -154,6 +160,21 @@ dialog.micl-dialog.micl-timepicker {
154
160
  display: none;
155
161
  }
156
162
  }
163
+
164
+ // A clock face must never mirror, and a time is written hour-first in every
165
+ // locale, so the whole selector runs ltr and only the labels follow the page.
166
+ &:dir(rtl) .micl-dialog__content {
167
+ direction: ltr;
168
+
169
+ .micl-timepicker__supporting-text-hour,
170
+ .micl-timepicker__supporting-text-minute {
171
+ direction: rtl;
172
+ }
173
+ }
174
+
175
+ @media (prefers-reduced-motion: reduce) {
176
+ --_timepicker-motion-duration: 0ms;
177
+ }
157
178
  }
158
179
 
159
180
  .micl-timepicker {
@@ -173,16 +194,7 @@ dialog.micl-dialog.micl-timepicker {
173
194
  background-color: var(--md-comp-time-picker-time-selector-unselected-container-color, var(--md-sys-color-surface-container-highest));
174
195
  color: var(--md-comp-time-picker-time-selector-unselected-label-text-color, var(--md-sys-color-on-surface));
175
196
  text-align: center;
176
- user-select: none;
177
- -moz-appearance: textfield;
178
197
 
179
- &::-webkit-inner-spin-button,
180
- &::-webkit-outer-spin-button {
181
- -webkit-appearance: none;
182
- }
183
- &::selection {
184
- background-color: transparent;
185
- }
186
198
  &.micl-timepicker--selected {
187
199
  background-color: var(--md-comp-time-picker-time-selector-selected-container-color, var(--md-sys-color-primary-container));
188
200
  color: var(--md-comp-time-picker-time-selector-selected-label-text-color, var(--md-sys-color-on-primary-container));
@@ -191,11 +203,13 @@ dialog.micl-dialog.micl-timepicker {
191
203
  }
192
204
  input[name=hour] {
193
205
  grid-area: hr;
194
- justify-self: flex-end;
206
+ justify-self: end;
195
207
  }
196
208
  input[name=minute] {
197
209
  grid-area: min;
198
210
  }
211
+ // In dial mode the fields are read-only read-outs: no caret, no selection.
212
+ // The keyboard mode needs both, so that the select-on-focus is visible.
199
213
  &:has(.micl-timepicker__dial:not(.micl-timepicker__dial--hidden)) {
200
214
  input[name=hour],
201
215
  input[name=minute] {
@@ -203,6 +217,11 @@ dialog.micl-dialog.micl-timepicker {
203
217
 
204
218
  border: none;
205
219
  cursor: pointer;
220
+ user-select: none;
221
+
222
+ &::selection {
223
+ background-color: transparent;
224
+ }
206
225
  }
207
226
  }
208
227
  &:not(:has(.micl-timepicker__am)):not(:has(.micl-timepicker__dial:not(.micl-timepicker__dial--hidden))) {
@@ -250,8 +269,10 @@ dialog.micl-dialog.micl-timepicker {
250
269
  background-color: transparent;
251
270
  cursor: pointer;
252
271
 
272
+ // The runtime names the radios with the day periods of the user's locale,
273
+ // so the accessible name is also the visible label.
253
274
  &::before {
254
- content: "AM";
275
+ content: attr(aria-label);
255
276
  position: absolute;
256
277
  inline-size: 100%;
257
278
  text-align: center;
@@ -273,10 +294,6 @@ dialog.micl-dialog.micl-timepicker {
273
294
  border-block-start-width: 0px;
274
295
  border-end-start-radius: var(--md-sys-shape-corner-small);
275
296
  border-end-end-radius: var(--md-sys-shape-corner-small);
276
-
277
- &::before {
278
- content: "PM";
279
- }
280
297
  }
281
298
  }
282
299
 
@@ -295,7 +312,7 @@ dialog.micl-dialog.micl-timepicker {
295
312
  .micl-timepicker .micl-timepicker__dial {
296
313
  --micl-dial-radius: calc((var(--_dial-size) - var(--_target)) / 2);
297
314
  --micl-hour-radius: var(--micl-dial-radius);
298
- --micl-angle: 0deg;
315
+ --micl-track-radius: var(--micl-dial-radius);
299
316
 
300
317
  position: relative;
301
318
  grid-area: dial;
@@ -304,10 +321,8 @@ dialog.micl-dialog.micl-timepicker {
304
321
  inline-size: var(--_dial-size);
305
322
  margin-block: 36px 0;
306
323
  margin-inline: 0;
307
- outline: none;
308
324
  border-radius: var(--md-sys-shape-corner-full);
309
325
  background-color: var(--md-comp-time-picker-clock-dial-color, var(--md-sys-color-surface-container-highest));
310
- list-style-type: none;
311
326
  touch-action: none;
312
327
 
313
328
  data.micl-timepicker__dial-inner {
@@ -331,7 +346,6 @@ dialog.micl-dialog.micl-timepicker {
331
346
  inline-size: var(--_target);
332
347
  inset-inline-start: var(--micl-a);
333
348
  inset-block-start: var(--micl-b);
334
- outline: none;
335
349
  border-radius: var(--md-sys-shape-corner-full);
336
350
  color: var(--md-comp-time-picker-clock-dial-unselected-label-text-color, var(--md-sys-color-on-surface));
337
351
  cursor: pointer;
@@ -357,7 +371,8 @@ dialog.micl-dialog.micl-timepicker {
357
371
  }
358
372
 
359
373
  .micl-timepicker__track {
360
- --micl-track-length: 92px;
374
+ // Stops just inside the selected handle, on either ring.
375
+ --micl-track-length: calc(var(--micl-track-radius) - 12px);
361
376
 
362
377
  position: relative;
363
378
  display: block;
@@ -376,14 +391,20 @@ dialog.micl-dialog.micl-timepicker {
376
391
  display: block;
377
392
  block-size: var(--_center-size);
378
393
  inline-size: var(--_center-size);
379
- inset-block-end: -3px;
380
- inset-inline-start: -3px;
394
+ inset-block-end: calc((var(--_center-size) - var(--_track-width)) / -2);
395
+ inset-inline-start: calc((var(--_center-size) - var(--_track-width)) / -2);
381
396
  border-radius: var(--md-sys-shape-corner-full);
382
397
  background-color: var(--md-comp-time-picker-clock-dial-selector-center-container-color, var(--md-sys-color-primary));
383
398
  }
384
399
  }
385
400
  }
386
401
 
402
+ // Only an open picker sweeps: the value the invoker seeds on beforetoggle lands
403
+ // before the dialog opens, so it snaps into place instead of spinning from noon.
404
+ .micl-timepicker[open] .micl-timepicker__dial {
405
+ transition: --micl-angle var(--_timepicker-motion-duration) motion.$md-sys-motion-easing-standard;
406
+ }
407
+
387
408
  .micl-timepicker__dial--hidden {
388
409
  display: none !important;
389
410
  }
package/dist/appbar.css CHANGED
@@ -1 +1 @@
1
- :root{--md-sys-shape-corner-medium: 12px}:root{--md-sys-layout-pane-spacer: 24px;--md-sys-layout-window-margin: 24px}@media(max-width: 599px){:root{--md-sys-layout-window-margin: 16px}}@media(min-width: 840px)and (max-width: 1199px){:root{--md-sys-layout-pane-fixed-width: 360px}}@media(min-width: 1200px){:root{--md-sys-layout-pane-fixed-width: 412px}}.micl-window{padding:env(safe-area-inset-top, 0px) calc(var(--md-sys-layout-window-margin) + env(safe-area-inset-right, 0px)) calc(var(--md-sys-layout-window-margin) + env(safe-area-inset-bottom, 0px)) calc(var(--md-sys-layout-window-margin) + env(safe-area-inset-left, 0px));margin:0;background-color:var(--md-sys-color-surface)}.micl-window .micl-panes .micl-appbar{margin-inline:calc(-1*var(--md-sys-layout-window-margin))}.micl-window:not(.micl-window--spatial):has(nav.micl-navigationrail) .micl-panes .micl-appbar{margin-inline-start:0}.micl-window.micl-window--spatial{--md-sys-layout-spatial-radius: calc(var(--md-sys-shape-corner-medium) + var(--md-sys-layout-window-margin));display:flex;padding-block:calc(2*var(--md-sys-layout-window-margin) + env(safe-area-inset-top, 0px)) calc(2*var(--md-sys-layout-window-margin) + env(safe-area-inset-bottom, 0px));gap:var(--md-sys-layout-window-margin)}.micl-window.micl-window--spatial .micl-navigationrail{display:flex;align-self:flex-start;block-size:inherit;min-block-size:inherit;margin:0;padding-block-end:var(--md-sys-navigationrail-top-space, 0px);border-radius:var(--md-sys-layout-spatial-radius)}.micl-window.micl-window--spatial .micl-panes{background:rgba(0,0,0,0)}.micl-window.micl-window--spatial .micl-pane{padding:0 var(--md-sys-layout-window-margin) var(--md-sys-layout-window-margin);border-radius:var(--md-sys-layout-spatial-radius);background-color:var(--md-sys-color-surface)}.micl-panes{box-sizing:border-box;display:flex;flex-direction:row;gap:var(--md-sys-comp-margin, 8px) var(--md-sys-layout-pane-spacer);background-color:inherit}.micl-panes.micl-panes--split>.micl-pane+.micl-pane{--_layout-safe-inline-end: env(safe-area-inset-right, 0px);box-sizing:border-box;flex:0 1 var(--_layout-stacked-pane-size, calc(50vw - var(--md-sys-layout-window-margin, 0px) - var(--_layout-safe-inline-end) - var(--md-sys-layout-pane-spacer) / 2))}.micl-panes.micl-panes--split>.micl-pane+.micl-pane:dir(rtl){--_layout-safe-inline-end: env(safe-area-inset-left, 0px)}.micl-panes.micl-panes--evenly .micl-pane{flex:1 1 0}.micl-pane{display:flex;flex-direction:column;flex:1 1 auto;min-inline-size:0;background-color:inherit}.micl-pane.micl-pane--fixed{flex:0 0 auto;box-sizing:border-box;inline-size:var(--_layout-stacked-pane-size, var(--md-sys-layout-pane-fixed-width, auto))}.micl-pane:has(>.micl-card-elevated,>.micl-card-filled,>.micl-card-outlined),.micl-pane>*:has(>.micl-card-elevated,>.micl-card-filled,>.micl-card-outlined){gap:var(--md-comp-card-margin, 8px)}.micl-pane>.micl-pane__columns{display:flex}.micl-pane>.micl-pane__columns:has(>.micl-pane__column>.micl-card-elevated,>.micl-pane__column>.micl-card-filled,>.micl-pane__column>.micl-card-outlined){gap:var(--md-comp-card-margin, 8px)}.micl-pane>.micl-pane__columns>.micl-pane__column{display:flex;flex-direction:column;flex:1 1 auto;min-inline-size:0;background-color:inherit}.micl-pane>.micl-pane__columns>.micl-pane__column:has(>.micl-card-elevated,>.micl-card-filled,>.micl-card-outlined){row-gap:var(--md-comp-card-margin, 8px)}.micl-pane>.micl-pane__columns>.micl-pane__column.micl-pane__column--fixed{flex:0 0 auto}.micl-pane>.micl-pane__columns.micl-pane__columns--evenly>.micl-pane__column{flex:1 1 0}@media(max-width: 599px){.micl-panes.micl-panes--stacked-to-medium{--_layout-stacked-pane-size: auto;flex-direction:column}.micl-pane.micl-pane--hidden-to-medium{display:none}.micl-pane__columns.micl-pane__columns--stacked-to-medium{flex-direction:column}}@media(max-width: 839px){.micl-panes.micl-panes--stacked-to-expanded{--_layout-stacked-pane-size: auto;flex-direction:column}.micl-pane.micl-pane--hidden-to-expanded{display:none}.micl-pane__columns.micl-pane__columns--stacked-to-expanded{flex-direction:column}}@media(max-width: 1199px){.micl-panes.micl-panes--stacked-to-large{--_layout-stacked-pane-size: auto;flex-direction:column}.micl-pane.micl-pane--hidden-to-large{display:none}.micl-pane__columns.micl-pane__columns--stacked-to-large{flex-direction:column}}@media(max-width: 1599px){.micl-panes.micl-panes--stacked-to-extralarge{--_layout-stacked-pane-size: auto;flex-direction:column}.micl-pane.micl-pane--hidden-to-extralarge{display:none}.micl-pane__columns.micl-pane__columns--stacked-to-extralarge{flex-direction:column}}:root{--md-ref-typeface-plain: Google Sans, system-ui, sans-serif;--md-ref-typeface-plain-narrow: 0;--md-ref-typeface-brand: Google Sans, system-ui, sans-serif;--md-ref-typeface-weight-regular: 400;--md-ref-typeface-weight-medium: 500;--md-ref-typeface-weight-bold: 700}body{--md-sys-elevation-level0: none}body{--md-sys-elevation-level2: rgb(from var(--md-sys-color-shadow) r g b/0.3) 0 1px 2px 0, rgb(from var(--md-sys-color-shadow) r g b/0.15) 0 2px 6px 2px}:root{--md-sys-shape-corner-none: 0px}:root{--md-sys-typescale-display-small-font: var(--md-ref-typeface-brand);--md-sys-typescale-display-small-size: 2.25rem;--md-sys-typescale-display-small-line-height: 2.75rem;--md-sys-typescale-display-small-weight: var(--md-ref-typeface-weight-regular);--md-sys-typescale-display-small-tracking: 0}:root{--md-sys-typescale-headline-medium-font: var(--md-ref-typeface-brand);--md-sys-typescale-headline-medium-size: 1.75rem;--md-sys-typescale-headline-medium-line-height: 2.25rem;--md-sys-typescale-headline-medium-weight: var(--md-ref-typeface-weight-regular);--md-sys-typescale-headline-medium-tracking: 0}:root{--md-sys-typescale-title-large-font: var(--md-ref-typeface-brand);--md-sys-typescale-title-large-size: 1.375rem;--md-sys-typescale-title-large-line-height: 1.75rem;--md-sys-typescale-title-large-weight: var(--md-ref-typeface-weight-regular);--md-sys-typescale-title-large-tracking: 0}:root{--md-sys-typescale-title-medium-font: var(--md-ref-typeface-plain);--md-sys-typescale-title-medium-size: 1rem;--md-sys-typescale-title-medium-line-height: 1.5rem;--md-sys-typescale-title-medium-weight: var(--md-ref-typeface-weight-medium);--md-sys-typescale-title-medium-tracking: 0.0125rem}:root{--md-sys-typescale-label-large-font: var(--md-ref-typeface-plain);--md-sys-typescale-label-large-size: 0.875rem;--md-sys-typescale-label-large-line-height: 1.25rem;--md-sys-typescale-label-large-weight: var(--md-ref-typeface-weight-medium);--md-sys-typescale-label-large-tracking: 0.00625rem}:root{--md-sys-typescale-label-medium-font: var(--md-ref-typeface-plain);--md-sys-typescale-label-medium-size: 0.75rem;--md-sys-typescale-label-medium-line-height: 1rem;--md-sys-typescale-label-medium-weight: var(--md-ref-typeface-weight-medium);--md-sys-typescale-label-medium-tracking: 0.03125rem}.micl-appbar{--_height: 64px;--_padding-block-start: 0px;--_padding-block-end: 0px;--_padding-inline: 0px;box-sizing:border-box;display:grid;grid-template-areas:"appbar-leading appbar-middle appbar-trailing" "appbar-bottom appbar-bottom appbar-bottom";grid-template-columns:0fr 1fr max-content;grid-template-rows:64px max-content;column-gap:4px;align-items:center;min-block-size:var(--_height);padding-block:var(--_padding-block-start) var(--_padding-block-end);padding-inline:var(--_padding-inline);border-start-start-radius:inherit;border-start-end-radius:inherit;background-color:var(--md-comp-app-bar-container-color, inherit);box-shadow:var(--md-sys-elevation-level0);z-index:8}.micl-appbar.micl-appbar--sticky{position:sticky;inset:unset;inset-block-start:env(safe-area-inset-top, 0px);inset-inline-start:0;animation:1ms linear alternate appbar-background;animation-timeline:scroll(root)}.micl-appbar .micl-appbar__leading{grid-area:appbar-leading;margin-inline-start:var(--md-sys-layout-window-margin)}.micl-appbar .micl-appbar__leading-icon{grid-area:appbar-leading;margin-inline-start:var(--md-sys-layout-window-margin);color:var(--md-comp-app-bar-leading-icon-color, var(--md-sys-color-on-surface))}.micl-appbar .micl-appbar__headline{display:flex;grid-area:appbar-middle;flex-direction:column;align-items:flex-start;margin:8px 0;border-radius:var(--md-sys-shape-corner-none);color:var(--md-comp-app-bar-title-color, var(--md-sys-color-on-surface))}.micl-appbar .micl-appbar__headline.micl-appbar__headline--center{align-items:center;text-align:center}.micl-appbar .micl-appbar__headline :is(h1,h2,h3,h4,h5,h6,.micl-heading){font:var(--md-sys-typescale-title-large-weight) var(--md-sys-typescale-title-large-size)/var(--md-sys-typescale-title-large-line-height) var(--md-sys-typescale-title-large-font);letter-spacing:var(--md-sys-typescale-title-large-tracking);margin:0}.micl-appbar .micl-appbar__headline .micl-appbar__subtitle{font:var(--md-sys-typescale-label-medium-weight) var(--md-sys-typescale-label-medium-size)/var(--md-sys-typescale-label-medium-line-height) var(--md-sys-typescale-label-medium-font);letter-spacing:var(--md-sys-typescale-label-medium-tracking);margin:0;color:var(--md-comp-app-bar-subtitle-color, var(--md-sys-color-on-surface-variant))}.micl-appbar .micl-appbar__trailing{grid-area:appbar-trailing;margin-inline-end:var(--md-sys-layout-window-margin)}.micl-appbar .micl-appbar__trailing-icon{grid-area:appbar-trailing;margin-inline-end:var(--md-sys-layout-window-margin);color:var(--md-comp-app-bar-trailing-icon-color, var(--md-sys-color-on-surface-variant))}.micl-appbar.micl-appbar--medium{--_height: 112px;--_padding-block-end: 12px;padding-inline-start:0}.micl-appbar.micl-appbar--medium .micl-appbar__headline{grid-area:appbar-bottom;margin:0;padding-inline-start:var(--md-sys-layout-window-margin)}.micl-appbar.micl-appbar--medium .micl-appbar__headline :is(h1,h2,h3,h4,h5,h6,.micl-heading){font:var(--md-sys-typescale-headline-medium-weight) var(--md-sys-typescale-headline-medium-size)/var(--md-sys-typescale-headline-medium-line-height) var(--md-sys-typescale-headline-medium-font);letter-spacing:var(--md-sys-typescale-headline-medium-tracking)}.micl-appbar.micl-appbar--medium:has(.micl-appbar__subtitle){--_height: 136px}.micl-appbar.micl-appbar--medium:has(.micl-appbar__subtitle) .micl-appbar__subtitle{font:var(--md-sys-typescale-label-large-weight) var(--md-sys-typescale-label-large-size)/var(--md-sys-typescale-label-large-line-height) var(--md-sys-typescale-label-large-font);letter-spacing:var(--md-sys-typescale-label-large-tracking)}.micl-appbar.micl-appbar--large{--_height: 120px;--_padding-block-end: 12px;padding-inline-start:0}.micl-appbar.micl-appbar--large .micl-appbar__headline{grid-area:appbar-bottom;margin:0;padding-inline-start:var(--md-sys-layout-window-margin)}.micl-appbar.micl-appbar--large .micl-appbar__headline :is(h1,h2,h3,h4,h5,h6,.micl-heading){font:var(--md-sys-typescale-display-small-weight) var(--md-sys-typescale-display-small-size)/var(--md-sys-typescale-display-small-line-height) var(--md-sys-typescale-display-small-font);letter-spacing:var(--md-sys-typescale-display-small-tracking)}.micl-appbar.micl-appbar--large:has(.micl-appbar__subtitle){--_height: 152px}.micl-appbar.micl-appbar--large:has(.micl-appbar__subtitle) .micl-appbar__subtitle{font:var(--md-sys-typescale-title-medium-weight) var(--md-sys-typescale-title-medium-size)/var(--md-sys-typescale-title-medium-line-height) var(--md-sys-typescale-title-medium-font);letter-spacing:var(--md-sys-typescale-title-medium-tracking)}.micl-panes:not(:has(>.micl-pane:nth-child(2))) .micl-appbar:not(.micl-appbar--not-sticky){position:sticky;inset:unset;inset-block-start:env(safe-area-inset-top, 0px);inset-inline-start:0;animation:1ms linear alternate appbar-background;animation-timeline:scroll(root)}@media(max-width: 600px){.micl-panes:has(>.micl-pane:nth-child(2)) .micl-appbar:not(.micl-appbar--not-sticky){position:sticky;inset:unset;inset-block-start:env(safe-area-inset-top, 0px);inset-inline-start:0;animation:1ms linear alternate appbar-background;animation-timeline:scroll(root)}}@media(min-width: 600px)and (max-width: 839px){.micl-panes:has(>.micl-pane:nth-child(2)).micl-panes--stacked-to-expanded .micl-appbar:not(.micl-appbar--not-sticky),.micl-panes:has(>.micl-pane:nth-child(2)).micl-panes--stacked-to-large .micl-appbar:not(.micl-appbar--not-sticky),.micl-panes:has(>.micl-pane:nth-child(2)).micl-panes--stacked-to-extralarge .micl-appbar:not(.micl-appbar--not-sticky){position:sticky;inset:unset;inset-block-start:env(safe-area-inset-top, 0px);inset-inline-start:0;animation:1ms linear alternate appbar-background;animation-timeline:scroll(root)}}@media(min-width: 840px)and (max-width: 1199px){.micl-panes:has(>.micl-pane:nth-child(2)).micl-panes--stacked-to-large .micl-appbar:not(.micl-appbar--not-sticky),.micl-panes:has(>.micl-pane:nth-child(2)).micl-panes--stacked-to-extralarge .micl-appbar:not(.micl-appbar--not-sticky){position:sticky;inset:unset;inset-block-start:env(safe-area-inset-top, 0px);inset-inline-start:0;animation:1ms linear alternate appbar-background;animation-timeline:scroll(root)}}@media(min-width: 1200px)and (max-width: 1599px){.micl-panes:has(>.micl-pane:nth-child(2)).micl-panes--stacked-to-extralarge .micl-appbar:not(.micl-appbar--not-sticky){position:sticky;inset:unset;inset-block-start:env(safe-area-inset-top, 0px);inset-inline-start:0;animation:1ms linear alternate appbar-background;animation-timeline:scroll(root)}}@keyframes appbar-background{0%{background-color:inherit;border-start-start-radius:inherit;border-start-end-radius:inherit}10%{background-color:var(--md-comp-app-bar-on-scroll-container-color, var(--md-sys-color-surface-container));box-shadow:var(--md-sys-elevation-level2)}50%{border-start-start-radius:0;border-start-end-radius:0}100%{background-color:var(--md-comp-app-bar-on-scroll-container-color, var(--md-sys-color-surface-container));box-shadow:var(--md-sys-elevation-level2);border-start-start-radius:0;border-start-end-radius:0}}
1
+ :root{--md-sys-layout-pane-spacer: 24px;--md-sys-layout-window-margin: 24px;--md-sys-card-margin: 8px}@media(max-width: 599px){:root{--md-sys-layout-window-margin: 16px}}@media(min-width: 840px)and (max-width: 1199px){:root{--md-sys-layout-pane-fixed-width: 360px}}@media(min-width: 1200px){:root{--md-sys-layout-pane-fixed-width: 412px}}:root{--md-ref-typeface-plain: Google Sans, system-ui, sans-serif;--md-ref-typeface-plain-narrow: 0;--md-ref-typeface-brand: Google Sans, system-ui, sans-serif;--md-ref-typeface-weight-regular: 400;--md-ref-typeface-weight-medium: 500;--md-ref-typeface-weight-bold: 700}body{--md-sys-elevation-level0: none}body{--md-sys-elevation-level2: rgb(from var(--md-sys-color-shadow) r g b/0.3) 0 1px 2px 0, rgb(from var(--md-sys-color-shadow) r g b/0.15) 0 2px 6px 2px}:root{--md-sys-shape-corner-none: 0px}:root{--md-sys-typescale-display-small-font: var(--md-ref-typeface-brand);--md-sys-typescale-display-small-size: 2.25rem;--md-sys-typescale-display-small-line-height: 2.75rem;--md-sys-typescale-display-small-weight: var(--md-ref-typeface-weight-regular);--md-sys-typescale-display-small-tracking: 0}:root{--md-sys-typescale-headline-medium-font: var(--md-ref-typeface-brand);--md-sys-typescale-headline-medium-size: 1.75rem;--md-sys-typescale-headline-medium-line-height: 2.25rem;--md-sys-typescale-headline-medium-weight: var(--md-ref-typeface-weight-regular);--md-sys-typescale-headline-medium-tracking: 0}:root{--md-sys-typescale-title-large-font: var(--md-ref-typeface-brand);--md-sys-typescale-title-large-size: 1.375rem;--md-sys-typescale-title-large-line-height: 1.75rem;--md-sys-typescale-title-large-weight: var(--md-ref-typeface-weight-regular);--md-sys-typescale-title-large-tracking: 0}:root{--md-sys-typescale-title-medium-font: var(--md-ref-typeface-plain);--md-sys-typescale-title-medium-size: 1rem;--md-sys-typescale-title-medium-line-height: 1.5rem;--md-sys-typescale-title-medium-weight: var(--md-ref-typeface-weight-medium);--md-sys-typescale-title-medium-tracking: 0.0125rem}:root{--md-sys-typescale-label-large-font: var(--md-ref-typeface-plain);--md-sys-typescale-label-large-size: 0.875rem;--md-sys-typescale-label-large-line-height: 1.25rem;--md-sys-typescale-label-large-weight: var(--md-ref-typeface-weight-medium);--md-sys-typescale-label-large-tracking: 0.00625rem}:root{--md-sys-typescale-label-medium-font: var(--md-ref-typeface-plain);--md-sys-typescale-label-medium-size: 0.75rem;--md-sys-typescale-label-medium-line-height: 1rem;--md-sys-typescale-label-medium-weight: var(--md-ref-typeface-weight-medium);--md-sys-typescale-label-medium-tracking: 0.03125rem}.micl-appbar{--_height: 64px;--_padding-block-start: 0px;--_padding-block-end: 0px;--_padding-inline: 0px;box-sizing:border-box;display:grid;grid-template-areas:"appbar-leading appbar-middle appbar-trailing" "appbar-bottom appbar-bottom appbar-bottom";grid-template-columns:0fr 1fr max-content;grid-template-rows:64px max-content;column-gap:4px;align-items:center;min-block-size:var(--_height);padding-block:var(--_padding-block-start) var(--_padding-block-end);padding-inline:var(--_padding-inline);border-start-start-radius:inherit;border-start-end-radius:inherit;background-color:var(--md-comp-app-bar-container-color, inherit);box-shadow:var(--md-sys-elevation-level0);z-index:8}.micl-appbar.micl-appbar--sticky{position:sticky;inset:unset;inset-block-start:env(safe-area-inset-top, 0px);inset-inline-start:0;animation:1ms linear alternate appbar-background;animation-timeline:scroll(root)}.micl-appbar .micl-appbar__leading{grid-area:appbar-leading;margin-inline-start:var(--md-sys-layout-window-margin)}.micl-appbar .micl-appbar__leading-icon{grid-area:appbar-leading;margin-inline-start:var(--md-sys-layout-window-margin);color:var(--md-comp-app-bar-leading-icon-color, var(--md-sys-color-on-surface))}.micl-appbar .micl-appbar__headline{display:flex;grid-area:appbar-middle;flex-direction:column;align-items:flex-start;margin:8px 0;border-radius:var(--md-sys-shape-corner-none);color:var(--md-comp-app-bar-title-color, var(--md-sys-color-on-surface))}.micl-appbar .micl-appbar__headline.micl-appbar__headline--center{align-items:center;text-align:center}.micl-appbar .micl-appbar__headline :is(h1,h2,h3,h4,h5,h6,.micl-heading){font:var(--md-sys-typescale-title-large-weight) var(--md-sys-typescale-title-large-size)/var(--md-sys-typescale-title-large-line-height) var(--md-sys-typescale-title-large-font);letter-spacing:var(--md-sys-typescale-title-large-tracking);margin:0}.micl-appbar .micl-appbar__headline .micl-appbar__subtitle{font:var(--md-sys-typescale-label-medium-weight) var(--md-sys-typescale-label-medium-size)/var(--md-sys-typescale-label-medium-line-height) var(--md-sys-typescale-label-medium-font);letter-spacing:var(--md-sys-typescale-label-medium-tracking);margin:0;color:var(--md-comp-app-bar-subtitle-color, var(--md-sys-color-on-surface-variant))}.micl-appbar .micl-appbar__trailing{grid-area:appbar-trailing;margin-inline-end:var(--md-sys-layout-window-margin)}.micl-appbar .micl-appbar__trailing-icon{grid-area:appbar-trailing;margin-inline-end:var(--md-sys-layout-window-margin);color:var(--md-comp-app-bar-trailing-icon-color, var(--md-sys-color-on-surface-variant))}.micl-appbar.micl-appbar--medium{--_height: 112px;--_padding-block-end: 12px;padding-inline-start:0}.micl-appbar.micl-appbar--medium .micl-appbar__headline{grid-area:appbar-bottom;margin:0;padding-inline-start:var(--md-sys-layout-window-margin)}.micl-appbar.micl-appbar--medium .micl-appbar__headline :is(h1,h2,h3,h4,h5,h6,.micl-heading){font:var(--md-sys-typescale-headline-medium-weight) var(--md-sys-typescale-headline-medium-size)/var(--md-sys-typescale-headline-medium-line-height) var(--md-sys-typescale-headline-medium-font);letter-spacing:var(--md-sys-typescale-headline-medium-tracking)}.micl-appbar.micl-appbar--medium:has(.micl-appbar__subtitle){--_height: 136px}.micl-appbar.micl-appbar--medium:has(.micl-appbar__subtitle) .micl-appbar__subtitle{font:var(--md-sys-typescale-label-large-weight) var(--md-sys-typescale-label-large-size)/var(--md-sys-typescale-label-large-line-height) var(--md-sys-typescale-label-large-font);letter-spacing:var(--md-sys-typescale-label-large-tracking)}.micl-appbar.micl-appbar--large{--_height: 120px;--_padding-block-end: 12px;padding-inline-start:0}.micl-appbar.micl-appbar--large .micl-appbar__headline{grid-area:appbar-bottom;margin:0;padding-inline-start:var(--md-sys-layout-window-margin)}.micl-appbar.micl-appbar--large .micl-appbar__headline :is(h1,h2,h3,h4,h5,h6,.micl-heading){font:var(--md-sys-typescale-display-small-weight) var(--md-sys-typescale-display-small-size)/var(--md-sys-typescale-display-small-line-height) var(--md-sys-typescale-display-small-font);letter-spacing:var(--md-sys-typescale-display-small-tracking)}.micl-appbar.micl-appbar--large:has(.micl-appbar__subtitle){--_height: 152px}.micl-appbar.micl-appbar--large:has(.micl-appbar__subtitle) .micl-appbar__subtitle{font:var(--md-sys-typescale-title-medium-weight) var(--md-sys-typescale-title-medium-size)/var(--md-sys-typescale-title-medium-line-height) var(--md-sys-typescale-title-medium-font);letter-spacing:var(--md-sys-typescale-title-medium-tracking)}.micl-panes:not(:has(>.micl-pane:nth-child(2))) .micl-appbar:not(.micl-appbar--not-sticky){position:sticky;inset:unset;inset-block-start:env(safe-area-inset-top, 0px);inset-inline-start:0;animation:1ms linear alternate appbar-background;animation-timeline:scroll(root)}@media(max-width: 600px){.micl-panes:has(>.micl-pane:nth-child(2)) .micl-appbar:not(.micl-appbar--not-sticky){position:sticky;inset:unset;inset-block-start:env(safe-area-inset-top, 0px);inset-inline-start:0;animation:1ms linear alternate appbar-background;animation-timeline:scroll(root)}}@media(min-width: 600px)and (max-width: 839px){.micl-panes:has(>.micl-pane:nth-child(2)).micl-panes--stacked-to-expanded .micl-appbar:not(.micl-appbar--not-sticky),.micl-panes:has(>.micl-pane:nth-child(2)).micl-panes--stacked-to-large .micl-appbar:not(.micl-appbar--not-sticky),.micl-panes:has(>.micl-pane:nth-child(2)).micl-panes--stacked-to-extralarge .micl-appbar:not(.micl-appbar--not-sticky){position:sticky;inset:unset;inset-block-start:env(safe-area-inset-top, 0px);inset-inline-start:0;animation:1ms linear alternate appbar-background;animation-timeline:scroll(root)}}@media(min-width: 840px)and (max-width: 1199px){.micl-panes:has(>.micl-pane:nth-child(2)).micl-panes--stacked-to-large .micl-appbar:not(.micl-appbar--not-sticky),.micl-panes:has(>.micl-pane:nth-child(2)).micl-panes--stacked-to-extralarge .micl-appbar:not(.micl-appbar--not-sticky){position:sticky;inset:unset;inset-block-start:env(safe-area-inset-top, 0px);inset-inline-start:0;animation:1ms linear alternate appbar-background;animation-timeline:scroll(root)}}@media(min-width: 1200px)and (max-width: 1599px){.micl-panes:has(>.micl-pane:nth-child(2)).micl-panes--stacked-to-extralarge .micl-appbar:not(.micl-appbar--not-sticky){position:sticky;inset:unset;inset-block-start:env(safe-area-inset-top, 0px);inset-inline-start:0;animation:1ms linear alternate appbar-background;animation-timeline:scroll(root)}}@keyframes appbar-background{0%{background-color:inherit;border-start-start-radius:inherit;border-start-end-radius:inherit}10%{background-color:var(--md-comp-app-bar-on-scroll-container-color, var(--md-sys-color-surface-container));box-shadow:var(--md-sys-elevation-level2)}50%{border-start-start-radius:0;border-start-end-radius:0}100%{background-color:var(--md-comp-app-bar-on-scroll-container-color, var(--md-sys-color-surface-container));box-shadow:var(--md-sys-elevation-level2);border-start-start-radius:0;border-start-end-radius:0}}
package/dist/badge.css CHANGED
@@ -1 +1 @@
1
- :root{--md-ref-typeface-plain: Google Sans, system-ui, sans-serif;--md-ref-typeface-plain-narrow: 0;--md-ref-typeface-brand: Google Sans, system-ui, sans-serif;--md-ref-typeface-weight-regular: 400;--md-ref-typeface-weight-medium: 500;--md-ref-typeface-weight-bold: 700}:root{--md-sys-typescale-label-small-font: var(--md-ref-typeface-plain);--md-sys-typescale-label-small-size: 0.6875rem;--md-sys-typescale-label-small-line-height: 1rem;--md-sys-typescale-label-small-weight: var(--md-ref-typeface-weight-medium);--md-sys-typescale-label-small-tracking: 0.03125rem}.micl-badge{--_size: var(--md-comp-badge-size, 6px);--_large-size: var(--md-comp-badge-large-size, 16px);--_dx: var(--md-comp-badge-inline-offset, 0px);--_dy: var(--md-comp-badge-block-offset, 0px);box-sizing:border-box;position:fixed;inset:0;margin:0;overflow-x:hidden;background-color:var(--md-comp-badge-color, var(--md-sys-color-error));color:var(--md-comp-badge-large-label-text-color, var(--md-sys-color-on-error))}.micl-badge.micl-badge--small{inline-size:var(--_size);block-size:var(--_size);inset-block-start:calc(anchor(start) + var(--_dy));inset-inline-start:calc(anchor(end) - var(--_size) + var(--_dx));padding:0;border-radius:calc(var(--_size)/2)}.micl-badge:not(.micl-badge--small){font:var(--md-sys-typescale-label-small-weight) var(--md-sys-typescale-label-small-size)/var(--md-sys-typescale-label-small-line-height) var(--md-sys-typescale-label-small-font);letter-spacing:var(--md-sys-typescale-label-small-tracking);inline-size:fit-content;max-inline-size:34px;min-inline-size:var(--_large-size);block-size:var(--_large-size);inset-block-start:calc(anchor(start) - (var(--_large-size) - 14px) + var(--_dy));inset-inline-start:calc(anchor(end) - 12px + var(--_dx));padding-inline:var(--md-comp-badge-large-padding, 4px);border-radius:calc(var(--_large-size)/2)}@supports not (top: anchor(bottom)){.micl-badge{position:absolute;inset:0 !important;margin-block:calc(12px + var(--_dy)) auto}.micl-badge.micl-badge--small{margin-inline-start:calc(var(--md-sys-icon-size, 24px) - var(--_size) - var(--_dx))}.micl-badge:not(.micl-badge--small){margin-inline-start:calc(12px - var(--_dx))}}
1
+ :root{--md-ref-typeface-plain: Google Sans, system-ui, sans-serif;--md-ref-typeface-plain-narrow: 0;--md-ref-typeface-brand: Google Sans, system-ui, sans-serif;--md-ref-typeface-weight-regular: 400;--md-ref-typeface-weight-medium: 500;--md-ref-typeface-weight-bold: 700}:root{--md-sys-typescale-label-small-font: var(--md-ref-typeface-plain);--md-sys-typescale-label-small-size: 0.6875rem;--md-sys-typescale-label-small-line-height: 1rem;--md-sys-typescale-label-small-weight: var(--md-ref-typeface-weight-medium);--md-sys-typescale-label-small-tracking: 0.03125rem}.micl-badge{--_size: var(--md-comp-badge-size, 6px);--_large-size: var(--md-comp-badge-large-size, 16px);--_icon: var(--md-sys-icon-size, 24px);--_dx: var(--md-comp-badge-inline-offset, 0px);--_dy: var(--md-comp-badge-block-offset, 0px);box-sizing:border-box;position:absolute;inset:auto;margin:0;overflow:clip;background-color:var(--md-comp-badge-color, var(--md-sys-color-error));color:var(--md-comp-badge-large-label-text-color, var(--md-sys-color-on-error))}.micl-badge.micl-badge--small{inline-size:var(--_size);block-size:var(--_size);inset-block-start:calc(anchor(center) - var(--_icon)/2 + var(--_dy));inset-inline-start:calc(anchor(center) + var(--_icon)/2 - var(--_size) + var(--_dx));padding:0;border-radius:calc(var(--_size)/2)}.micl-badge:not(.micl-badge--small){font:var(--md-sys-typescale-label-small-weight) var(--md-sys-typescale-label-small-size)/var(--md-sys-typescale-label-small-line-height) var(--md-sys-typescale-label-small-font);letter-spacing:var(--md-sys-typescale-label-small-tracking);inline-size:fit-content;max-inline-size:34px;min-inline-size:var(--_large-size);block-size:var(--_large-size);inset-block-start:calc(anchor(center) - var(--_icon)/2 - (var(--_large-size) - 14px) + var(--_dy));inset-inline-start:calc(anchor(center) + var(--_icon)/2 - 12px + var(--_dx));padding-inline:var(--md-comp-badge-large-padding, 4px);border-radius:calc(var(--_large-size)/2)}.micl-badge.micl-badge--trailing{position:static;display:inline-flex;align-items:center;justify-content:center;align-self:center;margin-inline-start:var(--md-comp-badge-trailing-space, 4px)}
@@ -1 +1 @@
1
- body{--md-sys-elevation-level1: rgb(from var(--md-sys-color-shadow) r g b/0.3) 0 1px 2px 0, rgb(from var(--md-sys-color-shadow) r g b/0.15) 0 1px 3px 1px}:root{--md-sys-shape-corner-extra-large-top: 28px 28px 0 0}:root{--md-sys-shape-corner-extra-large: 28px}:root{--md-sys-state-focus-indicator-thickness: 3px}:root{--md-sys-state-focus-indicator-outer-offset: 2px}:root{--md-sys-state-backdrop-opacity: 32%}dialog.micl-bottomsheet{--md-comp-bottomsheet-height: max-content;--md-comp-bottomsheet-margin: 56px;--md-comp-bottomsheet-margin-top: 72px;--md-comp-bottomsheet-padding: 24px;--md-comp-bottomsheet-drag-handle-width: 32px;--md-comp-bottomsheet-drag-handle-height: 4px;--md-comp-bottomsheet-motion-spatial: cubic-bezier(0.39, 1.29, 0.35, 0.98);--md-comp-bottomsheet-motion-duration: 650ms;--md-comp-bottomsheet-motion-duration-reverse: 500ms;--micl-duration: var(--md-comp-bottomsheet-motion-duration-reverse);--micl-easing: cubic-bezier(0.3, 0, 0.8, 0.15);box-sizing:border-box;position:fixed;inset-block:auto 0;block-size:0;max-block-size:50vh;inline-size:100%}dialog.micl-bottomsheet[data-miclfitheight]{max-block-size:calc(100vh - var(--md-comp-bottomsheet-margin-top))}dialog.micl-bottomsheet{min-inline-size:100%;margin:var(--md-comp-bottomsheet-margin-top) 0 0 0;padding:0;border:none;border-radius:var(--md-comp-bottomsheet-container-shape, var(--md-sys-shape-corner-extra-large-top));background-color:var(--md-comp-bottomsheet-container-color, var(--md-sys-color-surface-container-low));box-shadow:var(--md-comp-bottomsheet-container-elevation, var(--md-sys-elevation-level1));opacity:0;overflow-y:hidden;interpolate-size:allow-keywords}dialog.micl-bottomsheet:not(.micl-bottomsheet--resizing){transition:opacity var(--micl-duration) var(--micl-easing),block-size var(--micl-duration) var(--md-comp-bottomsheet-motion-spatial),overlay var(--micl-duration) linear allow-discrete,display var(--micl-duration) linear allow-discrete}dialog.micl-bottomsheet .micl-bottomsheet__headline{box-sizing:border-box;display:flex;flex-shrink:0;align-items:center;inline-size:100%;block-size:var(--md-sys-target-size, 48px);justify-content:center;cursor:grab;touch-action:none}dialog.micl-bottomsheet .micl-bottomsheet__headline .micl-bottomsheet__draghandle{box-sizing:content-box;inline-size:var(--md-comp-bottomsheet-drag-handle-width);block-size:var(--md-comp-bottomsheet-drag-handle-height);padding:16px calc((var(--md-sys-target-size, 48px) - var(--md-comp-bottomsheet-drag-handle-width))/2);border:none;border-radius:var(--md-sys-shape-corner-extra-large);background:none;cursor:pointer}dialog.micl-bottomsheet .micl-bottomsheet__headline .micl-bottomsheet__draghandle::before{content:"";display:block;block-size:100%;border-radius:calc(var(--md-comp-bottomsheet-drag-handle-height)/2);background-color:var(--md-comp-bottomsheet-drag-handle-color, var(--md-sys-color-on-surface-variant))}dialog.micl-bottomsheet .micl-bottomsheet__headline .micl-bottomsheet__draghandle:focus-visible{outline:var(--md-sys-state-focus-indicator-thickness, 3px) solid var(--md-comp-bottomsheet-focus-indicator-color, var(--md-sys-color-secondary));outline-offset:var(--md-sys-state-focus-indicator-outer-offset, 2px)}dialog.micl-bottomsheet.micl-bottomsheet--resizing .micl-bottomsheet__headline{cursor:grabbing}dialog.micl-bottomsheet .micl-bottomsheet__content{flex:1 1 auto;padding:0 var(--md-comp-bottomsheet-padding) var(--md-comp-bottomsheet-padding) var(--md-comp-bottomsheet-padding);overflow:hidden auto}dialog.micl-bottomsheet::backdrop{background-color:rgba(0,0,0,0);transition:overlay var(--micl-duration) linear allow-discrete,display var(--micl-duration) linear allow-discrete,background-color var(--micl-duration) linear}dialog.micl-bottomsheet:popover-open,dialog.micl-bottomsheet[open]{--micl-duration: var(--md-comp-bottomsheet-motion-duration);--micl-easing: cubic-bezier(0.05, 0.7, 0.1, 1);display:flex;flex-direction:column;block-size:var(--md-comp-bottomsheet-height);opacity:100%}@starting-style{dialog.micl-bottomsheet:popover-open,dialog.micl-bottomsheet[open]{block-size:0;opacity:0}}dialog.micl-bottomsheet[open]::backdrop{background-color:rgba(0, 0, 0, var(--md-sys-state-backdrop-opacity, 32%))}@starting-style{dialog.micl-bottomsheet[open]::backdrop{background-color:rgba(0,0,0,0)}}@media(min-width: 641px){dialog.micl-bottomsheet{inline-size:min(100vw - 2*var(--md-comp-bottomsheet-margin),640px);max-inline-size:640px;min-inline-size:min(100vw - 2*var(--md-comp-bottomsheet-margin),640px);inset-inline-start:calc((100vw - min(100vw - 2*var(--md-comp-bottomsheet-margin),640px))/2 - var(--md-comp-bottomsheet-margin));margin:var(--md-comp-bottomsheet-margin);margin-block-end:0}}
1
+ :root{--md-sys-layout-pane-spacer: 24px;--md-sys-layout-window-margin: 24px;--md-sys-card-margin: 8px}@media(max-width: 599px){:root{--md-sys-layout-window-margin: 16px}}@media(min-width: 840px)and (max-width: 1199px){:root{--md-sys-layout-pane-fixed-width: 360px}}@media(min-width: 1200px){:root{--md-sys-layout-pane-fixed-width: 412px}}body{--md-sys-elevation-level1: rgb(from var(--md-sys-color-shadow) r g b/0.3) 0 1px 2px 0, rgb(from var(--md-sys-color-shadow) r g b/0.15) 0 1px 3px 1px}:root{--md-sys-shape-corner-extra-large-top: 28px 28px 0 0}:root{--md-sys-shape-corner-extra-large: 28px}:root{--md-sys-state-focus-indicator-thickness: 3px}:root{--md-sys-state-focus-indicator-outer-offset: 2px}:root{--md-sys-state-backdrop-opacity: 32%}@property --micl-bottomsheet-scroll{syntax:"<custom-ident>";inherits:true;initial-value:hidden}dialog.micl-bottomsheet{--_height: var(--md-comp-bottomsheet-height, max-content);--_margin: var(--md-comp-bottomsheet-margin, 56px);--_margin-top: var(--md-comp-bottomsheet-margin-top, 72px);--_padding: var(--md-comp-bottomsheet-padding, 24px);--_drag-handle-width: var(--md-comp-bottomsheet-drag-handle-width, 32px);--_drag-handle-height: var(--md-comp-bottomsheet-drag-handle-height, 4px);--_motion-spatial: var(--md-comp-bottomsheet-motion-spatial, cubic-bezier(0.39, 1.29, 0.35, 0.98));--_motion-duration: var(--md-comp-bottomsheet-motion-duration, 650ms);--_motion-duration-reverse: var(--md-comp-bottomsheet-motion-duration-reverse, 500ms);--micl-duration: var(--_motion-duration-reverse);--micl-easing: cubic-bezier(0.3, 0, 0.8, 0.15);--micl-bottomsheet-scroll: hidden;--_settle-delay: 0s;box-sizing:border-box;position:fixed;inset-block:auto 0;inset-inline:0;block-size:0;max-block-size:50dvb;inline-size:100%;margin:0;padding:0;border:none;border-radius:var(--md-comp-bottomsheet-container-shape, var(--md-sys-shape-corner-extra-large-top));background-color:var(--md-comp-bottomsheet-container-color, var(--md-sys-color-surface-container-low));box-shadow:var(--md-comp-bottomsheet-container-elevation, var(--md-sys-elevation-level1));opacity:0;overflow:hidden;interpolate-size:allow-keywords}dialog.micl-bottomsheet[data-miclfitheight]{max-block-size:calc(100dvb - var(--_margin-top))}dialog.micl-bottomsheet:not(.micl-bottomsheet--resizing){transition:opacity var(--micl-duration) var(--micl-easing),block-size var(--micl-duration) var(--_motion-spatial),overlay var(--micl-duration) linear allow-discrete,display var(--micl-duration) linear allow-discrete,--micl-bottomsheet-scroll 0s var(--_settle-delay) allow-discrete}dialog.micl-bottomsheet .micl-bottomsheet__headline{box-sizing:border-box;display:flex;flex-shrink:0;align-items:center;inline-size:100%;block-size:var(--md-sys-state-target-size, 48px);justify-content:center;cursor:grab;touch-action:none;-webkit-tap-highlight-color:rgba(0,0,0,0)}dialog.micl-bottomsheet .micl-bottomsheet__headline .micl-bottomsheet__draghandle{box-sizing:content-box;inline-size:var(--_drag-handle-width);block-size:var(--_drag-handle-height);padding:16px calc((var(--md-sys-state-target-size, 48px) - var(--_drag-handle-width))/2);border:none;border-radius:var(--md-sys-shape-corner-extra-large);background:none;cursor:pointer}dialog.micl-bottomsheet .micl-bottomsheet__headline .micl-bottomsheet__draghandle::before{content:"";display:block;block-size:100%;border-radius:calc(var(--_drag-handle-height)/2);background-color:var(--md-comp-bottomsheet-drag-handle-color, var(--md-sys-color-on-surface-variant))}dialog.micl-bottomsheet .micl-bottomsheet__headline .micl-bottomsheet__draghandle:focus-visible{outline:var(--md-sys-state-focus-indicator-thickness, 3px) solid var(--md-comp-bottomsheet-focus-indicator-color, var(--md-sys-color-secondary));outline-offset:var(--md-sys-state-focus-indicator-outer-offset, 2px)}dialog.micl-bottomsheet .micl-bottomsheet__content{flex:1 1 auto;padding:0 var(--_padding) var(--_padding) var(--_padding);overflow:hidden var(--micl-bottomsheet-scroll)}dialog.micl-bottomsheet .micl-bottomsheet__content:first-child{padding-block-start:var(--_padding)}dialog.micl-bottomsheet::backdrop{background-color:rgba(0,0,0,0);transition:overlay var(--micl-duration) linear allow-discrete,display var(--micl-duration) linear allow-discrete,background-color var(--micl-duration) linear}dialog.micl-bottomsheet:popover-open,dialog.micl-bottomsheet[open]{--micl-duration: var(--_motion-duration);--micl-easing: cubic-bezier(0.05, 0.7, 0.1, 1);--micl-bottomsheet-scroll: auto;--_settle-delay: var(--_motion-duration);display:flex;flex-direction:column;block-size:var(--_height);opacity:1}@starting-style{dialog.micl-bottomsheet:popover-open,dialog.micl-bottomsheet[open]{block-size:0;opacity:0;--micl-bottomsheet-scroll: hidden}}dialog.micl-bottomsheet[open]::backdrop{background-color:rgba(0, 0, 0, var(--md-sys-state-backdrop-opacity, 32%))}@starting-style{dialog.micl-bottomsheet[open]::backdrop{background-color:rgba(0,0,0,0)}}dialog.micl-bottomsheet.micl-bottomsheet--resizing{--micl-bottomsheet-scroll: hidden}dialog.micl-bottomsheet.micl-bottomsheet--resizing .micl-bottomsheet__headline{cursor:grabbing}@media(prefers-reduced-motion: reduce){dialog.micl-bottomsheet{--_motion-duration: 0ms;--_motion-duration-reverse: 0ms}}@media(min-width: 600px){dialog.micl-bottomsheet{inline-size:min(100% - 2*var(--_margin),640px);margin-inline:auto}}
@@ -1 +1 @@
1
- !function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports.micl=t():e.micl=t()}(self,()=>(()=>{"use strict";var e={56(e,t,n){const o=globalThis.__miclRegistry??={map:{},rippled:new WeakSet,activated:!1},i=()=>Object.keys(o.map).join(","),r=e=>Object.entries(o.map).find(([t,{type:n}])=>e.matches(t)&&e instanceof n)?.[1],c=e=>{const t=r(e);t&&"function"==typeof t.component.initialize&&t.component.initialize(e)},l=e=>{const t=r(e);t&&"function"==typeof t.component.cleanup&&t.component.cleanup(e)},s=e=>{const t=i();if(!t)return;const n=e.target.closest(t);if(!(n instanceof HTMLElement))return;const o=r(n),c=e.type;o&&"function"==typeof o.component[c]&&o.component[c]?.(e)},a=()=>{o.activated||(o.activated=!0,new MutationObserver(e=>{e.forEach(e=>{"childList"===e.type&&(e.addedNodes.forEach(e=>{if(e instanceof HTMLElement){const t=i();t&&e.matches(t)&&c(e),t&&e.querySelectorAll(t).forEach(c)}}),e.removedNodes.forEach(e=>{if(e instanceof HTMLElement){const t=i();t&&e.matches(t)&&l(e),(e=>{const t=i();t&&e.querySelectorAll(t).forEach(l)})(e)}}))})}).observe(document.body,{childList:!0,subtree:!0}),(e=>{const t=i();t&&e.querySelectorAll(t).forEach(c),e.querySelectorAll('[class*="micl-"], [class*="micl-"] > summary').forEach(e=>{o.rippled.has(e)||"1"===window.getComputedStyle(e).getPropertyValue("--micl-ripple")&&(e.addEventListener("pointerdown",t=>{if(t.currentTarget.classList.contains("micl-card--nonactionable"))return;t.stopPropagation();const n=e.getBoundingClientRect();e.style.setProperty("--micl-x",(t.clientX-n.left)/n.width*100+"%"),e.style.setProperty("--micl-y",(t.clientY-n.top)/n.height*100+"%"),e.classList.remove("micl-rippling"),e.offsetWidth,e.classList.add("micl-rippling");const o=t=>{"micl-ripple"===t.animationName&&(e.classList.remove("micl-rippling"),e.style.removeProperty("--micl-x"),e.style.removeProperty("--micl-y"),e.removeEventListener("animationend",o))};e.addEventListener("animationend",o)}),o.rippled.add(e))}),document.documentElement.style.setProperty("--md-sys-scrollbar-thumb-color",window.getComputedStyle(document.body).getPropertyValue("--md-sys-color-outline").trim())})(document),document.addEventListener("change",s),document.addEventListener("input",s),document.addEventListener("keydown",s))},d=()=>{document.removeEventListener("DOMContentLoaded",d),a()};"loading"!==document.readyState?a():document.addEventListener("DOMContentLoaded",d),n.d(t,["register",0,(e,t,n)=>(o.map[e]={component:t,type:n},o.activated&&document.querySelectorAll(e).forEach(c),t)])}};const t={};function n(o){const i=t[o];if(void 0!==i)return i.exports;const r=t[o]={exports:{}};return e[o](r,r.exports,n),r.exports}n.d=(e,t)=>{if(Array.isArray(t))for(var o=0;o<t.length;){var i=t[o++],r=t[o++];n.o(e,i)?0===r&&o++:0===r?Object.defineProperty(e,i,{enumerable:!0,value:t[o++]}):Object.defineProperty(e,i,{enumerable:!0,get:r})}else for(var i in t)n.o(t,i)&&!n.o(e,i)&&Object.defineProperty(e,i,{enumerable:!0,get:t[i]})},n.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),n.r=e=>{Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})};let o={};n.r(o);var i=n(56);const r="dialog.micl-bottomsheet",c=e=>{let t=parseInt(e.dataset.miclfitheight||"0",10);t<1&&(t=e.getBoundingClientRect().height,e.dataset.miclfitheight=`${t}`);let n=parseInt(window.getComputedStyle(e).getPropertyValue("max-block-size"),10),o=(e.dataset.miclsnapheights||"").split(",").map(Number).filter(e=>!isNaN(e)&&e>=0&&e<=n);return[...new Set(o.concat([Math.min(t,n)]).sort((e,t)=>e-t))]},l=(e,t)=>{let n=e.getBoundingClientRect().height,o=c(e);return o.filter(e=>e>n+4)[0]||o[t?o.length-1:0]},s=(e,t)=>{t<1?(delete e.dataset.miclfitheight,e.style.removeProperty("--md-comp-bottomsheet-height"),e[e.popover?"hidePopover":"close"]()):e.style.setProperty("--md-comp-bottomsheet-height",`${t}px`)},a=(0,i.register)(r,{initialize:e=>{if(!e.matches(r)||e.dataset.miclinitialized)return;e.dataset.miclinitialized="1";const t=e.querySelector(".micl-bottomsheet__headline");if(!t)return;const n=t.querySelector(".micl-bottomsheet__draghandle");let o,i,a=!1,d=!1,m=!1;function p(t){const n=t.clientY;if(a&&Math.abs(o-n)>4&&(a=!1,d=!0,e.classList.add("micl-bottomsheet--resizing")),d){const t=Math.max(1,i+o-n),r=c(e).find(e=>e>0&&Math.abs(e-t)<=12);s(e,r||t)}}function u(t){a=!1,e.classList.remove("micl-bottomsheet--resizing"),document.removeEventListener("pointermove",p),document.removeEventListener("pointerup",u),d&&(d=!1,m=!0,t.clientY<o?s(e,l(e,!0)):e.getBoundingClientRect().height<48?s(e,0):s(e,(e=>{let t=e.getBoundingClientRect().height,n=c(e).filter(e=>e>0),o=n.filter(e=>e<t-4);return o[o.length-1]||n[0]})(e)))}n?.addEventListener("click",()=>{m||s(e,l(e,!1))}),t.addEventListener("pointerdown",r=>{r.target!==t&&r.target!==n||(a=!0,m=!1,r.preventDefault(),o=r.clientY,i=e.getBoundingClientRect().height,document.addEventListener("pointermove",p),document.addEventListener("pointerup",u))})},cleanup:e=>{e.matches(r)&&(e.classList.remove("micl-bottomsheet--resizing"),delete e.dataset.miclinitialized,delete e.dataset.miclfitheight)}},HTMLDialogElement);return n.d(o,["bottomsheetSelector",0,r,"default",0,a]),o})());
1
+ !function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports.micl=t():e.micl=t()}(self,()=>(()=>{"use strict";var e={56(e,t,o){const n=globalThis.__miclRegistry??={map:{},rippled:new WeakSet,activated:!1},i=()=>Object.keys(n.map).join(","),r=e=>Object.entries(n.map).find(([t,{type:o}])=>e.matches(t)&&e instanceof o)?.[1],c=e=>{const t=r(e);t&&"function"==typeof t.component.initialize&&t.component.initialize(e)},a=e=>{const t=r(e);t&&"function"==typeof t.component.cleanup&&t.component.cleanup(e)},s=e=>{const t=i();if(!t)return;const o=e.target.closest(t);if(!(o instanceof HTMLElement))return;const n=r(o),c=e.type;n&&"function"==typeof n.component[c]&&n.component[c]?.(e)},l=()=>{n.activated||(n.activated=!0,new MutationObserver(e=>{e.forEach(e=>{"childList"===e.type&&(e.addedNodes.forEach(e=>{if(e instanceof HTMLElement){const t=i();t&&e.matches(t)&&c(e),t&&e.querySelectorAll(t).forEach(c)}}),e.removedNodes.forEach(e=>{if(e instanceof HTMLElement){const t=i();t&&e.matches(t)&&a(e),(e=>{const t=i();t&&e.querySelectorAll(t).forEach(a)})(e)}}))})}).observe(document.body,{childList:!0,subtree:!0}),(e=>{const t=i();t&&e.querySelectorAll(t).forEach(c),e.querySelectorAll('[class*="micl-"], [class*="micl-"] > summary').forEach(e=>{n.rippled.has(e)||"1"===window.getComputedStyle(e).getPropertyValue("--micl-ripple")&&(e.addEventListener("pointerdown",t=>{if(t.currentTarget.classList.contains("micl-card--nonactionable"))return;t.stopPropagation();const o=e.getBoundingClientRect();e.style.setProperty("--micl-x",(t.clientX-o.left)/o.width*100+"%"),e.style.setProperty("--micl-y",(t.clientY-o.top)/o.height*100+"%"),e.classList.remove("micl-rippling"),e.offsetWidth,e.classList.add("micl-rippling");const n=t=>{"micl-ripple"===t.animationName&&(e.classList.remove("micl-rippling"),e.style.removeProperty("--micl-x"),e.style.removeProperty("--micl-y"),e.removeEventListener("animationend",n))};e.addEventListener("animationend",n)}),n.rippled.add(e))}),document.documentElement.style.setProperty("--md-sys-scrollbar-thumb-color",window.getComputedStyle(document.body).getPropertyValue("--md-sys-color-outline").trim())})(document),document.addEventListener("change",s),document.addEventListener("input",s),document.addEventListener("keydown",s))},d=()=>{document.removeEventListener("DOMContentLoaded",d),l()};"loading"!==document.readyState?l():document.addEventListener("DOMContentLoaded",d),o.d(t,["register",0,(e,t,o)=>(n.map[e]={component:t,type:o},n.activated&&document.querySelectorAll(e).forEach(c),t)])}};const t={};function o(n){const i=t[n];if(void 0!==i)return i.exports;const r=t[n]={exports:{}};return e[n](r,r.exports,o),r.exports}o.d=(e,t)=>{if(Array.isArray(t))for(var n=0;n<t.length;){var i=t[n++],r=t[n++];o.o(e,i)?0===r&&n++:0===r?Object.defineProperty(e,i,{enumerable:!0,value:t[n++]}):Object.defineProperty(e,i,{enumerable:!0,get:r})}else for(var i in t)o.o(t,i)&&!o.o(e,i)&&Object.defineProperty(e,i,{enumerable:!0,get:t[i]})},o.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),o.r=e=>{Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})};let n={};o.r(n);var i=o(56);const r="dialog.micl-bottomsheet",c=new WeakMap,a=e=>{delete e.dataset.miclfitheight,e.style.removeProperty("--md-comp-bottomsheet-height")},s=e=>(e.getAnimations().forEach(e=>e.finish()),e.getBoundingClientRect().height),l=e=>{let t=parseInt(e.dataset.miclfitheight||"0",10);t<1&&(t=s(e),e.dataset.miclfitheight=`${t}`);let o=parseInt(window.getComputedStyle(e).getPropertyValue("max-block-size"),10)||1/0,n=(e.dataset.miclsnapheights||"").split(",").map(Number).filter(e=>!isNaN(e)&&e>=0&&e<=o);return[...new Set(n.concat([Math.min(t,o)]).sort((e,t)=>e-t))]},d=(e,t)=>{t<1?(a(e),e[e.popover?"hidePopover":"close"]()):e.style.setProperty("--md-comp-bottomsheet-height",`${t}px`)},m=(0,i.register)(r,{initialize:e=>{if(!e.matches(r)||e.dataset.miclinitialized)return;const t=e.querySelector(".micl-bottomsheet__headline");if(!t)return;e.dataset.miclinitialized="1";const o=t.querySelector(".micl-bottomsheet__draghandle"),n=new AbortController,i={signal:n.signal};c.set(e,n);let m,p,u=!1,f=!1,y=!1;function h(t){const o=t.clientY;if(u&&Math.abs(m-o)>4&&(u=!1,f=!0,e.classList.add("micl-bottomsheet--resizing")),f){const t=Math.max(1,p+m-o),n=l(e).find(e=>e>0&&Math.abs(e-t)<=12);d(e,n||t)}}function g(t){const o=f;if(u=!1,f=!1,e.classList.remove("micl-bottomsheet--resizing"),document.removeEventListener("pointermove",h),document.removeEventListener("pointerup",g),document.removeEventListener("pointercancel",g),o){y=!0;const o=e.getBoundingClientRect().height,n=o<48&&"pointerup"===t.type;d(e,n?0:((e,t)=>{const o=l(e).filter(e=>e>0);return o.reduce((e,o)=>Math.abs(o-t)<Math.abs(e-t)?o:e,o[0]??t)})(e,o))}}e.addEventListener("beforetoggle",t=>{"open"===t.newState&&a(e)},i),o?.addEventListener("click",t=>{y&&t.detail||d(e,(e=>{let t=s(e),o=l(e);return o.filter(e=>e>t+4)[0]||o[0]})(e))},i),t.addEventListener("pointerdown",n=>{n.target!==t&&n.target!==o||(u=!0,y=!1,n.preventDefault(),m=n.clientY,p=s(e),document.addEventListener("pointermove",h,i),document.addEventListener("pointerup",g,i),document.addEventListener("pointercancel",g,i))},i)},cleanup:e=>{const t=c.get(e);t&&(t.abort(),c.delete(e)),e.classList.remove("micl-bottomsheet--resizing"),a(e),delete e.dataset.miclinitialized}},HTMLDialogElement);return o.d(n,["bottomsheetSelector",0,r,"default",0,m]),n})());