@spectrum-web-components/overlay 0.19.4-overlay.8 → 0.19.4

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 (156) hide show
  1. package/active-overlay.d.ts +6 -0
  2. package/active-overlay.dev.js +4 -0
  3. package/{test/overlay-element.test-vrt.js.map → active-overlay.dev.js.map} +3 -3
  4. package/active-overlay.js +2 -0
  5. package/{sp-overlay.js.map → active-overlay.js.map} +4 -4
  6. package/custom-elements.json +1212 -0
  7. package/package.json +25 -50
  8. package/src/ActiveOverlay.d.ts +84 -0
  9. package/src/ActiveOverlay.dev.js +517 -0
  10. package/src/ActiveOverlay.dev.js.map +7 -0
  11. package/src/ActiveOverlay.js +16 -0
  12. package/src/ActiveOverlay.js.map +7 -0
  13. package/src/OverlayTrigger.d.ts +31 -18
  14. package/src/OverlayTrigger.dev.js +246 -138
  15. package/src/OverlayTrigger.dev.js.map +3 -3
  16. package/src/OverlayTrigger.js +22 -54
  17. package/src/OverlayTrigger.js.map +3 -3
  18. package/src/VirtualTrigger.dev.js +2 -0
  19. package/src/VirtualTrigger.dev.js.map +2 -2
  20. package/src/VirtualTrigger.js +1 -1
  21. package/src/VirtualTrigger.js.map +3 -3
  22. package/src/active-overlay.css.dev.js +13 -0
  23. package/src/active-overlay.css.dev.js.map +7 -0
  24. package/src/active-overlay.css.js +10 -0
  25. package/src/active-overlay.css.js.map +7 -0
  26. package/src/index.d.ts +3 -1
  27. package/src/index.dev.js +3 -1
  28. package/src/index.dev.js.map +2 -2
  29. package/src/index.js +1 -1
  30. package/src/index.js.map +2 -2
  31. package/src/loader.d.ts +2 -0
  32. package/src/loader.dev.js +21 -0
  33. package/src/loader.dev.js.map +7 -0
  34. package/src/loader.js +2 -0
  35. package/src/loader.js.map +7 -0
  36. package/src/overlay-stack.d.ts +50 -0
  37. package/src/overlay-stack.dev.js +514 -0
  38. package/src/overlay-stack.dev.js.map +7 -0
  39. package/src/overlay-stack.js +33 -0
  40. package/src/overlay-stack.js.map +7 -0
  41. package/src/overlay-trigger.css.dev.js +1 -1
  42. package/src/overlay-trigger.css.dev.js.map +1 -1
  43. package/src/overlay-trigger.css.js +1 -1
  44. package/src/overlay-trigger.css.js.map +1 -1
  45. package/src/overlay-types.d.ts +2 -2
  46. package/src/overlay-types.dev.js +0 -1
  47. package/src/overlay-types.dev.js.map +3 -3
  48. package/src/overlay-types.js +1 -1
  49. package/src/overlay-types.js.map +3 -3
  50. package/src/overlay-utils.d.ts +3 -0
  51. package/src/overlay-utils.dev.js +31 -0
  52. package/src/overlay-utils.dev.js.map +7 -0
  53. package/src/overlay-utils.js +2 -0
  54. package/src/overlay-utils.js.map +7 -0
  55. package/src/overlay.d.ts +59 -0
  56. package/src/overlay.dev.js +127 -0
  57. package/src/overlay.dev.js.map +7 -0
  58. package/src/overlay.js +2 -0
  59. package/src/overlay.js.map +7 -0
  60. package/stories/overlay-story-components.js +6 -1
  61. package/stories/overlay-story-components.js.map +2 -2
  62. package/stories/overlay.stories.js +689 -648
  63. package/stories/overlay.stories.js.map +2 -2
  64. package/sync/overlay-trigger.d.ts +0 -4
  65. package/sync/overlay-trigger.dev.js +4 -1
  66. package/sync/overlay-trigger.dev.js.map +2 -2
  67. package/sync/overlay-trigger.js +1 -1
  68. package/sync/overlay-trigger.js.map +3 -3
  69. package/test/benchmark/basic-test.js +1 -1
  70. package/test/benchmark/basic-test.js.map +1 -1
  71. package/test/index.js +9 -3
  72. package/test/index.js.map +2 -2
  73. package/test/overlay-lifecycle.test.js +74 -34
  74. package/test/overlay-lifecycle.test.js.map +2 -2
  75. package/test/overlay-trigger-click.test.js +2 -3
  76. package/test/overlay-trigger-click.test.js.map +2 -2
  77. package/test/overlay-trigger-extended.test.js +6 -1
  78. package/test/overlay-trigger-extended.test.js.map +2 -2
  79. package/test/overlay-trigger-hover-click.test.js +1 -1
  80. package/test/overlay-trigger-hover-click.test.js.map +2 -2
  81. package/test/overlay-trigger-hover.test.js +2 -2
  82. package/test/overlay-trigger-hover.test.js.map +2 -2
  83. package/test/overlay-trigger-longpress.test.js +377 -1
  84. package/test/overlay-trigger-longpress.test.js.map +2 -2
  85. package/test/overlay-trigger-sync.test.js +3 -1
  86. package/test/overlay-trigger-sync.test.js.map +2 -2
  87. package/test/overlay-trigger.test.js +3 -1
  88. package/test/overlay-trigger.test.js.map +2 -2
  89. package/test/overlay-update.test.js +4 -4
  90. package/test/overlay-update.test.js.map +2 -2
  91. package/test/overlay.test.js +154 -100
  92. package/test/overlay.test.js.map +2 -2
  93. package/sp-overlay.d.ts +0 -6
  94. package/sp-overlay.dev.js +0 -4
  95. package/sp-overlay.dev.js.map +0 -7
  96. package/sp-overlay.js +0 -2
  97. package/src/Overlay.d.ts +0 -22
  98. package/src/Overlay.dev.js +0 -63
  99. package/src/Overlay.dev.js.map +0 -7
  100. package/src/Overlay.js +0 -2
  101. package/src/Overlay.js.map +0 -7
  102. package/src/OverlayBase.d.ts +0 -93
  103. package/src/OverlayBase.dev.js +0 -564
  104. package/src/OverlayBase.dev.js.map +0 -7
  105. package/src/OverlayBase.js +0 -18
  106. package/src/OverlayBase.js.map +0 -7
  107. package/src/OverlayDialog.d.ts +0 -8
  108. package/src/OverlayDialog.dev.js +0 -43
  109. package/src/OverlayDialog.dev.js.map +0 -7
  110. package/src/OverlayDialog.js +0 -2
  111. package/src/OverlayDialog.js.map +0 -7
  112. package/src/OverlayNoPopover.d.ts +0 -8
  113. package/src/OverlayNoPopover.dev.js +0 -62
  114. package/src/OverlayNoPopover.dev.js.map +0 -7
  115. package/src/OverlayNoPopover.js +0 -2
  116. package/src/OverlayNoPopover.js.map +0 -7
  117. package/src/OverlayPopover.d.ts +0 -8
  118. package/src/OverlayPopover.dev.js +0 -81
  119. package/src/OverlayPopover.dev.js.map +0 -7
  120. package/src/OverlayPopover.js +0 -2
  121. package/src/OverlayPopover.js.map +0 -7
  122. package/src/OverlayStack.d.ts +0 -24
  123. package/src/OverlayStack.dev.js +0 -113
  124. package/src/OverlayStack.dev.js.map +0 -7
  125. package/src/OverlayStack.js +0 -2
  126. package/src/OverlayStack.js.map +0 -7
  127. package/src/PlacementController.d.ts +0 -35
  128. package/src/PlacementController.dev.js +0 -172
  129. package/src/PlacementController.dev.js.map +0 -7
  130. package/src/PlacementController.js +0 -2
  131. package/src/PlacementController.js.map +0 -7
  132. package/src/fullSizePlugin.d.ts +0 -12
  133. package/src/fullSizePlugin.dev.js +0 -39
  134. package/src/fullSizePlugin.dev.js.map +0 -7
  135. package/src/fullSizePlugin.js +0 -2
  136. package/src/fullSizePlugin.js.map +0 -7
  137. package/src/overlay-base.css.dev.js +0 -9
  138. package/src/overlay-base.css.dev.js.map +0 -7
  139. package/src/overlay-base.css.js +0 -6
  140. package/src/overlay-base.css.js.map +0 -7
  141. package/src/placement.d.ts +0 -21
  142. package/src/placement.dev.js +0 -111
  143. package/src/placement.dev.js.map +0 -7
  144. package/src/placement.js +0 -2
  145. package/src/placement.js.map +0 -7
  146. package/src/topLayerOverTransforms.d.ts +0 -22
  147. package/src/topLayerOverTransforms.dev.js +0 -161
  148. package/src/topLayerOverTransforms.dev.js.map +0 -7
  149. package/src/topLayerOverTransforms.js +0 -2
  150. package/src/topLayerOverTransforms.js.map +0 -7
  151. package/stories/overlay-element.stories.js +0 -229
  152. package/stories/overlay-element.stories.js.map +0 -7
  153. package/test/overlay-element.test-vrt.js +0 -5
  154. package/test/overlay-element.test.js +0 -759
  155. package/test/overlay-element.test.js.map +0 -7
  156. /package/src/{overlay-base.css.d.ts → active-overlay.css.d.ts} +0 -0
@@ -1,6 +1,11 @@
1
1
  "use strict";
2
2
  import { html } from "@spectrum-web-components/base";
3
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";
4
9
  import "@spectrum-web-components/action-button/sp-action-button.js";
5
10
  import "@spectrum-web-components/action-group/sp-action-group.js";
6
11
  import "@spectrum-web-components/button/sp-button.js";
@@ -10,7 +15,6 @@ import "@spectrum-web-components/icons-workflow/icons/sp-icon-magnify.js";
10
15
  import "@spectrum-web-components/icons-workflow/icons/sp-icon-open-in.js";
11
16
  import "@spectrum-web-components/overlay/overlay-trigger.js";
12
17
  import "@spectrum-web-components/picker/sp-picker.js";
13
- import "@spectrum-web-components/overlay/sp-overlay.js";
14
18
  import "@spectrum-web-components/menu/sp-menu.js";
15
19
  import "@spectrum-web-components/menu/sp-menu-item.js";
16
20
  import "@spectrum-web-components/menu/sp-menu-divider.js";
@@ -25,6 +29,7 @@ import "@spectrum-web-components/accordion/sp-accordion.js";
25
29
  import "@spectrum-web-components/accordion/sp-accordion-item.js";
26
30
  import "../../../projects/story-decorator/src/types.js";
27
31
  import "./overlay-story-components.js";
32
+ import { render } from "lit-html";
28
33
  const storyStyles = html`
29
34
  <style>
30
35
  html,
@@ -147,6 +152,7 @@ const template = ({
147
152
  slot="click-content"
148
153
  placement="bottom"
149
154
  tip
155
+ open
150
156
  >
151
157
  <div class="options-popover-content">
152
158
  Another Popover
@@ -169,152 +175,18 @@ const template = ({
169
175
  </overlay-trigger>
170
176
  `;
171
177
  };
172
- const extraText = html`
173
- <p>This is some text.</p>
174
- <p>This is some text.</p>
175
- <p>
176
- This is a
177
- <a href="#anchor">link</a>
178
- .
179
- </p>
180
- `;
181
- function nextFrame() {
182
- return new Promise((res) => requestAnimationFrame(() => res()));
183
- }
184
178
  export const Default = (args) => template(args);
185
- export const accordion = () => {
186
- const handleToggle = () => {
187
- };
188
- return html`
189
- <overlay-trigger type="modal" placement="right">
190
- <sp-button variant="primary" slot="trigger">
191
- Open overlay w/ accordion
192
- </sp-button>
193
- <sp-popover
194
- dialog
195
- slot="click-content"
196
- style="overflow-y: scroll;position: static;"
197
- >
198
- <sp-accordion
199
- allow-multiple
200
- @sp-accordion-item-toggle=${handleToggle}
201
- >
202
- <sp-accordion-item label="Some things">
203
- <p>
204
- Thing
205
- <br />
206
- <br />
207
- <br />
208
- <br />
209
- <br />
210
- <br />
211
- <br />
212
- more things
213
- </p>
214
- </sp-accordion-item>
215
- <sp-accordion-item label="Other things">
216
- <p>
217
- Thing
218
- <br />
219
- <br />
220
- <br />
221
- <br />
222
- <br />
223
- <br />
224
- <br />
225
- more things
226
- </p>
227
- </sp-accordion-item>
228
- <sp-accordion-item label="More things">
229
- <p>
230
- Thing
231
- <br />
232
- <br />
233
- <br />
234
- <br />
235
- <br />
236
- <br />
237
- <br />
238
- more things
239
- </p>
240
- </sp-accordion-item>
241
- <sp-accordion-item label="Additional things">
242
- <p>
243
- Thing
244
- <br />
245
- <br />
246
- <br />
247
- <br />
248
- <br />
249
- <br />
250
- <br />
251
- more things
252
- </p>
253
- </sp-accordion-item>
254
- </sp-accordion>
255
- </sp-popover>
256
- </overlay-trigger>
257
- `;
258
- };
259
- accordion.swc_vrt = {
260
- skip: true
261
- };
262
- export const clickAndHoverTargets = () => {
263
- return html`
264
- <div>
265
- ${storyStyles}
266
- <style>
267
- .friendly-target {
268
- padding: 4px;
269
- margin: 6px;
270
- border: 2px solid black;
271
- border-radius: 6px;
272
- cursor: default;
273
- }
274
- </style>
275
- <overlay-trigger placement="right">
276
- <div class="friendly-target" slot="trigger" tabindex="0">
277
- Click me
278
- </div>
279
- <sp-tooltip slot="click-content" tip="right">
280
- Ok, now hover the other trigger
281
- </sp-tooltip>
282
- </overlay-trigger>
283
- <overlay-trigger placement="left">
284
- <div class="friendly-target" slot="trigger" tabindex="0">
285
- Then hover me
286
- </div>
287
- <sp-tooltip slot="hover-content" tip="right">
288
- Now click my trigger -- I should stay open, but the other
289
- overlay should close
290
- </sp-tooltip>
291
- </overlay-trigger>
292
- </div>
293
- `;
294
- };
295
- clickAndHoverTargets.swc_vrt = {
296
- skip: true
297
- };
179
+ export const openHoverContent = (args) => template({
180
+ ...args,
181
+ open: "hover"
182
+ });
183
+ export const openClickContent = (args) => template({
184
+ ...args,
185
+ open: "click"
186
+ });
298
187
  class ScrollForcer extends HTMLElement {
299
188
  constructor() {
300
189
  super();
301
- this.doScroll = async () => {
302
- var _a;
303
- (_a = this.previousElementSibling) == null ? void 0 : _a.addEventListener(
304
- "sp-opened",
305
- this.doScroll
306
- );
307
- await nextFrame();
308
- await nextFrame();
309
- await nextFrame();
310
- await nextFrame();
311
- if (document.scrollingElement) {
312
- document.scrollingElement.scrollTop = 100;
313
- }
314
- await nextFrame();
315
- await nextFrame();
316
- this.ready(true);
317
- };
318
190
  this.readyPromise = Promise.resolve(false);
319
191
  this.readyPromise = new Promise((res) => {
320
192
  this.ready = res;
@@ -322,16 +194,28 @@ class ScrollForcer extends HTMLElement {
322
194
  this.setup();
323
195
  }
324
196
  async setup() {
325
- var _a, _b;
197
+ var _a;
326
198
  await nextFrame();
327
199
  await nextFrame();
328
200
  (_a = this.previousElementSibling) == null ? void 0 : _a.addEventListener(
329
201
  "sp-opened",
330
- this.doScroll
202
+ () => {
203
+ this.doScroll();
204
+ },
205
+ { once: true }
331
206
  );
207
+ }
208
+ async doScroll() {
209
+ await nextFrame();
210
+ await nextFrame();
332
211
  await nextFrame();
333
212
  await nextFrame();
334
- ((_b = this.previousElementSibling) == null ? void 0 : _b.lastElementChild).open = "click";
213
+ if (document.scrollingElement) {
214
+ document.scrollingElement.scrollTop = 100;
215
+ }
216
+ await nextFrame();
217
+ await nextFrame();
218
+ this.ready(true);
335
219
  }
336
220
  get updateComplete() {
337
221
  return this.readyPromise;
@@ -341,7 +225,8 @@ customElements.define("scroll-forcer", ScrollForcer);
341
225
  export const clickContentClosedOnScroll = (args) => html`
342
226
  <div style="margin: 50vh 0 100vh;">
343
227
  ${template({
344
- ...args
228
+ ...args,
229
+ open: "click"
345
230
  })}
346
231
  </div>
347
232
  `;
@@ -360,163 +245,178 @@ clickContentClosedOnScroll.decorators = [
360
245
  <scroll-forcer></scroll-forcer>
361
246
  `
362
247
  ];
363
- class ComplexModalReady extends HTMLElement {
364
- constructor() {
365
- super();
366
- this.handleTriggerOpened = async () => {
367
- await nextFrame();
368
- const picker = document.querySelector("#test-picker");
369
- picker.addEventListener("sp-opened", this.handlePickerOpen);
370
- picker.open = true;
371
- };
372
- this.handlePickerOpen = async () => {
373
- const picker = document.querySelector("#test-picker");
374
- const actions = [nextFrame, picker.updateComplete];
375
- await Promise.all(actions);
376
- this.ready(true);
377
- };
378
- this.readyPromise = Promise.resolve(false);
379
- this.readyPromise = new Promise((res) => {
380
- this.ready = res;
381
- this.setup();
382
- });
383
- }
384
- async setup() {
385
- await nextFrame();
386
- const overlay = document.querySelector(
387
- `overlay-trigger`
388
- );
389
- overlay.addEventListener("sp-opened", this.handleTriggerOpened);
390
- }
391
- get updateComplete() {
392
- return this.readyPromise;
393
- }
394
- }
395
- customElements.define("complex-modal-ready", ComplexModalReady);
396
- const complexModalDecorator = (story) => {
397
- return html`
398
- ${story()}
399
- <complex-modal-ready></complex-modal-ready>
400
- `;
401
- };
402
- export const complexModal = () => {
403
- return html`
404
- <style>
405
- body {
406
- --swc-margin-test: 10px;
407
- margin: var(--swc-margin-test);
408
- }
409
- sp-story-decorator::part(container) {
410
- min-height: calc(100vh - (2 * var(--swc-margin-test)));
411
- padding: 0;
412
- display: grid;
413
- place-content: center;
414
- }
415
- active-overlay > * {
416
- --spectrum-global-animation-duration-100: 0ms;
417
- --spectrum-global-animation-duration-200: 0ms;
418
- --spectrum-global-animation-duration-300: 0ms;
419
- --spectrum-global-animation-duration-400: 0ms;
420
- --spectrum-global-animation-duration-500: 0ms;
421
- --spectrum-global-animation-duration-600: 0ms;
422
- --spectrum-global-animation-duration-700: 0ms;
423
- --spectrum-global-animation-duration-800: 0ms;
424
- --spectrum-global-animation-duration-900: 0ms;
425
- --spectrum-global-animation-duration-1000: 0ms;
426
- --spectrum-global-animation-duration-2000: 0ms;
427
- --spectrum-global-animation-duration-4000: 0ms;
428
- --spectrum-animation-duration-0: 0ms;
429
- --spectrum-animation-duration-100: 0ms;
430
- --spectrum-animation-duration-200: 0ms;
431
- --spectrum-animation-duration-300: 0ms;
432
- --spectrum-animation-duration-400: 0ms;
433
- --spectrum-animation-duration-500: 0ms;
434
- --spectrum-animation-duration-600: 0ms;
435
- --spectrum-animation-duration-700: 0ms;
436
- --spectrum-animation-duration-800: 0ms;
437
- --spectrum-animation-duration-900: 0ms;
438
- --spectrum-animation-duration-1000: 0ms;
439
- --spectrum-animation-duration-2000: 0ms;
440
- --spectrum-animation-duration-4000: 0ms;
441
- --spectrum-coachmark-animation-indicator-ring-duration: 0ms;
442
- --swc-test-duration: 1ms;
443
- }
444
- </style>
445
- <overlay-trigger type="modal" placement="none" open="click">
446
- <sp-dialog-wrapper
447
- slot="click-content"
448
- headline="Dialog title"
449
- dismissable
450
- underlay
451
- footer="Content for footer"
452
- >
453
- <sp-field-label for="test-picker">
454
- Selection type:
455
- </sp-field-label>
456
- <sp-picker id="test-picker">
457
- <sp-menu-item>Deselect</sp-menu-item>
458
- <sp-menu-item>Select inverse</sp-menu-item>
459
- <sp-menu-item>Feather...</sp-menu-item>
460
- <sp-menu-item>Select and mask...</sp-menu-item>
461
- <sp-menu-divider></sp-menu-divider>
462
- <sp-menu-item>Save selection</sp-menu-item>
463
- <sp-menu-item disabled>Make work path</sp-menu-item>
464
- </sp-picker>
465
- </sp-dialog-wrapper>
466
- <sp-button slot="trigger" variant="primary">
467
- Toggle Dialog
468
- </sp-button>
469
- </overlay-trigger>
470
- `;
248
+ export const noCloseOnResize = (args) => html`
249
+ <style>
250
+ sp-button:hover {
251
+ border: 10px solid;
252
+ width: 100px;
253
+ }
254
+ </style>
255
+ ${template({
256
+ ...args,
257
+ open: "click"
258
+ })}
259
+ `;
260
+ noCloseOnResize.swc_vrt = {
261
+ skip: true
471
262
  };
472
- complexModal.decorators = [complexModalDecorator];
473
263
  export const customizedClickContent = (args) => html`
474
264
  <style>
475
- overlay-trigger {
476
- --styled-div-background-color: var(
477
- --spectrum-semantic-cta-background-color-default
478
- );
479
- --spectrum-button-m-accent-fill-texticon-background-color: rebeccapurple;
265
+ active-overlay::part(theme) {
266
+ --styled-div-background-color: var(--spectrum-semantic-cta-background-color-default);
267
+ --spectrum-button-m-cta-texticon-background-color: rebeccapurple;
480
268
  }
481
269
  </style>
270
+ </style>
482
271
  ${template({
483
272
  ...args,
484
273
  open: "click"
485
274
  })}
486
275
  `;
487
- export const deep = () => html`
488
- <overlay-trigger>
489
- <sp-button variant="primary" slot="trigger">
490
- Open popover 1 with buttons + selfmanaged Tooltips
491
- </sp-button>
492
- <sp-popover dialog slot="click-content" direction="bottom" tip>
493
- <sp-action-button>
494
- <sp-tooltip self-managed placement="bottom" offset="0">
495
- My Tooltip 1
496
- </sp-tooltip>
497
- A
498
- </sp-action-button>
499
- <sp-action-button>
500
- <sp-tooltip self-managed placement="bottom" offset="0">
501
- My Tooltip 1
502
- </sp-tooltip>
503
- B
504
- </sp-action-button>
505
- </sp-popover>
506
- </overlay-trigger>
507
-
508
- <overlay-trigger>
509
- <sp-button variant="primary" slot="trigger">
510
- Open popover 2 with buttons without ToolTips
511
- </sp-button>
512
- <sp-popover dialog slot="click-content" direction="bottom" tip>
513
- <sp-action-button>X</sp-action-button>
514
- <sp-action-button>Y</sp-action-button>
515
- </sp-popover>
516
- </overlay-trigger>
276
+ const extraText = html`
277
+ <p>This is some text.</p>
278
+ <p>This is some text.</p>
279
+ <p>
280
+ This is a
281
+ <a href="#anchor">link</a>
282
+ .
283
+ </p>
517
284
  `;
518
- deep.swc_vrt = {
519
- skip: true
285
+ export const inline = () => {
286
+ const closeEvent = new Event("close", { bubbles: true, composed: true });
287
+ return html`
288
+ <overlay-trigger type="inline">
289
+ <sp-button slot="trigger">Open</sp-button>
290
+ <sp-overlay slot="click-content">
291
+ <sp-button
292
+ @click=${(event) => {
293
+ event.target.dispatchEvent(closeEvent);
294
+ }}
295
+ >
296
+ Close
297
+ </sp-button>
298
+ </sp-overlay>
299
+ </overlay-trigger>
300
+ ${extraText}
301
+ `;
302
+ };
303
+ export const replace = () => {
304
+ const closeEvent = new Event("close", { bubbles: true, composed: true });
305
+ return html`
306
+ <overlay-trigger type="replace">
307
+ <sp-button slot="trigger">Open</sp-button>
308
+ <sp-overlay slot="click-content">
309
+ <sp-button
310
+ @click=${(event) => {
311
+ event.target.dispatchEvent(closeEvent);
312
+ }}
313
+ >
314
+ Close
315
+ </sp-button>
316
+ </sp-overlay>
317
+ </overlay-trigger>
318
+ ${extraText}
319
+ `;
320
+ };
321
+ export const deep = () => html`
322
+ <overlay-trigger>
323
+ <sp-button variant="primary" slot="trigger">
324
+ Open popover 1 with buttons + selfmanaged Tooltips
325
+ </sp-button>
326
+ <sp-popover dialog slot="click-content" direction="bottom" tip open>
327
+ <sp-action-button>
328
+ <sp-tooltip self-managed placement="bottom" offset="0">
329
+ My Tooltip 1
330
+ </sp-tooltip>
331
+ A
332
+ </sp-action-button>
333
+ <sp-action-button>
334
+ <sp-tooltip self-managed placement="bottom" offset="0">
335
+ My Tooltip 1
336
+ </sp-tooltip>
337
+ B
338
+ </sp-action-button>
339
+ </sp-popover>
340
+ </overlay-trigger>
341
+
342
+ <overlay-trigger>
343
+ <sp-button variant="primary" slot="trigger">
344
+ Open popover 2 with buttons without ToolTips
345
+ </sp-button>
346
+ <sp-popover dialog slot="click-content" direction="bottom" tip open>
347
+ <sp-action-button>X</sp-action-button>
348
+ <sp-action-button>Y</sp-action-button>
349
+ </sp-popover>
350
+ </overlay-trigger>
351
+ `;
352
+ deep.swc_vrt = {
353
+ skip: true
354
+ };
355
+ export const modalLoose = () => {
356
+ const closeEvent = new Event("close", { bubbles: true, composed: true });
357
+ return html`
358
+ <overlay-trigger type="modal" placement="none">
359
+ <sp-button slot="trigger">Open</sp-button>
360
+ <sp-dialog
361
+ size="s"
362
+ dismissable
363
+ slot="click-content"
364
+ @closed=${(event) => event.target.dispatchEvent(closeEvent)}
365
+ >
366
+ <h2 slot="heading">Loose Dialog</h2>
367
+ <p>
368
+ The
369
+ <code>sp-dialog</code>
370
+ element is not "meant" to be a modal alone. In that way it
371
+ does not manage its own
372
+ <code>open</code>
373
+ attribute or outline when it should have
374
+ <code>pointer-events: auto</code>
375
+ . It's a part of this test suite to prove that content in
376
+ this way can be used in an
377
+ <code>overlay-trigger</code>
378
+ element.
379
+ </p>
380
+ </sp-dialog>
381
+ </overlay-trigger>
382
+ ${extraText}
383
+ `;
384
+ };
385
+ export const modalManaged = () => {
386
+ const closeEvent = new Event("close", { bubbles: true, composed: true });
387
+ return html`
388
+ <overlay-trigger type="modal" placement="none">
389
+ <sp-button slot="trigger">Open</sp-button>
390
+ <sp-dialog-wrapper
391
+ underlay
392
+ slot="click-content"
393
+ headline="Wrapped Dialog w/ Hero Image"
394
+ confirm-label="Keep Both"
395
+ secondary-label="Replace"
396
+ cancel-label="Cancel"
397
+ footer="Content for footer"
398
+ @confirm=${(event) => {
399
+ event.target.dispatchEvent(closeEvent);
400
+ }}
401
+ @secondary=${(event) => {
402
+ event.target.dispatchEvent(closeEvent);
403
+ }}
404
+ @cancel=${(event) => {
405
+ event.target.dispatchEvent(closeEvent);
406
+ }}
407
+ >
408
+ <p>
409
+ The
410
+ <code>sp-dialog-wrapper</code>
411
+ element has been prepared for use in an
412
+ <code>overlay-trigger</code>
413
+ element by it's combination of modal, underlay, etc. styles
414
+ and features.
415
+ </p>
416
+ </sp-dialog-wrapper>
417
+ </overlay-trigger>
418
+ ${extraText}
419
+ `;
520
420
  };
521
421
  export const deepNesting = () => {
522
422
  const color = window.__swc_hack_knobs__.defaultColor;
@@ -547,115 +447,6 @@ export const deepNesting = () => {
547
447
  </sp-theme>
548
448
  `;
549
449
  };
550
- class DefinedOverlayReady extends HTMLElement {
551
- constructor() {
552
- super(...arguments);
553
- this.handleTriggerOpened = async () => {
554
- this.overlay.removeEventListener("sp-opened", this.handleTriggerOpened);
555
- await nextFrame();
556
- await nextFrame();
557
- await nextFrame();
558
- await nextFrame();
559
- this.popover = document.querySelector(
560
- "popover-content"
561
- );
562
- if (!this.popover) {
563
- return;
564
- }
565
- this.popover.addEventListener("sp-opened", this.handlePopoverOpen);
566
- await nextFrame();
567
- await nextFrame();
568
- this.popover.button.click();
569
- };
570
- this.handlePopoverOpen = async () => {
571
- await nextFrame();
572
- this.ready(true);
573
- };
574
- this.readyPromise = Promise.resolve(false);
575
- }
576
- connectedCallback() {
577
- if (!!this.ready)
578
- return;
579
- this.readyPromise = new Promise((res) => {
580
- this.ready = res;
581
- this.setup();
582
- });
583
- }
584
- async setup() {
585
- await nextFrame();
586
- await nextFrame();
587
- this.overlay = document.querySelector(
588
- `overlay-trigger`
589
- );
590
- const button = document.querySelector(
591
- `[slot="trigger"]`
592
- );
593
- this.overlay.addEventListener("sp-opened", this.handleTriggerOpened);
594
- await nextFrame();
595
- await nextFrame();
596
- button.click();
597
- }
598
- disconnectedCallback() {
599
- this.overlay.removeEventListener("sp-opened", this.handleTriggerOpened);
600
- this.popover.removeEventListener("sp-opened", this.handlePopoverOpen);
601
- }
602
- get updateComplete() {
603
- return this.readyPromise;
604
- }
605
- }
606
- customElements.define("defined-overlay-ready", DefinedOverlayReady);
607
- const definedOverlayDecorator = (story) => {
608
- return html`
609
- ${story()}
610
- <defined-overlay-ready></defined-overlay-ready>
611
- `;
612
- };
613
- export const definedOverlayElement = () => {
614
- return html`
615
- <overlay-trigger placement="bottom" type="modal">
616
- <sp-button variant="primary" slot="trigger">Open popover</sp-button>
617
- <sp-popover slot="click-content" direction="bottom" dialog>
618
- <popover-content></popover-content>
619
- </sp-popover>
620
- </overlay-trigger>
621
- `;
622
- };
623
- definedOverlayElement.decorators = [definedOverlayDecorator];
624
- export const detachedElement = () => {
625
- let closeOverlay;
626
- const openDetachedOverlayContent = async () => {
627
- if (closeOverlay) {
628
- closeOverlay();
629
- closeOverlay = void 0;
630
- return;
631
- }
632
- const div = document.createElement("div");
633
- div.textContent = "This div is overlaid";
634
- div.setAttribute(
635
- "style",
636
- `
637
- background-color: var(--spectrum-global-color-gray-50);
638
- color: var(--spectrum-global-color-gray-800);
639
- border: 1px solid;
640
- padding: 2em;
641
- `
642
- );
643
- };
644
- requestAnimationFrame(() => {
645
- });
646
- return html`
647
- <sp-action-button
648
- id="detached-content-trigger"
649
- @click=${openDetachedOverlayContent}
650
- @sp-closed=${() => closeOverlay = void 0}
651
- >
652
- <sp-icon-open-in
653
- slot="icon"
654
- label="Open in overlay"
655
- ></sp-icon-open-in>
656
- </sp-action-button>
657
- `;
658
- };
659
450
  export const edges = () => {
660
451
  return html`
661
452
  <style>
@@ -685,7 +476,7 @@ export const edges = () => {
685
476
  <br />
686
477
  Left
687
478
  </sp-button>
688
- <sp-tooltip slot="hover-content" delayed tip="bottom">
479
+ <sp-tooltip slot="hover-content" delayed open tip="bottom">
689
480
  Triskaidekaphobia and More
690
481
  </sp-tooltip>
691
482
  </overlay-trigger>
@@ -695,7 +486,7 @@ export const edges = () => {
695
486
  <br />
696
487
  Right
697
488
  </sp-button>
698
- <sp-tooltip slot="hover-content" delayed tip="bottom">
489
+ <sp-tooltip slot="hover-content" delayed open tip="bottom">
699
490
  Triskaidekaphobia and More
700
491
  </sp-tooltip>
701
492
  </overlay-trigger>
@@ -705,7 +496,7 @@ export const edges = () => {
705
496
  <br />
706
497
  Left
707
498
  </sp-button>
708
- <sp-tooltip slot="hover-content" delayed tip="top">
499
+ <sp-tooltip slot="hover-content" delayed open tip="top">
709
500
  Triskaidekaphobia and More
710
501
  </sp-tooltip>
711
502
  </overlay-trigger>
@@ -715,33 +506,108 @@ export const edges = () => {
715
506
  <br />
716
507
  Right
717
508
  </sp-button>
718
- <sp-tooltip slot="hover-content" delayed tip="top">
509
+ <sp-tooltip slot="hover-content" delayed open tip="top">
719
510
  Triskaidekaphobia and More
720
511
  </sp-tooltip>
721
512
  </overlay-trigger>
722
513
  `;
723
514
  };
724
- export const inline = () => {
725
- const closeEvent = new Event("close", { bubbles: true, composed: true });
515
+ export const updated = () => {
726
516
  return html`
727
- <overlay-trigger type="inline">
728
- <sp-button slot="trigger">Open</sp-button>
729
- <sp-popover slot="click-content">
730
- <sp-button
731
- @click=${(event) => {
732
- event.target.dispatchEvent(closeEvent);
733
- }}
517
+ ${storyStyles}
518
+ <style>
519
+ sp-tooltip {
520
+ transition: none;
521
+ }
522
+ </style>
523
+ <overlay-drag>
524
+ <overlay-trigger class="demo top-left" placement="bottom">
525
+ <overlay-target-icon
526
+ slot="trigger"
527
+ style="translate(400px, 300px)"
528
+ ></overlay-target-icon>
529
+ <sp-tooltip slot="hover-content" delayed tip="bottom">
530
+ Click to open popover
531
+ </sp-tooltip>
532
+ <sp-popover
533
+ dialog
534
+ slot="click-content"
535
+ position="bottom"
536
+ tip
537
+ open
734
538
  >
735
- Close
736
- </sp-button>
737
- </sp-popover>
738
- </overlay-trigger>
739
- ${extraText}
740
- `;
741
- };
742
- export const longpress = () => {
743
- return html`
744
- <overlay-trigger placement="right-start">
539
+ <div class="options-popover-content">
540
+ <sp-slider
541
+ value="5"
542
+ step="0.5"
543
+ min="0"
544
+ max="20"
545
+ label="Awesomeness"
546
+ ></sp-slider>
547
+ <div id="styled-div">
548
+ The background of this div should be blue
549
+ </div>
550
+ <overlay-trigger id="inner-trigger" placement="bottom">
551
+ <sp-button slot="trigger">Press Me</sp-button>
552
+ <sp-popover
553
+ dialog
554
+ slot="click-content"
555
+ placement="bottom"
556
+ tip
557
+ open
558
+ >
559
+ <div class="options-popover-content">
560
+ Another Popover
561
+ </div>
562
+ </sp-popover>
563
+
564
+ <sp-tooltip
565
+ slot="hover-content"
566
+ delayed
567
+ tip="bottom"
568
+ >
569
+ Click to open another popover.
570
+ </sp-tooltip>
571
+ </overlay-trigger>
572
+ </div>
573
+ </sp-popover>
574
+ </overlay-trigger>
575
+ </overlay-drag>
576
+ `;
577
+ };
578
+ export const sideHoverDraggable = () => {
579
+ return html`
580
+ ${storyStyles}
581
+ <style>
582
+ sp-tooltip {
583
+ transition: none;
584
+ }
585
+ </style>
586
+ <overlay-drag>
587
+ <overlay-trigger placement="right">
588
+ <overlay-target-icon slot="trigger"></overlay-target-icon>
589
+ <sp-tooltip slot="hover-content" delayed tip="right">
590
+ Lorem ipsum dolor sit amet, consectetur adipiscing elit.
591
+ Vivamus egestas sed enim sed condimentum. Nunc facilisis
592
+ scelerisque massa sed luctus. Orci varius natoque penatibus
593
+ et magnis dis parturient montes, nascetur ridiculus mus.
594
+ Suspendisse sagittis sodales purus vitae ultricies. Integer
595
+ at dui sem. Sed quam tortor, ornare in nisi et, rhoncus
596
+ lacinia mauris. Sed vel rutrum mauris, ac pellentesque nibh.
597
+ Sed feugiat semper libero, sit amet vehicula orci fermentum
598
+ id. Vivamus imperdiet egestas luctus. Mauris tincidunt
599
+ malesuada ante, faucibus viverra nunc blandit a. Fusce et
600
+ nisl nisi. Aenean dictum quam id mollis faucibus. Nulla a
601
+ ultricies dui. In hac habitasse platea dictumst. Curabitur
602
+ gravida lobortis vestibulum.
603
+ </sp-tooltip>
604
+ </overlay-trigger>
605
+ </overlay-drag>
606
+ `;
607
+ };
608
+ export const longpress = () => {
609
+ return html`
610
+ <overlay-trigger placement="right-start">
745
611
  <sp-action-button slot="trigger" hold-affordance>
746
612
  <sp-icon-magnify slot="icon"></sp-icon-magnify>
747
613
  </sp-action-button>
@@ -769,162 +635,155 @@ export const longpress = () => {
769
635
  </overlay-trigger>
770
636
  `;
771
637
  };
772
- export const modalLoose = () => {
773
- const closeEvent = new Event("close", { bubbles: true, composed: true });
774
- return html`
775
- <overlay-trigger type="modal" placement="none">
776
- <sp-button slot="trigger">Open</sp-button>
777
- <sp-dialog
778
- size="s"
779
- dismissable
780
- slot="click-content"
781
- @closed=${(event) => event.target.dispatchEvent(closeEvent)}
782
- >
783
- <h2 slot="heading">Loose Dialog</h2>
784
- <p>
785
- The
786
- <code>sp-dialog</code>
787
- element is not "meant" to be a modal alone. In that way it
788
- does not manage its own
789
- <code>open</code>
790
- attribute or outline when it should have
791
- <code>pointer-events: auto</code>
792
- . It's a part of this test suite to prove that content in
793
- this way can be used in an
794
- <code>overlay-trigger</code>
795
- element.
796
- </p>
797
- </sp-dialog>
798
- </overlay-trigger>
799
- ${extraText}
800
- `;
801
- };
802
- export const modalManaged = () => {
803
- const closeEvent = new Event("close", { bubbles: true, composed: true });
804
- return html`
805
- <overlay-trigger type="modal" placement="none">
806
- <sp-button slot="trigger">Open</sp-button>
807
- <sp-dialog-wrapper
808
- underlay
809
- slot="click-content"
810
- headline="Wrapped Dialog w/ Hero Image"
811
- confirm-label="Keep Both"
812
- secondary-label="Replace"
813
- cancel-label="Cancel"
814
- footer="Content for footer"
815
- @confirm=${(event) => {
816
- event.target.dispatchEvent(closeEvent);
817
- }}
818
- @secondary=${(event) => {
819
- event.target.dispatchEvent(closeEvent);
820
- }}
821
- @cancel=${(event) => {
822
- event.target.dispatchEvent(closeEvent);
823
- }}
824
- >
825
- <p>
826
- The
827
- <code>sp-dialog-wrapper</code>
828
- element has been prepared for use in an
829
- <code>overlay-trigger</code>
830
- element by it's combination of modal, underlay, etc. styles
831
- and features.
832
- </p>
833
- </sp-dialog-wrapper>
834
- </overlay-trigger>
835
- ${extraText}
836
- `;
837
- };
838
- export const modalWithinNonModal = () => {
638
+ export const clickAndHoverTargets = () => {
839
639
  return html`
840
- <overlay-trigger type="inline">
841
- <sp-button variant="primary" slot="trigger">
842
- Open inline overlay
843
- </sp-button>
844
- <sp-popover slot="click-content" dialog>
845
- <overlay-trigger type="modal">
846
- <sp-button variant="primary" slot="trigger">
847
- Open modal overlay
848
- </sp-button>
849
- <sp-popover slot="click-content" dialog>
850
- Modal overlay
851
- </sp-popover>
852
- </overlay-trigger>
853
- </sp-popover>
854
- </overlay-trigger>
640
+ <div>
641
+ ${storyStyles}
642
+ <style>
643
+ .friendly-target {
644
+ padding: 4px;
645
+ margin: 6px;
646
+ border: 2px solid black;
647
+ border-radius: 6px;
648
+ cursor: default;
649
+ }
650
+ </style>
651
+ <overlay-trigger placement="right">
652
+ <div class="friendly-target" slot="trigger" tabindex="0">
653
+ Click me
654
+ </div>
655
+ <sp-tooltip slot="click-content" tip="right">
656
+ Ok, now hover the other trigger
657
+ </sp-tooltip>
658
+ </overlay-trigger>
659
+ <overlay-trigger placement="left">
660
+ <div class="friendly-target" slot="trigger" tabindex="0">
661
+ Then hover me
662
+ </div>
663
+ <sp-tooltip slot="hover-content" tip="right">
664
+ Now click my trigger -- I should stay open, but the other
665
+ overlay should close
666
+ </sp-tooltip>
667
+ </overlay-trigger>
668
+ </div>
855
669
  `;
856
670
  };
857
- export const noCloseOnResize = (args) => html`
858
- <style>
859
- sp-button:hover {
860
- border: 10px solid;
861
- width: 100px;
862
- }
863
- </style>
864
- ${template({
865
- ...args,
866
- open: "click"
867
- })}
868
- `;
869
- noCloseOnResize.swc_vrt = {
671
+ clickAndHoverTargets.swc_vrt = {
870
672
  skip: true
871
673
  };
872
- export const openClickContent = (args) => template({
873
- ...args,
874
- open: "click"
875
- });
876
- export const openHoverContent = (args) => template({
877
- ...args,
878
- open: "hover"
879
- });
880
- export const replace = () => {
881
- const closeEvent = new Event("close", { bubbles: true, composed: true });
674
+ function nextFrame() {
675
+ return new Promise((res) => requestAnimationFrame(() => res()));
676
+ }
677
+ class ComplexModalReady extends HTMLElement {
678
+ constructor() {
679
+ super();
680
+ this.handleTriggerOpened = async () => {
681
+ await nextFrame();
682
+ const picker = document.querySelector("#test-picker");
683
+ picker.addEventListener("sp-opened", this.handlePickerOpen);
684
+ picker.open = true;
685
+ };
686
+ this.handlePickerOpen = async () => {
687
+ const picker = document.querySelector("#test-picker");
688
+ const actions = [nextFrame, picker.updateComplete];
689
+ await Promise.all(actions);
690
+ this.ready(true);
691
+ };
692
+ this.readyPromise = Promise.resolve(false);
693
+ this.readyPromise = new Promise((res) => {
694
+ this.ready = res;
695
+ this.setup();
696
+ });
697
+ }
698
+ async setup() {
699
+ await nextFrame();
700
+ const overlay = document.querySelector(
701
+ `overlay-trigger`
702
+ );
703
+ overlay.addEventListener("sp-opened", this.handleTriggerOpened);
704
+ }
705
+ get updateComplete() {
706
+ return this.readyPromise;
707
+ }
708
+ }
709
+ customElements.define("complex-modal-ready", ComplexModalReady);
710
+ const complexModalDecorator = (story) => {
882
711
  return html`
883
- <overlay-trigger type="replace">
884
- <sp-button slot="trigger">Open</sp-button>
885
- <sp-popover slot="click-content">
886
- <sp-button
887
- @click=${(event) => {
888
- event.target.dispatchEvent(closeEvent);
889
- }}
890
- >
891
- Close
892
- </sp-button>
893
- </sp-popover>
894
- </overlay-trigger>
895
- ${extraText}
712
+ ${story()}
713
+ <complex-modal-ready></complex-modal-ready>
896
714
  `;
897
715
  };
898
- export const sideHoverDraggable = () => {
716
+ export const complexModal = () => {
899
717
  return html`
900
- ${storyStyles}
901
718
  <style>
902
- sp-tooltip {
903
- transition: none;
719
+ body {
720
+ --swc-margin-test: 10px;
721
+ margin: var(--swc-margin-test);
722
+ }
723
+ sp-story-decorator::part(container) {
724
+ min-height: calc(100vh - (2 * var(--swc-margin-test)));
725
+ padding: 0;
726
+ display: grid;
727
+ place-content: center;
728
+ }
729
+ active-overlay > * {
730
+ --spectrum-global-animation-duration-100: 0ms;
731
+ --spectrum-global-animation-duration-200: 0ms;
732
+ --spectrum-global-animation-duration-300: 0ms;
733
+ --spectrum-global-animation-duration-400: 0ms;
734
+ --spectrum-global-animation-duration-500: 0ms;
735
+ --spectrum-global-animation-duration-600: 0ms;
736
+ --spectrum-global-animation-duration-700: 0ms;
737
+ --spectrum-global-animation-duration-800: 0ms;
738
+ --spectrum-global-animation-duration-900: 0ms;
739
+ --spectrum-global-animation-duration-1000: 0ms;
740
+ --spectrum-global-animation-duration-2000: 0ms;
741
+ --spectrum-global-animation-duration-4000: 0ms;
742
+ --spectrum-animation-duration-0: 0ms;
743
+ --spectrum-animation-duration-100: 0ms;
744
+ --spectrum-animation-duration-200: 0ms;
745
+ --spectrum-animation-duration-300: 0ms;
746
+ --spectrum-animation-duration-400: 0ms;
747
+ --spectrum-animation-duration-500: 0ms;
748
+ --spectrum-animation-duration-600: 0ms;
749
+ --spectrum-animation-duration-700: 0ms;
750
+ --spectrum-animation-duration-800: 0ms;
751
+ --spectrum-animation-duration-900: 0ms;
752
+ --spectrum-animation-duration-1000: 0ms;
753
+ --spectrum-animation-duration-2000: 0ms;
754
+ --spectrum-animation-duration-4000: 0ms;
755
+ --spectrum-coachmark-animation-indicator-ring-duration: 0ms;
756
+ --swc-test-duration: 1ms;
904
757
  }
905
758
  </style>
906
- <overlay-drag>
907
- <overlay-trigger placement="right">
908
- <overlay-target-icon slot="trigger"></overlay-target-icon>
909
- <sp-tooltip slot="hover-content" delayed tip="right">
910
- Lorem ipsum dolor sit amet, consectetur adipiscing elit.
911
- Vivamus egestas sed enim sed condimentum. Nunc facilisis
912
- scelerisque massa sed luctus. Orci varius natoque penatibus
913
- et magnis dis parturient montes, nascetur ridiculus mus.
914
- Suspendisse sagittis sodales purus vitae ultricies. Integer
915
- at dui sem. Sed quam tortor, ornare in nisi et, rhoncus
916
- lacinia mauris. Sed vel rutrum mauris, ac pellentesque nibh.
917
- Sed feugiat semper libero, sit amet vehicula orci fermentum
918
- id. Vivamus imperdiet egestas luctus. Mauris tincidunt
919
- malesuada ante, faucibus viverra nunc blandit a. Fusce et
920
- nisl nisi. Aenean dictum quam id mollis faucibus. Nulla a
921
- ultricies dui. In hac habitasse platea dictumst. Curabitur
922
- gravida lobortis vestibulum.
923
- </sp-tooltip>
924
- </overlay-trigger>
925
- </overlay-drag>
759
+ <overlay-trigger type="modal" placement="none" open="click">
760
+ <sp-dialog-wrapper
761
+ slot="click-content"
762
+ headline="Dialog title"
763
+ dismissable
764
+ underlay
765
+ footer="Content for footer"
766
+ >
767
+ <sp-field-label for="test-picker">
768
+ Selection type:
769
+ </sp-field-label>
770
+ <sp-picker id="test-picker">
771
+ <sp-menu-item>Deselect</sp-menu-item>
772
+ <sp-menu-item>Select inverse</sp-menu-item>
773
+ <sp-menu-item>Feather...</sp-menu-item>
774
+ <sp-menu-item>Select and mask...</sp-menu-item>
775
+ <sp-menu-divider></sp-menu-divider>
776
+ <sp-menu-item>Save selection</sp-menu-item>
777
+ <sp-menu-item disabled>Make work path</sp-menu-item>
778
+ </sp-picker>
779
+ </sp-dialog-wrapper>
780
+ <sp-button slot="trigger" variant="primary">
781
+ Toggle Dialog
782
+ </sp-button>
783
+ </overlay-trigger>
926
784
  `;
927
785
  };
786
+ complexModal.decorators = [complexModalDecorator];
928
787
  export const superComplexModal = () => {
929
788
  return html`
930
789
  <overlay-trigger type="modal" placement="none">
@@ -961,85 +820,6 @@ export const superComplexModal = () => {
961
820
  </overlay-trigger>
962
821
  `;
963
822
  };
964
- export const updated = () => {
965
- return html`
966
- ${storyStyles}
967
- <style>
968
- sp-tooltip {
969
- transition: none;
970
- }
971
- </style>
972
- <overlay-drag>
973
- <overlay-trigger class="demo top-left" placement="bottom">
974
- <overlay-target-icon
975
- slot="trigger"
976
- style="translate(400px, 300px)"
977
- ></overlay-target-icon>
978
- <sp-tooltip slot="hover-content" delayed tip="bottom">
979
- Click to open popover
980
- </sp-tooltip>
981
- <sp-popover dialog slot="click-content" position="bottom" tip>
982
- <div class="options-popover-content">
983
- <sp-slider
984
- value="5"
985
- step="0.5"
986
- min="0"
987
- max="20"
988
- label="Awesomeness"
989
- ></sp-slider>
990
- <div id="styled-div">
991
- The background of this div should be blue
992
- </div>
993
- <overlay-trigger id="inner-trigger" placement="bottom">
994
- <sp-button slot="trigger">Press Me</sp-button>
995
- <sp-popover
996
- dialog
997
- slot="click-content"
998
- placement="bottom"
999
- tip
1000
- >
1001
- <div class="options-popover-content">
1002
- Another Popover
1003
- </div>
1004
- </sp-popover>
1005
-
1006
- <sp-tooltip
1007
- slot="hover-content"
1008
- delayed
1009
- tip="bottom"
1010
- >
1011
- Click to open another popover.
1012
- </sp-tooltip>
1013
- </overlay-trigger>
1014
- </div>
1015
- </sp-popover>
1016
- </overlay-trigger>
1017
- </overlay-drag>
1018
- `;
1019
- };
1020
- export const updating = () => {
1021
- const update = () => {
1022
- const button = document.querySelector('[slot="trigger"]');
1023
- button.style.left = `${Math.floor(Math.random() * 200)}px`;
1024
- button.style.top = `${Math.floor(Math.random() * 200)}px`;
1025
- button.style.position = "fixed";
1026
- };
1027
- return html`
1028
- <overlay-trigger type="click">
1029
- <sp-button variant="primary" slot="trigger">
1030
- Open inline overlay
1031
- </sp-button>
1032
- <sp-popover slot="click-content" dialog>
1033
- <sp-button variant="primary" @click=${update}>
1034
- Update trigger location.
1035
- </sp-button>
1036
- </sp-popover>
1037
- </overlay-trigger>
1038
- `;
1039
- };
1040
- updating.swc_vrt = {
1041
- skip: true
1042
- };
1043
823
  class StartEndContextmenu extends HTMLElement {
1044
824
  constructor() {
1045
825
  super();
@@ -1061,8 +841,45 @@ class StartEndContextmenu extends HTMLElement {
1061
841
  }
1062
842
  }
1063
843
  customElements.define("start-end-contextmenu", StartEndContextmenu);
1064
- export const virtualElement = () => {
1065
- const pointerenter = async () => {
844
+ export const virtualElement = (args) => {
845
+ const contextMenuTemplate = (kind = "") => html`
846
+ <sp-popover
847
+ style="width:300px;"
848
+ @click=${(event) => {
849
+ var _a;
850
+ return (_a = event.target) == null ? void 0 : _a.dispatchEvent(
851
+ new Event("close", { bubbles: true })
852
+ );
853
+ }}
854
+ >
855
+ <sp-menu>
856
+ <sp-menu-group>
857
+ <span slot="header">Menu source: ${kind}</span>
858
+ <sp-menu-item>Deselect</sp-menu-item>
859
+ <sp-menu-item>Select inverse</sp-menu-item>
860
+ <sp-menu-item>Feather...</sp-menu-item>
861
+ <sp-menu-item>Select and mask...</sp-menu-item>
862
+ <sp-menu-divider></sp-menu-divider>
863
+ <sp-menu-item>Save selection</sp-menu-item>
864
+ <sp-menu-item disabled>Make work path</sp-menu-item>
865
+ </sp-menu-group>
866
+ </sp-menu>
867
+ </sp-popover>
868
+ `;
869
+ const pointerenter = async (event) => {
870
+ event.preventDefault();
871
+ const source = event.composedPath()[0];
872
+ const { id } = source;
873
+ const trigger = event.target;
874
+ const virtualTrigger = new VirtualTrigger(event.clientX, event.clientY);
875
+ const fragment = document.createDocumentFragment();
876
+ render(contextMenuTemplate(id), fragment);
877
+ const popover = fragment.querySelector("sp-popover");
878
+ openOverlay(trigger, "modal", popover, {
879
+ placement: args.placement,
880
+ receivesFocus: "auto",
881
+ virtualTrigger
882
+ });
1066
883
  };
1067
884
  return html`
1068
885
  <style>
@@ -1080,4 +897,228 @@ export const virtualElement = () => {
1080
897
  virtualElement.args = {
1081
898
  placement: "right-start"
1082
899
  };
900
+ export const detachedElement = () => {
901
+ let closeOverlay;
902
+ const openDetachedOverlayContent = async ({
903
+ target
904
+ }) => {
905
+ if (closeOverlay) {
906
+ closeOverlay();
907
+ closeOverlay = void 0;
908
+ return;
909
+ }
910
+ const div = document.createElement("div");
911
+ div.textContent = "This div is overlaid";
912
+ div.setAttribute(
913
+ "style",
914
+ `
915
+ background-color: var(--spectrum-global-color-gray-50);
916
+ color: var(--spectrum-global-color-gray-800);
917
+ border: 1px solid;
918
+ padding: 2em;
919
+ `
920
+ );
921
+ closeOverlay = await Overlay.open(target, "click", div, {
922
+ offset: 0,
923
+ placement: "bottom"
924
+ });
925
+ };
926
+ requestAnimationFrame(() => {
927
+ openDetachedOverlayContent({
928
+ target: document.querySelector(
929
+ "#detached-content-trigger"
930
+ )
931
+ });
932
+ });
933
+ return html`
934
+ <sp-action-button
935
+ id="detached-content-trigger"
936
+ @click=${openDetachedOverlayContent}
937
+ @sp-closed=${() => closeOverlay = void 0}
938
+ >
939
+ <sp-icon-open-in
940
+ slot="icon"
941
+ label="Open in overlay"
942
+ ></sp-icon-open-in>
943
+ </sp-action-button>
944
+ `;
945
+ };
946
+ class DefinedOverlayReady extends HTMLElement {
947
+ constructor() {
948
+ super();
949
+ this.handleTriggerOpened = async () => {
950
+ await nextFrame();
951
+ const popover = document.querySelector("popover-content");
952
+ if (!popover) {
953
+ return;
954
+ }
955
+ popover.addEventListener("sp-opened", this.handlePopoverOpen);
956
+ popover.button.click();
957
+ };
958
+ this.handlePopoverOpen = async () => {
959
+ await nextFrame();
960
+ this.ready(true);
961
+ };
962
+ this.readyPromise = Promise.resolve(false);
963
+ this.readyPromise = new Promise((res) => {
964
+ this.ready = res;
965
+ this.setup();
966
+ });
967
+ }
968
+ async setup() {
969
+ await nextFrame();
970
+ const overlay = document.querySelector(
971
+ `overlay-trigger`
972
+ );
973
+ const button = document.querySelector(
974
+ `[slot="trigger"]`
975
+ );
976
+ overlay.addEventListener("sp-opened", this.handleTriggerOpened);
977
+ button.click();
978
+ }
979
+ get updateComplete() {
980
+ return this.readyPromise;
981
+ }
982
+ }
983
+ customElements.define("defined-overlay-ready", DefinedOverlayReady);
984
+ const definedOverlayDecorator = (story) => {
985
+ return html`
986
+ ${story()}
987
+ <defined-overlay-ready></defined-overlay-ready>
988
+ `;
989
+ };
990
+ export const definedOverlayElement = () => {
991
+ return html`
992
+ <overlay-trigger placement="bottom" type="modal">
993
+ <sp-button variant="primary" slot="trigger">Open popover</sp-button>
994
+ <sp-popover slot="click-content" direction="bottom" dialog>
995
+ <popover-content></popover-content>
996
+ </sp-popover>
997
+ </overlay-trigger>
998
+ `;
999
+ };
1000
+ definedOverlayElement.decorators = [definedOverlayDecorator];
1001
+ export const modalWithinNonModal = () => {
1002
+ return html`
1003
+ <overlay-trigger type="inline">
1004
+ <sp-button variant="primary" slot="trigger">
1005
+ Open inline overlay
1006
+ </sp-button>
1007
+ <sp-popover slot="click-content" dialog>
1008
+ <overlay-trigger type="modal">
1009
+ <sp-button variant="primary" slot="trigger">
1010
+ Open modal overlay
1011
+ </sp-button>
1012
+ <sp-popover slot="click-content" dialog>
1013
+ Modal overlay
1014
+ </sp-popover>
1015
+ </overlay-trigger>
1016
+ </sp-popover>
1017
+ </overlay-trigger>
1018
+ `;
1019
+ };
1020
+ export const updating = () => {
1021
+ const update = () => {
1022
+ const button = document.querySelector('[slot="trigger"]');
1023
+ button.style.left = `${Math.floor(Math.random() * 200)}px`;
1024
+ button.style.top = `${Math.floor(Math.random() * 200)}px`;
1025
+ button.style.position = "fixed";
1026
+ Overlay.update();
1027
+ };
1028
+ return html`
1029
+ <overlay-trigger type="click">
1030
+ <sp-button variant="primary" slot="trigger">
1031
+ Open inline overlay
1032
+ </sp-button>
1033
+ <sp-popover slot="click-content" dialog>
1034
+ <sp-button variant="primary" @click=${update}>
1035
+ Update trigger location.
1036
+ </sp-button>
1037
+ </sp-popover>
1038
+ </overlay-trigger>
1039
+ `;
1040
+ };
1041
+ updating.swc_vrt = {
1042
+ skip: true
1043
+ };
1044
+ export const accordion = () => {
1045
+ const handleToggle = () => {
1046
+ Overlay.update();
1047
+ };
1048
+ return html`
1049
+ <overlay-trigger type="modal" placement="right">
1050
+ <sp-button variant="primary" slot="trigger">
1051
+ Open overlay w/ accordion
1052
+ </sp-button>
1053
+ <div slot="click-content" style="max-height: 100%;display: flex;">
1054
+ <sp-popover
1055
+ open
1056
+ dialog
1057
+ style="overflow-y: scroll;position: static;"
1058
+ >
1059
+ <sp-accordion
1060
+ allow-multiple
1061
+ @sp-accordion-item-toggle=${handleToggle}
1062
+ >
1063
+ <sp-accordion-item label="Some things">
1064
+ <p>
1065
+ Thing
1066
+ <br />
1067
+ <br />
1068
+ <br />
1069
+ <br />
1070
+ <br />
1071
+ <br />
1072
+ <br />
1073
+ more things
1074
+ </p>
1075
+ </sp-accordion-item>
1076
+ <sp-accordion-item label="Other things">
1077
+ <p>
1078
+ Thing
1079
+ <br />
1080
+ <br />
1081
+ <br />
1082
+ <br />
1083
+ <br />
1084
+ <br />
1085
+ <br />
1086
+ more things
1087
+ </p>
1088
+ </sp-accordion-item>
1089
+ <sp-accordion-item label="More things">
1090
+ <p>
1091
+ Thing
1092
+ <br />
1093
+ <br />
1094
+ <br />
1095
+ <br />
1096
+ <br />
1097
+ <br />
1098
+ <br />
1099
+ more things
1100
+ </p>
1101
+ </sp-accordion-item>
1102
+ <sp-accordion-item label="Additional things">
1103
+ <p>
1104
+ Thing
1105
+ <br />
1106
+ <br />
1107
+ <br />
1108
+ <br />
1109
+ <br />
1110
+ <br />
1111
+ <br />
1112
+ more things
1113
+ </p>
1114
+ </sp-accordion-item>
1115
+ </sp-accordion>
1116
+ </sp-popover>
1117
+ </div>
1118
+ </overlay-trigger>
1119
+ `;
1120
+ };
1121
+ accordion.swc_vrt = {
1122
+ skip: true
1123
+ };
1083
1124
  //# sourceMappingURL=overlay.stories.js.map