@spectrum-web-components/overlay 0.32.0 → 0.32.1-overlay.41

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