@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.
@@ -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": "public",
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": "public"
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\" | \"none\""
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": "onButtonBlur",
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": "onButtonClick",
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": "onHelperFocus",
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": "onKeydown",
327
+ "name": "handleKeydown",
347
328
  "privacy": "protected"
348
329
  },
349
330
  {
350
331
  "kind": "method",
351
332
  "name": "setValueFromItem",
352
- "privacy": "public",
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\" | \"none\""
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": "onKeydown",
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": "public",
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": "public",
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\" | \"none\""
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": "onButtonBlur",
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": "onButtonClick",
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": "onHelperFocus",
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": "public",
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\" | \"none\""
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.34.1-rc.0+1647bfed5",
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.34.1-rc.0+1647bfed5",
69
- "@spectrum-web-components/button": "^0.34.1-rc.0+1647bfed5",
70
- "@spectrum-web-components/icon": "^0.34.1-rc.0+1647bfed5",
71
- "@spectrum-web-components/icons-ui": "^0.34.1-rc.0+1647bfed5",
72
- "@spectrum-web-components/icons-workflow": "^0.34.1-rc.0+1647bfed5",
73
- "@spectrum-web-components/menu": "^0.34.1-rc.0+1647bfed5",
74
- "@spectrum-web-components/overlay": "^0.34.1-rc.0+1647bfed5",
75
- "@spectrum-web-components/popover": "^0.34.1-rc.0+1647bfed5",
76
- "@spectrum-web-components/reactive-controllers": "^0.34.1-rc.0+1647bfed5",
77
- "@spectrum-web-components/shared": "^0.34.1-rc.0+1647bfed5",
78
- "@spectrum-web-components/tray": "^0.34.1-rc.0+1647bfed5"
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.15"
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": "1647bfed54cb29f3513343cd0d2c2d9e73e1c508"
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" | "none"}
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
- onButtonBlur(): void;
46
+ handleButtonBlur(): void;
48
47
  private preventNextToggle;
49
48
  protected handlePointerdown(): void;
50
- protected onButtonClick(): void;
49
+ protected handleButtonClick(): void;
51
50
  focus(options?: FocusOptions): void;
52
- onHelperFocus(): void;
53
- onButtonFocus(): void;
51
+ handleHelperFocus(): void;
54
52
  handleChange(event: Event): void;
55
- protected onKeydown: (event: KeyboardEvent) => void;
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 onKeydown: (event: KeyboardEvent) => void;
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.onKeydown = (event) => {
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.onKeydown = this.onKeydown.bind(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
- onButtonBlur() {
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
- onButtonClick() {
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
- onHelperFocus() {
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
- if (this.selects) {
158
- this.selectedItem = item;
159
- this.value = item.value;
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.onHelperFocus}
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.onButtonBlur}
319
- @click=${this.onButtonClick}
320
- @focus=${this.onButtonFocus}
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.onKeydown = (event) => {
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
  }