@spectrum-web-components/overlay 0.19.3 → 0.19.4-overlay.22

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