@spectrum-web-components/picker 1.1.0 → 1.1.2

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 (93) hide show
  1. package/package.json +17 -17
  2. package/sp-picker.d.ts +6 -0
  3. package/sp-picker.dev.js +5 -0
  4. package/sp-picker.dev.js.map +7 -0
  5. package/sp-picker.js +2 -0
  6. package/sp-picker.js.map +7 -0
  7. package/src/DesktopController.d.ts +7 -0
  8. package/src/DesktopController.dev.js +72 -0
  9. package/src/DesktopController.dev.js.map +7 -0
  10. package/src/DesktopController.js +2 -0
  11. package/src/DesktopController.js.map +7 -0
  12. package/src/InteractionController.d.ts +44 -0
  13. package/src/InteractionController.dev.js +122 -0
  14. package/src/InteractionController.dev.js.map +7 -0
  15. package/src/InteractionController.js +2 -0
  16. package/src/InteractionController.js.map +7 -0
  17. package/src/MobileController.d.ts +8 -0
  18. package/src/MobileController.dev.js +51 -0
  19. package/src/MobileController.dev.js.map +7 -0
  20. package/src/MobileController.js +2 -0
  21. package/src/MobileController.js.map +7 -0
  22. package/src/Picker.d.ts +139 -0
  23. package/src/Picker.dev.js +717 -0
  24. package/src/Picker.dev.js.map +7 -0
  25. package/src/Picker.js +116 -0
  26. package/src/Picker.js.map +7 -0
  27. package/src/index.d.ts +1 -0
  28. package/src/index.dev.js +3 -0
  29. package/src/index.dev.js.map +7 -0
  30. package/src/index.js +2 -0
  31. package/src/index.js.map +7 -0
  32. package/src/picker-overrides.css.d.ts +2 -0
  33. package/src/picker-overrides.css.dev.js +7 -0
  34. package/src/picker-overrides.css.dev.js.map +7 -0
  35. package/src/picker-overrides.css.js +4 -0
  36. package/src/picker-overrides.css.js.map +7 -0
  37. package/src/picker.css.d.ts +2 -0
  38. package/src/picker.css.dev.js +7 -0
  39. package/src/picker.css.dev.js.map +7 -0
  40. package/src/picker.css.js +4 -0
  41. package/src/picker.css.js.map +7 -0
  42. package/src/spectrum-picker.css.d.ts +2 -0
  43. package/src/spectrum-picker.css.dev.js +7 -0
  44. package/src/spectrum-picker.css.dev.js.map +7 -0
  45. package/src/spectrum-picker.css.js +4 -0
  46. package/src/spectrum-picker.css.js.map +7 -0
  47. package/src/strategies.d.ts +6 -0
  48. package/src/strategies.dev.js +8 -0
  49. package/src/strategies.dev.js.map +7 -0
  50. package/src/strategies.js +2 -0
  51. package/src/strategies.js.map +7 -0
  52. package/stories/args.js +56 -0
  53. package/stories/args.js.map +7 -0
  54. package/stories/picker-pending.stories.js +16 -0
  55. package/stories/picker-pending.stories.js.map +7 -0
  56. package/stories/picker-sizes.stories.js +75 -0
  57. package/stories/picker-sizes.stories.js.map +7 -0
  58. package/stories/picker.stories.js +694 -0
  59. package/stories/picker.stories.js.map +7 -0
  60. package/stories/states.js +228 -0
  61. package/stories/states.js.map +7 -0
  62. package/stories/template.js +32 -0
  63. package/stories/template.js.map +7 -0
  64. package/sync/index.d.ts +3 -0
  65. package/sync/index.dev.js +5 -0
  66. package/sync/index.dev.js.map +7 -0
  67. package/sync/index.js +2 -0
  68. package/sync/index.js.map +7 -0
  69. package/sync/sp-picker.d.ts +2 -0
  70. package/sync/sp-picker.dev.js +4 -0
  71. package/sync/sp-picker.dev.js.map +7 -0
  72. package/sync/sp-picker.js +2 -0
  73. package/sync/sp-picker.js.map +7 -0
  74. package/test/benchmark/basic-test.js +269 -0
  75. package/test/benchmark/basic-test.js.map +7 -0
  76. package/test/index.js +1680 -0
  77. package/test/index.js.map +7 -0
  78. package/test/picker-memory.test.js +5 -0
  79. package/test/picker-memory.test.js.map +7 -0
  80. package/test/picker-pending.test-vrt.js +5 -0
  81. package/test/picker-pending.test-vrt.js.map +7 -0
  82. package/test/picker-reparenting.test.js +92 -0
  83. package/test/picker-reparenting.test.js.map +7 -0
  84. package/test/picker-responsive.test.js +125 -0
  85. package/test/picker-responsive.test.js.map +7 -0
  86. package/test/picker-sizes.test-vrt.js +5 -0
  87. package/test/picker-sizes.test-vrt.js.map +7 -0
  88. package/test/picker-sync.test.js +7 -0
  89. package/test/picker-sync.test.js.map +7 -0
  90. package/test/picker.test-vrt.js +5 -0
  91. package/test/picker.test-vrt.js.map +7 -0
  92. package/test/picker.test.js +7 -0
  93. package/test/picker.test.js.map +7 -0
@@ -0,0 +1,694 @@
1
+ "use strict";
2
+ import { html } from "@spectrum-web-components/base";
3
+ import "@spectrum-web-components/button/sp-button.js";
4
+ import "@spectrum-web-components/field-label/sp-field-label.js";
5
+ import "@spectrum-web-components/icons-workflow/icons/sp-icon-copy.js";
6
+ import "@spectrum-web-components/icons-workflow/icons/sp-icon-delete.js";
7
+ import "@spectrum-web-components/icons-workflow/icons/sp-icon-edit.js";
8
+ import "@spectrum-web-components/link/sp-link.js";
9
+ import "@spectrum-web-components/menu/sp-menu-item.js";
10
+ import "@spectrum-web-components/picker/sp-picker.js";
11
+ import "@spectrum-web-components/tooltip/sp-tooltip.js";
12
+ import { ifDefined } from "lit-html/directives/if-defined.js";
13
+ import { spreadProps } from "../../../test/lit-helpers.js";
14
+ import "../../overlay/stories/index.js";
15
+ import { isOverlayOpen } from "../../overlay/stories/index.js";
16
+ import { argTypes } from "./args.js";
17
+ import { states } from "./states.js";
18
+ import { handleChange, Template } from "./template.js";
19
+ export default {
20
+ title: "Picker",
21
+ component: "sp-picker",
22
+ args: {
23
+ disabled: false,
24
+ invalid: false,
25
+ open: false,
26
+ quiet: false,
27
+ pending: false
28
+ },
29
+ argTypes: {
30
+ ...argTypes,
31
+ onChange: { action: "change" },
32
+ open: {
33
+ name: "open",
34
+ type: { name: "boolean", required: false },
35
+ description: "Whether the menu is open or not.",
36
+ table: {
37
+ type: { summary: "boolean" },
38
+ defaultValue: { summary: false }
39
+ },
40
+ control: "boolean"
41
+ },
42
+ pending: {
43
+ name: "pending",
44
+ type: { name: "boolean", required: false },
45
+ table: {
46
+ type: { summary: "boolean" },
47
+ defaultValue: { summary: false }
48
+ },
49
+ control: {
50
+ type: "boolean"
51
+ }
52
+ }
53
+ }
54
+ };
55
+ export const Default = (args) => {
56
+ return html`
57
+ <sp-field-label for="picker-1" size=${ifDefined(args.size)}>
58
+ Where do you live?
59
+ </sp-field-label>
60
+ <sp-picker
61
+ id="picker-1"
62
+ @change=${handleChange(args)}
63
+ label="Select a Country with a very long label, too long, in fact"
64
+ ${spreadProps(args)}
65
+ >
66
+ <sp-menu-item value="option-1">Deselect</sp-menu-item>
67
+ <sp-menu-item value="option-2">Select Inverse</sp-menu-item>
68
+ <sp-menu-item value="option-3">Feather...</sp-menu-item>
69
+ <sp-menu-item value="option-4">Select and Mask...</sp-menu-item>
70
+ <sp-menu-item value="option-5">Save Selection</sp-menu-item>
71
+ <sp-menu-item disabled value="option-6">
72
+ Make Work Path
73
+ </sp-menu-item>
74
+ </sp-picker>
75
+ <p>This is some text.</p>
76
+ <p>This is some text.</p>
77
+ <p>
78
+ This is a
79
+ <a href="#anchor">link</a>
80
+ .
81
+ </p>
82
+ `;
83
+ };
84
+ export const forcePopoverOnMobile = (args) => {
85
+ return html`
86
+ <div style="padding: 40px">
87
+ <h1>Force Popover on Mobile</h1>
88
+ <p>
89
+ The forcePopover attribute overrides the mobile device
90
+ functionality of rendering a tray so that a popover will always
91
+ render no matter the device.
92
+ </p>
93
+ <ol>
94
+ <li>Open Chrome DevTools (or equivalent).</li>
95
+ <li>Toggle the Device Toolbar (the phone/tablet icon).</li>
96
+ <li>Select a device preset (e.g. iPhone 12).</li>
97
+ <li>
98
+ Chrome will set user-agent strings, simulate touch, and
99
+ adjust DPI.
100
+ </li>
101
+ <li>Reload the page</li>
102
+ <li>Click the Picker 1 and see a tray</li>
103
+ <li>Click the Picker 2 and see a popover</li>
104
+ </ol>
105
+ <sp-field-label for="picker-1" size=${ifDefined(args.size)}>
106
+ Do you want to see a tray menu?
107
+ </sp-field-label>
108
+ <sp-picker
109
+ id="picker-1"
110
+ @change=${handleChange(args)}
111
+ label="Select an option"
112
+ >
113
+ <sp-menu-item value="option-1">Yes</sp-menu-item>
114
+ <sp-menu-item value="option-2">No</sp-menu-item>
115
+ </sp-picker>
116
+ <sp-field-label for="picker-2" size=${ifDefined(args.size)}>
117
+ Do you want to see a popover menu?
118
+ </sp-field-label>
119
+ <sp-picker
120
+ id="picker-2"
121
+ forcePopover
122
+ @change=${handleChange(args)}
123
+ label="Select an option"
124
+ >
125
+ <sp-menu-item value="option-1">Yes</sp-menu-item>
126
+ <sp-menu-item value="option-2">No</sp-menu-item>
127
+ </sp-picker>
128
+ <div>
129
+ <p>
130
+ This button should't be clickable if a popover is open over
131
+ it.
132
+ </p>
133
+ <sp-button
134
+ @click=${() => console.log("Whoops! I was clicked.")}
135
+ >
136
+ Shouldn't be clickable
137
+ </sp-button>
138
+ </div>
139
+ </div>
140
+ `;
141
+ };
142
+ export const disabled = (args) => Template(args);
143
+ disabled.args = {
144
+ disabled: true
145
+ };
146
+ export const invalid = (args) => Template(args);
147
+ invalid.args = {
148
+ invalid: true
149
+ };
150
+ export const tooltip = (args) => {
151
+ const { open, ...rest } = args;
152
+ return html`
153
+ <sp-field-label for="picker-1" size=${ifDefined(args.size)}>
154
+ Where do you live?
155
+ </sp-field-label>
156
+ <sp-picker
157
+ id="picker-1"
158
+ @change=${handleChange(args)}
159
+ label="Select a Country with a very long label, too long, in fact"
160
+ ${spreadProps(rest)}
161
+ >
162
+ <sp-menu-item value="option-1">Deselect</sp-menu-item>
163
+ <sp-menu-item value="option-2">Select Inverse</sp-menu-item>
164
+ <sp-menu-item value="option-3">Feather...</sp-menu-item>
165
+ <sp-menu-item value="option-4">Select and Mask...</sp-menu-item>
166
+ <sp-menu-item value="option-5">Save Selection</sp-menu-item>
167
+ <sp-menu-item disabled value="option-6">
168
+ Make Work Path
169
+ </sp-menu-item>
170
+ <sp-tooltip
171
+ slot="tooltip"
172
+ ?open=${open}
173
+ self-managed
174
+ placement="right"
175
+ >
176
+ This Picker wants to know where you live.
177
+ </sp-tooltip>
178
+ </sp-picker>
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
+ };
188
+ tooltip.args = {
189
+ open: true
190
+ };
191
+ tooltip.decorators = [isOverlayOpen];
192
+ export const leftSideLabel = (args) => {
193
+ return html`
194
+ <sp-field-label
195
+ side-aligned="start"
196
+ for="picker-1"
197
+ size=${ifDefined(args.size)}
198
+ >
199
+ Where do you live?
200
+ </sp-field-label>
201
+ <sp-picker
202
+ id="picker-1"
203
+ @change=${handleChange(args)}
204
+ label="Select a Country with a very long label, too long, in fact"
205
+ ${spreadProps(args)}
206
+ >
207
+ <sp-menu-item value="option-1">Deselect</sp-menu-item>
208
+ <sp-menu-item value="option-2">Select Inverse</sp-menu-item>
209
+ <sp-menu-item value="option-3">Feather...</sp-menu-item>
210
+ <sp-menu-item value="option-4">Select and Mask...</sp-menu-item>
211
+ <sp-menu-item value="option-5">Save Selection</sp-menu-item>
212
+ <sp-menu-item disabled value="option-6">
213
+ Make Work Path
214
+ </sp-menu-item>
215
+ </sp-picker>
216
+ <p>This is some text.</p>
217
+ <p>This is some text.</p>
218
+ <p>
219
+ This is a
220
+ <a href="#anchor">link</a>
221
+ .
222
+ </p>
223
+ `;
224
+ };
225
+ export const noVisibleLabel = (args) => {
226
+ return html`
227
+ <sp-picker
228
+ @change=${handleChange(args)}
229
+ label="Where do you live?"
230
+ ${spreadProps(args)}
231
+ >
232
+ <sp-menu-item value="option-1">Deselect</sp-menu-item>
233
+ <sp-menu-item value="option-2">Select Inverse</sp-menu-item>
234
+ <sp-menu-item value="option-3">Feather...</sp-menu-item>
235
+ <sp-menu-item value="option-4">Select and Mask...</sp-menu-item>
236
+ <sp-menu-item value="option-5">Save Selection</sp-menu-item>
237
+ <sp-menu-item disabled value="option-6">
238
+ Make Work Path
239
+ </sp-menu-item>
240
+ </sp-picker>
241
+ <p>This is some text.</p>
242
+ <p>This is some text.</p>
243
+ <p>
244
+ This is a
245
+ <a href="#anchor">link</a>
246
+ .
247
+ </p>
248
+ `;
249
+ };
250
+ export const slottedLabel = (args) => {
251
+ return html`
252
+ <sp-picker @change=${handleChange(args)} ${spreadProps(args)}>
253
+ <span slot="label">Where do you live?</span>
254
+ <sp-menu-item value="option-1">Deselect</sp-menu-item>
255
+ <sp-menu-item value="option-2">Select Inverse</sp-menu-item>
256
+ <sp-menu-item value="option-3">Feather...</sp-menu-item>
257
+ <sp-menu-item value="option-4">Select and Mask...</sp-menu-item>
258
+ <sp-menu-item value="option-5">Save Selection</sp-menu-item>
259
+ <sp-menu-item disabled value="option-6">
260
+ Make Work Path
261
+ </sp-menu-item>
262
+ </sp-picker>
263
+ <p>This is some text.</p>
264
+ <p>This is some text.</p>
265
+ <p>
266
+ This is a
267
+ <a href="#anchor">link</a>
268
+ .
269
+ </p>
270
+ `;
271
+ };
272
+ export const quiet = (args) => {
273
+ return html`
274
+ <sp-field-label for="picker-quiet" size=${ifDefined(args.size)}>
275
+ Where do you live?
276
+ </sp-field-label>
277
+ <sp-picker
278
+ ${spreadProps(args)}
279
+ id="picker-quiet"
280
+ @change=${handleChange(args)}
281
+ label="Pick an item"
282
+ >
283
+ <sp-menu-item value="1">Item 1</sp-menu-item>
284
+ <sp-menu-item value="2">Item 2</sp-menu-item>
285
+ <sp-menu-item value="3">Item 3</sp-menu-item>
286
+ <sp-menu-item value="4">Item 4</sp-menu-item>
287
+ </sp-picker>
288
+ <p>This is some text.</p>
289
+ <p>This is some text.</p>
290
+ <p>
291
+ This is a
292
+ <a href="#anchor">link</a>
293
+ .
294
+ </p>
295
+ `;
296
+ };
297
+ quiet.args = {
298
+ quiet: true
299
+ };
300
+ export const quietSideLabel = (args) => {
301
+ return html`
302
+ <sp-field-label
303
+ side-aligned="start"
304
+ for="picker-quiet-sidelabel"
305
+ size=${ifDefined(args.size)}
306
+ >
307
+ Where do you live?
308
+ </sp-field-label>
309
+ <sp-picker
310
+ ${spreadProps(args)}
311
+ id="picker-quiet-sidelabel"
312
+ @change=${handleChange(args)}
313
+ label="Pick an item"
314
+ >
315
+ <sp-menu-item value="1">Item 1</sp-menu-item>
316
+ <sp-menu-item value="2">Item 2</sp-menu-item>
317
+ <sp-menu-item value="3">Item 3</sp-menu-item>
318
+ <sp-menu-item value="4">Item 4</sp-menu-item>
319
+ </sp-picker>
320
+ <p>This is some text.</p>
321
+ <p>This is some text.</p>
322
+ <p>
323
+ This is a
324
+ <a href="#anchor">link</a>
325
+ .
326
+ </p>
327
+ `;
328
+ };
329
+ quietSideLabel.args = {
330
+ quiet: true
331
+ };
332
+ export const icons = (args) => {
333
+ return html`
334
+ <sp-field-label for="picker-quiet" size=${ifDefined(args.size)}>
335
+ Choose an action type...
336
+ </sp-field-label>
337
+ <sp-picker
338
+ ${spreadProps(args)}
339
+ id="picker-quiet"
340
+ @change=${handleChange(args)}
341
+ label="Pick an action"
342
+ value="1"
343
+ >
344
+ <sp-menu-item value="1">
345
+ <sp-icon-edit slot="icon"></sp-icon-edit>
346
+ Edit
347
+ </sp-menu-item>
348
+ <sp-menu-item value="2">
349
+ <sp-icon-copy slot="icon"></sp-icon-copy>
350
+ Copy
351
+ </sp-menu-item>
352
+ <sp-menu-item value="3">
353
+ <sp-icon-delete slot="icon"></sp-icon-delete>
354
+ Delete
355
+ </sp-menu-item>
356
+ </sp-picker>
357
+ `;
358
+ };
359
+ export const iconsNone = (args) => {
360
+ return html`
361
+ <sp-field-label for="picker-quiet" size=${ifDefined(args.size)}>
362
+ Choose an action type...
363
+ </sp-field-label>
364
+ <sp-picker
365
+ ${spreadProps(args)}
366
+ id="picker-quiet"
367
+ @change=${handleChange(args)}
368
+ label="Pick an action"
369
+ value="1"
370
+ icons="none"
371
+ >
372
+ <sp-menu-item value="1">
373
+ <sp-icon-edit slot="icon"></sp-icon-edit>
374
+ Edit
375
+ </sp-menu-item>
376
+ <sp-menu-item value="2">
377
+ <sp-icon-copy slot="icon"></sp-icon-copy>
378
+ Copy
379
+ </sp-menu-item>
380
+ <sp-menu-item value="3">
381
+ <sp-icon-delete slot="icon"></sp-icon-delete>
382
+ Delete
383
+ </sp-menu-item>
384
+ </sp-picker>
385
+ `;
386
+ };
387
+ iconsNone.args = {
388
+ open: true
389
+ };
390
+ iconsNone.decorators = [isOverlayOpen];
391
+ export const iconValue = (args) => {
392
+ return html`
393
+ <sp-field-label for="picker-quiet" size=${ifDefined(args.size)}>
394
+ Choose an action type...
395
+ </sp-field-label>
396
+ <sp-picker
397
+ ${spreadProps(args)}
398
+ id="picker-quiet"
399
+ @change=${handleChange(args)}
400
+ label="Pick an action"
401
+ icons="only"
402
+ style="width: 100px"
403
+ value="2"
404
+ >
405
+ <sp-menu-item value="1">
406
+ <sp-icon-edit slot="icon"></sp-icon-edit>
407
+ Edit
408
+ </sp-menu-item>
409
+ <sp-menu-item value="2">
410
+ <sp-icon-copy slot="icon"></sp-icon-copy>
411
+ Copy
412
+ </sp-menu-item>
413
+ <sp-menu-item value="3">
414
+ <sp-icon-delete slot="icon"></sp-icon-delete>
415
+ Delete
416
+ </sp-menu-item>
417
+ </sp-picker>
418
+ `;
419
+ };
420
+ export const iconsOnly = (args) => {
421
+ return html`
422
+ <sp-field-label for="picker-quiet" size=${ifDefined(args.size)}>
423
+ Choose an action type...
424
+ </sp-field-label>
425
+ <sp-picker
426
+ ${spreadProps(args)}
427
+ id="picker-quiet"
428
+ @change=${handleChange(args)}
429
+ label="Pick an action"
430
+ style="width: 100px"
431
+ value="3"
432
+ >
433
+ <sp-menu-item value="1">
434
+ <sp-icon-edit slot="icon" label="Edit"></sp-icon-edit>
435
+ </sp-menu-item>
436
+ <sp-menu-item value="2">
437
+ <sp-icon-copy slot="icon" label="Copy"></sp-icon-copy>
438
+ </sp-menu-item>
439
+ <sp-menu-item value="3">
440
+ <sp-icon-delete slot="icon" label="Delete"></sp-icon-delete>
441
+ </sp-menu-item>
442
+ </sp-picker>
443
+ `;
444
+ };
445
+ iconsOnly.args = {
446
+ open: true
447
+ };
448
+ iconsOnly.decorators = [isOverlayOpen];
449
+ export const Open = (args) => {
450
+ return html`
451
+ <style>
452
+ fieldset {
453
+ float: left;
454
+ clear: left;
455
+ margin-bottom: 15px;
456
+ }
457
+ </style>
458
+ <fieldset class="backdrop-filter-test">
459
+ <sp-field-label for="picker-open" size=${ifDefined(args.size)}>
460
+ Where do you live?
461
+ </sp-field-label>
462
+ <sp-picker
463
+ id="picker-open"
464
+ label="Open picker"
465
+ ${spreadProps(args)}
466
+ @change=${handleChange(args)}
467
+ >
468
+ <span slot="label">
469
+ Select a Country with a very long label, too long, in fact
470
+ </span>
471
+ <sp-menu-item>Deselect</sp-menu-item>
472
+ <sp-menu-item>Select Inverse</sp-menu-item>
473
+ <sp-menu-item>Feather...</sp-menu-item>
474
+ <sp-menu-item>Select and Mask...</sp-menu-item>
475
+ <sp-menu-item>Save Selection</sp-menu-item>
476
+ <sp-menu-item disabled>Make Work Path</sp-menu-item>
477
+ </sp-picker>
478
+ </fieldset>
479
+ <fieldset>
480
+ <sp-field-label for="picker-closed" size=${ifDefined(args.size)}>
481
+ Where do you live?
482
+ </sp-field-label>
483
+ <sp-picker
484
+ id="picker-closed"
485
+ label="Picker that displays below the options"
486
+ @change=${handleChange(args)}
487
+ >
488
+ <span slot="label">
489
+ Other menu that goes behind the open one
490
+ </span>
491
+ <sp-menu-item>Not so many options...</sp-menu-item>
492
+ </sp-picker>
493
+ </fieldset>
494
+ `;
495
+ };
496
+ Open.args = {
497
+ open: true
498
+ };
499
+ Open.decorators = [isOverlayOpen];
500
+ export const OpenShowingEdgeCase = (args) => {
501
+ return html`
502
+ <style>
503
+ fieldset {
504
+ float: left;
505
+ clear: left;
506
+ margin-bottom: 15px;
507
+ }
508
+ /* Enforce CSS stacking to test "transition-behavior: allow-discrete" */
509
+ /* Breaks the story in non-[popover] supporting browsers */
510
+ fieldset:nth-of-type(2) {
511
+ position: relative;
512
+ z-index: 2;
513
+ }
514
+ .backdrop-filter-test {
515
+ backdrop-filter: saturate(80%);
516
+ }
517
+ </style>
518
+ <p>
519
+ In browser that do not support
520
+ <code>[popover]</code>
521
+ , the following "open"
522
+ <code>sp-picker</code>
523
+ will display behind both the closed
524
+ <code>sp-picker</code>
525
+ as well as the
526
+ <code>fieldset</code>
527
+ that contains it.
528
+ </p>
529
+ <p>
530
+ Learn more about this situation in our
531
+ <sp-link
532
+ href="https://opensource.adobe.com/spectrum-web-components/components/overlay/#fallback-support"
533
+ >
534
+ documentation site
535
+ </sp-link>
536
+ .
537
+ </p>
538
+ <fieldset class="backdrop-filter-test">
539
+ <sp-field-label for="picker-open" size=${ifDefined(args.size)}>
540
+ Where do you live?
541
+ </sp-field-label>
542
+ <sp-picker
543
+ id="picker-open"
544
+ label="Open picker"
545
+ ${spreadProps(args)}
546
+ @change=${handleChange(args)}
547
+ >
548
+ <span slot="label">
549
+ Select a Country with a very long label, too long, in fact
550
+ </span>
551
+ <sp-menu-item>Deselect</sp-menu-item>
552
+ <sp-menu-item>Select Inverse</sp-menu-item>
553
+ <sp-menu-item>Feather...</sp-menu-item>
554
+ <sp-menu-item>Select and Mask...</sp-menu-item>
555
+ <sp-menu-item>Save Selection</sp-menu-item>
556
+ <sp-menu-item disabled>Make Work Path</sp-menu-item>
557
+ </sp-picker>
558
+ </fieldset>
559
+ <fieldset>
560
+ <sp-field-label for="picker-closed" size=${ifDefined(args.size)}>
561
+ Where do you live?
562
+ </sp-field-label>
563
+ <sp-picker
564
+ id="picker-closed"
565
+ label="Picker that displays below the options"
566
+ @change=${handleChange(args)}
567
+ >
568
+ <span slot="label">
569
+ Other menu that goes behind the open one
570
+ </span>
571
+ <sp-menu-item>Not so many options...</sp-menu-item>
572
+ </sp-picker>
573
+ </fieldset>
574
+ `;
575
+ };
576
+ OpenShowingEdgeCase.args = {
577
+ open: true
578
+ };
579
+ OpenShowingEdgeCase.decorators = [isOverlayOpen];
580
+ OpenShowingEdgeCase.swc_vrt = {
581
+ skip: true
582
+ };
583
+ OpenShowingEdgeCase.parameters = {
584
+ // Disables Chromatic's snapshotting on a global level
585
+ chromatic: { disableSnapshot: true }
586
+ };
587
+ export const initialValue = (args) => {
588
+ return html`
589
+ <sp-field-label for="picker-initial" size=${ifDefined(args.size)}>
590
+ Where do you live?
591
+ </sp-field-label>
592
+ <sp-picker
593
+ id="picker-initial"
594
+ @change=${handleChange(args)}
595
+ value="item-2"
596
+ ${spreadProps(args)}
597
+ >
598
+ <span slot="label">
599
+ Select a Country with a very long label, too long in fact
600
+ </span>
601
+ <sp-menu-item value="item-1">Deselect</sp-menu-item>
602
+ <sp-menu-item value="item-2">Select Inverse</sp-menu-item>
603
+ <sp-menu-item value="item-3">Feather...</sp-menu-item>
604
+ <sp-menu-item value="item-4">Select and Mask...</sp-menu-item>
605
+ <sp-menu-item value="item-5">Save Selection</sp-menu-item>
606
+ <sp-menu-item disabled value="item-6">Make Work Path</sp-menu-item>
607
+ </sp-picker>
608
+ `;
609
+ };
610
+ export const readonly = (args) => {
611
+ return html`
612
+ <sp-picker
613
+ @change=${handleChange(args)}
614
+ readonly
615
+ value="item-2"
616
+ ${spreadProps(args)}
617
+ >
618
+ <span slot="label">
619
+ Select a Country with a very long label, too long in fact
620
+ </span>
621
+ <sp-menu-item value="item-1">Deselect</sp-menu-item>
622
+ <sp-menu-item value="item-2">Select Inverse</sp-menu-item>
623
+ <sp-menu-item value="item-3">Feather...</sp-menu-item>
624
+ <sp-menu-item value="item-4">Select and Mask...</sp-menu-item>
625
+ <sp-menu-item value="item-5">Save Selection</sp-menu-item>
626
+ <sp-menu-item disabled value="item-6">Make Work Path</sp-menu-item>
627
+ </sp-picker>
628
+ `;
629
+ };
630
+ export const custom = (args) => {
631
+ const initialState = "lb1-mo";
632
+ return html`
633
+ <sp-field-label for="picker-state" size=${ifDefined(args.size)}>
634
+ What state do you live in?
635
+ </sp-field-label>
636
+ <sp-picker
637
+ style="width: 400px;"
638
+ @change=${handleChange(args)}
639
+ id="picker-state"
640
+ label="Pick a state"
641
+ ${spreadProps(args)}
642
+ value=${initialState}
643
+ >
644
+ ${states.map(
645
+ (state) => html`
646
+ <sp-menu-item
647
+ id=${state.id}
648
+ value=${state.id}
649
+ ?selected=${state.id === initialState}
650
+ >
651
+ ${state.label}
652
+ </sp-menu-item>
653
+ `
654
+ )}
655
+ </sp-picker>
656
+ <p>This is some text.</p>
657
+ <p>This is some text.</p>
658
+ <p>
659
+ This is a
660
+ <a href="#anchor">link</a>
661
+ .
662
+ </p>
663
+ `;
664
+ };
665
+ custom.args = {
666
+ open: true
667
+ };
668
+ custom.decorators = [isOverlayOpen];
669
+ export const BackgroundClickTest = () => {
670
+ return html`
671
+ <div style="display: flex; flex-direction: column;">
672
+ <sp-picker size="l">
673
+ <sp-menu-item value="option-1">Deselect</sp-menu-item>
674
+ <sp-menu-item value="option-2">Select Inverse</sp-menu-item>
675
+ </sp-picker>
676
+ <div style="position: absolute; bottom: 50px;">
677
+ <sp-button
678
+ @click=${() => {
679
+ console.log(
680
+ "this button should not have been clicked..."
681
+ );
682
+ }}
683
+ size="l"
684
+ >
685
+ I shall not be clicked
686
+ </sp-button>
687
+ </div>
688
+ </div>
689
+ `;
690
+ };
691
+ BackgroundClickTest.swc_vrt = {
692
+ skip: true
693
+ };
694
+ //# sourceMappingURL=picker.stories.js.map