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

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