@spectrum-web-components/overlay 0.31.1-overlay.29 → 0.31.1-react.21

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