@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.
Files changed (92) hide show
  1. package/active-overlay.dev.js +1 -0
  2. package/active-overlay.dev.js.map +1 -1
  3. package/active-overlay.js +1 -1
  4. package/active-overlay.js.map +2 -2
  5. package/overlay-trigger.dev.js +1 -0
  6. package/overlay-trigger.dev.js.map +1 -1
  7. package/overlay-trigger.js +1 -1
  8. package/overlay-trigger.js.map +2 -2
  9. package/package.json +4 -4
  10. package/src/ActiveOverlay.dev.js +60 -24
  11. package/src/ActiveOverlay.dev.js.map +3 -3
  12. package/src/ActiveOverlay.js +3 -3
  13. package/src/ActiveOverlay.js.map +3 -3
  14. package/src/OverlayTrigger.dev.js +51 -18
  15. package/src/OverlayTrigger.dev.js.map +1 -1
  16. package/src/OverlayTrigger.js +2 -2
  17. package/src/OverlayTrigger.js.map +2 -2
  18. package/src/VirtualTrigger.dev.js +1 -0
  19. package/src/VirtualTrigger.dev.js.map +1 -1
  20. package/src/VirtualTrigger.js +1 -1
  21. package/src/VirtualTrigger.js.map +2 -2
  22. package/src/active-overlay.css.dev.js +1 -0
  23. package/src/active-overlay.css.dev.js.map +1 -1
  24. package/src/active-overlay.css.js +1 -1
  25. package/src/active-overlay.css.js.map +2 -2
  26. package/src/index.dev.js +1 -0
  27. package/src/index.dev.js.map +1 -1
  28. package/src/index.js +1 -1
  29. package/src/index.js.map +1 -1
  30. package/src/loader.dev.js +1 -0
  31. package/src/loader.dev.js.map +1 -1
  32. package/src/loader.js +1 -1
  33. package/src/loader.js.map +2 -2
  34. package/src/overlay-events.dev.js +1 -0
  35. package/src/overlay-events.dev.js.map +1 -1
  36. package/src/overlay-events.js +1 -1
  37. package/src/overlay-events.js.map +2 -2
  38. package/src/overlay-stack.d.ts +1 -1
  39. package/src/overlay-stack.dev.js +97 -46
  40. package/src/overlay-stack.dev.js.map +3 -3
  41. package/src/overlay-stack.js +2 -2
  42. package/src/overlay-stack.js.map +3 -3
  43. package/src/overlay-timer.dev.js +1 -0
  44. package/src/overlay-timer.dev.js.map +1 -1
  45. package/src/overlay-timer.js +1 -1
  46. package/src/overlay-timer.js.map +2 -2
  47. package/src/overlay-trigger.css.dev.js +1 -0
  48. package/src/overlay-trigger.css.dev.js.map +1 -1
  49. package/src/overlay-trigger.css.js +1 -1
  50. package/src/overlay-trigger.css.js.map +2 -2
  51. package/src/overlay-types.dev.js +1 -0
  52. package/src/overlay-types.js +1 -0
  53. package/src/overlay-utils.dev.js +4 -1
  54. package/src/overlay-utils.dev.js.map +1 -1
  55. package/src/overlay-utils.js +1 -1
  56. package/src/overlay-utils.js.map +2 -2
  57. package/src/overlay.dev.js +1 -0
  58. package/src/overlay.dev.js.map +1 -1
  59. package/src/overlay.js +1 -1
  60. package/src/overlay.js.map +2 -2
  61. package/stories/overlay-story-components.js +219 -11
  62. package/stories/overlay-story-components.js.map +2 -2
  63. package/stories/overlay.stories.js +354 -55
  64. package/stories/overlay.stories.js.map +1 -1
  65. package/sync/overlay-trigger.dev.js +1 -0
  66. package/sync/overlay-trigger.dev.js.map +1 -1
  67. package/sync/overlay-trigger.js +1 -1
  68. package/sync/overlay-trigger.js.map +2 -2
  69. package/test/benchmark/basic-test.js +10 -2
  70. package/test/benchmark/basic-test.js.map +1 -1
  71. package/test/overlay-lifecycle.test.js +149 -6
  72. package/test/overlay-lifecycle.test.js.map +1 -1
  73. package/test/overlay-timer.test.js +117 -1
  74. package/test/overlay-timer.test.js.map +2 -2
  75. package/test/overlay-trigger-click.test.js +66 -7
  76. package/test/overlay-trigger-click.test.js.map +1 -1
  77. package/test/overlay-trigger-extended.test.js +187 -4
  78. package/test/overlay-trigger-extended.test.js.map +1 -1
  79. package/test/overlay-trigger-hover-click.test.js +68 -3
  80. package/test/overlay-trigger-hover-click.test.js.map +1 -1
  81. package/test/overlay-trigger-hover.test.js +172 -7
  82. package/test/overlay-trigger-hover.test.js.map +2 -2
  83. package/test/overlay-trigger-longpress.test.js +233 -9
  84. package/test/overlay-trigger-longpress.test.js.map +2 -2
  85. package/test/overlay-trigger-sync.test.js +536 -4
  86. package/test/overlay-trigger-sync.test.js.map +2 -2
  87. package/test/overlay-trigger.test.js +536 -4
  88. package/test/overlay-trigger.test.js.map +2 -2
  89. package/test/overlay.test-vrt.js +4 -1
  90. package/test/overlay.test-vrt.js.map +1 -1
  91. package/test/overlay.test.js +565 -11
  92. package/test/overlay.test.js.map +1 -1
@@ -1,4 +1,34 @@
1
- import{html as o}from"@spectrum-web-components/base";import{ifDefined as d}from"@spectrum-web-components/base/src/directives.js";import{openOverlay as y,Overlay as b,VirtualTrigger as h}from"@spectrum-web-components/overlay";import"@spectrum-web-components/action-button/sp-action-button.js";import"@spectrum-web-components/action-group/sp-action-group.js";import"@spectrum-web-components/button/sp-button.js";import"@spectrum-web-components/dialog/sp-dialog-wrapper.js";import"@spectrum-web-components/field-label/sp-field-label.js";import"@spectrum-web-components/icons-workflow/icons/sp-icon-magnify.js";import"@spectrum-web-components/icons-workflow/icons/sp-icon-open-in.js";import"@spectrum-web-components/overlay/overlay-trigger.js";import"@spectrum-web-components/picker/sp-picker.js";import"@spectrum-web-components/menu/sp-menu.js";import"@spectrum-web-components/menu/sp-menu-item.js";import"@spectrum-web-components/menu/sp-menu-divider.js";import"@spectrum-web-components/popover/sp-popover.js";import"@spectrum-web-components/slider/sp-slider.js";import"@spectrum-web-components/radio/sp-radio.js";import"@spectrum-web-components/radio/sp-radio-group.js";import"@spectrum-web-components/tooltip/sp-tooltip.js";import"@spectrum-web-components/theme/sp-theme.js";import"@spectrum-web-components/theme/src/themes.js";import"../../../projects/story-decorator/src/types.js";import"./overlay-story-components.js";import{render as f}from"lit-html";const a=o`
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
- `;export default{title:"Overlay",argTypes:{offset:{control:"number"},placement:{control:{type:"inline-radio",options:["top","top-start","top-end","bottom","bottom-start","bottom-end","left","left-start","left-end","right","right-start","right-end","auto","auto-start","auto-end","none"]}},type:{control:{type:"inline-radio",options:["modal","replace","inline"]}},colorStop:{control:{type:"inline-radio",options:["light","dark"]}}},args:{placement:"bottom",offset:0,colorStop:"light"}};const l=({placement:e,offset:t,open:n,type:r})=>o`
37
- ${a}
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="${e}"
41
- offset="${t}"
42
- open=${d(n)}
43
- type=${d(r)}
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="${e}"
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=${n!=="hover"}
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
- `;export const Default=e=>l(e),openHoverContent=e=>l({...e,open:"hover"}),openClickContent=e=>l({...e,open:"click"}),customizedClickContent=e=>o`
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
- ${l({...e,open:"click"})}
100
- `;const p=o`
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
- `;export const inline=()=>{const e=new Event("close",{bubbles:!0,composed:!0});return o`
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=${t=>{t.target.dispatchEvent(e)}}
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
- ${p}
120
- `},replace=()=>{const e=new Event("close",{bubbles:!0,composed:!0});return o`
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=${t=>{t.target.dispatchEvent(e)}}
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
- ${p}
132
- `},modalLoose=()=>{const e=new Event("close",{bubbles:!0,composed:!0});return o`
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=${t=>t.target.dispatchEvent(e)}
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
- ${p}
158
- `},modalManaged=()=>{const e=new Event("close",{bubbles:!0,composed:!0});return o`
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=${t=>{t.target.dispatchEvent(e)}}
170
- @secondary=${t=>{t.target.dispatchEvent(e)}}
171
- @cancel=${t=>{t.target.dispatchEvent(e)}}
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
- ${p}
184
- `},deepNesting=()=>{const e=window.__swc_hack_knobs__.defaultColor;return o`
185
- ${a}
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=${e==="light"?"dark":"light"}
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=${e}
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
- `},edges=()=>o`
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
- `,updated=()=>o`
271
- ${a}
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
- `,sideHoverDraggable=()=>o`
331
- ${a}
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
- `,longpress=()=>o`
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=${e=>e.target.dispatchEvent(new Event("close",{bubbles:!0}))}
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
- `;function i(){return new Promise(e=>requestAnimationFrame(()=>e()))}class k extends HTMLElement{constructor(){super();this.handleTriggerOpened=async()=>{await i();const t=document.querySelector("#test-picker");t.addEventListener("sp-opened",this.handlePickerOpen),t.open=!0};this.handlePickerOpen=async()=>{const t=document.querySelector("#test-picker"),n=[i,t.updateComplete];await Promise.all(n),this.ready(!0)};this.readyPromise=Promise.resolve(!1);this.readyPromise=new Promise(t=>{this.ready=t,this.setup()})}async setup(){await i(),document.querySelector("overlay-trigger").addEventListener("sp-opened",this.handleTriggerOpened)}get updateComplete(){return this.readyPromise}}customElements.define("complex-modal-ready",k);const T=e=>o`
383
- ${e()}
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
- `;export const complexModal=()=>o`
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
- `;complexModal.decorators=[T];export const superComplexModal=()=>o`
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
- `;class w extends HTMLElement{constructor(){super();this.attachShadow({mode:"open"}),this.shadowRoot.innerHTML=`
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
- `}}customElements.define("start-end-contextmenu",w);export const virtualElement=e=>{const t=(r="")=>o`
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=${c=>{var s;return(s=c.target)==null?void 0:s.dispatchEvent(new Event("close",{bubbles:!0}))}}
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: ${r}</span>
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
- `;return o`
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=${async r=>{r.preventDefault();const c=r.composedPath()[0],{id:s}=c,u=r.target,g=new h(r.clientX,r.clientY),m=document.createDocumentFragment();f(t(s),m);const v=m.querySelector("sp-popover");y(u,"modal",v,{placement:e.placement,receivesFocus:"auto",virtualTrigger:g})}}
732
+ @contextmenu=${pointerenter}
513
733
  ></start-end-contextmenu>
514
- `};virtualElement.args={placement:"right-start"};export const detachedElement=()=>{let e;const t=async({target:n})=>{if(e){e(),e=void 0;return}const r=document.createElement("div");r.textContent="This div is overlaid",r.setAttribute("style",`
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
- `),e=await b.open(n,"click",r,{offset:0,placement:"bottom"})};return requestAnimationFrame(()=>{t({target:document.querySelector("#detached-content-trigger")})}),o`
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=${t}
523
- @sp-closed=${()=>e=void 0}
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
- `};class x extends HTMLElement{constructor(){super();this.handleTriggerOpened=async()=>{await i();const t=document.querySelector("popover-content");!t||(t.addEventListener("sp-opened",this.handlePopoverOpen),t.button.click())};this.handlePopoverOpen=async()=>{await i(),this.ready(!0)};this.readyPromise=Promise.resolve(!1);this.readyPromise=new Promise(t=>{this.ready=t,this.setup()})}async setup(){await i();const t=document.querySelector("overlay-trigger"),n=document.querySelector('[slot="trigger"]');t.addEventListener("sp-opened",this.handleTriggerOpened),n.click()}get updateComplete(){return this.readyPromise}}customElements.define("defined-overlay-ready",x);const P=e=>o`
531
- ${e()}
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
- `;export const definedOverlayElement=()=>o`
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
- `;definedOverlayElement.decorators=[P];
837
+ `;
838
+ };
839
+ definedOverlayElement.decorators = [definedOverlayDecorator];
541
840
  //# sourceMappingURL=overlay.stories.js.map