material 3.3.4 → 3.4.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -2
- package/dist/components/badge/api.js +7 -5
- package/dist/components/badge/config.js +3 -15
- package/dist/components/badge/features.js +6 -10
- package/dist/components/chips/chip/chip.js +3 -0
- package/dist/components/chips/types.d.ts +1 -0
- package/dist/components/dialog/api.js +109 -109
- package/dist/components/dialog/config.js +0 -52
- package/dist/components/dialog/dialog.js +2 -2
- package/dist/components/dialog/features.js +113 -65
- package/dist/components/dialog/types.d.ts +2 -3
- package/dist/components/search/features/input.js +1 -1
- package/dist/components/search/features/structure.js +1 -1
- package/dist/components/search/types.d.ts +1 -0
- package/dist/components/select/features.js +2 -0
- package/dist/components/select/types.d.ts +1 -0
- package/dist/components/slider/features/dom.js +27 -9
- package/dist/components/tabs/tab.js +2 -1
- package/dist/components/text-field/config.js +21 -1
- package/dist/components/text-field/types.d.ts +1 -0
- package/dist/core/compose/features/badge.js +1 -1
- package/dist/core/compose/features/textinput.d.ts +1 -0
- package/dist/core/compose/features/textinput.js +1 -0
- package/dist/core/dom/focus.js +2 -2
- package/dist/elements/css/dialog.css +1 -1
- package/dist/elements/css/dialog.js +1 -1
- package/dist/elements/css/switch.css +1 -1
- package/dist/elements/css/switch.js +1 -1
- package/dist/elements/preupgrade/badge.css +1 -1
- package/dist/elements/preupgrade/bottom-app-bar.css +1 -1
- package/dist/elements/preupgrade/bottom-sheet.css +1 -1
- package/dist/elements/preupgrade/button-group.css +1 -1
- package/dist/elements/preupgrade/button.css +1 -1
- package/dist/elements/preupgrade/card.css +1 -1
- package/dist/elements/preupgrade/carousel.css +1 -1
- package/dist/elements/preupgrade/checkbox.css +1 -1
- package/dist/elements/preupgrade/chips.css +1 -1
- package/dist/elements/preupgrade/datepicker.css +1 -1
- package/dist/elements/preupgrade/dialog.css +1 -1
- package/dist/elements/preupgrade/divider.css +1 -1
- package/dist/elements/preupgrade/drawer.css +1 -1
- package/dist/elements/preupgrade/extended-fab.css +1 -1
- package/dist/elements/preupgrade/fab-menu.css +1 -1
- package/dist/elements/preupgrade/fab.css +1 -1
- package/dist/elements/preupgrade/icon-button.css +1 -1
- package/dist/elements/preupgrade/list.css +1 -1
- package/dist/elements/preupgrade/loading-indicator.css +1 -1
- package/dist/elements/preupgrade/menu.css +1 -1
- package/dist/elements/preupgrade/navigation-bar.css +1 -1
- package/dist/elements/preupgrade/navigation-rail.css +1 -1
- package/dist/elements/preupgrade/progress.css +1 -1
- package/dist/elements/preupgrade/radios.css +1 -1
- package/dist/elements/preupgrade/search.css +1 -1
- package/dist/elements/preupgrade/select.css +1 -1
- package/dist/elements/preupgrade/side-sheet.css +1 -1
- package/dist/elements/preupgrade/slider.css +1 -1
- package/dist/elements/preupgrade/snackbar.css +1 -1
- package/dist/elements/preupgrade/split-button.css +1 -1
- package/dist/elements/preupgrade/switch.css +1 -1
- package/dist/elements/preupgrade/tabs.css +1 -1
- package/dist/elements/preupgrade/text-field.css +1 -1
- package/dist/elements/preupgrade/timepicker.css +1 -1
- package/dist/elements/preupgrade/toolbar.css +1 -1
- package/dist/elements/preupgrade/tooltip.css +1 -1
- package/dist/elements/preupgrade/top-app-bar.css +1 -1
- package/dist/elements/preupgrade.css +1 -1
- package/dist/package.json +1 -1
- package/dist/styles/badge.css +1 -1
- package/dist/styles/base.css +1 -1
- package/dist/styles/bottom-app-bar.css +1 -1
- package/dist/styles/bottom-sheet.css +1 -1
- package/dist/styles/button-group.css +1 -1
- package/dist/styles/button.css +1 -1
- package/dist/styles/card.css +1 -1
- package/dist/styles/carousel.css +1 -1
- package/dist/styles/checkbox.css +1 -1
- package/dist/styles/chips.css +1 -1
- package/dist/styles/contrast.css +1 -1
- package/dist/styles/datepicker.css +1 -1
- package/dist/styles/dialog.css +2 -2
- package/dist/styles/divider.css +1 -1
- package/dist/styles/drawer.css +1 -1
- package/dist/styles/extended-fab.css +1 -1
- package/dist/styles/fab-menu.css +1 -1
- package/dist/styles/fab.css +1 -1
- package/dist/styles/icon-button.css +1 -1
- package/dist/styles/list.css +1 -1
- package/dist/styles/loading-indicator.css +1 -1
- package/dist/styles/menu.css +1 -1
- package/dist/styles/navigation-bar.css +1 -1
- package/dist/styles/navigation-rail.css +1 -1
- package/dist/styles/progress.css +1 -1
- package/dist/styles/radios.css +1 -1
- package/dist/styles/search.css +1 -1
- package/dist/styles/select.css +1 -1
- package/dist/styles/side-sheet.css +1 -1
- package/dist/styles/slider.css +1 -1
- package/dist/styles/snackbar.css +1 -1
- package/dist/styles/split-button.css +1 -1
- package/dist/styles/switch.css +2 -2
- package/dist/styles/tabs.css +1 -1
- package/dist/styles/text-field.css +1 -1
- package/dist/styles/timepicker.css +1 -1
- package/dist/styles/toolbar.css +1 -1
- package/dist/styles/tooltip.css +1 -1
- package/dist/styles/top-app-bar.css +1 -1
- package/dist/styles/typography.css +1 -1
- package/dist/styles/utilities.css +1 -1
- package/dist/styles.css +2 -2
- package/dist/themes/autumn-contrast.css +1 -1
- package/dist/themes/autumn.css +1 -1
- package/dist/themes/baseline-contrast.css +1 -1
- package/dist/themes/baseline.css +1 -1
- package/dist/themes/brownbeige-contrast.css +1 -1
- package/dist/themes/brownbeige.css +1 -1
- package/dist/themes/content-contrast.css +1 -1
- package/dist/themes/content.css +1 -1
- package/dist/themes/desert-contrast.css +1 -1
- package/dist/themes/desert.css +1 -1
- package/dist/themes/expressive-contrast.css +1 -1
- package/dist/themes/expressive.css +1 -1
- package/dist/themes/fidelity-contrast.css +1 -1
- package/dist/themes/fidelity.css +1 -1
- package/dist/themes/forest-contrast.css +1 -1
- package/dist/themes/forest.css +1 -1
- package/dist/themes/fruit-salad-contrast.css +1 -1
- package/dist/themes/fruit-salad.css +1 -1
- package/dist/themes/highcontrast-contrast.css +1 -1
- package/dist/themes/highcontrast.css +1 -1
- package/dist/themes/monochrome-contrast.css +1 -1
- package/dist/themes/monochrome.css +1 -1
- package/dist/themes/neutral-contrast.css +1 -1
- package/dist/themes/neutral.css +1 -1
- package/dist/themes/ocean-contrast.css +1 -1
- package/dist/themes/ocean.css +1 -1
- package/dist/themes/rainbow-contrast.css +1 -1
- package/dist/themes/rainbow.css +1 -1
- package/dist/themes/sageivory-contrast.css +1 -1
- package/dist/themes/sageivory.css +1 -1
- package/dist/themes/spring-contrast.css +1 -1
- package/dist/themes/spring.css +1 -1
- package/dist/themes/summer-contrast.css +1 -1
- package/dist/themes/summer.css +1 -1
- package/dist/themes/sunset-contrast.css +1 -1
- package/dist/themes/sunset.css +1 -1
- package/dist/themes/tealcaramel-contrast.css +1 -1
- package/dist/themes/tealcaramel.css +1 -1
- package/dist/themes/vibrant-contrast.css +1 -1
- package/dist/themes/vibrant.css +1 -1
- package/package.json +1 -1
- package/src/styles/components/_dialog.scss +8 -0
- package/src/styles/components/_switch.scss +15 -5
|
@@ -1,9 +1,7 @@
|
|
|
1
|
-
import { getOverlayConfig } from "./config.js";
|
|
2
1
|
import createButton from "../button/index.js";
|
|
3
|
-
import { createDivider } from "../divider/index.js";
|
|
4
2
|
import { addClass, removeClass } from "../../core/dom/classes.js";
|
|
5
3
|
import { setHTML } from "../../core/dom/html.js";
|
|
6
|
-
import {
|
|
4
|
+
import { deepActiveElement, tabStops, wrapTab } from "../../core/dom/focus.js";
|
|
7
5
|
import { hideFromTopLayer, onModalEscape, onTopLayerClose, showInTopLayer } from "../../core/dom/layer.js";
|
|
8
6
|
const DIALOG_EVENTS = {
|
|
9
7
|
OPEN: "open",
|
|
@@ -18,17 +16,8 @@ export const withStructure = (config, getComponent) => (component) => {
|
|
|
18
16
|
const uid = `${component.getClass("dialog")}-${++dialogCount}`;
|
|
19
17
|
const titleId = `${uid}-title`;
|
|
20
18
|
const contentId = `${uid}-content`;
|
|
21
|
-
const
|
|
22
|
-
const overlay = document.createElement(overlayConfig.tag || "div");
|
|
19
|
+
const overlay = document.createElement("div");
|
|
23
20
|
overlay.classList.add(component.getClass("dialog__overlay"));
|
|
24
|
-
if (overlayConfig.attributes &&
|
|
25
|
-
typeof overlayConfig.attributes === "object") {
|
|
26
|
-
Object.entries(overlayConfig.attributes).forEach(([key, value]) => {
|
|
27
|
-
if (key && typeof key === "string" && value !== undefined) {
|
|
28
|
-
overlay.setAttribute(key, String(value));
|
|
29
|
-
}
|
|
30
|
-
});
|
|
31
|
-
}
|
|
32
21
|
if (config.zIndex) {
|
|
33
22
|
overlay.style.zIndex = String(config.zIndex);
|
|
34
23
|
}
|
|
@@ -95,10 +84,8 @@ export const withStructure = (config, getComponent) => (component) => {
|
|
|
95
84
|
return footer;
|
|
96
85
|
};
|
|
97
86
|
const createDividerElement = () => {
|
|
98
|
-
const divider =
|
|
99
|
-
|
|
100
|
-
class: component.getClass("dialog__divider"),
|
|
101
|
-
});
|
|
87
|
+
const divider = document.createElement("hr");
|
|
88
|
+
divider.classList.add(component.getClass("dialog__divider"));
|
|
102
89
|
return divider;
|
|
103
90
|
};
|
|
104
91
|
const header = createHeader();
|
|
@@ -129,16 +116,16 @@ export const withStructure = (config, getComponent) => (component) => {
|
|
|
129
116
|
let footerDivider = null;
|
|
130
117
|
if (config.divider) {
|
|
131
118
|
headerDivider = createDividerElement();
|
|
132
|
-
headerDivider.
|
|
133
|
-
component.element.appendChild(headerDivider
|
|
119
|
+
headerDivider.classList.add(component.getClass("dialog__header-divider"));
|
|
120
|
+
component.element.appendChild(headerDivider);
|
|
134
121
|
if (footer) {
|
|
135
122
|
footerDivider = createDividerElement();
|
|
136
|
-
footerDivider.
|
|
123
|
+
footerDivider.classList.add(component.getClass("dialog__footer-divider"));
|
|
137
124
|
}
|
|
138
125
|
}
|
|
139
126
|
component.element.appendChild(content);
|
|
140
127
|
if (footerDivider) {
|
|
141
|
-
component.element.appendChild(footerDivider
|
|
128
|
+
component.element.appendChild(footerDivider);
|
|
142
129
|
}
|
|
143
130
|
if (footer) {
|
|
144
131
|
component.element.appendChild(footer);
|
|
@@ -170,29 +157,25 @@ export const withDivider = () => (component) => {
|
|
|
170
157
|
divider: {
|
|
171
158
|
toggleDivider(show) {
|
|
172
159
|
if (show && !component.structure.headerDivider) {
|
|
173
|
-
const headerDivider =
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
});
|
|
177
|
-
component.element.insertBefore(headerDivider.element, component.structure.content);
|
|
160
|
+
const headerDivider = document.createElement("hr");
|
|
161
|
+
headerDivider.classList.add(component.getClass("dialog__divider"), component.getClass("dialog__header-divider"));
|
|
162
|
+
component.element.insertBefore(headerDivider, component.structure.content);
|
|
178
163
|
component.structure.headerDivider = headerDivider;
|
|
179
164
|
if (component.structure.footer &&
|
|
180
165
|
!component.structure.footerDivider) {
|
|
181
|
-
const footerDivider =
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
});
|
|
185
|
-
component.element.insertBefore(footerDivider.element, component.structure.footer);
|
|
166
|
+
const footerDivider = document.createElement("hr");
|
|
167
|
+
footerDivider.classList.add(component.getClass("dialog__divider"), component.getClass("dialog__footer-divider"));
|
|
168
|
+
component.element.insertBefore(footerDivider, component.structure.footer);
|
|
186
169
|
component.structure.footerDivider = footerDivider;
|
|
187
170
|
}
|
|
188
171
|
}
|
|
189
172
|
else if (!show) {
|
|
190
173
|
if (component.structure.headerDivider) {
|
|
191
|
-
component.structure.headerDivider.
|
|
174
|
+
component.structure.headerDivider.remove();
|
|
192
175
|
component.structure.headerDivider = null;
|
|
193
176
|
}
|
|
194
177
|
if (component.structure.footerDivider) {
|
|
195
|
-
component.structure.footerDivider.
|
|
178
|
+
component.structure.footerDivider.remove();
|
|
196
179
|
component.structure.footerDivider = null;
|
|
197
180
|
}
|
|
198
181
|
}
|
|
@@ -251,39 +234,42 @@ export const withVisibility = (getComponent) => (component) => {
|
|
|
251
234
|
let showTimer;
|
|
252
235
|
let afterOpenTimer;
|
|
253
236
|
let afterCloseTimer;
|
|
237
|
+
let afterOpenWaiting = false;
|
|
254
238
|
const openDuration = component.config.animationDuration ?? 500;
|
|
255
239
|
const closeDuration = component.config.animationDuration ?? 150;
|
|
256
240
|
const top = component.config.layer === "top";
|
|
257
241
|
const scrim = top ? component.element : component.overlay;
|
|
258
|
-
const focusableElements = 'button, [href], input, select, textarea, [tabindex]:not([tabindex="-1"])';
|
|
259
242
|
let previouslyFocusedElement = null;
|
|
260
243
|
let mouseDownOnOverlay = false;
|
|
261
244
|
const inerted = [];
|
|
262
245
|
let scrollLock = null;
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
246
|
+
let focusFrame;
|
|
247
|
+
let focusView;
|
|
248
|
+
let focusRequest = 0;
|
|
249
|
+
let focusPending = false;
|
|
250
|
+
const cancelFocusFrame = () => {
|
|
251
|
+
focusRequest += 1;
|
|
252
|
+
focusPending = false;
|
|
253
|
+
if (focusFrame !== undefined) {
|
|
254
|
+
focusView?.cancelAnimationFrame(focusFrame);
|
|
255
|
+
focusFrame = undefined;
|
|
256
|
+
focusView = undefined;
|
|
257
|
+
}
|
|
258
|
+
};
|
|
259
|
+
const emitAfterOpen = () => {
|
|
260
|
+
afterOpenWaiting = false;
|
|
261
|
+
if (!opened || typeof component.emit !== "function")
|
|
268
262
|
return;
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
263
|
+
component.emit(DIALOG_EVENTS.AFTER_OPEN, { dialog: getComponent() });
|
|
264
|
+
};
|
|
265
|
+
const afterOpenDue = () => {
|
|
266
|
+
afterOpenTimer = undefined;
|
|
267
|
+
if (focusPending) {
|
|
268
|
+
afterOpenWaiting = true;
|
|
273
269
|
return;
|
|
274
270
|
}
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
const active = activeElementOf(component.element);
|
|
278
|
-
if (e.shiftKey && (active === first || !component.element.contains(active))) {
|
|
279
|
-
last.focus();
|
|
280
|
-
e.preventDefault();
|
|
281
|
-
}
|
|
282
|
-
else if (!e.shiftKey && active === last) {
|
|
283
|
-
first.focus();
|
|
284
|
-
e.preventDefault();
|
|
285
|
-
}
|
|
286
|
-
}
|
|
271
|
+
emitAfterOpen();
|
|
272
|
+
};
|
|
287
273
|
const inertBackground = () => {
|
|
288
274
|
if (component.config.modal === false)
|
|
289
275
|
return;
|
|
@@ -313,20 +299,76 @@ export const withVisibility = (getComponent) => (component) => {
|
|
|
313
299
|
scrollLock = null;
|
|
314
300
|
}
|
|
315
301
|
};
|
|
302
|
+
let containerPosition = null;
|
|
303
|
+
const unscopeScrim = () => {
|
|
304
|
+
removeClass(component.overlay, `${component.getClass("dialog__overlay")}--contained`);
|
|
305
|
+
if (containerPosition === null)
|
|
306
|
+
return;
|
|
307
|
+
component.structure.container.style.position = containerPosition;
|
|
308
|
+
containerPosition = null;
|
|
309
|
+
};
|
|
310
|
+
const scopeScrim = () => {
|
|
311
|
+
const container = component.structure.container;
|
|
312
|
+
if (top || container === document.body)
|
|
313
|
+
return;
|
|
314
|
+
if (getComputedStyle(container).position === "static") {
|
|
315
|
+
containerPosition ?? (containerPosition = container.style.position);
|
|
316
|
+
container.style.position = "relative";
|
|
317
|
+
}
|
|
318
|
+
addClass(component.overlay, `${component.getClass("dialog__overlay")}--contained`);
|
|
319
|
+
if (!container.clientHeight ||
|
|
320
|
+
container.clientWidth < component.element.offsetWidth ||
|
|
321
|
+
container.clientHeight < component.element.offsetHeight) {
|
|
322
|
+
unscopeScrim();
|
|
323
|
+
}
|
|
324
|
+
};
|
|
316
325
|
const handleWrap = (e) => wrapTab(component.element, e);
|
|
326
|
+
const focusWhenVisible = (target) => {
|
|
327
|
+
const view = target.ownerDocument.defaultView;
|
|
328
|
+
if (!view || typeof view.requestAnimationFrame !== "function") {
|
|
329
|
+
target.focus();
|
|
330
|
+
focusPending = false;
|
|
331
|
+
if (afterOpenWaiting)
|
|
332
|
+
emitAfterOpen();
|
|
333
|
+
return;
|
|
334
|
+
}
|
|
335
|
+
cancelFocusFrame();
|
|
336
|
+
const request = focusRequest;
|
|
337
|
+
const settle = () => {
|
|
338
|
+
focusFrame = undefined;
|
|
339
|
+
if (request !== focusRequest)
|
|
340
|
+
return;
|
|
341
|
+
if (!opened || !target.isConnected) {
|
|
342
|
+
focusPending = false;
|
|
343
|
+
if (afterOpenWaiting)
|
|
344
|
+
emitAfterOpen();
|
|
345
|
+
return;
|
|
346
|
+
}
|
|
347
|
+
if (view.getComputedStyle(target).visibility !== "hidden") {
|
|
348
|
+
target.focus();
|
|
349
|
+
focusPending = false;
|
|
350
|
+
if (afterOpenWaiting)
|
|
351
|
+
emitAfterOpen();
|
|
352
|
+
return;
|
|
353
|
+
}
|
|
354
|
+
focusPending = true;
|
|
355
|
+
focusFrame = view.requestAnimationFrame(settle);
|
|
356
|
+
focusView = view;
|
|
357
|
+
};
|
|
358
|
+
settle();
|
|
359
|
+
};
|
|
317
360
|
const trapFocus = () => {
|
|
318
361
|
inertBackground();
|
|
319
362
|
if (component.config.autofocus !== false) {
|
|
320
363
|
const requested = component.element.querySelector("[autofocus]");
|
|
321
|
-
const target = requested ||
|
|
322
|
-
target
|
|
364
|
+
const target = requested || tabStops(component.element)[0] || component.element;
|
|
365
|
+
focusWhenVisible(target);
|
|
323
366
|
}
|
|
324
367
|
if (component.config.trapFocus !== false) {
|
|
325
|
-
component.element.addEventListener("keydown",
|
|
368
|
+
component.element.addEventListener("keydown", handleWrap);
|
|
326
369
|
}
|
|
327
370
|
};
|
|
328
371
|
const releaseFocus = () => {
|
|
329
|
-
component.element.removeEventListener("keydown", handleTabKey);
|
|
330
372
|
component.element.removeEventListener("keydown", handleWrap);
|
|
331
373
|
releaseBackground();
|
|
332
374
|
if (previouslyFocusedElement) {
|
|
@@ -390,6 +432,7 @@ export const withVisibility = (getComponent) => (component) => {
|
|
|
390
432
|
component.element.setAttribute("open", "");
|
|
391
433
|
}
|
|
392
434
|
};
|
|
435
|
+
scopeScrim();
|
|
393
436
|
if (isOpen) {
|
|
394
437
|
if (top)
|
|
395
438
|
showModal();
|
|
@@ -417,6 +460,8 @@ export const withVisibility = (getComponent) => (component) => {
|
|
|
417
460
|
return;
|
|
418
461
|
opened = true;
|
|
419
462
|
clearTimeout(afterCloseTimer);
|
|
463
|
+
afterOpenWaiting = false;
|
|
464
|
+
focusPending = false;
|
|
420
465
|
if (top) {
|
|
421
466
|
showModal();
|
|
422
467
|
void component.element.offsetWidth;
|
|
@@ -426,9 +471,7 @@ export const withVisibility = (getComponent) => (component) => {
|
|
|
426
471
|
component.emit(DIALOG_EVENTS.OPEN, { dialog: getComponent() });
|
|
427
472
|
if (!opened)
|
|
428
473
|
return;
|
|
429
|
-
afterOpenTimer = setTimeout(
|
|
430
|
-
component.emit(DIALOG_EVENTS.AFTER_OPEN, { dialog: getComponent() });
|
|
431
|
-
}, openDuration);
|
|
474
|
+
afterOpenTimer = setTimeout(afterOpenDue, openDuration);
|
|
432
475
|
return;
|
|
433
476
|
}
|
|
434
477
|
if (component.element.parentNode !== component.overlay) {
|
|
@@ -438,6 +481,7 @@ export const withVisibility = (getComponent) => (component) => {
|
|
|
438
481
|
const container = component.structure.container || document.body;
|
|
439
482
|
container.appendChild(component.overlay);
|
|
440
483
|
}
|
|
484
|
+
scopeScrim();
|
|
441
485
|
setupEvents();
|
|
442
486
|
if (typeof component.emit === "function") {
|
|
443
487
|
component.emit(DIALOG_EVENTS.OPEN, { dialog: getComponent() });
|
|
@@ -449,9 +493,7 @@ export const withVisibility = (getComponent) => (component) => {
|
|
|
449
493
|
addClass(component.element, `${component.getClass("dialog")}--visible`);
|
|
450
494
|
trapFocus();
|
|
451
495
|
if (typeof component.emit === "function") {
|
|
452
|
-
afterOpenTimer = setTimeout(
|
|
453
|
-
component.emit(DIALOG_EVENTS.AFTER_OPEN, { dialog: getComponent() });
|
|
454
|
-
}, openDuration);
|
|
496
|
+
afterOpenTimer = setTimeout(afterOpenDue, openDuration);
|
|
455
497
|
}
|
|
456
498
|
}, 10);
|
|
457
499
|
},
|
|
@@ -474,6 +516,8 @@ export const withVisibility = (getComponent) => (component) => {
|
|
|
474
516
|
opened = false;
|
|
475
517
|
clearTimeout(showTimer);
|
|
476
518
|
clearTimeout(afterOpenTimer);
|
|
519
|
+
afterOpenWaiting = false;
|
|
520
|
+
cancelFocusFrame();
|
|
477
521
|
const dialogVisibleClass = `${component.getClass("dialog")}--visible`;
|
|
478
522
|
const overlayVisibleClass = `${component.getClass("dialog__overlay")}--visible`;
|
|
479
523
|
removeClass(component.element, dialogVisibleClass);
|
|
@@ -491,6 +535,7 @@ export const withVisibility = (getComponent) => (component) => {
|
|
|
491
535
|
if (!top && component.overlay && component.overlay.parentNode) {
|
|
492
536
|
component.overlay.parentNode.removeChild(component.overlay);
|
|
493
537
|
}
|
|
538
|
+
unscopeScrim();
|
|
494
539
|
if (typeof component.emit === "function") {
|
|
495
540
|
component.emit(DIALOG_EVENTS.AFTER_CLOSE, { dialog: getComponent() });
|
|
496
541
|
}
|
|
@@ -515,7 +560,10 @@ export const withVisibility = (getComponent) => (component) => {
|
|
|
515
560
|
clearTimeout(showTimer);
|
|
516
561
|
clearTimeout(afterOpenTimer);
|
|
517
562
|
clearTimeout(afterCloseTimer);
|
|
563
|
+
afterOpenWaiting = false;
|
|
564
|
+
cancelFocusFrame();
|
|
518
565
|
cleanupEvents();
|
|
566
|
+
unscopeScrim();
|
|
519
567
|
},
|
|
520
568
|
};
|
|
521
569
|
if (component && component.on) {
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import type { ButtonComponent } from "../button/types.js";
|
|
2
|
-
import type { DividerComponent } from "../divider/types.js";
|
|
3
2
|
import type { EventCallback } from "../../core/state/emitter.js";
|
|
4
3
|
export type DialogSize = 'small' | 'medium' | 'large' | 'fullwidth' | 'fullscreen';
|
|
5
4
|
export type DialogAnimation = 'scale' | 'slide-up' | 'slide-down' | 'fade';
|
|
@@ -51,8 +50,8 @@ export interface DialogStructure {
|
|
|
51
50
|
header: HTMLElement;
|
|
52
51
|
content: HTMLElement;
|
|
53
52
|
footer: HTMLElement | null;
|
|
54
|
-
headerDivider:
|
|
55
|
-
footerDivider:
|
|
53
|
+
headerDivider: HTMLElement | null;
|
|
54
|
+
footerDivider: HTMLElement | null;
|
|
56
55
|
container: HTMLElement;
|
|
57
56
|
}
|
|
58
57
|
export interface DialogButtonRecord {
|
|
@@ -76,7 +76,7 @@ export const withInput = (config, getComponent) => (component) => {
|
|
|
76
76
|
const input = component.structure?.input;
|
|
77
77
|
if (input) {
|
|
78
78
|
input.placeholder = text;
|
|
79
|
-
input.setAttribute("aria-label", text);
|
|
79
|
+
input.setAttribute("aria-label", config.ariaLabel || text);
|
|
80
80
|
}
|
|
81
81
|
};
|
|
82
82
|
const getPlaceholder = () => {
|
|
@@ -77,7 +77,7 @@ export const withStructure = (config) => (component) => {
|
|
|
77
77
|
const inputAttributes = {
|
|
78
78
|
type: "text",
|
|
79
79
|
placeholder,
|
|
80
|
-
"aria-label": placeholder,
|
|
80
|
+
"aria-label": config.ariaLabel || placeholder,
|
|
81
81
|
role: "combobox",
|
|
82
82
|
"aria-autocomplete": "list",
|
|
83
83
|
"aria-expanded": String(isViewState),
|
|
@@ -29,6 +29,8 @@ export const withTextField = (config) => (component) => {
|
|
|
29
29
|
});
|
|
30
30
|
textField.element.classList.add(`${config.prefix || "mtrl"}-select`);
|
|
31
31
|
if (textField.input) {
|
|
32
|
+
if (config.ariaLabel)
|
|
33
|
+
textField.input.setAttribute("aria-label", config.ariaLabel);
|
|
32
34
|
const input = textField.input;
|
|
33
35
|
input.addEventListener("keydown", (e) => {
|
|
34
36
|
const allowedKeys = [
|
|
@@ -16,10 +16,8 @@ export const withDom = (config) => (component) => {
|
|
|
16
16
|
setStyles(container, {
|
|
17
17
|
position: "relative",
|
|
18
18
|
});
|
|
19
|
-
const label = config.label || "";
|
|
20
|
-
const
|
|
21
|
-
const secondHandleLabel = label ? `${label} maximum` : "";
|
|
22
|
-
const handleElement = (index, handleValue, name) => {
|
|
19
|
+
const label = config.ariaLabel || config.label || "";
|
|
20
|
+
const handleElement = (index, handleValue) => {
|
|
23
21
|
const attributes = {
|
|
24
22
|
role: "slider",
|
|
25
23
|
"aria-valuemin": String(min),
|
|
@@ -31,9 +29,6 @@ export const withDom = (config) => (component) => {
|
|
|
31
29
|
"data-value": String(handleValue),
|
|
32
30
|
"data-handle-index": String(index),
|
|
33
31
|
};
|
|
34
|
-
if (name) {
|
|
35
|
-
attributes["aria-label"] = name;
|
|
36
|
-
}
|
|
37
32
|
const element = createElement({
|
|
38
33
|
tag: "div",
|
|
39
34
|
className: getClass("slider__handle"),
|
|
@@ -61,15 +56,38 @@ export const withDom = (config) => (component) => {
|
|
|
61
56
|
});
|
|
62
57
|
return element;
|
|
63
58
|
};
|
|
64
|
-
const handle = handleElement(0, value
|
|
59
|
+
const handle = handleElement(0, value);
|
|
65
60
|
const valueBubble = bubbleElement(0, value);
|
|
66
61
|
let secondHandle;
|
|
67
62
|
let secondValueBubble;
|
|
68
63
|
if (config.range) {
|
|
69
64
|
const secondValue = config.secondValue !== undefined ? config.secondValue : max;
|
|
70
|
-
secondHandle = handleElement(1, secondValue
|
|
65
|
+
secondHandle = handleElement(1, secondValue);
|
|
71
66
|
secondValueBubble = bubbleElement(1, secondValue);
|
|
72
67
|
}
|
|
68
|
+
[handle, secondHandle].forEach((target, index) => {
|
|
69
|
+
if (!target)
|
|
70
|
+
return;
|
|
71
|
+
const endpoint = config.range ? index ? "maximum" : "minimum" : "";
|
|
72
|
+
if (label)
|
|
73
|
+
target.setAttribute("aria-label", endpoint ? `${label} ${endpoint}` : label);
|
|
74
|
+
if (config.ariaLabelledBy) {
|
|
75
|
+
let labelledBy = config.ariaLabelledBy;
|
|
76
|
+
if (endpoint) {
|
|
77
|
+
const suffix = createElement({
|
|
78
|
+
tag: "span",
|
|
79
|
+
text: endpoint,
|
|
80
|
+
attributes: {
|
|
81
|
+
id: `${getClass("slider")}-${Math.random().toString(36).slice(2, 9)}`,
|
|
82
|
+
hidden: true,
|
|
83
|
+
},
|
|
84
|
+
container: target,
|
|
85
|
+
});
|
|
86
|
+
labelledBy += ` ${suffix.id}`;
|
|
87
|
+
}
|
|
88
|
+
target.setAttribute("aria-labelledby", labelledBy);
|
|
89
|
+
}
|
|
90
|
+
});
|
|
73
91
|
const name = config.name;
|
|
74
92
|
const formFields = name
|
|
75
93
|
? [
|
|
@@ -203,7 +203,8 @@ export const createTab = (config = {}) => {
|
|
|
203
203
|
},
|
|
204
204
|
};
|
|
205
205
|
const announceBadge = () => {
|
|
206
|
-
const count = tab.badge?.isVisible()
|
|
206
|
+
const count = tab.badge?.isVisible()
|
|
207
|
+
? tab.badge.element.getAttribute("aria-label") || tab.badge.getContent() : "";
|
|
207
208
|
const label = baseConfig.ariaLabel || button.getText();
|
|
208
209
|
const name = [label, count].filter(Boolean).join(", ");
|
|
209
210
|
if (name !== label) {
|
|
@@ -1,10 +1,30 @@
|
|
|
1
1
|
import { createComponentConfig, createElementConfig, } from "../../core/config/component.js";
|
|
2
2
|
import { TEXT_FIELD_DEFAULTS } from "./constants.js";
|
|
3
|
+
import { warnDev } from "../../core/utils/warn.js";
|
|
3
4
|
export const defaultConfig = {
|
|
4
5
|
type: TEXT_FIELD_DEFAULTS.TYPE,
|
|
5
6
|
variant: TEXT_FIELD_DEFAULTS.VARIANT,
|
|
6
7
|
};
|
|
7
|
-
export const createBaseConfig = (config = {}) =>
|
|
8
|
+
export const createBaseConfig = (config = {}) => {
|
|
9
|
+
if ( /*#__PURE__*/(() => {
|
|
10
|
+
try {
|
|
11
|
+
return process.env.NODE_ENV !== "production";
|
|
12
|
+
}
|
|
13
|
+
catch {
|
|
14
|
+
return false;
|
|
15
|
+
}
|
|
16
|
+
})() && process.env.NODE_ENV !== "production") {
|
|
17
|
+
const KEY_LIST = "type variant density name label value placeholder required noAsterisk disabled readonly maxLength pattern autocomplete leadingIcon trailingIcon trailingIconLabel onTrailingClick supportingText error prefixText suffixText class prefix componentName className parent id title tabIndex style data role ariaLabel ariaDescribedBy ariaLabelledBy ariaHidden multiline";
|
|
18
|
+
const _complete = true;
|
|
19
|
+
const _sound = true;
|
|
20
|
+
const CONFIG_KEYS = KEY_LIST.split(" ");
|
|
21
|
+
for (const key of Object.keys(config)) {
|
|
22
|
+
if (!CONFIG_KEYS.includes(key))
|
|
23
|
+
warnDev("text-field", `unknown config key "${key}"`);
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
return createComponentConfig(defaultConfig, config, "text-field");
|
|
27
|
+
};
|
|
8
28
|
export const getElementConfig = (config) => createElementConfig(config, {
|
|
9
29
|
tag: "div",
|
|
10
30
|
className: config.class,
|
|
@@ -34,7 +34,7 @@ export const withBadge = (config) => (component) => {
|
|
|
34
34
|
const badgeClass = badge.getClass("badge");
|
|
35
35
|
const shows = badge.element.classList.contains(`${badgeClass}--positioned`)
|
|
36
36
|
&& !badge.element.classList.contains(`${badgeClass}--invisible`)
|
|
37
|
-
&& badge.getLabel() !== "";
|
|
37
|
+
&& (badge.getLabel() !== "" || (badge.element.getAttribute("aria-label") ?? "") !== "");
|
|
38
38
|
if (shows)
|
|
39
39
|
addIdRef(target, "aria-describedby", badgeId);
|
|
40
40
|
else
|
|
@@ -13,6 +13,7 @@ export const withTextInput = (config = {}) => (component) => {
|
|
|
13
13
|
autocomplete: config.autocomplete,
|
|
14
14
|
value: isMultiline ? undefined : config.value || "",
|
|
15
15
|
placeholder: config.placeholder || " ",
|
|
16
|
+
"aria-label": config.ariaLabel,
|
|
16
17
|
};
|
|
17
18
|
if (!isMultiline) {
|
|
18
19
|
attributes.type = config.type || "text";
|
package/dist/core/dom/focus.js
CHANGED
|
@@ -10,8 +10,8 @@ export const deepActiveElement = () => {
|
|
|
10
10
|
};
|
|
11
11
|
const isTabStop = (element) => element.tabIndex !== undefined &&
|
|
12
12
|
element.tabIndex >= 0 &&
|
|
13
|
-
!element.matches(":disabled, [inert] *, [inert]") &&
|
|
14
|
-
element.getClientRects().length > 0;
|
|
13
|
+
!element.matches(":disabled, [inert] *, [inert], [aria-hidden='true']") &&
|
|
14
|
+
(element.offsetWidth > 0 || element.getClientRects().length > 0);
|
|
15
15
|
export const tabStops = (container) => {
|
|
16
16
|
const found = [];
|
|
17
17
|
const visit = (element) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
.mtrl-dialog__overlay{position:fixed;top:0;left:0;right:0;bottom:0;background-color:rgba(0,0,0,0);visibility:hidden;z-index:1000;display:flex;align-items:center;justify-content:center;overflow:auto;padding:24px;box-sizing:border-box;transition:background-color 150ms linear,visibility 0s linear 150ms}.mtrl-dialog__overlay--visible{background-color:color-mix(in srgb, var(--mtrl-sys-color-scrim) 32%, transparent);visibility:visible;transition:background-color 500ms linear,visibility 0s}.mtrl-dialog{position:relative;background-color:var(--mtrl-sys-color-surface-container-high);color:var(--mtrl-sys-color-on-surface);border-radius:var(--mtrl-sys-shape-corner-extra-large, 28px);max-width:560px;min-width:280px;width:100%;margin:auto;box-shadow:0px 1px 3px rgba(0,0,0,.3),0px 4px 8px 3px rgba(0,0,0,.15);transform-origin:top center;transform:translateY(-50px) scaleY(0.35);opacity:0;pointer-events:none;transition:transform 150ms cubic-bezier(0.3, 0, 0.8, 0.15),opacity 50ms linear 100ms}.mtrl-dialog .mtrl-dialog__header,.mtrl-dialog .mtrl-dialog__content,.mtrl-dialog .mtrl-dialog__footer{opacity:0;transition:opacity 100ms linear}.mtrl-dialog--visible{transform:translateY(0) scaleY(1);opacity:1;pointer-events:auto;transition:transform 500ms cubic-bezier(0.3, 0, 0, 1),opacity 50ms linear}.mtrl-dialog--visible .mtrl-dialog__header,.mtrl-dialog--visible .mtrl-dialog__content{opacity:1;transition:opacity 250ms linear 50ms}.mtrl-dialog--visible .mtrl-dialog__footer{opacity:1;transition:opacity 300ms linear 150ms}.mtrl-dialog--small{width:80%;max-width:360px}.mtrl-dialog--medium{width:90%;max-width:560px}.mtrl-dialog--large{width:95%;max-width:560px}.mtrl-dialog--fullwidth{width:100%;max-width:none;margin:24px}.mtrl-dialog--fullscreen{width:100%;height:100%;max-width:none;max-height:none;margin:0;border-radius:0;transform-origin:center center;transform:translateY(24px)}.mtrl-dialog--fullscreen.mtrl-dialog--visible{transform:translateY(0)}.mtrl-dialog--slide-up{transform:translateY(24px) scaleY(0.35)}.mtrl-dialog--slide-up.mtrl-dialog--visible{transform:translateY(0) scaleY(1)}.mtrl-dialog--slide-down{transform:translateY(-24px) scaleY(0.35)}.mtrl-dialog--slide-down.mtrl-dialog--visible{transform:translateY(0) scaleY(1)}.mtrl-dialog--fade{transform:none}.mtrl-dialog--fade.mtrl-dialog--visible{transform:none}.mtrl-dialog--scale{transform-origin:center center;transform:scale(0.8)}.mtrl-dialog--scale.mtrl-dialog--visible{transform:scale(1)}dialog.mtrl-dialog{position:fixed;inset:0;height:fit-content;max-height:calc(100% - 48px);padding:0;border:0;overflow:visible;transition:transform 150ms cubic-bezier(0.3, 0, 0.8, 0.15),opacity 50ms linear 100ms,display 150ms allow-discrete,overlay 150ms allow-discrete}dialog.mtrl-dialog.mtrl-dialog--visible{transform:none;transition:transform 500ms cubic-bezier(0.3, 0, 0, 1),opacity 50ms linear}dialog.mtrl-dialog.mtrl-dialog--fullwidth{width:auto}dialog.mtrl-dialog.mtrl-dialog--fullscreen{height:100%;max-height:none}dialog.mtrl-dialog::backdrop{background-color:rgba(0,0,0,0);transition:background-color 150ms linear,display 150ms allow-discrete,overlay 150ms allow-discrete}dialog.mtrl-dialog.mtrl-dialog--visible::backdrop{background-color:color-mix(in srgb, var(--mtrl-sys-color-scrim) 32%, transparent);transition:background-color 500ms linear}.mtrl-dialog__icon{display:flex;align-items:center;justify-content:center;padding:24px 24px 0 24px;color:var(--mtrl-sys-color-secondary)}.mtrl-dialog__icon svg,.mtrl-dialog__icon .mtrl-dialog__icon-content{width:24px;height:24px}.mtrl-dialog__icon+.mtrl-dialog__header .mtrl-dialog__header-content{text-align:center}.mtrl-dialog__icon+.mtrl-dialog__header .mtrl-dialog__header-title{text-align:center}.mtrl-dialog__icon+.mtrl-dialog__header .mtrl-dialog__header-subtitle{text-align:center}.mtrl-dialog__header{display:flex;align-items:flex-start;justify-content:space-between;padding:24px 24px 16px 24px}.mtrl-dialog__icon+.mtrl-dialog__header{padding-top:16px}.mtrl-dialog__header-content{flex:1}.mtrl-dialog__header-title{margin:0;color:var(--mtrl-sys-color-on-surface);font-family:var(--mtrl-ref-typeface-brand, Roboto, sans-serif);font-size:24px;line-height:32px;letter-spacing:0;font-weight:400}.mtrl-dialog__header-subtitle{margin:4px 0 0 0;font-family:var(--mtrl-ref-typeface-plain, Roboto, sans-serif);font-size:14px;line-height:20px;letter-spacing:.25px;font-weight:400;color:var(--mtrl-sys-color-on-surface-variant)}.mtrl-dialog__header-close{display:flex;align-items:center;justify-content:center;width:40px;height:40px;margin:-8px -8px 0 0;padding:8px;background:rgba(0,0,0,0);border:none;border-radius:50%;cursor:pointer;color:var(--mtrl-sys-color-on-surface-variant);transition:background-color 100ms cubic-bezier(0.2, 0, 0, 1);position:relative}.mtrl-dialog__header-close:hover{background-color:color-mix(in srgb, var(--mtrl-sys-color-on-surface) 8%, transparent)}.mtrl-dialog__header-close:focus{outline:none;background-color:color-mix(in srgb, var(--mtrl-sys-color-on-surface) 10%, transparent)}.mtrl-dialog__header-close:focus-visible{outline:2px solid var(--mtrl-sys-color-primary);outline-offset:2px}.mtrl-dialog__header-close:active{background-color:color-mix(in srgb, var(--mtrl-sys-color-on-surface) 10%, transparent)}.mtrl-dialog__header-close svg{width:24px;height:24px}.mtrl-dialog__header-close::after{content:"";position:absolute;width:48px;height:48px;top:50%;left:50%;transform:translate(-50%, -50%)}:where(.mtrl-rtl) .mtrl-dialog__header-close,:where(:host(.mtrl-rtl)) .mtrl-dialog__header-close,[dir=rtl] .mtrl-dialog__header-close:not(:where(.mtrl-ltr,.mtrl-ltr *)){margin:-8px 0 0 -8px}.mtrl-dialog__header:empty{display:none}.mtrl-dialog__header:not(:has(*))+.mtrl-dialog__content,.mtrl-dialog>.mtrl-dialog__content:first-child{padding-top:24px}.mtrl-dialog__content{padding:0 24px;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;overflow:visible}.mtrl-dialog__content--scrollable{overflow-y:auto;max-height:60vh;scrollbar-width:thin;scrollbar-color:rgba(0,0,0,.2) rgba(0,0,0,.05)}.mtrl-dialog__content--scrollable::-webkit-scrollbar{width:8px}.mtrl-dialog__content--scrollable::-webkit-scrollbar-track{background:rgba(0,0,0,.05)}.mtrl-dialog__content--scrollable::-webkit-scrollbar-thumb{background:rgba(0,0,0,.2);border-radius:4px}.mtrl-dialog__content p{margin:0 0 16px 0}.mtrl-dialog__content p:last-child{margin-bottom:0}.mtrl-dialog__content--emphasis{color:var(--mtrl-sys-color-on-surface)}.mtrl-dialog__content:last-child{padding-bottom:24px}.mtrl-dialog__footer{display:flex;align-items:center;justify-content:flex-end;padding:24px 24px 24px 24px;gap:8px}.mtrl-dialog__footer--left{justify-content:flex-start}.mtrl-dialog__footer--center{justify-content:center}.mtrl-dialog__footer--space-between{justify-content:space-between}.mtrl-dialog__footer--stacked{flex-direction:column-reverse;align-items:stretch;gap:8px}.mtrl-dialog--fullscreen{display:flex;flex-direction:column}.mtrl-dialog--fullscreen .mtrl-dialog__header{display:flex;align-items:center;min-height:56px;padding:0 24px;gap:8px}.mtrl-dialog--fullscreen .mtrl-dialog__header-close{order:-1;margin:0 0 0 -8px}:where(.mtrl-rtl) .mtrl-dialog--fullscreen .mtrl-dialog__header-close,:where(:host(.mtrl-rtl)) .mtrl-dialog--fullscreen .mtrl-dialog__header-close,[dir=rtl] .mtrl-dialog--fullscreen .mtrl-dialog__header-close:not(:where(.mtrl-ltr,.mtrl-ltr *)){margin:0 -8px 0 0}.mtrl-dialog--fullscreen .mtrl-dialog__header-title{font-family:var(--mtrl-ref-typeface-brand, Roboto, sans-serif);font-size:22px;line-height:28px;letter-spacing:0;font-weight:400;text-align:start}.mtrl-dialog--fullscreen .mtrl-dialog__content{flex:1;overflow-y:auto;padding:24px}.mtrl-dialog--fullscreen .mtrl-dialog__footer{min-height:56px;padding:0 24px;box-sizing:border-box}.mtrl-dialog__header-divider,.mtrl-dialog__footer-divider{margin:0;border:none;height:1px;background-color:var(--mtrl-sys-color-outline-variant)}@media(prefers-reduced-motion: reduce){.mtrl-dialog,.mtrl-dialog--visible,.mtrl-dialog__overlay,.mtrl-dialog__overlay--visible{transition:opacity 100ms linear}.mtrl-dialog,.mtrl-dialog--visible,.mtrl-dialog--scale,.mtrl-dialog--slide-up,.mtrl-dialog--slide-down,.mtrl-dialog--fullscreen{transform:none}}@media(forced-colors: active){.mtrl-dialog{border:2px solid CurrentColor}.mtrl-dialog__header-divider,.mtrl-dialog__footer-divider{background-color:CurrentColor}.mtrl-dialog__header-close:focus-visible{outline:2px solid CurrentColor}}@media(max-width: 600px){.mtrl-dialog{min-width:280px;width:calc(100% - 32px);max-width:100%;margin:16px;transform-origin:bottom center}.mtrl-dialog--fullscreen{width:100%;height:100%;margin:0;transform-origin:center center}.mtrl-dialog__overlay{padding:16px;align-items:flex-end}.mtrl-dialog__overlay.mtrl-dialog--fullscreen{padding:0}.mtrl-dialog__content--scrollable{max-height:50vh}.mtrl-dialog--slide-up{transform:translateY(24px)}.mtrl-dialog--slide-up.mtrl-dialog--visible{transform:translateY(0)}.mtrl-dialog__footer--responsive{flex-direction:column-reverse;align-items:stretch}}@media print{.mtrl-dialog__overlay{position:static;background:none;padding:0}.mtrl-dialog{box-shadow:none;border:1px solid #000;max-width:100%;transform:none;opacity:1}}
|
|
1
|
+
.mtrl-dialog__overlay{position:fixed;top:0;left:0;right:0;bottom:0;background-color:rgba(0,0,0,0);visibility:hidden;z-index:1000;display:flex;align-items:center;justify-content:center;overflow:auto;padding:24px;box-sizing:border-box;transition:background-color 150ms linear,visibility 0s linear 150ms}.mtrl-dialog__overlay--contained{position:absolute}.mtrl-dialog__overlay--visible{background-color:color-mix(in srgb, var(--mtrl-sys-color-scrim) 32%, transparent);visibility:visible;transition:background-color 500ms linear,visibility 0s}.mtrl-dialog{position:relative;background-color:var(--mtrl-sys-color-surface-container-high);color:var(--mtrl-sys-color-on-surface);border-radius:var(--mtrl-sys-shape-corner-extra-large, 28px);max-width:560px;min-width:280px;width:100%;margin:auto;box-shadow:0px 1px 3px rgba(0,0,0,.3),0px 4px 8px 3px rgba(0,0,0,.15);transform-origin:top center;transform:translateY(-50px) scaleY(0.35);opacity:0;pointer-events:none;transition:transform 150ms cubic-bezier(0.3, 0, 0.8, 0.15),opacity 50ms linear 100ms}.mtrl-dialog .mtrl-dialog__header,.mtrl-dialog .mtrl-dialog__content,.mtrl-dialog .mtrl-dialog__footer{opacity:0;transition:opacity 100ms linear}.mtrl-dialog--visible{transform:translateY(0) scaleY(1);opacity:1;pointer-events:auto;transition:transform 500ms cubic-bezier(0.3, 0, 0, 1),opacity 50ms linear}.mtrl-dialog--visible .mtrl-dialog__header,.mtrl-dialog--visible .mtrl-dialog__content{opacity:1;transition:opacity 250ms linear 50ms}.mtrl-dialog--visible .mtrl-dialog__footer{opacity:1;transition:opacity 300ms linear 150ms}.mtrl-dialog--small{width:80%;max-width:360px}.mtrl-dialog--medium{width:90%;max-width:560px}.mtrl-dialog--large{width:95%;max-width:560px}.mtrl-dialog--fullwidth{width:100%;max-width:none;margin:24px}.mtrl-dialog--fullscreen{width:100%;height:100%;max-width:none;max-height:none;margin:0;border-radius:0;transform-origin:center center;transform:translateY(24px)}.mtrl-dialog--fullscreen.mtrl-dialog--visible{transform:translateY(0)}.mtrl-dialog--slide-up{transform:translateY(24px) scaleY(0.35)}.mtrl-dialog--slide-up.mtrl-dialog--visible{transform:translateY(0) scaleY(1)}.mtrl-dialog--slide-down{transform:translateY(-24px) scaleY(0.35)}.mtrl-dialog--slide-down.mtrl-dialog--visible{transform:translateY(0) scaleY(1)}.mtrl-dialog--fade{transform:none}.mtrl-dialog--fade.mtrl-dialog--visible{transform:none}.mtrl-dialog--scale{transform-origin:center center;transform:scale(0.8)}.mtrl-dialog--scale.mtrl-dialog--visible{transform:scale(1)}dialog.mtrl-dialog{position:fixed;inset:0;height:fit-content;max-height:calc(100% - 48px);padding:0;border:0;overflow:visible;transition:transform 150ms cubic-bezier(0.3, 0, 0.8, 0.15),opacity 50ms linear 100ms,display 150ms allow-discrete,overlay 150ms allow-discrete}dialog.mtrl-dialog.mtrl-dialog--visible{transform:none;transition:transform 500ms cubic-bezier(0.3, 0, 0, 1),opacity 50ms linear}dialog.mtrl-dialog.mtrl-dialog--fullwidth{width:auto}dialog.mtrl-dialog.mtrl-dialog--fullscreen{height:100%;max-height:none}dialog.mtrl-dialog::backdrop{background-color:rgba(0,0,0,0);transition:background-color 150ms linear,display 150ms allow-discrete,overlay 150ms allow-discrete}dialog.mtrl-dialog.mtrl-dialog--visible::backdrop{background-color:color-mix(in srgb, var(--mtrl-sys-color-scrim) 32%, transparent);transition:background-color 500ms linear}.mtrl-dialog__icon{display:flex;align-items:center;justify-content:center;padding:24px 24px 0 24px;color:var(--mtrl-sys-color-secondary)}.mtrl-dialog__icon svg,.mtrl-dialog__icon .mtrl-dialog__icon-content{width:24px;height:24px}.mtrl-dialog__icon+.mtrl-dialog__header .mtrl-dialog__header-content{text-align:center}.mtrl-dialog__icon+.mtrl-dialog__header .mtrl-dialog__header-title{text-align:center}.mtrl-dialog__icon+.mtrl-dialog__header .mtrl-dialog__header-subtitle{text-align:center}.mtrl-dialog__header{display:flex;align-items:flex-start;justify-content:space-between;padding:24px 24px 16px 24px}.mtrl-dialog__icon+.mtrl-dialog__header{padding-top:16px}.mtrl-dialog__header-content{flex:1}.mtrl-dialog__header-title{margin:0;color:var(--mtrl-sys-color-on-surface);font-family:var(--mtrl-ref-typeface-brand, Roboto, sans-serif);font-size:24px;line-height:32px;letter-spacing:0;font-weight:400}.mtrl-dialog__header-subtitle{margin:4px 0 0 0;font-family:var(--mtrl-ref-typeface-plain, Roboto, sans-serif);font-size:14px;line-height:20px;letter-spacing:.25px;font-weight:400;color:var(--mtrl-sys-color-on-surface-variant)}.mtrl-dialog__header-close{display:flex;align-items:center;justify-content:center;width:40px;height:40px;margin:-8px -8px 0 0;padding:8px;background:rgba(0,0,0,0);border:none;border-radius:50%;cursor:pointer;color:var(--mtrl-sys-color-on-surface-variant);transition:background-color 100ms cubic-bezier(0.2, 0, 0, 1);position:relative}.mtrl-dialog__header-close:hover{background-color:color-mix(in srgb, var(--mtrl-sys-color-on-surface) 8%, transparent)}.mtrl-dialog__header-close:focus{outline:none;background-color:color-mix(in srgb, var(--mtrl-sys-color-on-surface) 10%, transparent)}.mtrl-dialog__header-close:focus-visible{outline:2px solid var(--mtrl-sys-color-primary);outline-offset:2px}.mtrl-dialog__header-close:active{background-color:color-mix(in srgb, var(--mtrl-sys-color-on-surface) 10%, transparent)}.mtrl-dialog__header-close svg{width:24px;height:24px}.mtrl-dialog__header-close::after{content:"";position:absolute;width:48px;height:48px;top:50%;left:50%;transform:translate(-50%, -50%)}:where(.mtrl-rtl) .mtrl-dialog__header-close,:where(:host(.mtrl-rtl)) .mtrl-dialog__header-close,[dir=rtl] .mtrl-dialog__header-close:not(:where(.mtrl-ltr,.mtrl-ltr *)){margin:-8px 0 0 -8px}.mtrl-dialog__header:empty{display:none}.mtrl-dialog__header:not(:has(*))+.mtrl-dialog__content,.mtrl-dialog>.mtrl-dialog__content:first-child{padding-top:24px}.mtrl-dialog__content{padding:0 24px;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;overflow:visible}.mtrl-dialog__content--scrollable{overflow-y:auto;max-height:60vh;scrollbar-width:thin;scrollbar-color:rgba(0,0,0,.2) rgba(0,0,0,.05)}.mtrl-dialog__content--scrollable::-webkit-scrollbar{width:8px}.mtrl-dialog__content--scrollable::-webkit-scrollbar-track{background:rgba(0,0,0,.05)}.mtrl-dialog__content--scrollable::-webkit-scrollbar-thumb{background:rgba(0,0,0,.2);border-radius:4px}.mtrl-dialog__content p{margin:0 0 16px 0}.mtrl-dialog__content p:last-child{margin-bottom:0}.mtrl-dialog__content--emphasis{color:var(--mtrl-sys-color-on-surface)}.mtrl-dialog__content:last-child{padding-bottom:24px}.mtrl-dialog__footer{display:flex;align-items:center;justify-content:flex-end;padding:24px 24px 24px 24px;gap:8px}.mtrl-dialog__footer--left{justify-content:flex-start}.mtrl-dialog__footer--center{justify-content:center}.mtrl-dialog__footer--space-between{justify-content:space-between}.mtrl-dialog__footer--stacked{flex-direction:column-reverse;align-items:stretch;gap:8px}.mtrl-dialog--fullscreen{display:flex;flex-direction:column}.mtrl-dialog--fullscreen .mtrl-dialog__header{display:flex;align-items:center;min-height:56px;padding:0 24px;gap:8px}.mtrl-dialog--fullscreen .mtrl-dialog__header-close{order:-1;margin:0 0 0 -8px}:where(.mtrl-rtl) .mtrl-dialog--fullscreen .mtrl-dialog__header-close,:where(:host(.mtrl-rtl)) .mtrl-dialog--fullscreen .mtrl-dialog__header-close,[dir=rtl] .mtrl-dialog--fullscreen .mtrl-dialog__header-close:not(:where(.mtrl-ltr,.mtrl-ltr *)){margin:0 -8px 0 0}.mtrl-dialog--fullscreen .mtrl-dialog__header-title{font-family:var(--mtrl-ref-typeface-brand, Roboto, sans-serif);font-size:22px;line-height:28px;letter-spacing:0;font-weight:400;text-align:start}.mtrl-dialog--fullscreen .mtrl-dialog__content{flex:1;overflow-y:auto;padding:24px}.mtrl-dialog--fullscreen .mtrl-dialog__footer{min-height:56px;padding:0 24px;box-sizing:border-box}.mtrl-dialog__header-divider,.mtrl-dialog__footer-divider{margin:0;border:none;height:1px;background-color:var(--mtrl-sys-color-outline-variant)}@media(prefers-reduced-motion: reduce){.mtrl-dialog,.mtrl-dialog--visible,.mtrl-dialog__overlay,.mtrl-dialog__overlay--visible{transition:opacity 100ms linear}.mtrl-dialog,.mtrl-dialog--visible,.mtrl-dialog--scale,.mtrl-dialog--slide-up,.mtrl-dialog--slide-down,.mtrl-dialog--fullscreen{transform:none}}@media(forced-colors: active){.mtrl-dialog{border:2px solid CurrentColor}.mtrl-dialog__header-divider,.mtrl-dialog__footer-divider{background-color:CurrentColor}.mtrl-dialog__header-close:focus-visible{outline:2px solid CurrentColor}}@media(max-width: 600px){.mtrl-dialog{min-width:280px;width:calc(100% - 32px);max-width:100%;margin:16px;transform-origin:bottom center}.mtrl-dialog--fullscreen{width:100%;height:100%;margin:0;transform-origin:center center}.mtrl-dialog__overlay{padding:16px;align-items:flex-end}.mtrl-dialog__overlay.mtrl-dialog--fullscreen{padding:0}.mtrl-dialog__content--scrollable{max-height:50vh}.mtrl-dialog--slide-up{transform:translateY(24px)}.mtrl-dialog--slide-up.mtrl-dialog--visible{transform:translateY(0)}.mtrl-dialog__footer--responsive{flex-direction:column-reverse;align-items:stretch}}@media print{.mtrl-dialog__overlay{position:static;background:none;padding:0}.mtrl-dialog{box-shadow:none;border:1px solid #000;max-width:100%;transform:none;opacity:1}}
|
|
@@ -2,4 +2,4 @@ import "./ripple.js";
|
|
|
2
2
|
import "./button.js";
|
|
3
3
|
import "./divider.js";
|
|
4
4
|
import { registerStyles } from "../styles.js";
|
|
5
|
-
registerStyles({ "dialog": ".mtrl-dialog__overlay{position:fixed;top:0;left:0;right:0;bottom:0;background-color:rgba(0,0,0,0);visibility:hidden;z-index:1000;display:flex;align-items:center;justify-content:center;overflow:auto;padding:24px;box-sizing:border-box;transition:background-color 150ms linear,visibility 0s linear 150ms}.mtrl-dialog__overlay--visible{background-color:color-mix(in srgb, var(--mtrl-sys-color-scrim) 32%, transparent);visibility:visible;transition:background-color 500ms linear,visibility 0s}.mtrl-dialog{position:relative;background-color:var(--mtrl-sys-color-surface-container-high);color:var(--mtrl-sys-color-on-surface);border-radius:var(--mtrl-sys-shape-corner-extra-large, 28px);max-width:560px;min-width:280px;width:100%;margin:auto;box-shadow:0px 1px 3px rgba(0,0,0,.3),0px 4px 8px 3px rgba(0,0,0,.15);transform-origin:top center;transform:translateY(-50px) scaleY(0.35);opacity:0;pointer-events:none;transition:transform 150ms cubic-bezier(0.3, 0, 0.8, 0.15),opacity 50ms linear 100ms}.mtrl-dialog .mtrl-dialog__header,.mtrl-dialog .mtrl-dialog__content,.mtrl-dialog .mtrl-dialog__footer{opacity:0;transition:opacity 100ms linear}.mtrl-dialog--visible{transform:translateY(0) scaleY(1);opacity:1;pointer-events:auto;transition:transform 500ms cubic-bezier(0.3, 0, 0, 1),opacity 50ms linear}.mtrl-dialog--visible .mtrl-dialog__header,.mtrl-dialog--visible .mtrl-dialog__content{opacity:1;transition:opacity 250ms linear 50ms}.mtrl-dialog--visible .mtrl-dialog__footer{opacity:1;transition:opacity 300ms linear 150ms}.mtrl-dialog--small{width:80%;max-width:360px}.mtrl-dialog--medium{width:90%;max-width:560px}.mtrl-dialog--large{width:95%;max-width:560px}.mtrl-dialog--fullwidth{width:100%;max-width:none;margin:24px}.mtrl-dialog--fullscreen{width:100%;height:100%;max-width:none;max-height:none;margin:0;border-radius:0;transform-origin:center center;transform:translateY(24px)}.mtrl-dialog--fullscreen.mtrl-dialog--visible{transform:translateY(0)}.mtrl-dialog--slide-up{transform:translateY(24px) scaleY(0.35)}.mtrl-dialog--slide-up.mtrl-dialog--visible{transform:translateY(0) scaleY(1)}.mtrl-dialog--slide-down{transform:translateY(-24px) scaleY(0.35)}.mtrl-dialog--slide-down.mtrl-dialog--visible{transform:translateY(0) scaleY(1)}.mtrl-dialog--fade{transform:none}.mtrl-dialog--fade.mtrl-dialog--visible{transform:none}.mtrl-dialog--scale{transform-origin:center center;transform:scale(0.8)}.mtrl-dialog--scale.mtrl-dialog--visible{transform:scale(1)}dialog.mtrl-dialog{position:fixed;inset:0;height:fit-content;max-height:calc(100% - 48px);padding:0;border:0;overflow:visible;transition:transform 150ms cubic-bezier(0.3, 0, 0.8, 0.15),opacity 50ms linear 100ms,display 150ms allow-discrete,overlay 150ms allow-discrete}dialog.mtrl-dialog.mtrl-dialog--visible{transform:none;transition:transform 500ms cubic-bezier(0.3, 0, 0, 1),opacity 50ms linear}dialog.mtrl-dialog.mtrl-dialog--fullwidth{width:auto}dialog.mtrl-dialog.mtrl-dialog--fullscreen{height:100%;max-height:none}dialog.mtrl-dialog::backdrop{background-color:rgba(0,0,0,0);transition:background-color 150ms linear,display 150ms allow-discrete,overlay 150ms allow-discrete}dialog.mtrl-dialog.mtrl-dialog--visible::backdrop{background-color:color-mix(in srgb, var(--mtrl-sys-color-scrim) 32%, transparent);transition:background-color 500ms linear}.mtrl-dialog__icon{display:flex;align-items:center;justify-content:center;padding:24px 24px 0 24px;color:var(--mtrl-sys-color-secondary)}.mtrl-dialog__icon svg,.mtrl-dialog__icon .mtrl-dialog__icon-content{width:24px;height:24px}.mtrl-dialog__icon+.mtrl-dialog__header .mtrl-dialog__header-content{text-align:center}.mtrl-dialog__icon+.mtrl-dialog__header .mtrl-dialog__header-title{text-align:center}.mtrl-dialog__icon+.mtrl-dialog__header .mtrl-dialog__header-subtitle{text-align:center}.mtrl-dialog__header{display:flex;align-items:flex-start;justify-content:space-between;padding:24px 24px 16px 24px}.mtrl-dialog__icon+.mtrl-dialog__header{padding-top:16px}.mtrl-dialog__header-content{flex:1}.mtrl-dialog__header-title{margin:0;color:var(--mtrl-sys-color-on-surface);font-family:var(--mtrl-ref-typeface-brand, Roboto, sans-serif);font-size:24px;line-height:32px;letter-spacing:0;font-weight:400}.mtrl-dialog__header-subtitle{margin:4px 0 0 0;font-family:var(--mtrl-ref-typeface-plain, Roboto, sans-serif);font-size:14px;line-height:20px;letter-spacing:.25px;font-weight:400;color:var(--mtrl-sys-color-on-surface-variant)}.mtrl-dialog__header-close{display:flex;align-items:center;justify-content:center;width:40px;height:40px;margin:-8px -8px 0 0;padding:8px;background:rgba(0,0,0,0);border:none;border-radius:50%;cursor:pointer;color:var(--mtrl-sys-color-on-surface-variant);transition:background-color 100ms cubic-bezier(0.2, 0, 0, 1);position:relative}.mtrl-dialog__header-close:hover{background-color:color-mix(in srgb, var(--mtrl-sys-color-on-surface) 8%, transparent)}.mtrl-dialog__header-close:focus{outline:none;background-color:color-mix(in srgb, var(--mtrl-sys-color-on-surface) 10%, transparent)}.mtrl-dialog__header-close:focus-visible{outline:2px solid var(--mtrl-sys-color-primary);outline-offset:2px}.mtrl-dialog__header-close:active{background-color:color-mix(in srgb, var(--mtrl-sys-color-on-surface) 10%, transparent)}.mtrl-dialog__header-close svg{width:24px;height:24px}.mtrl-dialog__header-close::after{content:\"\";position:absolute;width:48px;height:48px;top:50%;left:50%;transform:translate(-50%, -50%)}:where(.mtrl-rtl) .mtrl-dialog__header-close,:where(:host(.mtrl-rtl)) .mtrl-dialog__header-close,[dir=rtl] .mtrl-dialog__header-close:not(:where(.mtrl-ltr,.mtrl-ltr *)){margin:-8px 0 0 -8px}.mtrl-dialog__header:empty{display:none}.mtrl-dialog__header:not(:has(*))+.mtrl-dialog__content,.mtrl-dialog>.mtrl-dialog__content:first-child{padding-top:24px}.mtrl-dialog__content{padding:0 24px;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;overflow:visible}.mtrl-dialog__content--scrollable{overflow-y:auto;max-height:60vh;scrollbar-width:thin;scrollbar-color:rgba(0,0,0,.2) rgba(0,0,0,.05)}.mtrl-dialog__content--scrollable::-webkit-scrollbar{width:8px}.mtrl-dialog__content--scrollable::-webkit-scrollbar-track{background:rgba(0,0,0,.05)}.mtrl-dialog__content--scrollable::-webkit-scrollbar-thumb{background:rgba(0,0,0,.2);border-radius:4px}.mtrl-dialog__content p{margin:0 0 16px 0}.mtrl-dialog__content p:last-child{margin-bottom:0}.mtrl-dialog__content--emphasis{color:var(--mtrl-sys-color-on-surface)}.mtrl-dialog__content:last-child{padding-bottom:24px}.mtrl-dialog__footer{display:flex;align-items:center;justify-content:flex-end;padding:24px 24px 24px 24px;gap:8px}.mtrl-dialog__footer--left{justify-content:flex-start}.mtrl-dialog__footer--center{justify-content:center}.mtrl-dialog__footer--space-between{justify-content:space-between}.mtrl-dialog__footer--stacked{flex-direction:column-reverse;align-items:stretch;gap:8px}.mtrl-dialog--fullscreen{display:flex;flex-direction:column}.mtrl-dialog--fullscreen .mtrl-dialog__header{display:flex;align-items:center;min-height:56px;padding:0 24px;gap:8px}.mtrl-dialog--fullscreen .mtrl-dialog__header-close{order:-1;margin:0 0 0 -8px}:where(.mtrl-rtl) .mtrl-dialog--fullscreen .mtrl-dialog__header-close,:where(:host(.mtrl-rtl)) .mtrl-dialog--fullscreen .mtrl-dialog__header-close,[dir=rtl] .mtrl-dialog--fullscreen .mtrl-dialog__header-close:not(:where(.mtrl-ltr,.mtrl-ltr *)){margin:0 -8px 0 0}.mtrl-dialog--fullscreen .mtrl-dialog__header-title{font-family:var(--mtrl-ref-typeface-brand, Roboto, sans-serif);font-size:22px;line-height:28px;letter-spacing:0;font-weight:400;text-align:start}.mtrl-dialog--fullscreen .mtrl-dialog__content{flex:1;overflow-y:auto;padding:24px}.mtrl-dialog--fullscreen .mtrl-dialog__footer{min-height:56px;padding:0 24px;box-sizing:border-box}.mtrl-dialog__header-divider,.mtrl-dialog__footer-divider{margin:0;border:none;height:1px;background-color:var(--mtrl-sys-color-outline-variant)}@media(prefers-reduced-motion: reduce){.mtrl-dialog,.mtrl-dialog--visible,.mtrl-dialog__overlay,.mtrl-dialog__overlay--visible{transition:opacity 100ms linear}.mtrl-dialog,.mtrl-dialog--visible,.mtrl-dialog--scale,.mtrl-dialog--slide-up,.mtrl-dialog--slide-down,.mtrl-dialog--fullscreen{transform:none}}@media(forced-colors: active){.mtrl-dialog{border:2px solid CurrentColor}.mtrl-dialog__header-divider,.mtrl-dialog__footer-divider{background-color:CurrentColor}.mtrl-dialog__header-close:focus-visible{outline:2px solid CurrentColor}}@media(max-width: 600px){.mtrl-dialog{min-width:280px;width:calc(100% - 32px);max-width:100%;margin:16px;transform-origin:bottom center}.mtrl-dialog--fullscreen{width:100%;height:100%;margin:0;transform-origin:center center}.mtrl-dialog__overlay{padding:16px;align-items:flex-end}.mtrl-dialog__overlay.mtrl-dialog--fullscreen{padding:0}.mtrl-dialog__content--scrollable{max-height:50vh}.mtrl-dialog--slide-up{transform:translateY(24px)}.mtrl-dialog--slide-up.mtrl-dialog--visible{transform:translateY(0)}.mtrl-dialog__footer--responsive{flex-direction:column-reverse;align-items:stretch}}@media print{.mtrl-dialog__overlay{position:static;background:none;padding:0}.mtrl-dialog{box-shadow:none;border:1px solid #000;max-width:100%;transform:none;opacity:1}}" });
|
|
5
|
+
registerStyles({ "dialog": ".mtrl-dialog__overlay{position:fixed;top:0;left:0;right:0;bottom:0;background-color:rgba(0,0,0,0);visibility:hidden;z-index:1000;display:flex;align-items:center;justify-content:center;overflow:auto;padding:24px;box-sizing:border-box;transition:background-color 150ms linear,visibility 0s linear 150ms}.mtrl-dialog__overlay--contained{position:absolute}.mtrl-dialog__overlay--visible{background-color:color-mix(in srgb, var(--mtrl-sys-color-scrim) 32%, transparent);visibility:visible;transition:background-color 500ms linear,visibility 0s}.mtrl-dialog{position:relative;background-color:var(--mtrl-sys-color-surface-container-high);color:var(--mtrl-sys-color-on-surface);border-radius:var(--mtrl-sys-shape-corner-extra-large, 28px);max-width:560px;min-width:280px;width:100%;margin:auto;box-shadow:0px 1px 3px rgba(0,0,0,.3),0px 4px 8px 3px rgba(0,0,0,.15);transform-origin:top center;transform:translateY(-50px) scaleY(0.35);opacity:0;pointer-events:none;transition:transform 150ms cubic-bezier(0.3, 0, 0.8, 0.15),opacity 50ms linear 100ms}.mtrl-dialog .mtrl-dialog__header,.mtrl-dialog .mtrl-dialog__content,.mtrl-dialog .mtrl-dialog__footer{opacity:0;transition:opacity 100ms linear}.mtrl-dialog--visible{transform:translateY(0) scaleY(1);opacity:1;pointer-events:auto;transition:transform 500ms cubic-bezier(0.3, 0, 0, 1),opacity 50ms linear}.mtrl-dialog--visible .mtrl-dialog__header,.mtrl-dialog--visible .mtrl-dialog__content{opacity:1;transition:opacity 250ms linear 50ms}.mtrl-dialog--visible .mtrl-dialog__footer{opacity:1;transition:opacity 300ms linear 150ms}.mtrl-dialog--small{width:80%;max-width:360px}.mtrl-dialog--medium{width:90%;max-width:560px}.mtrl-dialog--large{width:95%;max-width:560px}.mtrl-dialog--fullwidth{width:100%;max-width:none;margin:24px}.mtrl-dialog--fullscreen{width:100%;height:100%;max-width:none;max-height:none;margin:0;border-radius:0;transform-origin:center center;transform:translateY(24px)}.mtrl-dialog--fullscreen.mtrl-dialog--visible{transform:translateY(0)}.mtrl-dialog--slide-up{transform:translateY(24px) scaleY(0.35)}.mtrl-dialog--slide-up.mtrl-dialog--visible{transform:translateY(0) scaleY(1)}.mtrl-dialog--slide-down{transform:translateY(-24px) scaleY(0.35)}.mtrl-dialog--slide-down.mtrl-dialog--visible{transform:translateY(0) scaleY(1)}.mtrl-dialog--fade{transform:none}.mtrl-dialog--fade.mtrl-dialog--visible{transform:none}.mtrl-dialog--scale{transform-origin:center center;transform:scale(0.8)}.mtrl-dialog--scale.mtrl-dialog--visible{transform:scale(1)}dialog.mtrl-dialog{position:fixed;inset:0;height:fit-content;max-height:calc(100% - 48px);padding:0;border:0;overflow:visible;transition:transform 150ms cubic-bezier(0.3, 0, 0.8, 0.15),opacity 50ms linear 100ms,display 150ms allow-discrete,overlay 150ms allow-discrete}dialog.mtrl-dialog.mtrl-dialog--visible{transform:none;transition:transform 500ms cubic-bezier(0.3, 0, 0, 1),opacity 50ms linear}dialog.mtrl-dialog.mtrl-dialog--fullwidth{width:auto}dialog.mtrl-dialog.mtrl-dialog--fullscreen{height:100%;max-height:none}dialog.mtrl-dialog::backdrop{background-color:rgba(0,0,0,0);transition:background-color 150ms linear,display 150ms allow-discrete,overlay 150ms allow-discrete}dialog.mtrl-dialog.mtrl-dialog--visible::backdrop{background-color:color-mix(in srgb, var(--mtrl-sys-color-scrim) 32%, transparent);transition:background-color 500ms linear}.mtrl-dialog__icon{display:flex;align-items:center;justify-content:center;padding:24px 24px 0 24px;color:var(--mtrl-sys-color-secondary)}.mtrl-dialog__icon svg,.mtrl-dialog__icon .mtrl-dialog__icon-content{width:24px;height:24px}.mtrl-dialog__icon+.mtrl-dialog__header .mtrl-dialog__header-content{text-align:center}.mtrl-dialog__icon+.mtrl-dialog__header .mtrl-dialog__header-title{text-align:center}.mtrl-dialog__icon+.mtrl-dialog__header .mtrl-dialog__header-subtitle{text-align:center}.mtrl-dialog__header{display:flex;align-items:flex-start;justify-content:space-between;padding:24px 24px 16px 24px}.mtrl-dialog__icon+.mtrl-dialog__header{padding-top:16px}.mtrl-dialog__header-content{flex:1}.mtrl-dialog__header-title{margin:0;color:var(--mtrl-sys-color-on-surface);font-family:var(--mtrl-ref-typeface-brand, Roboto, sans-serif);font-size:24px;line-height:32px;letter-spacing:0;font-weight:400}.mtrl-dialog__header-subtitle{margin:4px 0 0 0;font-family:var(--mtrl-ref-typeface-plain, Roboto, sans-serif);font-size:14px;line-height:20px;letter-spacing:.25px;font-weight:400;color:var(--mtrl-sys-color-on-surface-variant)}.mtrl-dialog__header-close{display:flex;align-items:center;justify-content:center;width:40px;height:40px;margin:-8px -8px 0 0;padding:8px;background:rgba(0,0,0,0);border:none;border-radius:50%;cursor:pointer;color:var(--mtrl-sys-color-on-surface-variant);transition:background-color 100ms cubic-bezier(0.2, 0, 0, 1);position:relative}.mtrl-dialog__header-close:hover{background-color:color-mix(in srgb, var(--mtrl-sys-color-on-surface) 8%, transparent)}.mtrl-dialog__header-close:focus{outline:none;background-color:color-mix(in srgb, var(--mtrl-sys-color-on-surface) 10%, transparent)}.mtrl-dialog__header-close:focus-visible{outline:2px solid var(--mtrl-sys-color-primary);outline-offset:2px}.mtrl-dialog__header-close:active{background-color:color-mix(in srgb, var(--mtrl-sys-color-on-surface) 10%, transparent)}.mtrl-dialog__header-close svg{width:24px;height:24px}.mtrl-dialog__header-close::after{content:\"\";position:absolute;width:48px;height:48px;top:50%;left:50%;transform:translate(-50%, -50%)}:where(.mtrl-rtl) .mtrl-dialog__header-close,:where(:host(.mtrl-rtl)) .mtrl-dialog__header-close,[dir=rtl] .mtrl-dialog__header-close:not(:where(.mtrl-ltr,.mtrl-ltr *)){margin:-8px 0 0 -8px}.mtrl-dialog__header:empty{display:none}.mtrl-dialog__header:not(:has(*))+.mtrl-dialog__content,.mtrl-dialog>.mtrl-dialog__content:first-child{padding-top:24px}.mtrl-dialog__content{padding:0 24px;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;overflow:visible}.mtrl-dialog__content--scrollable{overflow-y:auto;max-height:60vh;scrollbar-width:thin;scrollbar-color:rgba(0,0,0,.2) rgba(0,0,0,.05)}.mtrl-dialog__content--scrollable::-webkit-scrollbar{width:8px}.mtrl-dialog__content--scrollable::-webkit-scrollbar-track{background:rgba(0,0,0,.05)}.mtrl-dialog__content--scrollable::-webkit-scrollbar-thumb{background:rgba(0,0,0,.2);border-radius:4px}.mtrl-dialog__content p{margin:0 0 16px 0}.mtrl-dialog__content p:last-child{margin-bottom:0}.mtrl-dialog__content--emphasis{color:var(--mtrl-sys-color-on-surface)}.mtrl-dialog__content:last-child{padding-bottom:24px}.mtrl-dialog__footer{display:flex;align-items:center;justify-content:flex-end;padding:24px 24px 24px 24px;gap:8px}.mtrl-dialog__footer--left{justify-content:flex-start}.mtrl-dialog__footer--center{justify-content:center}.mtrl-dialog__footer--space-between{justify-content:space-between}.mtrl-dialog__footer--stacked{flex-direction:column-reverse;align-items:stretch;gap:8px}.mtrl-dialog--fullscreen{display:flex;flex-direction:column}.mtrl-dialog--fullscreen .mtrl-dialog__header{display:flex;align-items:center;min-height:56px;padding:0 24px;gap:8px}.mtrl-dialog--fullscreen .mtrl-dialog__header-close{order:-1;margin:0 0 0 -8px}:where(.mtrl-rtl) .mtrl-dialog--fullscreen .mtrl-dialog__header-close,:where(:host(.mtrl-rtl)) .mtrl-dialog--fullscreen .mtrl-dialog__header-close,[dir=rtl] .mtrl-dialog--fullscreen .mtrl-dialog__header-close:not(:where(.mtrl-ltr,.mtrl-ltr *)){margin:0 -8px 0 0}.mtrl-dialog--fullscreen .mtrl-dialog__header-title{font-family:var(--mtrl-ref-typeface-brand, Roboto, sans-serif);font-size:22px;line-height:28px;letter-spacing:0;font-weight:400;text-align:start}.mtrl-dialog--fullscreen .mtrl-dialog__content{flex:1;overflow-y:auto;padding:24px}.mtrl-dialog--fullscreen .mtrl-dialog__footer{min-height:56px;padding:0 24px;box-sizing:border-box}.mtrl-dialog__header-divider,.mtrl-dialog__footer-divider{margin:0;border:none;height:1px;background-color:var(--mtrl-sys-color-outline-variant)}@media(prefers-reduced-motion: reduce){.mtrl-dialog,.mtrl-dialog--visible,.mtrl-dialog__overlay,.mtrl-dialog__overlay--visible{transition:opacity 100ms linear}.mtrl-dialog,.mtrl-dialog--visible,.mtrl-dialog--scale,.mtrl-dialog--slide-up,.mtrl-dialog--slide-down,.mtrl-dialog--fullscreen{transform:none}}@media(forced-colors: active){.mtrl-dialog{border:2px solid CurrentColor}.mtrl-dialog__header-divider,.mtrl-dialog__footer-divider{background-color:CurrentColor}.mtrl-dialog__header-close:focus-visible{outline:2px solid CurrentColor}}@media(max-width: 600px){.mtrl-dialog{min-width:280px;width:calc(100% - 32px);max-width:100%;margin:16px;transform-origin:bottom center}.mtrl-dialog--fullscreen{width:100%;height:100%;margin:0;transform-origin:center center}.mtrl-dialog__overlay{padding:16px;align-items:flex-end}.mtrl-dialog__overlay.mtrl-dialog--fullscreen{padding:0}.mtrl-dialog__content--scrollable{max-height:50vh}.mtrl-dialog--slide-up{transform:translateY(24px)}.mtrl-dialog--slide-up.mtrl-dialog--visible{transform:translateY(0)}.mtrl-dialog__footer--responsive{flex-direction:column-reverse;align-items:stretch}}@media print{.mtrl-dialog__overlay{position:static;background:none;padding:0}.mtrl-dialog{box-shadow:none;border:1px solid #000;max-width:100%;transform:none;opacity:1}}" });
|