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