@spectrum-web-components/overlay 0.30.1-overlay.41 → 0.31.0

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