@fluentui/web-components 3.0.0-beta.22 → 3.0.0-beta.24
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/CHANGELOG.md +23 -2
- package/dist/dts/accordion/accordion.bench.d.ts +3 -0
- package/dist/dts/accordion/accordion.options.d.ts +1 -1
- package/dist/dts/accordion-item/accordion-item.bench.d.ts +3 -0
- package/dist/dts/accordion-item/accordion-item.d.ts +1 -1
- package/dist/dts/accordion-item/accordion-item.options.d.ts +2 -2
- package/dist/dts/anchor-button/anchor-button.bench.d.ts +3 -0
- package/dist/dts/anchor-button/anchor-button.d.ts +1 -1
- package/dist/dts/anchor-button/anchor-button.options.d.ts +4 -4
- package/dist/dts/avatar/avatar.bench.d.ts +3 -0
- package/dist/dts/avatar/avatar.options.d.ts +6 -6
- package/dist/dts/badge/badge.bench.d.ts +3 -0
- package/dist/dts/badge/badge.options.d.ts +5 -5
- package/dist/dts/button/button.bench.d.ts +3 -0
- package/dist/dts/button/button.options.d.ts +6 -6
- package/dist/dts/checkbox/checkbox.bench.d.ts +3 -0
- package/dist/dts/checkbox/checkbox.d.ts +1 -1
- package/dist/dts/checkbox/checkbox.options.d.ts +3 -3
- package/dist/dts/compound-button/compound-button.bench.d.ts +3 -0
- package/dist/dts/compound-button/compound-button.options.d.ts +3 -3
- package/dist/dts/counter-badge/counter-badge.bench.d.ts +3 -0
- package/dist/dts/counter-badge/counter-badge.options.d.ts +5 -5
- package/dist/dts/dialog/dialog.bench.d.ts +3 -0
- package/dist/dts/dialog/dialog.d.ts +11 -144
- package/dist/dts/dialog/dialog.options.d.ts +2 -2
- package/dist/dts/dialog/index.d.ts +1 -1
- package/dist/dts/dialog-body/define.d.ts +1 -0
- package/dist/dts/dialog-body/dialog-body.bench.d.ts +3 -0
- package/dist/dts/dialog-body/dialog-body.d.ts +14 -0
- package/dist/dts/dialog-body/dialog-body.definition.d.ts +9 -0
- package/dist/dts/dialog-body/dialog-body.styles.d.ts +4 -0
- package/dist/dts/dialog-body/dialog-body.template.d.ts +6 -0
- package/dist/dts/dialog-body/index.d.ts +4 -0
- package/dist/dts/divider/divider.bench.d.ts +3 -0
- package/dist/dts/divider/divider.options.d.ts +4 -4
- package/dist/dts/form-associated/form-associated.d.ts +4 -4
- package/dist/dts/image/image.bench.d.ts +3 -0
- package/dist/dts/image/image.options.d.ts +2 -2
- package/dist/dts/index-rollup.d.ts +1 -0
- package/dist/dts/index.d.ts +2 -1
- package/dist/dts/label/label.bench.d.ts +3 -0
- package/dist/dts/label/label.options.d.ts +2 -2
- package/dist/dts/menu/menu.bench.d.ts +3 -0
- package/dist/dts/menu-button/menu-button.bench.d.ts +3 -0
- package/dist/dts/menu-button/menu-button.options.d.ts +3 -3
- package/dist/dts/menu-item/menu-item.bench.d.ts +3 -0
- package/dist/dts/menu-item/menu-item.d.ts +2 -2
- package/dist/dts/menu-item/menu-item.options.d.ts +1 -1
- package/dist/dts/menu-list/menu-list.bench.d.ts +3 -0
- package/dist/dts/patterns/start-end.d.ts +3 -3
- package/dist/dts/progress-bar/progress-bar.bench.d.ts +3 -0
- package/dist/dts/progress-bar/progress-bar.options.d.ts +4 -4
- package/dist/dts/radio/radio.bench.d.ts +3 -0
- package/dist/dts/radio/radio.d.ts +2 -2
- package/dist/dts/radio-group/radio-group.bench.d.ts +3 -0
- package/dist/dts/radio-group/radio-group.options.d.ts +1 -1
- package/dist/dts/slider/slider.bench.d.ts +3 -0
- package/dist/dts/slider/slider.options.d.ts +4 -4
- package/dist/dts/spinner/spinner.bench.d.ts +3 -0
- package/dist/dts/spinner/spinner.options.d.ts +2 -2
- package/dist/dts/switch/switch.bench.d.ts +3 -0
- package/dist/dts/switch/switch.d.ts +1 -1
- package/dist/dts/switch/switch.options.d.ts +1 -1
- package/dist/dts/tab/tab.bench.d.ts +3 -0
- package/dist/dts/tab/tab.d.ts +1 -1
- package/dist/dts/tab-panel/tab-panel.bench.d.ts +3 -0
- package/dist/dts/tabs/tabs.bench.d.ts +3 -0
- package/dist/dts/tabs/tabs.options.d.ts +4 -4
- package/dist/dts/text/text.bench.d.ts +3 -0
- package/dist/dts/text/text.options.d.ts +4 -4
- package/dist/dts/text-input/text-input.bench.d.ts +3 -0
- package/dist/dts/text-input/text-input.d.ts +0 -1
- package/dist/dts/text-input/text-input.options.d.ts +4 -4
- package/dist/dts/toggle-button/toggle-button.bench.d.ts +3 -0
- package/dist/dts/toggle-button/toggle-button.options.d.ts +3 -3
- package/dist/dts/utils/behaviors/match-media-stylesheet-behavior.d.ts +1 -1
- package/dist/dts/utils/display.d.ts +1 -1
- package/dist/dts/utils/template-helpers.d.ts +1 -1
- package/dist/dts/utils/typings.d.ts +1 -1
- package/dist/esm/accordion/accordion.bench.js +30 -0
- package/dist/esm/accordion/accordion.bench.js.map +1 -0
- package/dist/esm/accordion-item/accordion-item.bench.js +14 -0
- package/dist/esm/accordion-item/accordion-item.bench.js.map +1 -0
- package/dist/esm/anchor-button/anchor-button.bench.js +11 -0
- package/dist/esm/anchor-button/anchor-button.bench.js.map +1 -0
- package/dist/esm/avatar/avatar.bench.js +10 -0
- package/dist/esm/avatar/avatar.bench.js.map +1 -0
- package/dist/esm/badge/badge.bench.js +11 -0
- package/dist/esm/badge/badge.bench.js.map +1 -0
- package/dist/esm/button/button.bench.js +11 -0
- package/dist/esm/button/button.bench.js.map +1 -0
- package/dist/esm/button/button.js +26 -26
- package/dist/esm/button/button.js.map +1 -1
- package/dist/esm/button/button.styles.js +27 -27
- package/dist/esm/button/button.styles.js.map +1 -1
- package/dist/esm/checkbox/checkbox.bench.js +11 -0
- package/dist/esm/checkbox/checkbox.bench.js.map +1 -0
- package/dist/esm/compound-button/compound-button.bench.js +15 -0
- package/dist/esm/compound-button/compound-button.bench.js.map +1 -0
- package/dist/esm/counter-badge/counter-badge.bench.js +11 -0
- package/dist/esm/counter-badge/counter-badge.bench.js.map +1 -0
- package/dist/esm/dialog/dialog.bench.js +11 -0
- package/dist/esm/dialog/dialog.bench.js.map +1 -0
- package/dist/esm/dialog/dialog.js +31 -304
- package/dist/esm/dialog/dialog.js.map +1 -1
- package/dist/esm/dialog/dialog.options.js +1 -1
- package/dist/esm/dialog/dialog.options.js.map +1 -1
- package/dist/esm/dialog/dialog.styles.js +61 -84
- package/dist/esm/dialog/dialog.styles.js.map +1 -1
- package/dist/esm/dialog/dialog.template.js +17 -54
- package/dist/esm/dialog/dialog.template.js.map +1 -1
- package/dist/esm/dialog/index.js +1 -1
- package/dist/esm/dialog/index.js.map +1 -1
- package/dist/esm/dialog-body/define.js +4 -0
- package/dist/esm/dialog-body/define.js.map +1 -0
- package/dist/esm/dialog-body/dialog-body.bench.js +11 -0
- package/dist/esm/dialog-body/dialog-body.bench.js.map +1 -0
- package/dist/esm/dialog-body/dialog-body.definition.js +17 -0
- package/dist/esm/dialog-body/dialog-body.definition.js.map +1 -0
- package/dist/esm/dialog-body/dialog-body.js +22 -0
- package/dist/esm/dialog-body/dialog-body.js.map +1 -0
- package/dist/esm/dialog-body/dialog-body.styles.js +79 -0
- package/dist/esm/dialog-body/dialog-body.styles.js.map +1 -0
- package/dist/esm/dialog-body/dialog-body.template.js +42 -0
- package/dist/esm/dialog-body/dialog-body.template.js.map +1 -0
- package/dist/esm/dialog-body/index.js +5 -0
- package/dist/esm/dialog-body/index.js.map +1 -0
- package/dist/esm/divider/divider.bench.js +10 -0
- package/dist/esm/divider/divider.bench.js.map +1 -0
- package/dist/esm/form-associated/form-associated.js +66 -66
- package/dist/esm/form-associated/form-associated.js.map +1 -1
- package/dist/esm/image/image.bench.js +14 -0
- package/dist/esm/image/image.bench.js.map +1 -0
- package/dist/esm/index-rollup.js +1 -0
- package/dist/esm/index-rollup.js.map +1 -1
- package/dist/esm/index.js +2 -1
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/label/label.bench.js +11 -0
- package/dist/esm/label/label.bench.js.map +1 -0
- package/dist/esm/menu/menu.bench.js +31 -0
- package/dist/esm/menu/menu.bench.js.map +1 -0
- package/dist/esm/menu-button/menu-button.bench.js +11 -0
- package/dist/esm/menu-button/menu-button.bench.js.map +1 -0
- package/dist/esm/menu-item/menu-item.bench.js +11 -0
- package/dist/esm/menu-item/menu-item.bench.js.map +1 -0
- package/dist/esm/menu-list/menu-list.bench.js +21 -0
- package/dist/esm/menu-list/menu-list.bench.js.map +1 -0
- package/dist/esm/progress-bar/progress-bar.bench.js +10 -0
- package/dist/esm/progress-bar/progress-bar.bench.js.map +1 -0
- package/dist/esm/radio/radio.bench.js +11 -0
- package/dist/esm/radio/radio.bench.js.map +1 -0
- package/dist/esm/radio/radio.js +11 -11
- package/dist/esm/radio/radio.js.map +1 -1
- package/dist/esm/radio-group/radio-group.bench.js +21 -0
- package/dist/esm/radio-group/radio-group.bench.js.map +1 -0
- package/dist/esm/slider/slider.bench.js +10 -0
- package/dist/esm/slider/slider.bench.js.map +1 -0
- package/dist/esm/slider/slider.template.js +1 -1
- package/dist/esm/slider/slider.template.js.map +1 -1
- package/dist/esm/spinner/spinner.bench.js +10 -0
- package/dist/esm/spinner/spinner.bench.js.map +1 -0
- package/dist/esm/switch/switch.bench.js +11 -0
- package/dist/esm/switch/switch.bench.js.map +1 -0
- package/dist/esm/switch/switch.js +5 -5
- package/dist/esm/switch/switch.js.map +1 -1
- package/dist/esm/tab/tab.bench.js +11 -0
- package/dist/esm/tab/tab.bench.js.map +1 -0
- package/dist/esm/tab-panel/tab-panel.bench.js +13 -0
- package/dist/esm/tab-panel/tab-panel.bench.js.map +1 -0
- package/dist/esm/tabs/tabs.bench.js +32 -0
- package/dist/esm/tabs/tabs.bench.js.map +1 -0
- package/dist/esm/text/text.bench.js +13 -0
- package/dist/esm/text/text.bench.js.map +1 -0
- package/dist/esm/text-input/text-input.bench.js +10 -0
- package/dist/esm/text-input/text-input.bench.js.map +1 -0
- package/dist/esm/theme/set-theme.js +10 -1
- package/dist/esm/theme/set-theme.js.map +1 -1
- package/dist/esm/toggle-button/toggle-button.bench.js +11 -0
- package/dist/esm/toggle-button/toggle-button.bench.js.map +1 -0
- package/dist/web-components.d.ts +51 -151
- package/dist/web-components.js +264 -838
- package/dist/web-components.min.js +235 -237
- package/package.json +15 -1
- package/dist/fluent-web-components.api.json +0 -29528
- package/docs/api-report.md +0 -3366
- package/playwright.config.ts +0 -24
- package/project.json +0 -6
- package/tensile.config.js +0 -22
- package/tsdoc.json +0 -44
|
@@ -1,8 +1,6 @@
|
|
|
1
1
|
import { __decorate } from "tslib";
|
|
2
2
|
import { attr, FASTElement, observable, Updates } from '@microsoft/fast-element';
|
|
3
|
-
import {
|
|
4
|
-
import { keyEscape, keyTab } from '@microsoft/fast-web-utilities';
|
|
5
|
-
import { DialogModalType } from './dialog.options.js';
|
|
3
|
+
import { DialogType } from './dialog.options.js';
|
|
6
4
|
/**
|
|
7
5
|
* A Dialog Custom HTML Element.
|
|
8
6
|
*
|
|
@@ -11,240 +9,33 @@ import { DialogModalType } from './dialog.options.js';
|
|
|
11
9
|
export class Dialog extends FASTElement {
|
|
12
10
|
constructor() {
|
|
13
11
|
super(...arguments);
|
|
14
|
-
/**
|
|
15
|
-
* @internal
|
|
16
|
-
* Indicates whether focus is being trapped within the dialog
|
|
17
|
-
*/
|
|
18
|
-
this.isTrappingFocus = false;
|
|
19
|
-
/**
|
|
20
|
-
* @public
|
|
21
|
-
* The title action elements
|
|
22
|
-
*/
|
|
23
|
-
this.titleAction = [];
|
|
24
12
|
/**
|
|
25
13
|
* @public
|
|
26
14
|
* The type of the dialog modal
|
|
27
15
|
*/
|
|
28
|
-
this.
|
|
29
|
-
/**
|
|
30
|
-
* @public
|
|
31
|
-
* Indicates whether the dialog is open
|
|
32
|
-
*/
|
|
33
|
-
this.open = false;
|
|
16
|
+
this.type = DialogType.modal;
|
|
34
17
|
/**
|
|
35
18
|
* @public
|
|
36
|
-
*
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
/**
|
|
45
|
-
* @public
|
|
46
|
-
* Method to emit an event when the dialog's open state changes
|
|
47
|
-
* @param dismissed - Indicates whether the dialog was dismissed
|
|
48
|
-
*/
|
|
49
|
-
this.onOpenChangeEvent = (dismissed = false) => {
|
|
50
|
-
this.$emit('onOpenChange', { open: this.dialog.open, dismissed: dismissed });
|
|
19
|
+
* Method to emit an event before the dialog's open state changes
|
|
20
|
+
* HTML spec proposal: https://github.com/whatwg/html/issues/9733
|
|
21
|
+
*/
|
|
22
|
+
this.emitBeforeToggle = () => {
|
|
23
|
+
this.$emit('beforetoggle', {
|
|
24
|
+
oldState: this.dialog.open ? 'open' : 'closed',
|
|
25
|
+
newState: this.dialog.open ? 'closed' : 'open',
|
|
26
|
+
});
|
|
51
27
|
};
|
|
52
28
|
/**
|
|
53
29
|
* @public
|
|
54
|
-
*
|
|
55
|
-
*
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
}
|
|
62
|
-
switch (e.key) {
|
|
63
|
-
case keyEscape:
|
|
64
|
-
if (this.modalType !== DialogModalType.alert) {
|
|
65
|
-
this.hide(true);
|
|
66
|
-
this.$emit('dismiss');
|
|
67
|
-
}
|
|
68
|
-
break;
|
|
69
|
-
default:
|
|
70
|
-
return true;
|
|
71
|
-
}
|
|
72
|
-
};
|
|
73
|
-
/**
|
|
74
|
-
* @internal
|
|
75
|
-
* Handles keydown events on the document
|
|
76
|
-
* @param e - The keydown event
|
|
77
|
-
*/
|
|
78
|
-
this.handleDocumentKeydown = (e) => {
|
|
79
|
-
if (!e.defaultPrevented && this.dialog.open) {
|
|
80
|
-
switch (e.key) {
|
|
81
|
-
case keyTab:
|
|
82
|
-
this.handleTabKeyDown(e);
|
|
83
|
-
break;
|
|
84
|
-
}
|
|
85
|
-
}
|
|
30
|
+
* Method to emit an event after the dialog's open state changes
|
|
31
|
+
* HTML spec proposal: https://github.com/whatwg/html/issues/9733
|
|
32
|
+
*/
|
|
33
|
+
this.emitToggle = () => {
|
|
34
|
+
this.$emit('toggle', {
|
|
35
|
+
oldState: this.dialog.open ? 'closed' : 'open',
|
|
36
|
+
newState: this.dialog.open ? 'open' : 'closed',
|
|
37
|
+
});
|
|
86
38
|
};
|
|
87
|
-
/**
|
|
88
|
-
* @internal
|
|
89
|
-
* Handles tab keydown events
|
|
90
|
-
* @param e - The keydown event
|
|
91
|
-
*/
|
|
92
|
-
this.handleTabKeyDown = (e) => {
|
|
93
|
-
if (!this.trapFocus || !this.dialog.open) {
|
|
94
|
-
return;
|
|
95
|
-
}
|
|
96
|
-
const bounds = this.getTabQueueBounds();
|
|
97
|
-
if (bounds.length === 1) {
|
|
98
|
-
bounds[0].focus();
|
|
99
|
-
e.preventDefault();
|
|
100
|
-
return;
|
|
101
|
-
}
|
|
102
|
-
if (e.shiftKey && e.target === bounds[0]) {
|
|
103
|
-
bounds[bounds.length - 1].focus();
|
|
104
|
-
e.preventDefault();
|
|
105
|
-
}
|
|
106
|
-
else if (!e.shiftKey && e.target === bounds[bounds.length - 1]) {
|
|
107
|
-
bounds[0].focus();
|
|
108
|
-
e.preventDefault();
|
|
109
|
-
}
|
|
110
|
-
return;
|
|
111
|
-
};
|
|
112
|
-
/**
|
|
113
|
-
* @internal
|
|
114
|
-
* Gets the bounds of the tab queue
|
|
115
|
-
* @returns (HTMLElement | SVGElement)[]
|
|
116
|
-
*/
|
|
117
|
-
this.getTabQueueBounds = () => {
|
|
118
|
-
const bounds = [];
|
|
119
|
-
return Dialog.reduceTabbableItems(bounds, this);
|
|
120
|
-
};
|
|
121
|
-
/**
|
|
122
|
-
* @internal
|
|
123
|
-
* Focuses the first element in the tab queue
|
|
124
|
-
*/
|
|
125
|
-
this.focusFirstElement = () => {
|
|
126
|
-
const bounds = this.getTabQueueBounds();
|
|
127
|
-
if (bounds.length > 0) {
|
|
128
|
-
bounds[0].focus();
|
|
129
|
-
}
|
|
130
|
-
else {
|
|
131
|
-
if (this.dialog instanceof HTMLElement) {
|
|
132
|
-
this.dialog.focus();
|
|
133
|
-
}
|
|
134
|
-
}
|
|
135
|
-
};
|
|
136
|
-
/**
|
|
137
|
-
* @internal
|
|
138
|
-
* Determines if focus should be forced
|
|
139
|
-
* @param currentFocusElement - The currently focused element
|
|
140
|
-
* @returns boolean
|
|
141
|
-
*/
|
|
142
|
-
this.shouldForceFocus = (currentFocusElement) => {
|
|
143
|
-
return this.isTrappingFocus && !this.contains(currentFocusElement);
|
|
144
|
-
};
|
|
145
|
-
/**
|
|
146
|
-
* @internal
|
|
147
|
-
* Determines if focus should be trapped
|
|
148
|
-
* @returns boolean
|
|
149
|
-
*/
|
|
150
|
-
this.shouldTrapFocus = () => {
|
|
151
|
-
return this.trapFocus && this.dialog.open;
|
|
152
|
-
};
|
|
153
|
-
/**
|
|
154
|
-
* @internal
|
|
155
|
-
* Handles focus events on the document
|
|
156
|
-
* @param e - The focus event
|
|
157
|
-
*/
|
|
158
|
-
this.handleDocumentFocus = (e) => {
|
|
159
|
-
if (!e.defaultPrevented && this.shouldForceFocus(e.target)) {
|
|
160
|
-
this.focusFirstElement();
|
|
161
|
-
e.preventDefault();
|
|
162
|
-
}
|
|
163
|
-
};
|
|
164
|
-
/**
|
|
165
|
-
* @internal
|
|
166
|
-
* Updates the state of focus trapping
|
|
167
|
-
* @param shouldTrapFocusOverride - Optional override for whether focus should be trapped
|
|
168
|
-
*/
|
|
169
|
-
this.updateTrapFocus = (shouldTrapFocusOverride) => {
|
|
170
|
-
const shouldTrapFocus = shouldTrapFocusOverride === undefined ? this.shouldTrapFocus() : shouldTrapFocusOverride;
|
|
171
|
-
if (shouldTrapFocus && !this.isTrappingFocus) {
|
|
172
|
-
this.isTrappingFocus = true;
|
|
173
|
-
// Add an event listener for focusin events if we are trapping focus
|
|
174
|
-
document.addEventListener('focusin', this.handleDocumentFocus);
|
|
175
|
-
Updates.enqueue(() => {
|
|
176
|
-
if (this.shouldForceFocus(document.activeElement)) {
|
|
177
|
-
this.focusFirstElement();
|
|
178
|
-
}
|
|
179
|
-
});
|
|
180
|
-
}
|
|
181
|
-
else if (!shouldTrapFocus && this.isTrappingFocus) {
|
|
182
|
-
this.isTrappingFocus = false;
|
|
183
|
-
// remove event listener if we are not trapping focus
|
|
184
|
-
document.removeEventListener('focusin', this.handleDocumentFocus);
|
|
185
|
-
}
|
|
186
|
-
};
|
|
187
|
-
}
|
|
188
|
-
/**
|
|
189
|
-
* @public
|
|
190
|
-
* Lifecycle method called when the element is connected to the DOM
|
|
191
|
-
*/
|
|
192
|
-
connectedCallback() {
|
|
193
|
-
super.connectedCallback();
|
|
194
|
-
document.addEventListener('keydown', this.handleDocumentKeydown);
|
|
195
|
-
Updates.enqueue(() => {
|
|
196
|
-
this.updateTrapFocus();
|
|
197
|
-
this.setComponent();
|
|
198
|
-
});
|
|
199
|
-
}
|
|
200
|
-
/**
|
|
201
|
-
* @public
|
|
202
|
-
* Lifecycle method called when the element is disconnected from the DOM
|
|
203
|
-
*/
|
|
204
|
-
disconnectedCallback() {
|
|
205
|
-
super.disconnectedCallback();
|
|
206
|
-
document.removeEventListener('keydown', this.handleDocumentKeydown);
|
|
207
|
-
this.updateTrapFocus(false);
|
|
208
|
-
}
|
|
209
|
-
/**
|
|
210
|
-
* @public
|
|
211
|
-
* Method called when the 'open' attribute changes
|
|
212
|
-
*/
|
|
213
|
-
openChanged(oldValue, newValue) {
|
|
214
|
-
if (newValue !== oldValue) {
|
|
215
|
-
if (newValue && !oldValue) {
|
|
216
|
-
this.show();
|
|
217
|
-
}
|
|
218
|
-
else if (!newValue && oldValue) {
|
|
219
|
-
this.hide();
|
|
220
|
-
}
|
|
221
|
-
}
|
|
222
|
-
}
|
|
223
|
-
/**
|
|
224
|
-
* @public
|
|
225
|
-
* Method called when the 'modalType' attribute changes
|
|
226
|
-
*/
|
|
227
|
-
modalTypeChanged(oldValue, newValue) {
|
|
228
|
-
if (newValue !== oldValue) {
|
|
229
|
-
if (newValue == DialogModalType.alert || newValue == DialogModalType.modal) {
|
|
230
|
-
this.trapFocus = true;
|
|
231
|
-
}
|
|
232
|
-
else {
|
|
233
|
-
this.trapFocus = false;
|
|
234
|
-
}
|
|
235
|
-
}
|
|
236
|
-
}
|
|
237
|
-
/**
|
|
238
|
-
* @public
|
|
239
|
-
* Method to set the component's state based on its attributes
|
|
240
|
-
*/
|
|
241
|
-
setComponent() {
|
|
242
|
-
if (this.modalType == DialogModalType.modal || this.modalType == DialogModalType.alert) {
|
|
243
|
-
this.trapFocus = true;
|
|
244
|
-
}
|
|
245
|
-
else {
|
|
246
|
-
this.trapFocus = false;
|
|
247
|
-
}
|
|
248
39
|
}
|
|
249
40
|
/**
|
|
250
41
|
* @public
|
|
@@ -252,100 +43,42 @@ export class Dialog extends FASTElement {
|
|
|
252
43
|
*/
|
|
253
44
|
show() {
|
|
254
45
|
Updates.enqueue(() => {
|
|
255
|
-
|
|
46
|
+
this.emitBeforeToggle();
|
|
47
|
+
if (this.type === DialogType.alert || this.type === DialogType.modal) {
|
|
256
48
|
this.dialog.showModal();
|
|
257
|
-
this.open = true;
|
|
258
|
-
this.updateTrapFocus(true);
|
|
259
49
|
}
|
|
260
|
-
else if (this.
|
|
50
|
+
else if (this.type === DialogType.nonModal) {
|
|
261
51
|
this.dialog.show();
|
|
262
|
-
this.open = true;
|
|
263
52
|
}
|
|
264
|
-
this.
|
|
53
|
+
this.emitToggle();
|
|
265
54
|
});
|
|
266
55
|
}
|
|
267
56
|
/**
|
|
268
57
|
* @public
|
|
269
58
|
* Method to hide the dialog
|
|
270
|
-
* @param dismissed - Indicates whether the dialog was dismissed
|
|
271
59
|
*/
|
|
272
|
-
hide(
|
|
60
|
+
hide() {
|
|
61
|
+
this.emitBeforeToggle();
|
|
273
62
|
this.dialog.close();
|
|
274
|
-
this.
|
|
275
|
-
this.onOpenChangeEvent(dismissed);
|
|
63
|
+
this.emitToggle();
|
|
276
64
|
}
|
|
277
65
|
/**
|
|
278
66
|
* @public
|
|
279
|
-
*
|
|
280
|
-
*/
|
|
281
|
-
dismiss() {
|
|
282
|
-
if (this.modalType === DialogModalType.alert) {
|
|
283
|
-
return;
|
|
284
|
-
}
|
|
285
|
-
this.hide(true);
|
|
286
|
-
}
|
|
287
|
-
/**
|
|
288
|
-
* @public
|
|
289
|
-
* Handles click events on the dialog
|
|
67
|
+
* Handles click events on the dialog overlay for light-dismiss
|
|
290
68
|
* @param event - The click event
|
|
291
69
|
* @returns boolean
|
|
292
70
|
*/
|
|
293
|
-
|
|
71
|
+
clickHandler(event) {
|
|
294
72
|
event.preventDefault();
|
|
295
|
-
if (this.dialog.open && this.
|
|
296
|
-
this.
|
|
73
|
+
if (this.dialog.open && this.type !== DialogType.alert && event.target === this.dialog) {
|
|
74
|
+
this.hide();
|
|
297
75
|
}
|
|
298
76
|
return true;
|
|
299
77
|
}
|
|
300
|
-
/**
|
|
301
|
-
* @internal
|
|
302
|
-
* Reduces the list of tabbable items
|
|
303
|
-
* @param elements - The current list of elements
|
|
304
|
-
* @param element - The element to consider adding to the list
|
|
305
|
-
* @returns HTMLElement[]
|
|
306
|
-
*/
|
|
307
|
-
static reduceTabbableItems(elements, element) {
|
|
308
|
-
if (element.getAttribute('tabindex') === '-1') {
|
|
309
|
-
return elements;
|
|
310
|
-
}
|
|
311
|
-
if (isTabbable(element) || (Dialog.isFocusableFastElement(element) && Dialog.hasTabbableShadow(element))) {
|
|
312
|
-
elements.push(element);
|
|
313
|
-
return elements;
|
|
314
|
-
}
|
|
315
|
-
return Array.from(element.children).reduce((elements, currentElement) => Dialog.reduceTabbableItems(elements, currentElement), elements);
|
|
316
|
-
}
|
|
317
|
-
/**
|
|
318
|
-
* @internal
|
|
319
|
-
* Determines if an element is a focusable FASTElement
|
|
320
|
-
* @param element - The element to check
|
|
321
|
-
* @returns boolean
|
|
322
|
-
*/
|
|
323
|
-
static isFocusableFastElement(element) {
|
|
324
|
-
var _a, _b;
|
|
325
|
-
return !!((_b = (_a = element.$fastController) === null || _a === void 0 ? void 0 : _a.definition.shadowOptions) === null || _b === void 0 ? void 0 : _b.delegatesFocus);
|
|
326
|
-
}
|
|
327
|
-
/**
|
|
328
|
-
* @internal
|
|
329
|
-
* Determines if an element has a tabbable shadow
|
|
330
|
-
* @param element - The element to check
|
|
331
|
-
* @returns boolean
|
|
332
|
-
*/
|
|
333
|
-
static hasTabbableShadow(element) {
|
|
334
|
-
var _a, _b;
|
|
335
|
-
return Array.from((_b = (_a = element.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelectorAll('*')) !== null && _b !== void 0 ? _b : []).some(x => {
|
|
336
|
-
return isTabbable(x);
|
|
337
|
-
});
|
|
338
|
-
}
|
|
339
78
|
}
|
|
340
79
|
__decorate([
|
|
341
80
|
observable
|
|
342
81
|
], Dialog.prototype, "dialog", void 0);
|
|
343
|
-
__decorate([
|
|
344
|
-
observable
|
|
345
|
-
], Dialog.prototype, "titleAction", void 0);
|
|
346
|
-
__decorate([
|
|
347
|
-
observable
|
|
348
|
-
], Dialog.prototype, "defaultTitleAction", void 0);
|
|
349
82
|
__decorate([
|
|
350
83
|
attr({ attribute: 'aria-describedby' })
|
|
351
84
|
], Dialog.prototype, "ariaDescribedby", void 0);
|
|
@@ -353,12 +86,6 @@ __decorate([
|
|
|
353
86
|
attr({ attribute: 'aria-labelledby' })
|
|
354
87
|
], Dialog.prototype, "ariaLabelledby", void 0);
|
|
355
88
|
__decorate([
|
|
356
|
-
attr
|
|
357
|
-
], Dialog.prototype, "
|
|
358
|
-
__decorate([
|
|
359
|
-
attr({ mode: 'boolean' })
|
|
360
|
-
], Dialog.prototype, "open", void 0);
|
|
361
|
-
__decorate([
|
|
362
|
-
attr({ mode: 'boolean', attribute: 'no-title-action' })
|
|
363
|
-
], Dialog.prototype, "noTitleAction", void 0);
|
|
89
|
+
attr
|
|
90
|
+
], Dialog.prototype, "type", void 0);
|
|
364
91
|
//# sourceMappingURL=dialog.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dialog.js","sourceRoot":"","sources":["../../../src/dialog/dialog.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AACjF,OAAO,EAAE,UAAU,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"dialog.js","sourceRoot":"","sources":["../../../src/dialog/dialog.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AACjF,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAEjD;;;;GAIG;AACH,MAAM,OAAO,MAAO,SAAQ,WAAW;IAAvC;;QAsBE;;;WAGG;QAEI,SAAI,GAAe,UAAU,CAAC,KAAK,CAAC;QAE3C;;;;WAIG;QACI,qBAAgB,GAAG,GAAS,EAAE;YACnC,IAAI,CAAC,KAAK,CAAC,cAAc,EAAE;gBACzB,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ;gBAC9C,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM;aAC/C,CAAC,CAAC;QACL,CAAC,CAAC;QAEF;;;;WAIG;QACI,eAAU,GAAG,GAAS,EAAE;YAC7B,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE;gBACnB,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM;gBAC9C,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ;aAC/C,CAAC,CAAC;QACL,CAAC,CAAC;IAyCJ,CAAC;IAvCC;;;OAGG;IACI,IAAI;QACT,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE;YACnB,IAAI,CAAC,gBAAgB,EAAE,CAAC;YACxB,IAAI,IAAI,CAAC,IAAI,KAAK,UAAU,CAAC,KAAK,IAAI,IAAI,CAAC,IAAI,KAAK,UAAU,CAAC,KAAK,EAAE;gBACpE,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC;aACzB;iBAAM,IAAI,IAAI,CAAC,IAAI,KAAK,UAAU,CAAC,QAAQ,EAAE;gBAC5C,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;aACpB;YACD,IAAI,CAAC,UAAU,EAAE,CAAC;QACpB,CAAC,CAAC,CAAC;IACL,CAAC;IAED;;;OAGG;IACI,IAAI;QACT,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACxB,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;QACpB,IAAI,CAAC,UAAU,EAAE,CAAC;IACpB,CAAC;IAED;;;;;OAKG;IACI,YAAY,CAAC,KAAY;QAC9B,KAAK,CAAC,cAAc,EAAE,CAAC;QACvB,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,KAAK,UAAU,CAAC,KAAK,IAAI,KAAK,CAAC,MAAM,KAAK,IAAI,CAAC,MAAM,EAAE;YACtF,IAAI,CAAC,IAAI,EAAE,CAAC;SACb;QACD,OAAO,IAAI,CAAC;IACd,CAAC;CACF;AAtFC;IADC,UAAU;sCACuB;AAOlC;IADC,IAAI,CAAC,EAAE,SAAS,EAAE,kBAAkB,EAAE,CAAC;+CACR;AAOhC;IADC,IAAI,CAAC,EAAE,SAAS,EAAE,iBAAiB,EAAE,CAAC;8CACR;AAO/B;IADC,IAAI;oCACsC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dialog.options.js","sourceRoot":"","sources":["../../../src/dialog/dialog.options.ts"],"names":[],"mappings":"AAEA;;;GAGG;AACH,MAAM,CAAC,MAAM,
|
|
1
|
+
{"version":3,"file":"dialog.options.js","sourceRoot":"","sources":["../../../src/dialog/dialog.options.ts"],"names":[],"mappings":"AAEA;;;GAGG;AACH,MAAM,CAAC,MAAM,UAAU,GAAG;IACxB,KAAK,EAAE,OAAO;IACd,QAAQ,EAAE,WAAW;IACrB,KAAK,EAAE,OAAO;CACN,CAAC"}
|
|
@@ -1,101 +1,78 @@
|
|
|
1
1
|
import { css } from '@microsoft/fast-element';
|
|
2
|
-
import {
|
|
3
|
-
import { borderRadiusXLarge, colorBackgroundOverlay, colorNeutralBackground1, colorNeutralForeground1, colorTransparentStroke, fontFamilyBase, fontSizeBase300, fontSizeBase500, fontWeightRegular, fontWeightSemibold, lineHeightBase300, lineHeightBase500, shadow64, spacingHorizontalS, spacingHorizontalXXL, spacingVerticalS, spacingVerticalXXL, strokeWidthThin, } from '../theme/design-tokens.js';
|
|
2
|
+
import { borderRadiusXLarge, colorBackgroundOverlay, colorNeutralBackground1, colorNeutralForeground1, colorTransparentStroke, curveAccelerateMid, curveDecelerateMid, curveLinear, durationGentle, shadow64, strokeWidthThin, } from '../theme/design-tokens.js';
|
|
4
3
|
/** Dialog styles
|
|
5
4
|
* @public
|
|
6
5
|
*/
|
|
7
6
|
export const styles = css `
|
|
8
|
-
|
|
7
|
+
@layer base {
|
|
8
|
+
:host {
|
|
9
|
+
--dialog-backdrop: ${colorBackgroundOverlay};
|
|
10
|
+
--dialog-starting-scale: 0.85;
|
|
11
|
+
}
|
|
9
12
|
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
+
::backdrop {
|
|
14
|
+
background: var(--dialog-backdrop, rgba(0, 0, 0, 0.4));
|
|
15
|
+
}
|
|
13
16
|
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
overflow: unset;
|
|
26
|
-
position: fixed;
|
|
27
|
-
inset: 0;
|
|
28
|
-
padding: 0;
|
|
29
|
-
}
|
|
17
|
+
dialog {
|
|
18
|
+
background: ${colorNeutralBackground1};
|
|
19
|
+
border-radius: ${borderRadiusXLarge};
|
|
20
|
+
border: ${strokeWidthThin} solid ${colorTransparentStroke};
|
|
21
|
+
box-shadow: ${shadow64};
|
|
22
|
+
color: ${colorNeutralForeground1};
|
|
23
|
+
max-height: calc(-48px + 100vh);
|
|
24
|
+
padding: 0;
|
|
25
|
+
width: 100%;
|
|
26
|
+
max-width: 600px;
|
|
27
|
+
}
|
|
30
28
|
|
|
31
|
-
|
|
32
|
-
|
|
29
|
+
:host([type='non-modal']) dialog {
|
|
30
|
+
inset: 0;
|
|
31
|
+
position: fixed;
|
|
32
|
+
z-index: 2;
|
|
33
|
+
overflow: auto;
|
|
34
|
+
}
|
|
33
35
|
}
|
|
34
36
|
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
37
|
+
@layer animations {
|
|
38
|
+
/* Disable animations for reduced motion */
|
|
39
|
+
@media (prefers-reduced-motion: no-preference) {
|
|
40
|
+
dialog,
|
|
41
|
+
::backdrop {
|
|
42
|
+
transition: display allow-discrete, opacity, overlay allow-discrete, scale;
|
|
43
|
+
transition-duration: ${durationGentle};
|
|
44
|
+
transition-timing-function: ${curveDecelerateMid};
|
|
45
|
+
/* Set opacity to 0 when closed */
|
|
46
|
+
opacity: 0;
|
|
47
|
+
}
|
|
48
|
+
::backdrop {
|
|
49
|
+
transition-timing-function: ${curveLinear};
|
|
50
|
+
}
|
|
43
51
|
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
color: ${colorNeutralForeground1};
|
|
50
|
-
margin-bottom: ${spacingVerticalS};
|
|
51
|
-
display: flex;
|
|
52
|
-
justify-content: space-between;
|
|
53
|
-
align-items: flex-start;
|
|
54
|
-
column-gap: 8px;
|
|
55
|
-
}
|
|
52
|
+
/* Set opacity to 1 when open */
|
|
53
|
+
[open],
|
|
54
|
+
[open]::backdrop {
|
|
55
|
+
opacity: 1;
|
|
56
|
+
}
|
|
56
57
|
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
overflow-y: auto;
|
|
66
|
-
box-sizing: border-box;
|
|
67
|
-
}
|
|
58
|
+
/* Exit styles for dialog */
|
|
59
|
+
dialog:not([open]) {
|
|
60
|
+
/* Make small when leaving */
|
|
61
|
+
scale: var(--dialog-starting-scale);
|
|
62
|
+
/* Faster leaving the stage then entering */
|
|
63
|
+
transition-timing-function: ${curveAccelerateMid};
|
|
64
|
+
}
|
|
65
|
+
}
|
|
68
66
|
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
row-gap: ${spacingVerticalS};
|
|
75
|
-
padding-top: ${spacingVerticalXXL};
|
|
76
|
-
justify-self: stretch;
|
|
77
|
-
width: 100%;
|
|
78
|
-
}
|
|
79
|
-
::slotted([slot='action']) {
|
|
80
|
-
width: 100%;
|
|
81
|
-
}
|
|
67
|
+
@starting-style {
|
|
68
|
+
[open],
|
|
69
|
+
[open]::backdrop {
|
|
70
|
+
opacity: 0;
|
|
71
|
+
}
|
|
82
72
|
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
}
|
|
87
|
-
dialog {
|
|
88
|
-
max-width: 600px;
|
|
89
|
-
width: 100%;
|
|
90
|
-
}
|
|
91
|
-
.actions {
|
|
92
|
-
display: flex;
|
|
93
|
-
flex-direction: row;
|
|
94
|
-
justify-content: flex-end;
|
|
95
|
-
align-items: center;
|
|
96
|
-
column-gap: ${spacingHorizontalS};
|
|
97
|
-
padding-top: ${spacingVerticalS};
|
|
98
|
-
box-sizing: border-box;
|
|
73
|
+
dialog {
|
|
74
|
+
scale: var(--dialog-starting-scale);
|
|
75
|
+
}
|
|
99
76
|
}
|
|
100
77
|
}
|
|
101
78
|
`;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dialog.styles.js","sourceRoot":"","sources":["../../../src/dialog/dialog.styles.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,yBAAyB,CAAC;AAC9C,OAAO,
|
|
1
|
+
{"version":3,"file":"dialog.styles.js","sourceRoot":"","sources":["../../../src/dialog/dialog.styles.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,yBAAyB,CAAC;AAC9C,OAAO,EACL,kBAAkB,EAClB,sBAAsB,EACtB,uBAAuB,EACvB,uBAAuB,EACvB,sBAAsB,EACtB,kBAAkB,EAClB,kBAAkB,EAClB,WAAW,EACX,cAAc,EACd,QAAQ,EACR,eAAe,GAChB,MAAM,2BAA2B,CAAC;AAEnC;;GAEG;AACH,MAAM,CAAC,MAAM,MAAM,GAAG,GAAG,CAAA;;;2BAGE,sBAAsB;;;;;;;;;oBAS7B,uBAAuB;uBACpB,kBAAkB;gBACzB,eAAe,UAAU,sBAAsB;oBAC3C,QAAQ;eACb,uBAAuB;;;;;;;;;;;;;;;;;;;;;+BAqBP,cAAc;sCACP,kBAAkB;;;;;sCAKlB,WAAW;;;;;;;;;;;;;;sCAcX,kBAAkB;;;;;;;;;;;;;;;CAevD,CAAC"}
|