@spectrum-web-components/picker 0.34.1-rc.0 → 0.35.1-rc.15
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/custom-elements.json +78 -64
- package/package.json +14 -14
- package/src/Picker.d.ts +13 -11
- package/src/Picker.dev.js +60 -28
- package/src/Picker.dev.js.map +2 -2
- package/src/Picker.js +8 -7
- package/src/Picker.js.map +3 -3
- package/test/index.js +14 -6
- package/test/index.js.map +2 -2
- package/test/picker-reparenting.test.js +3 -1
- package/test/picker-reparenting.test.js.map +2 -2
package/custom-elements.json
CHANGED
|
@@ -53,15 +53,6 @@
|
|
|
53
53
|
},
|
|
54
54
|
"privacy": "public"
|
|
55
55
|
},
|
|
56
|
-
{
|
|
57
|
-
"kind": "field",
|
|
58
|
-
"name": "target",
|
|
59
|
-
"type": {
|
|
60
|
-
"text": "HTMLButtonElement | this"
|
|
61
|
-
},
|
|
62
|
-
"privacy": "public",
|
|
63
|
-
"readonly": true
|
|
64
|
-
},
|
|
65
56
|
{
|
|
66
57
|
"kind": "field",
|
|
67
58
|
"name": "disabled",
|
|
@@ -151,7 +142,7 @@
|
|
|
151
142
|
"type": {
|
|
152
143
|
"text": "MenuItem[]"
|
|
153
144
|
},
|
|
154
|
-
"privacy": "
|
|
145
|
+
"privacy": "protected",
|
|
155
146
|
"readonly": true
|
|
156
147
|
},
|
|
157
148
|
{
|
|
@@ -160,13 +151,13 @@
|
|
|
160
151
|
"type": {
|
|
161
152
|
"text": "Menu"
|
|
162
153
|
},
|
|
163
|
-
"privacy": "
|
|
154
|
+
"privacy": "protected"
|
|
164
155
|
},
|
|
165
156
|
{
|
|
166
157
|
"kind": "field",
|
|
167
158
|
"name": "placement",
|
|
168
159
|
"type": {
|
|
169
|
-
"text": "\"auto\" | \"auto-start\" | \"auto-end\" | \"top\" | \"bottom\" | \"right\" | \"left\" | \"top-start\" | \"top-end\" | \"bottom-start\" | \"bottom-end\" | \"right-start\" | \"right-end\" | \"left-start\" | \"left-end\"
|
|
160
|
+
"text": "\"auto\" | \"auto-start\" | \"auto-end\" | \"top\" | \"bottom\" | \"right\" | \"left\" | \"top-start\" | \"top-end\" | \"bottom-start\" | \"bottom-end\" | \"right-start\" | \"right-end\" | \"left-start\" | \"left-end\""
|
|
170
161
|
},
|
|
171
162
|
"privacy": "public",
|
|
172
163
|
"default": "'bottom-start'",
|
|
@@ -247,7 +238,7 @@
|
|
|
247
238
|
},
|
|
248
239
|
{
|
|
249
240
|
"kind": "method",
|
|
250
|
-
"name": "
|
|
241
|
+
"name": "handleButtonBlur",
|
|
251
242
|
"privacy": "public",
|
|
252
243
|
"return": {
|
|
253
244
|
"type": {
|
|
@@ -276,7 +267,7 @@
|
|
|
276
267
|
},
|
|
277
268
|
{
|
|
278
269
|
"kind": "method",
|
|
279
|
-
"name": "
|
|
270
|
+
"name": "handleButtonClick",
|
|
280
271
|
"privacy": "protected",
|
|
281
272
|
"return": {
|
|
282
273
|
"type": {
|
|
@@ -305,17 +296,7 @@
|
|
|
305
296
|
},
|
|
306
297
|
{
|
|
307
298
|
"kind": "method",
|
|
308
|
-
"name": "
|
|
309
|
-
"privacy": "public",
|
|
310
|
-
"return": {
|
|
311
|
-
"type": {
|
|
312
|
-
"text": "void"
|
|
313
|
-
}
|
|
314
|
-
}
|
|
315
|
-
},
|
|
316
|
-
{
|
|
317
|
-
"kind": "method",
|
|
318
|
-
"name": "onButtonFocus",
|
|
299
|
+
"name": "handleHelperFocus",
|
|
319
300
|
"privacy": "public",
|
|
320
301
|
"return": {
|
|
321
302
|
"type": {
|
|
@@ -343,13 +324,13 @@
|
|
|
343
324
|
},
|
|
344
325
|
{
|
|
345
326
|
"kind": "field",
|
|
346
|
-
"name": "
|
|
327
|
+
"name": "handleKeydown",
|
|
347
328
|
"privacy": "protected"
|
|
348
329
|
},
|
|
349
330
|
{
|
|
350
331
|
"kind": "method",
|
|
351
332
|
"name": "setValueFromItem",
|
|
352
|
-
"privacy": "
|
|
333
|
+
"privacy": "protected",
|
|
353
334
|
"return": {
|
|
354
335
|
"type": {
|
|
355
336
|
"text": "Promise<void>"
|
|
@@ -488,6 +469,16 @@
|
|
|
488
469
|
"privacy": "protected",
|
|
489
470
|
"readonly": true
|
|
490
471
|
},
|
|
472
|
+
{
|
|
473
|
+
"kind": "method",
|
|
474
|
+
"name": "bindButtonKeydownListener",
|
|
475
|
+
"privacy": "protected",
|
|
476
|
+
"return": {
|
|
477
|
+
"type": {
|
|
478
|
+
"text": "void"
|
|
479
|
+
}
|
|
480
|
+
}
|
|
481
|
+
},
|
|
491
482
|
{
|
|
492
483
|
"kind": "field",
|
|
493
484
|
"name": "dismissHelper",
|
|
@@ -585,6 +576,20 @@
|
|
|
585
576
|
},
|
|
586
577
|
"privacy": "private",
|
|
587
578
|
"default": "false"
|
|
579
|
+
},
|
|
580
|
+
{
|
|
581
|
+
"kind": "field",
|
|
582
|
+
"name": "enterKeydownOn",
|
|
583
|
+
"type": {
|
|
584
|
+
"text": "EventTarget | null"
|
|
585
|
+
},
|
|
586
|
+
"privacy": "private",
|
|
587
|
+
"default": "null"
|
|
588
|
+
},
|
|
589
|
+
{
|
|
590
|
+
"kind": "field",
|
|
591
|
+
"name": "handleEnterKeydown",
|
|
592
|
+
"privacy": "protected"
|
|
588
593
|
}
|
|
589
594
|
],
|
|
590
595
|
"events": [
|
|
@@ -599,7 +604,7 @@
|
|
|
599
604
|
{
|
|
600
605
|
"name": "placement",
|
|
601
606
|
"type": {
|
|
602
|
-
"text": "\"auto\" | \"auto-start\" | \"auto-end\" | \"top\" | \"bottom\" | \"right\" | \"left\" | \"top-start\" | \"top-end\" | \"bottom-start\" | \"bottom-end\" | \"right-start\" | \"right-end\" | \"left-start\" | \"left-end\"
|
|
607
|
+
"text": "\"auto\" | \"auto-start\" | \"auto-end\" | \"top\" | \"bottom\" | \"right\" | \"left\" | \"top-start\" | \"top-end\" | \"bottom-start\" | \"bottom-end\" | \"right-start\" | \"right-end\" | \"left-start\" | \"left-end\""
|
|
603
608
|
},
|
|
604
609
|
"default": "'bottom-start'",
|
|
605
610
|
"fieldName": "placement",
|
|
@@ -717,7 +722,7 @@
|
|
|
717
722
|
},
|
|
718
723
|
{
|
|
719
724
|
"kind": "field",
|
|
720
|
-
"name": "
|
|
725
|
+
"name": "handleKeydown",
|
|
721
726
|
"privacy": "protected",
|
|
722
727
|
"inheritedFrom": {
|
|
723
728
|
"name": "PickerBase",
|
|
@@ -757,19 +762,6 @@
|
|
|
757
762
|
"module": "src/Picker.ts"
|
|
758
763
|
}
|
|
759
764
|
},
|
|
760
|
-
{
|
|
761
|
-
"kind": "field",
|
|
762
|
-
"name": "target",
|
|
763
|
-
"type": {
|
|
764
|
-
"text": "HTMLButtonElement | this"
|
|
765
|
-
},
|
|
766
|
-
"privacy": "public",
|
|
767
|
-
"readonly": true,
|
|
768
|
-
"inheritedFrom": {
|
|
769
|
-
"name": "PickerBase",
|
|
770
|
-
"module": "src/Picker.ts"
|
|
771
|
-
}
|
|
772
|
-
},
|
|
773
765
|
{
|
|
774
766
|
"kind": "field",
|
|
775
767
|
"name": "disabled",
|
|
@@ -891,7 +883,7 @@
|
|
|
891
883
|
"type": {
|
|
892
884
|
"text": "MenuItem[]"
|
|
893
885
|
},
|
|
894
|
-
"privacy": "
|
|
886
|
+
"privacy": "protected",
|
|
895
887
|
"readonly": true,
|
|
896
888
|
"inheritedFrom": {
|
|
897
889
|
"name": "PickerBase",
|
|
@@ -904,7 +896,7 @@
|
|
|
904
896
|
"type": {
|
|
905
897
|
"text": "Menu"
|
|
906
898
|
},
|
|
907
|
-
"privacy": "
|
|
899
|
+
"privacy": "protected",
|
|
908
900
|
"inheritedFrom": {
|
|
909
901
|
"name": "PickerBase",
|
|
910
902
|
"module": "src/Picker.ts"
|
|
@@ -914,7 +906,7 @@
|
|
|
914
906
|
"kind": "field",
|
|
915
907
|
"name": "placement",
|
|
916
908
|
"type": {
|
|
917
|
-
"text": "\"auto\" | \"auto-start\" | \"auto-end\" | \"top\" | \"bottom\" | \"right\" | \"left\" | \"top-start\" | \"top-end\" | \"bottom-start\" | \"bottom-end\" | \"right-start\" | \"right-end\" | \"left-start\" | \"left-end\"
|
|
909
|
+
"text": "\"auto\" | \"auto-start\" | \"auto-end\" | \"top\" | \"bottom\" | \"right\" | \"left\" | \"top-start\" | \"top-end\" | \"bottom-start\" | \"bottom-end\" | \"right-start\" | \"right-end\" | \"left-start\" | \"left-end\""
|
|
918
910
|
},
|
|
919
911
|
"privacy": "public",
|
|
920
912
|
"default": "'bottom-start'",
|
|
@@ -1031,7 +1023,7 @@
|
|
|
1031
1023
|
},
|
|
1032
1024
|
{
|
|
1033
1025
|
"kind": "method",
|
|
1034
|
-
"name": "
|
|
1026
|
+
"name": "handleButtonBlur",
|
|
1035
1027
|
"privacy": "public",
|
|
1036
1028
|
"return": {
|
|
1037
1029
|
"type": {
|
|
@@ -1072,7 +1064,7 @@
|
|
|
1072
1064
|
},
|
|
1073
1065
|
{
|
|
1074
1066
|
"kind": "method",
|
|
1075
|
-
"name": "
|
|
1067
|
+
"name": "handleButtonClick",
|
|
1076
1068
|
"privacy": "protected",
|
|
1077
1069
|
"return": {
|
|
1078
1070
|
"type": {
|
|
@@ -1109,21 +1101,7 @@
|
|
|
1109
1101
|
},
|
|
1110
1102
|
{
|
|
1111
1103
|
"kind": "method",
|
|
1112
|
-
"name": "
|
|
1113
|
-
"privacy": "public",
|
|
1114
|
-
"return": {
|
|
1115
|
-
"type": {
|
|
1116
|
-
"text": "void"
|
|
1117
|
-
}
|
|
1118
|
-
},
|
|
1119
|
-
"inheritedFrom": {
|
|
1120
|
-
"name": "PickerBase",
|
|
1121
|
-
"module": "src/Picker.ts"
|
|
1122
|
-
}
|
|
1123
|
-
},
|
|
1124
|
-
{
|
|
1125
|
-
"kind": "method",
|
|
1126
|
-
"name": "onButtonFocus",
|
|
1104
|
+
"name": "handleHelperFocus",
|
|
1127
1105
|
"privacy": "public",
|
|
1128
1106
|
"return": {
|
|
1129
1107
|
"type": {
|
|
@@ -1160,7 +1138,7 @@
|
|
|
1160
1138
|
{
|
|
1161
1139
|
"kind": "method",
|
|
1162
1140
|
"name": "setValueFromItem",
|
|
1163
|
-
"privacy": "
|
|
1141
|
+
"privacy": "protected",
|
|
1164
1142
|
"return": {
|
|
1165
1143
|
"type": {
|
|
1166
1144
|
"text": "Promise<void>"
|
|
@@ -1330,6 +1308,20 @@
|
|
|
1330
1308
|
"module": "src/Picker.ts"
|
|
1331
1309
|
}
|
|
1332
1310
|
},
|
|
1311
|
+
{
|
|
1312
|
+
"kind": "method",
|
|
1313
|
+
"name": "bindButtonKeydownListener",
|
|
1314
|
+
"privacy": "protected",
|
|
1315
|
+
"return": {
|
|
1316
|
+
"type": {
|
|
1317
|
+
"text": "void"
|
|
1318
|
+
}
|
|
1319
|
+
},
|
|
1320
|
+
"inheritedFrom": {
|
|
1321
|
+
"name": "PickerBase",
|
|
1322
|
+
"module": "src/Picker.ts"
|
|
1323
|
+
}
|
|
1324
|
+
},
|
|
1333
1325
|
{
|
|
1334
1326
|
"kind": "field",
|
|
1335
1327
|
"name": "dismissHelper",
|
|
@@ -1467,6 +1459,28 @@
|
|
|
1467
1459
|
"name": "PickerBase",
|
|
1468
1460
|
"module": "src/Picker.ts"
|
|
1469
1461
|
}
|
|
1462
|
+
},
|
|
1463
|
+
{
|
|
1464
|
+
"kind": "field",
|
|
1465
|
+
"name": "enterKeydownOn",
|
|
1466
|
+
"type": {
|
|
1467
|
+
"text": "EventTarget | null"
|
|
1468
|
+
},
|
|
1469
|
+
"privacy": "private",
|
|
1470
|
+
"default": "null",
|
|
1471
|
+
"inheritedFrom": {
|
|
1472
|
+
"name": "PickerBase",
|
|
1473
|
+
"module": "src/Picker.ts"
|
|
1474
|
+
}
|
|
1475
|
+
},
|
|
1476
|
+
{
|
|
1477
|
+
"kind": "field",
|
|
1478
|
+
"name": "handleEnterKeydown",
|
|
1479
|
+
"privacy": "protected",
|
|
1480
|
+
"inheritedFrom": {
|
|
1481
|
+
"name": "PickerBase",
|
|
1482
|
+
"module": "src/Picker.ts"
|
|
1483
|
+
}
|
|
1470
1484
|
}
|
|
1471
1485
|
],
|
|
1472
1486
|
"events": [
|
|
@@ -1500,7 +1514,7 @@
|
|
|
1500
1514
|
{
|
|
1501
1515
|
"name": "placement",
|
|
1502
1516
|
"type": {
|
|
1503
|
-
"text": "\"auto\" | \"auto-start\" | \"auto-end\" | \"top\" | \"bottom\" | \"right\" | \"left\" | \"top-start\" | \"top-end\" | \"bottom-start\" | \"bottom-end\" | \"right-start\" | \"right-end\" | \"left-start\" | \"left-end\"
|
|
1517
|
+
"text": "\"auto\" | \"auto-start\" | \"auto-end\" | \"top\" | \"bottom\" | \"right\" | \"left\" | \"top-start\" | \"top-end\" | \"bottom-start\" | \"bottom-end\" | \"right-start\" | \"right-end\" | \"left-start\" | \"left-end\""
|
|
1504
1518
|
},
|
|
1505
1519
|
"default": "'bottom-start'",
|
|
1506
1520
|
"fieldName": "placement",
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@spectrum-web-components/picker",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.35.1-rc.15+9b76319e4",
|
|
4
4
|
"publishConfig": {
|
|
5
5
|
"access": "public"
|
|
6
6
|
},
|
|
@@ -65,20 +65,20 @@
|
|
|
65
65
|
"lit-html"
|
|
66
66
|
],
|
|
67
67
|
"dependencies": {
|
|
68
|
-
"@spectrum-web-components/base": "^0.
|
|
69
|
-
"@spectrum-web-components/button": "^0.
|
|
70
|
-
"@spectrum-web-components/icon": "^0.
|
|
71
|
-
"@spectrum-web-components/icons-ui": "^0.
|
|
72
|
-
"@spectrum-web-components/icons-workflow": "^0.
|
|
73
|
-
"@spectrum-web-components/menu": "^0.
|
|
74
|
-
"@spectrum-web-components/overlay": "^0.
|
|
75
|
-
"@spectrum-web-components/popover": "^0.
|
|
76
|
-
"@spectrum-web-components/reactive-controllers": "^0.
|
|
77
|
-
"@spectrum-web-components/shared": "^0.
|
|
78
|
-
"@spectrum-web-components/tray": "^0.
|
|
68
|
+
"@spectrum-web-components/base": "^0.35.1-rc.15+9b76319e4",
|
|
69
|
+
"@spectrum-web-components/button": "^0.35.1-rc.15+9b76319e4",
|
|
70
|
+
"@spectrum-web-components/icon": "^0.35.1-rc.15+9b76319e4",
|
|
71
|
+
"@spectrum-web-components/icons-ui": "^0.35.1-rc.15+9b76319e4",
|
|
72
|
+
"@spectrum-web-components/icons-workflow": "^0.35.1-rc.15+9b76319e4",
|
|
73
|
+
"@spectrum-web-components/menu": "^0.35.1-rc.15+9b76319e4",
|
|
74
|
+
"@spectrum-web-components/overlay": "^0.35.1-rc.15+9b76319e4",
|
|
75
|
+
"@spectrum-web-components/popover": "^0.35.1-rc.15+9b76319e4",
|
|
76
|
+
"@spectrum-web-components/reactive-controllers": "^0.35.1-rc.15+9b76319e4",
|
|
77
|
+
"@spectrum-web-components/shared": "^0.35.1-rc.15+9b76319e4",
|
|
78
|
+
"@spectrum-web-components/tray": "^0.35.1-rc.15+9b76319e4"
|
|
79
79
|
},
|
|
80
80
|
"devDependencies": {
|
|
81
|
-
"@spectrum-css/picker": "^4.0.
|
|
81
|
+
"@spectrum-css/picker": "^4.0.21"
|
|
82
82
|
},
|
|
83
83
|
"types": "./src/index.d.ts",
|
|
84
84
|
"customElements": "custom-elements.json",
|
|
@@ -88,5 +88,5 @@
|
|
|
88
88
|
"./sync/index.js",
|
|
89
89
|
"./sync/sp-*.js"
|
|
90
90
|
],
|
|
91
|
-
"gitHead": "
|
|
91
|
+
"gitHead": "9b76319e4f1cc7cb0dd03e9d9debf544e5bed4e9"
|
|
92
92
|
}
|
package/src/Picker.d.ts
CHANGED
|
@@ -18,7 +18,6 @@ export declare class PickerBase extends PickerBase_base {
|
|
|
18
18
|
protected isMobile: MatchMediaController;
|
|
19
19
|
appliedLabel?: string;
|
|
20
20
|
button: HTMLButtonElement;
|
|
21
|
-
get target(): HTMLButtonElement | this;
|
|
22
21
|
disabled: boolean;
|
|
23
22
|
focused: boolean;
|
|
24
23
|
icons?: 'only' | 'none';
|
|
@@ -27,10 +26,10 @@ export declare class PickerBase extends PickerBase_base {
|
|
|
27
26
|
open: boolean;
|
|
28
27
|
readonly: boolean;
|
|
29
28
|
selects: undefined | 'single';
|
|
30
|
-
get menuItems(): MenuItem[];
|
|
31
|
-
optionsMenu: Menu;
|
|
29
|
+
protected get menuItems(): MenuItem[];
|
|
30
|
+
protected optionsMenu: Menu;
|
|
32
31
|
/**
|
|
33
|
-
* @type {"auto" | "auto-start" | "auto-end" | "top" | "bottom" | "right" | "left" | "top-start" | "top-end" | "bottom-start" | "bottom-end" | "right-start" | "right-end" | "left-start" | "left-end"
|
|
32
|
+
* @type {"auto" | "auto-start" | "auto-end" | "top" | "bottom" | "right" | "left" | "top-start" | "top-end" | "bottom-start" | "bottom-end" | "right-start" | "right-end" | "left-start" | "left-end" }
|
|
34
33
|
* @attr
|
|
35
34
|
*/
|
|
36
35
|
placement: Placement;
|
|
@@ -44,16 +43,15 @@ export declare class PickerBase extends PickerBase_base {
|
|
|
44
43
|
constructor();
|
|
45
44
|
get focusElement(): HTMLElement;
|
|
46
45
|
forceFocusVisible(): void;
|
|
47
|
-
|
|
46
|
+
handleButtonBlur(): void;
|
|
48
47
|
private preventNextToggle;
|
|
49
48
|
protected handlePointerdown(): void;
|
|
50
|
-
protected
|
|
49
|
+
protected handleButtonClick(): void;
|
|
51
50
|
focus(options?: FocusOptions): void;
|
|
52
|
-
|
|
53
|
-
onButtonFocus(): void;
|
|
51
|
+
handleHelperFocus(): void;
|
|
54
52
|
handleChange(event: Event): void;
|
|
55
|
-
protected
|
|
56
|
-
setValueFromItem(item: MenuItem, menuChangeEvent?: Event): Promise<void>;
|
|
53
|
+
protected handleKeydown: (event: KeyboardEvent) => void;
|
|
54
|
+
protected setValueFromItem(item: MenuItem, menuChangeEvent?: Event): Promise<void>;
|
|
57
55
|
protected setMenuItemSelected(item: MenuItem, value: boolean): void;
|
|
58
56
|
toggle(target?: boolean): void;
|
|
59
57
|
close(): void;
|
|
@@ -67,6 +65,8 @@ export declare class PickerBase extends PickerBase_base {
|
|
|
67
65
|
protected get renderOverlay(): TemplateResult;
|
|
68
66
|
protected render(): TemplateResult;
|
|
69
67
|
protected update(changes: PropertyValues<this>): void;
|
|
68
|
+
protected bindButtonKeydownListener(): void;
|
|
69
|
+
protected firstUpdated(changes: PropertyValues<this>): void;
|
|
70
70
|
protected get dismissHelper(): TemplateResult;
|
|
71
71
|
protected get renderContainer(): TemplateResult;
|
|
72
72
|
private willManageSelection;
|
|
@@ -77,6 +77,8 @@ export declare class PickerBase extends PickerBase_base {
|
|
|
77
77
|
private selectionResolver;
|
|
78
78
|
protected getUpdateComplete(): Promise<boolean>;
|
|
79
79
|
private recentlyConnected;
|
|
80
|
+
private enterKeydownOn;
|
|
81
|
+
protected handleEnterKeydown: (event: KeyboardEvent) => void;
|
|
80
82
|
connectedCallback(): void;
|
|
81
83
|
disconnectedCallback(): void;
|
|
82
84
|
}
|
|
@@ -92,6 +94,6 @@ export declare class PickerBase extends PickerBase_base {
|
|
|
92
94
|
export declare class Picker extends PickerBase {
|
|
93
95
|
static get styles(): CSSResultArray;
|
|
94
96
|
protected get containerStyles(): StyleInfo;
|
|
95
|
-
protected
|
|
97
|
+
protected handleKeydown: (event: KeyboardEvent) => void;
|
|
96
98
|
}
|
|
97
99
|
export {};
|
package/src/Picker.dev.js
CHANGED
|
@@ -60,7 +60,7 @@ export class PickerBase extends SizedMixin(Focusable) {
|
|
|
60
60
|
this.listRole = "listbox";
|
|
61
61
|
this.itemRole = "option";
|
|
62
62
|
this.preventNextToggle = false;
|
|
63
|
-
this.
|
|
63
|
+
this.handleKeydown = (event) => {
|
|
64
64
|
this.focused = true;
|
|
65
65
|
if (event.code !== "ArrowDown" && event.code !== "ArrowUp") {
|
|
66
66
|
return;
|
|
@@ -74,7 +74,28 @@ export class PickerBase extends SizedMixin(Focusable) {
|
|
|
74
74
|
this.willManageSelection = false;
|
|
75
75
|
this.selectionPromise = Promise.resolve();
|
|
76
76
|
this.recentlyConnected = false;
|
|
77
|
-
this.
|
|
77
|
+
this.enterKeydownOn = null;
|
|
78
|
+
this.handleEnterKeydown = (event) => {
|
|
79
|
+
if (event.code !== "Enter") {
|
|
80
|
+
return;
|
|
81
|
+
}
|
|
82
|
+
if (this.enterKeydownOn) {
|
|
83
|
+
event.preventDefault();
|
|
84
|
+
return;
|
|
85
|
+
} else {
|
|
86
|
+
this.addEventListener(
|
|
87
|
+
"keyup",
|
|
88
|
+
(keyupEvent) => {
|
|
89
|
+
if (keyupEvent.code !== "Enter") {
|
|
90
|
+
return;
|
|
91
|
+
}
|
|
92
|
+
this.enterKeydownOn = null;
|
|
93
|
+
},
|
|
94
|
+
{ once: true }
|
|
95
|
+
);
|
|
96
|
+
}
|
|
97
|
+
this.enterKeydownOn = this.enterKeydownOn || event.target;
|
|
98
|
+
};
|
|
78
99
|
this.addEventListener("focusout", (event) => {
|
|
79
100
|
if (event.relatedTarget && this.contains(event.relatedTarget) || event.target !== this) {
|
|
80
101
|
return;
|
|
@@ -82,9 +103,6 @@ export class PickerBase extends SizedMixin(Focusable) {
|
|
|
82
103
|
this.open = false;
|
|
83
104
|
});
|
|
84
105
|
}
|
|
85
|
-
get target() {
|
|
86
|
-
return this.button;
|
|
87
|
-
}
|
|
88
106
|
get menuItems() {
|
|
89
107
|
return this.optionsMenu.childItems;
|
|
90
108
|
}
|
|
@@ -108,17 +126,16 @@ export class PickerBase extends SizedMixin(Focusable) {
|
|
|
108
126
|
forceFocusVisible() {
|
|
109
127
|
this.focused = true;
|
|
110
128
|
}
|
|
111
|
-
|
|
129
|
+
handleButtonBlur() {
|
|
112
130
|
this.focused = false;
|
|
113
|
-
this.target.removeEventListener(
|
|
114
|
-
"keydown",
|
|
115
|
-
this.onKeydown
|
|
116
|
-
);
|
|
117
131
|
}
|
|
118
132
|
handlePointerdown() {
|
|
119
133
|
this.preventNextToggle = this.open;
|
|
120
134
|
}
|
|
121
|
-
|
|
135
|
+
handleButtonClick() {
|
|
136
|
+
if (this.enterKeydownOn && this.enterKeydownOn !== this.button) {
|
|
137
|
+
return;
|
|
138
|
+
}
|
|
122
139
|
if (!this.preventNextToggle) {
|
|
123
140
|
this.toggle();
|
|
124
141
|
}
|
|
@@ -130,16 +147,10 @@ export class PickerBase extends SizedMixin(Focusable) {
|
|
|
130
147
|
this.focused = this.hasVisibleFocusInTree();
|
|
131
148
|
}
|
|
132
149
|
}
|
|
133
|
-
|
|
150
|
+
handleHelperFocus() {
|
|
134
151
|
this.focused = true;
|
|
135
152
|
this.button.focus();
|
|
136
153
|
}
|
|
137
|
-
onButtonFocus() {
|
|
138
|
-
this.target.addEventListener(
|
|
139
|
-
"keydown",
|
|
140
|
-
this.onKeydown
|
|
141
|
-
);
|
|
142
|
-
}
|
|
143
154
|
handleChange(event) {
|
|
144
155
|
const target = event.target;
|
|
145
156
|
const [selected] = target.selectedItems;
|
|
@@ -154,14 +165,13 @@ export class PickerBase extends SizedMixin(Focusable) {
|
|
|
154
165
|
this.open = false;
|
|
155
166
|
const oldSelectedItem = this.selectedItem;
|
|
156
167
|
const oldValue = this.value;
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
await this.updateComplete;
|
|
161
|
-
}
|
|
168
|
+
this.selectedItem = item;
|
|
169
|
+
this.value = item.value;
|
|
170
|
+
await this.updateComplete;
|
|
162
171
|
const applyDefault = this.dispatchEvent(
|
|
163
172
|
new Event("change", {
|
|
164
173
|
bubbles: true,
|
|
174
|
+
// Allow it to be prevented.
|
|
165
175
|
cancelable: true,
|
|
166
176
|
composed: true
|
|
167
177
|
})
|
|
@@ -178,6 +188,10 @@ export class PickerBase extends SizedMixin(Focusable) {
|
|
|
178
188
|
this.value = oldValue;
|
|
179
189
|
this.open = true;
|
|
180
190
|
return;
|
|
191
|
+
} else if (!this.selects) {
|
|
192
|
+
this.selectedItem = oldSelectedItem;
|
|
193
|
+
this.value = oldValue;
|
|
194
|
+
return;
|
|
181
195
|
}
|
|
182
196
|
if (oldSelectedItem) {
|
|
183
197
|
this.setMenuItemSelected(oldSelectedItem, false);
|
|
@@ -306,7 +320,7 @@ export class PickerBase extends SizedMixin(Focusable) {
|
|
|
306
320
|
<span
|
|
307
321
|
id="focus-helper"
|
|
308
322
|
tabindex="${this.focused || this.open ? "-1" : "0"}"
|
|
309
|
-
@focus=${this.
|
|
323
|
+
@focus=${this.handleHelperFocus}
|
|
310
324
|
></span>
|
|
311
325
|
<button
|
|
312
326
|
aria-haspopup="true"
|
|
@@ -315,9 +329,12 @@ export class PickerBase extends SizedMixin(Focusable) {
|
|
|
315
329
|
aria-labelledby="icon label applied-label"
|
|
316
330
|
id="button"
|
|
317
331
|
class="button"
|
|
318
|
-
@blur=${this.
|
|
319
|
-
@click=${this.
|
|
320
|
-
@
|
|
332
|
+
@blur=${this.handleButtonBlur}
|
|
333
|
+
@click=${this.handleButtonClick}
|
|
334
|
+
@keydown=${{
|
|
335
|
+
handleEvent: this.handleEnterKeydown,
|
|
336
|
+
capture: true
|
|
337
|
+
}}
|
|
321
338
|
@pointerdown=${this.handlePointerdown}
|
|
322
339
|
?disabled=${this.disabled}
|
|
323
340
|
tabindex="-1"
|
|
@@ -354,6 +371,13 @@ export class PickerBase extends SizedMixin(Focusable) {
|
|
|
354
371
|
}
|
|
355
372
|
super.update(changes);
|
|
356
373
|
}
|
|
374
|
+
bindButtonKeydownListener() {
|
|
375
|
+
this.button.addEventListener("keydown", this.handleKeydown);
|
|
376
|
+
}
|
|
377
|
+
firstUpdated(changes) {
|
|
378
|
+
super.firstUpdated(changes);
|
|
379
|
+
this.bindButtonKeydownListener();
|
|
380
|
+
}
|
|
357
381
|
get dismissHelper() {
|
|
358
382
|
return html`
|
|
359
383
|
<div class="visually-hidden">
|
|
@@ -375,6 +399,10 @@ export class PickerBase extends SizedMixin(Focusable) {
|
|
|
375
399
|
.selects=${this.selects}
|
|
376
400
|
.selected=${this.value ? [this.value] : []}
|
|
377
401
|
@sp-menu-item-added-or-updated=${this.shouldManageSelection}
|
|
402
|
+
@keydown=${{
|
|
403
|
+
handleEvent: this.handleEnterKeydown,
|
|
404
|
+
capture: true
|
|
405
|
+
}}
|
|
378
406
|
>
|
|
379
407
|
<slot @slotchange=${this.shouldScheduleManageSelection}></slot>
|
|
380
408
|
</sp-menu>
|
|
@@ -514,9 +542,13 @@ __decorateClass([
|
|
|
514
542
|
export class Picker extends PickerBase {
|
|
515
543
|
constructor() {
|
|
516
544
|
super(...arguments);
|
|
517
|
-
this.
|
|
545
|
+
this.handleKeydown = (event) => {
|
|
518
546
|
const { code } = event;
|
|
519
547
|
this.focused = true;
|
|
548
|
+
if (code === "ArrowUp" || code === "ArrowDown") {
|
|
549
|
+
this.toggle(true);
|
|
550
|
+
return;
|
|
551
|
+
}
|
|
520
552
|
if (!code.startsWith("Arrow") || this.readonly) {
|
|
521
553
|
return;
|
|
522
554
|
}
|