@spectrum-web-components/overlay 0.19.2-overlay.33 → 0.19.3

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