@spectrum-web-components/overlay 0.18.0 → 0.18.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/active-overlay.dev.js +1 -0
- package/active-overlay.dev.js.map +1 -1
- package/active-overlay.js +1 -1
- package/active-overlay.js.map +2 -2
- package/overlay-trigger.dev.js +1 -0
- package/overlay-trigger.dev.js.map +1 -1
- package/overlay-trigger.js +1 -1
- package/overlay-trigger.js.map +2 -2
- package/package.json +4 -4
- package/src/ActiveOverlay.dev.js +60 -24
- package/src/ActiveOverlay.dev.js.map +3 -3
- package/src/ActiveOverlay.js +3 -3
- package/src/ActiveOverlay.js.map +3 -3
- package/src/OverlayTrigger.dev.js +51 -18
- package/src/OverlayTrigger.dev.js.map +1 -1
- package/src/OverlayTrigger.js +2 -2
- package/src/OverlayTrigger.js.map +2 -2
- package/src/VirtualTrigger.dev.js +1 -0
- package/src/VirtualTrigger.dev.js.map +1 -1
- package/src/VirtualTrigger.js +1 -1
- package/src/VirtualTrigger.js.map +2 -2
- package/src/active-overlay.css.dev.js +1 -0
- package/src/active-overlay.css.dev.js.map +1 -1
- package/src/active-overlay.css.js +1 -1
- package/src/active-overlay.css.js.map +2 -2
- package/src/index.dev.js +1 -0
- package/src/index.dev.js.map +1 -1
- package/src/index.js +1 -1
- package/src/index.js.map +1 -1
- package/src/loader.dev.js +1 -0
- package/src/loader.dev.js.map +1 -1
- package/src/loader.js +1 -1
- package/src/loader.js.map +2 -2
- package/src/overlay-events.dev.js +1 -0
- package/src/overlay-events.dev.js.map +1 -1
- package/src/overlay-events.js +1 -1
- package/src/overlay-events.js.map +2 -2
- package/src/overlay-stack.d.ts +1 -1
- package/src/overlay-stack.dev.js +97 -46
- package/src/overlay-stack.dev.js.map +3 -3
- package/src/overlay-stack.js +2 -2
- package/src/overlay-stack.js.map +3 -3
- package/src/overlay-timer.dev.js +1 -0
- package/src/overlay-timer.dev.js.map +1 -1
- package/src/overlay-timer.js +1 -1
- package/src/overlay-timer.js.map +2 -2
- package/src/overlay-trigger.css.dev.js +1 -0
- package/src/overlay-trigger.css.dev.js.map +1 -1
- package/src/overlay-trigger.css.js +1 -1
- package/src/overlay-trigger.css.js.map +2 -2
- package/src/overlay-types.dev.js +1 -0
- package/src/overlay-types.js +1 -0
- package/src/overlay-utils.dev.js +4 -1
- package/src/overlay-utils.dev.js.map +1 -1
- package/src/overlay-utils.js +1 -1
- package/src/overlay-utils.js.map +2 -2
- package/src/overlay.dev.js +1 -0
- package/src/overlay.dev.js.map +1 -1
- package/src/overlay.js +1 -1
- package/src/overlay.js.map +2 -2
- package/stories/overlay-story-components.js +219 -11
- package/stories/overlay-story-components.js.map +2 -2
- package/stories/overlay.stories.js +354 -55
- package/stories/overlay.stories.js.map +1 -1
- package/sync/overlay-trigger.dev.js +1 -0
- package/sync/overlay-trigger.dev.js.map +1 -1
- package/sync/overlay-trigger.js +1 -1
- package/sync/overlay-trigger.js.map +2 -2
- package/test/benchmark/basic-test.js +10 -2
- package/test/benchmark/basic-test.js.map +1 -1
- package/test/overlay-lifecycle.test.js +149 -6
- package/test/overlay-lifecycle.test.js.map +1 -1
- package/test/overlay-timer.test.js +117 -1
- package/test/overlay-timer.test.js.map +2 -2
- package/test/overlay-trigger-click.test.js +66 -7
- package/test/overlay-trigger-click.test.js.map +1 -1
- package/test/overlay-trigger-extended.test.js +187 -4
- package/test/overlay-trigger-extended.test.js.map +1 -1
- package/test/overlay-trigger-hover-click.test.js +68 -3
- package/test/overlay-trigger-hover-click.test.js.map +1 -1
- package/test/overlay-trigger-hover.test.js +172 -7
- package/test/overlay-trigger-hover.test.js.map +2 -2
- package/test/overlay-trigger-longpress.test.js +233 -9
- package/test/overlay-trigger-longpress.test.js.map +2 -2
- package/test/overlay-trigger-sync.test.js +536 -4
- package/test/overlay-trigger-sync.test.js.map +2 -2
- package/test/overlay-trigger.test.js +536 -4
- package/test/overlay-trigger.test.js.map +2 -2
- package/test/overlay.test-vrt.js +4 -1
- package/test/overlay.test-vrt.js.map +1 -1
- package/test/overlay.test.js +565 -11
- package/test/overlay.test.js.map +1 -1
|
@@ -1,4 +1,34 @@
|
|
|
1
|
-
|
|
1
|
+
"use strict";
|
|
2
|
+
import { html } from "@spectrum-web-components/base";
|
|
3
|
+
import { ifDefined } from "@spectrum-web-components/base/src/directives.js";
|
|
4
|
+
import {
|
|
5
|
+
openOverlay,
|
|
6
|
+
Overlay,
|
|
7
|
+
VirtualTrigger
|
|
8
|
+
} from "@spectrum-web-components/overlay";
|
|
9
|
+
import "@spectrum-web-components/action-button/sp-action-button.js";
|
|
10
|
+
import "@spectrum-web-components/action-group/sp-action-group.js";
|
|
11
|
+
import "@spectrum-web-components/button/sp-button.js";
|
|
12
|
+
import "@spectrum-web-components/dialog/sp-dialog-wrapper.js";
|
|
13
|
+
import "@spectrum-web-components/field-label/sp-field-label.js";
|
|
14
|
+
import "@spectrum-web-components/icons-workflow/icons/sp-icon-magnify.js";
|
|
15
|
+
import "@spectrum-web-components/icons-workflow/icons/sp-icon-open-in.js";
|
|
16
|
+
import "@spectrum-web-components/overlay/overlay-trigger.js";
|
|
17
|
+
import "@spectrum-web-components/picker/sp-picker.js";
|
|
18
|
+
import "@spectrum-web-components/menu/sp-menu.js";
|
|
19
|
+
import "@spectrum-web-components/menu/sp-menu-item.js";
|
|
20
|
+
import "@spectrum-web-components/menu/sp-menu-divider.js";
|
|
21
|
+
import "@spectrum-web-components/popover/sp-popover.js";
|
|
22
|
+
import "@spectrum-web-components/slider/sp-slider.js";
|
|
23
|
+
import "@spectrum-web-components/radio/sp-radio.js";
|
|
24
|
+
import "@spectrum-web-components/radio/sp-radio-group.js";
|
|
25
|
+
import "@spectrum-web-components/tooltip/sp-tooltip.js";
|
|
26
|
+
import "@spectrum-web-components/theme/sp-theme.js";
|
|
27
|
+
import "@spectrum-web-components/theme/src/themes.js";
|
|
28
|
+
import "../../../projects/story-decorator/src/types.js";
|
|
29
|
+
import "./overlay-story-components.js";
|
|
30
|
+
import { render } from "lit-html";
|
|
31
|
+
const storyStyles = html`
|
|
2
32
|
<style>
|
|
3
33
|
html,
|
|
4
34
|
body,
|
|
@@ -33,20 +63,73 @@ import{html as o}from"@spectrum-web-components/base";import{ifDefined as d}from"
|
|
|
33
63
|
display: inline-block;
|
|
34
64
|
}
|
|
35
65
|
</style>
|
|
36
|
-
`;
|
|
37
|
-
|
|
66
|
+
`;
|
|
67
|
+
export default {
|
|
68
|
+
title: "Overlay",
|
|
69
|
+
argTypes: {
|
|
70
|
+
offset: { control: "number" },
|
|
71
|
+
placement: {
|
|
72
|
+
control: {
|
|
73
|
+
type: "inline-radio",
|
|
74
|
+
options: [
|
|
75
|
+
"top",
|
|
76
|
+
"top-start",
|
|
77
|
+
"top-end",
|
|
78
|
+
"bottom",
|
|
79
|
+
"bottom-start",
|
|
80
|
+
"bottom-end",
|
|
81
|
+
"left",
|
|
82
|
+
"left-start",
|
|
83
|
+
"left-end",
|
|
84
|
+
"right",
|
|
85
|
+
"right-start",
|
|
86
|
+
"right-end",
|
|
87
|
+
"auto",
|
|
88
|
+
"auto-start",
|
|
89
|
+
"auto-end",
|
|
90
|
+
"none"
|
|
91
|
+
]
|
|
92
|
+
}
|
|
93
|
+
},
|
|
94
|
+
type: {
|
|
95
|
+
control: {
|
|
96
|
+
type: "inline-radio",
|
|
97
|
+
options: ["modal", "replace", "inline"]
|
|
98
|
+
}
|
|
99
|
+
},
|
|
100
|
+
colorStop: {
|
|
101
|
+
control: {
|
|
102
|
+
type: "inline-radio",
|
|
103
|
+
options: ["light", "dark"]
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
},
|
|
107
|
+
args: {
|
|
108
|
+
placement: "bottom",
|
|
109
|
+
offset: 0,
|
|
110
|
+
colorStop: "light"
|
|
111
|
+
}
|
|
112
|
+
};
|
|
113
|
+
const template = ({
|
|
114
|
+
placement,
|
|
115
|
+
offset,
|
|
116
|
+
open,
|
|
117
|
+
type
|
|
118
|
+
}) => {
|
|
119
|
+
return html`
|
|
120
|
+
${storyStyles}
|
|
38
121
|
<overlay-trigger
|
|
39
122
|
id="trigger"
|
|
40
|
-
placement="${
|
|
41
|
-
offset="${
|
|
42
|
-
open=${
|
|
43
|
-
type=${
|
|
123
|
+
placement="${placement}"
|
|
124
|
+
offset="${offset}"
|
|
125
|
+
open=${ifDefined(open)}
|
|
126
|
+
type=${ifDefined(type)}
|
|
44
127
|
>
|
|
45
128
|
<sp-button variant="primary" slot="trigger">Show Popover</sp-button>
|
|
46
129
|
<sp-popover
|
|
47
130
|
dialog
|
|
48
131
|
slot="click-content"
|
|
49
|
-
placement="${
|
|
132
|
+
placement="${placement}"
|
|
50
133
|
tip
|
|
51
134
|
>
|
|
52
135
|
<div class="options-popover-content">
|
|
@@ -82,13 +165,24 @@ import{html as o}from"@spectrum-web-components/base";import{ifDefined as d}from"
|
|
|
82
165
|
</sp-popover>
|
|
83
166
|
<sp-tooltip
|
|
84
167
|
slot="hover-content"
|
|
85
|
-
?delayed=${
|
|
168
|
+
?delayed=${open !== "hover"}
|
|
86
169
|
tip="bottom"
|
|
87
170
|
>
|
|
88
171
|
Click to open a popover.
|
|
89
172
|
</sp-tooltip>
|
|
90
173
|
</overlay-trigger>
|
|
91
|
-
`;
|
|
174
|
+
`;
|
|
175
|
+
};
|
|
176
|
+
export const Default = (args) => template(args);
|
|
177
|
+
export const openHoverContent = (args) => template({
|
|
178
|
+
...args,
|
|
179
|
+
open: "hover"
|
|
180
|
+
});
|
|
181
|
+
export const openClickContent = (args) => template({
|
|
182
|
+
...args,
|
|
183
|
+
open: "click"
|
|
184
|
+
});
|
|
185
|
+
export const customizedClickContent = (args) => html`
|
|
92
186
|
<style>
|
|
93
187
|
active-overlay::part(theme) {
|
|
94
188
|
--styled-div-background-color: var(--spectrum-semantic-cta-background-color-default);
|
|
@@ -96,8 +190,12 @@ import{html as o}from"@spectrum-web-components/base";import{ifDefined as d}from"
|
|
|
96
190
|
}
|
|
97
191
|
</style>
|
|
98
192
|
</style>
|
|
99
|
-
${
|
|
100
|
-
|
|
193
|
+
${template({
|
|
194
|
+
...args,
|
|
195
|
+
open: "click"
|
|
196
|
+
})}
|
|
197
|
+
`;
|
|
198
|
+
const extraText = html`
|
|
101
199
|
<p>This is some text.</p>
|
|
102
200
|
<p>This is some text.</p>
|
|
103
201
|
<p>
|
|
@@ -105,38 +203,53 @@ import{html as o}from"@spectrum-web-components/base";import{ifDefined as d}from"
|
|
|
105
203
|
<a href="#anchor">link</a>
|
|
106
204
|
.
|
|
107
205
|
</p>
|
|
108
|
-
`;
|
|
206
|
+
`;
|
|
207
|
+
export const inline = () => {
|
|
208
|
+
const closeEvent = new Event("close", { bubbles: true, composed: true });
|
|
209
|
+
return html`
|
|
109
210
|
<overlay-trigger type="inline">
|
|
110
211
|
<sp-button slot="trigger">Open</sp-button>
|
|
111
212
|
<sp-overlay slot="click-content">
|
|
112
213
|
<sp-button
|
|
113
|
-
@click=${
|
|
214
|
+
@click=${(event) => {
|
|
215
|
+
event.target.dispatchEvent(closeEvent);
|
|
216
|
+
}}
|
|
114
217
|
>
|
|
115
218
|
Close
|
|
116
219
|
</sp-button>
|
|
117
220
|
</sp-overlay>
|
|
118
221
|
</overlay-trigger>
|
|
119
|
-
${
|
|
120
|
-
|
|
222
|
+
${extraText}
|
|
223
|
+
`;
|
|
224
|
+
};
|
|
225
|
+
export const replace = () => {
|
|
226
|
+
const closeEvent = new Event("close", { bubbles: true, composed: true });
|
|
227
|
+
return html`
|
|
121
228
|
<overlay-trigger type="replace">
|
|
122
229
|
<sp-button slot="trigger">Open</sp-button>
|
|
123
230
|
<sp-overlay slot="click-content">
|
|
124
231
|
<sp-button
|
|
125
|
-
@click=${
|
|
232
|
+
@click=${(event) => {
|
|
233
|
+
event.target.dispatchEvent(closeEvent);
|
|
234
|
+
}}
|
|
126
235
|
>
|
|
127
236
|
Close
|
|
128
237
|
</sp-button>
|
|
129
238
|
</sp-overlay>
|
|
130
239
|
</overlay-trigger>
|
|
131
|
-
${
|
|
132
|
-
|
|
240
|
+
${extraText}
|
|
241
|
+
`;
|
|
242
|
+
};
|
|
243
|
+
export const modalLoose = () => {
|
|
244
|
+
const closeEvent = new Event("close", { bubbles: true, composed: true });
|
|
245
|
+
return html`
|
|
133
246
|
<overlay-trigger type="modal" placement="none">
|
|
134
247
|
<sp-button slot="trigger">Open</sp-button>
|
|
135
248
|
<sp-dialog
|
|
136
249
|
size="s"
|
|
137
250
|
dismissable
|
|
138
251
|
slot="click-content"
|
|
139
|
-
@closed=${
|
|
252
|
+
@closed=${(event) => event.target.dispatchEvent(closeEvent)}
|
|
140
253
|
>
|
|
141
254
|
<h2 slot="heading">Loose Dialog</h2>
|
|
142
255
|
<p>
|
|
@@ -154,8 +267,12 @@ import{html as o}from"@spectrum-web-components/base";import{ifDefined as d}from"
|
|
|
154
267
|
</p>
|
|
155
268
|
</sp-dialog>
|
|
156
269
|
</overlay-trigger>
|
|
157
|
-
${
|
|
158
|
-
|
|
270
|
+
${extraText}
|
|
271
|
+
`;
|
|
272
|
+
};
|
|
273
|
+
export const modalManaged = () => {
|
|
274
|
+
const closeEvent = new Event("close", { bubbles: true, composed: true });
|
|
275
|
+
return html`
|
|
159
276
|
<overlay-trigger type="modal" placement="none">
|
|
160
277
|
<sp-button slot="trigger">Open</sp-button>
|
|
161
278
|
<sp-dialog-wrapper
|
|
@@ -166,9 +283,15 @@ import{html as o}from"@spectrum-web-components/base";import{ifDefined as d}from"
|
|
|
166
283
|
secondary-label="Replace"
|
|
167
284
|
cancel-label="Cancel"
|
|
168
285
|
footer="Content for footer"
|
|
169
|
-
@confirm=${
|
|
170
|
-
|
|
171
|
-
|
|
286
|
+
@confirm=${(event) => {
|
|
287
|
+
event.target.dispatchEvent(closeEvent);
|
|
288
|
+
}}
|
|
289
|
+
@secondary=${(event) => {
|
|
290
|
+
event.target.dispatchEvent(closeEvent);
|
|
291
|
+
}}
|
|
292
|
+
@cancel=${(event) => {
|
|
293
|
+
event.target.dispatchEvent(closeEvent);
|
|
294
|
+
}}
|
|
172
295
|
>
|
|
173
296
|
<p>
|
|
174
297
|
The
|
|
@@ -180,17 +303,22 @@ import{html as o}from"@spectrum-web-components/base";import{ifDefined as d}from"
|
|
|
180
303
|
</p>
|
|
181
304
|
</sp-dialog-wrapper>
|
|
182
305
|
</overlay-trigger>
|
|
183
|
-
${
|
|
184
|
-
|
|
185
|
-
|
|
306
|
+
${extraText}
|
|
307
|
+
`;
|
|
308
|
+
};
|
|
309
|
+
export const deepNesting = () => {
|
|
310
|
+
const color = window.__swc_hack_knobs__.defaultColor;
|
|
311
|
+
const outter = color === "light" ? "dark" : "light";
|
|
312
|
+
return html`
|
|
313
|
+
${storyStyles}
|
|
186
314
|
<sp-theme
|
|
187
|
-
color=${
|
|
315
|
+
color=${outter}
|
|
188
316
|
theme=${window.__swc_hack_knobs__.defaultThemeVariant}
|
|
189
317
|
scale=${window.__swc_hack_knobs__.defaultScale}
|
|
190
318
|
dir=${window.__swc_hack_knobs__.defaultDirection}
|
|
191
319
|
>
|
|
192
320
|
<sp-theme
|
|
193
|
-
color=${
|
|
321
|
+
color=${color}
|
|
194
322
|
theme=${window.__swc_hack_knobs__.defaultThemeVariant}
|
|
195
323
|
scale=${window.__swc_hack_knobs__.defaultScale}
|
|
196
324
|
dir=${window.__swc_hack_knobs__.defaultDirection}
|
|
@@ -205,7 +333,10 @@ import{html as o}from"@spectrum-web-components/base";import{ifDefined as d}from"
|
|
|
205
333
|
></recursive-popover>
|
|
206
334
|
</sp-theme>
|
|
207
335
|
</sp-theme>
|
|
208
|
-
|
|
336
|
+
`;
|
|
337
|
+
};
|
|
338
|
+
export const edges = () => {
|
|
339
|
+
return html`
|
|
209
340
|
<style>
|
|
210
341
|
.demo {
|
|
211
342
|
position: absolute;
|
|
@@ -267,8 +398,11 @@ import{html as o}from"@spectrum-web-components/base";import{ifDefined as d}from"
|
|
|
267
398
|
Triskaidekaphobia and More
|
|
268
399
|
</sp-tooltip>
|
|
269
400
|
</overlay-trigger>
|
|
270
|
-
|
|
271
|
-
|
|
401
|
+
`;
|
|
402
|
+
};
|
|
403
|
+
export const updated = () => {
|
|
404
|
+
return html`
|
|
405
|
+
${storyStyles}
|
|
272
406
|
<style>
|
|
273
407
|
sp-tooltip {
|
|
274
408
|
transition: none;
|
|
@@ -327,8 +461,11 @@ import{html as o}from"@spectrum-web-components/base";import{ifDefined as d}from"
|
|
|
327
461
|
</sp-popover>
|
|
328
462
|
</overlay-trigger>
|
|
329
463
|
</overlay-drag>
|
|
330
|
-
|
|
331
|
-
|
|
464
|
+
`;
|
|
465
|
+
};
|
|
466
|
+
export const sideHoverDraggable = () => {
|
|
467
|
+
return html`
|
|
468
|
+
${storyStyles}
|
|
332
469
|
<style>
|
|
333
470
|
sp-tooltip {
|
|
334
471
|
transition: none;
|
|
@@ -354,7 +491,10 @@ import{html as o}from"@spectrum-web-components/base";import{ifDefined as d}from"
|
|
|
354
491
|
</sp-tooltip>
|
|
355
492
|
</overlay-trigger>
|
|
356
493
|
</overlay-drag>
|
|
357
|
-
|
|
494
|
+
`;
|
|
495
|
+
};
|
|
496
|
+
export const longpress = () => {
|
|
497
|
+
return html`
|
|
358
498
|
<overlay-trigger placement="right-start">
|
|
359
499
|
<sp-action-button slot="trigger" hold-affordance>
|
|
360
500
|
<sp-icon-magnify slot="icon"></sp-icon-magnify>
|
|
@@ -362,7 +502,9 @@ import{html as o}from"@spectrum-web-components/base";import{ifDefined as d}from"
|
|
|
362
502
|
<sp-tooltip slot="hover-content">Search real hard...</sp-tooltip>
|
|
363
503
|
<sp-popover slot="longpress-content" tip>
|
|
364
504
|
<sp-action-group
|
|
365
|
-
@change=${
|
|
505
|
+
@change=${(event) => event.target.dispatchEvent(
|
|
506
|
+
new Event("close", { bubbles: true })
|
|
507
|
+
)}
|
|
366
508
|
selects="single"
|
|
367
509
|
vertical
|
|
368
510
|
style="margin: calc(var(--spectrum-actiongroup-button-gap-y,var(--spectrum-global-dimension-size-100)) / 2);"
|
|
@@ -379,10 +521,52 @@ import{html as o}from"@spectrum-web-components/base";import{ifDefined as d}from"
|
|
|
379
521
|
</sp-action-group>
|
|
380
522
|
</sp-popover>
|
|
381
523
|
</overlay-trigger>
|
|
382
|
-
`;
|
|
383
|
-
|
|
524
|
+
`;
|
|
525
|
+
};
|
|
526
|
+
function nextFrame() {
|
|
527
|
+
return new Promise((res) => requestAnimationFrame(() => res()));
|
|
528
|
+
}
|
|
529
|
+
class ComplexModalReady extends HTMLElement {
|
|
530
|
+
constructor() {
|
|
531
|
+
super();
|
|
532
|
+
this.handleTriggerOpened = async () => {
|
|
533
|
+
await nextFrame();
|
|
534
|
+
const picker = document.querySelector("#test-picker");
|
|
535
|
+
picker.addEventListener("sp-opened", this.handlePickerOpen);
|
|
536
|
+
picker.open = true;
|
|
537
|
+
};
|
|
538
|
+
this.handlePickerOpen = async () => {
|
|
539
|
+
const picker = document.querySelector("#test-picker");
|
|
540
|
+
const actions = [nextFrame, picker.updateComplete];
|
|
541
|
+
await Promise.all(actions);
|
|
542
|
+
this.ready(true);
|
|
543
|
+
};
|
|
544
|
+
this.readyPromise = Promise.resolve(false);
|
|
545
|
+
this.readyPromise = new Promise((res) => {
|
|
546
|
+
this.ready = res;
|
|
547
|
+
this.setup();
|
|
548
|
+
});
|
|
549
|
+
}
|
|
550
|
+
async setup() {
|
|
551
|
+
await nextFrame();
|
|
552
|
+
const overlay = document.querySelector(
|
|
553
|
+
`overlay-trigger`
|
|
554
|
+
);
|
|
555
|
+
overlay.addEventListener("sp-opened", this.handleTriggerOpened);
|
|
556
|
+
}
|
|
557
|
+
get updateComplete() {
|
|
558
|
+
return this.readyPromise;
|
|
559
|
+
}
|
|
560
|
+
}
|
|
561
|
+
customElements.define("complex-modal-ready", ComplexModalReady);
|
|
562
|
+
const complexModalDecorator = (story) => {
|
|
563
|
+
return html`
|
|
564
|
+
${story()}
|
|
384
565
|
<complex-modal-ready></complex-modal-ready>
|
|
385
|
-
`;
|
|
566
|
+
`;
|
|
567
|
+
};
|
|
568
|
+
export const complexModal = () => {
|
|
569
|
+
return html`
|
|
386
570
|
<style>
|
|
387
571
|
body {
|
|
388
572
|
--swc-margin-test: 10px;
|
|
@@ -436,7 +620,11 @@ import{html as o}from"@spectrum-web-components/base";import{ifDefined as d}from"
|
|
|
436
620
|
Toggle Dialog
|
|
437
621
|
</sp-button>
|
|
438
622
|
</overlay-trigger>
|
|
439
|
-
`;
|
|
623
|
+
`;
|
|
624
|
+
};
|
|
625
|
+
complexModal.decorators = [complexModalDecorator];
|
|
626
|
+
export const superComplexModal = () => {
|
|
627
|
+
return html`
|
|
440
628
|
<overlay-trigger type="modal" placement="none">
|
|
441
629
|
<sp-button slot="trigger" variant="accent">Toggle Dialog</sp-button>
|
|
442
630
|
<sp-popover dialog slot="click-content">
|
|
@@ -469,7 +657,13 @@ import{html as o}from"@spectrum-web-components/base";import{ifDefined as d}from"
|
|
|
469
657
|
</overlay-trigger>
|
|
470
658
|
</sp-popover>
|
|
471
659
|
</overlay-trigger>
|
|
472
|
-
`;
|
|
660
|
+
`;
|
|
661
|
+
};
|
|
662
|
+
class StartEndContextmenu extends HTMLElement {
|
|
663
|
+
constructor() {
|
|
664
|
+
super();
|
|
665
|
+
this.attachShadow({ mode: "open" });
|
|
666
|
+
this.shadowRoot.innerHTML = `
|
|
473
667
|
<style>
|
|
474
668
|
:host {
|
|
475
669
|
display: flex;
|
|
@@ -482,14 +676,24 @@ import{html as o}from"@spectrum-web-components/base";import{ifDefined as d}from"
|
|
|
482
676
|
</style>
|
|
483
677
|
<div id="start"></div>
|
|
484
678
|
<div id="end"></div>
|
|
485
|
-
|
|
679
|
+
`;
|
|
680
|
+
}
|
|
681
|
+
}
|
|
682
|
+
customElements.define("start-end-contextmenu", StartEndContextmenu);
|
|
683
|
+
export const virtualElement = (args) => {
|
|
684
|
+
const contextMenuTemplate = (kind = "") => html`
|
|
486
685
|
<sp-popover
|
|
487
686
|
style="width:300px;"
|
|
488
|
-
@click=${
|
|
687
|
+
@click=${(event) => {
|
|
688
|
+
var _a;
|
|
689
|
+
return (_a = event.target) == null ? void 0 : _a.dispatchEvent(
|
|
690
|
+
new Event("close", { bubbles: true })
|
|
691
|
+
);
|
|
692
|
+
}}
|
|
489
693
|
>
|
|
490
694
|
<sp-menu>
|
|
491
695
|
<sp-menu-group>
|
|
492
|
-
<span slot="header">Menu source: ${
|
|
696
|
+
<span slot="header">Menu source: ${kind}</span>
|
|
493
697
|
<sp-menu-item>Deselect</sp-menu-item>
|
|
494
698
|
<sp-menu-item>Select inverse</sp-menu-item>
|
|
495
699
|
<sp-menu-item>Feather...</sp-menu-item>
|
|
@@ -500,7 +704,23 @@ import{html as o}from"@spectrum-web-components/base";import{ifDefined as d}from"
|
|
|
500
704
|
</sp-menu-group>
|
|
501
705
|
</sp-menu>
|
|
502
706
|
</sp-popover>
|
|
503
|
-
`;
|
|
707
|
+
`;
|
|
708
|
+
const pointerenter = async (event) => {
|
|
709
|
+
event.preventDefault();
|
|
710
|
+
const source = event.composedPath()[0];
|
|
711
|
+
const { id } = source;
|
|
712
|
+
const trigger = event.target;
|
|
713
|
+
const virtualTrigger = new VirtualTrigger(event.clientX, event.clientY);
|
|
714
|
+
const fragment = document.createDocumentFragment();
|
|
715
|
+
render(contextMenuTemplate(id), fragment);
|
|
716
|
+
const popover = fragment.querySelector("sp-popover");
|
|
717
|
+
openOverlay(trigger, "modal", popover, {
|
|
718
|
+
placement: args.placement,
|
|
719
|
+
receivesFocus: "auto",
|
|
720
|
+
virtualTrigger
|
|
721
|
+
});
|
|
722
|
+
};
|
|
723
|
+
return html`
|
|
504
724
|
<style>
|
|
505
725
|
.app-root {
|
|
506
726
|
position: absolute;
|
|
@@ -509,33 +729,112 @@ import{html as o}from"@spectrum-web-components/base";import{ifDefined as d}from"
|
|
|
509
729
|
</style>
|
|
510
730
|
<start-end-contextmenu
|
|
511
731
|
class="app-root"
|
|
512
|
-
@contextmenu=${
|
|
732
|
+
@contextmenu=${pointerenter}
|
|
513
733
|
></start-end-contextmenu>
|
|
514
|
-
|
|
734
|
+
`;
|
|
735
|
+
};
|
|
736
|
+
virtualElement.args = {
|
|
737
|
+
placement: "right-start"
|
|
738
|
+
};
|
|
739
|
+
export const detachedElement = () => {
|
|
740
|
+
let closeOverlay;
|
|
741
|
+
const openDetachedOverlayContent = async ({
|
|
742
|
+
target
|
|
743
|
+
}) => {
|
|
744
|
+
if (closeOverlay) {
|
|
745
|
+
closeOverlay();
|
|
746
|
+
closeOverlay = void 0;
|
|
747
|
+
return;
|
|
748
|
+
}
|
|
749
|
+
const div = document.createElement("div");
|
|
750
|
+
div.textContent = "This div is overlaid";
|
|
751
|
+
div.setAttribute(
|
|
752
|
+
"style",
|
|
753
|
+
`
|
|
515
754
|
background-color: var(--spectrum-global-color-gray-50);
|
|
516
755
|
color: var(--spectrum-global-color-gray-800);
|
|
517
756
|
border: 1px solid;
|
|
518
757
|
padding: 2em;
|
|
519
|
-
`
|
|
758
|
+
`
|
|
759
|
+
);
|
|
760
|
+
closeOverlay = await Overlay.open(target, "click", div, {
|
|
761
|
+
offset: 0,
|
|
762
|
+
placement: "bottom"
|
|
763
|
+
});
|
|
764
|
+
};
|
|
765
|
+
requestAnimationFrame(() => {
|
|
766
|
+
openDetachedOverlayContent({
|
|
767
|
+
target: document.querySelector(
|
|
768
|
+
"#detached-content-trigger"
|
|
769
|
+
)
|
|
770
|
+
});
|
|
771
|
+
});
|
|
772
|
+
return html`
|
|
520
773
|
<sp-action-button
|
|
521
774
|
id="detached-content-trigger"
|
|
522
|
-
@click=${
|
|
523
|
-
@sp-closed=${()=>
|
|
775
|
+
@click=${openDetachedOverlayContent}
|
|
776
|
+
@sp-closed=${() => closeOverlay = void 0}
|
|
524
777
|
>
|
|
525
778
|
<sp-icon-open-in
|
|
526
779
|
slot="icon"
|
|
527
780
|
label="Open in overlay"
|
|
528
781
|
></sp-icon-open-in>
|
|
529
782
|
</sp-action-button>
|
|
530
|
-
|
|
531
|
-
|
|
783
|
+
`;
|
|
784
|
+
};
|
|
785
|
+
class DefinedOverlayReady extends HTMLElement {
|
|
786
|
+
constructor() {
|
|
787
|
+
super();
|
|
788
|
+
this.handleTriggerOpened = async () => {
|
|
789
|
+
await nextFrame();
|
|
790
|
+
const popover = document.querySelector("popover-content");
|
|
791
|
+
if (!popover) {
|
|
792
|
+
return;
|
|
793
|
+
}
|
|
794
|
+
popover.addEventListener("sp-opened", this.handlePopoverOpen);
|
|
795
|
+
popover.button.click();
|
|
796
|
+
};
|
|
797
|
+
this.handlePopoverOpen = async () => {
|
|
798
|
+
await nextFrame();
|
|
799
|
+
this.ready(true);
|
|
800
|
+
};
|
|
801
|
+
this.readyPromise = Promise.resolve(false);
|
|
802
|
+
this.readyPromise = new Promise((res) => {
|
|
803
|
+
this.ready = res;
|
|
804
|
+
this.setup();
|
|
805
|
+
});
|
|
806
|
+
}
|
|
807
|
+
async setup() {
|
|
808
|
+
await nextFrame();
|
|
809
|
+
const overlay = document.querySelector(
|
|
810
|
+
`overlay-trigger`
|
|
811
|
+
);
|
|
812
|
+
const button = document.querySelector(
|
|
813
|
+
`[slot="trigger"]`
|
|
814
|
+
);
|
|
815
|
+
overlay.addEventListener("sp-opened", this.handleTriggerOpened);
|
|
816
|
+
button.click();
|
|
817
|
+
}
|
|
818
|
+
get updateComplete() {
|
|
819
|
+
return this.readyPromise;
|
|
820
|
+
}
|
|
821
|
+
}
|
|
822
|
+
customElements.define("defined-overlay-ready", DefinedOverlayReady);
|
|
823
|
+
const definedOverlayDecorator = (story) => {
|
|
824
|
+
return html`
|
|
825
|
+
${story()}
|
|
532
826
|
<defined-overlay-ready></defined-overlay-ready>
|
|
533
|
-
`;
|
|
827
|
+
`;
|
|
828
|
+
};
|
|
829
|
+
export const definedOverlayElement = () => {
|
|
830
|
+
return html`
|
|
534
831
|
<overlay-trigger placement="bottom" type="modal">
|
|
535
832
|
<sp-button variant="primary" slot="trigger">Open popover</sp-button>
|
|
536
833
|
<sp-popover slot="click-content" direction="bottom" dialog>
|
|
537
834
|
<popover-content></popover-content>
|
|
538
835
|
</sp-popover>
|
|
539
836
|
</overlay-trigger>
|
|
540
|
-
`;
|
|
837
|
+
`;
|
|
838
|
+
};
|
|
839
|
+
definedOverlayElement.decorators = [definedOverlayDecorator];
|
|
541
840
|
//# sourceMappingURL=overlay.stories.js.map
|