@spectrum-web-components/picker 0.9.2-express.0 → 0.9.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.
- package/custom-elements.json +60 -20
- package/package.json +7 -7
- package/src/Picker.d.ts +3 -3
- package/src/Picker.js +20 -25
- package/src/Picker.js.map +1 -1
package/custom-elements.json
CHANGED
|
@@ -408,6 +408,32 @@
|
|
|
408
408
|
}
|
|
409
409
|
}
|
|
410
410
|
},
|
|
411
|
+
{
|
|
412
|
+
"kind": "field",
|
|
413
|
+
"name": "popoverFragment",
|
|
414
|
+
"type": {
|
|
415
|
+
"text": "DocumentFragment"
|
|
416
|
+
},
|
|
417
|
+
"privacy": "private"
|
|
418
|
+
},
|
|
419
|
+
{
|
|
420
|
+
"kind": "method",
|
|
421
|
+
"name": "generatePopover",
|
|
422
|
+
"privacy": "private",
|
|
423
|
+
"return": {
|
|
424
|
+
"type": {
|
|
425
|
+
"text": "void"
|
|
426
|
+
}
|
|
427
|
+
},
|
|
428
|
+
"parameters": [
|
|
429
|
+
{
|
|
430
|
+
"name": "deprecatedMenu",
|
|
431
|
+
"type": {
|
|
432
|
+
"text": "Menu | null"
|
|
433
|
+
}
|
|
434
|
+
}
|
|
435
|
+
]
|
|
436
|
+
},
|
|
411
437
|
{
|
|
412
438
|
"kind": "method",
|
|
413
439
|
"name": "openMenu",
|
|
@@ -480,14 +506,6 @@
|
|
|
480
506
|
},
|
|
481
507
|
"privacy": "protected"
|
|
482
508
|
},
|
|
483
|
-
{
|
|
484
|
-
"kind": "field",
|
|
485
|
-
"name": "renderButton",
|
|
486
|
-
"type": {
|
|
487
|
-
"text": "TemplateResult"
|
|
488
|
-
},
|
|
489
|
-
"privacy": "protected"
|
|
490
|
-
},
|
|
491
509
|
{
|
|
492
510
|
"kind": "field",
|
|
493
511
|
"name": "dismissHelper",
|
|
@@ -1207,6 +1225,40 @@
|
|
|
1207
1225
|
"module": "src/Picker.ts"
|
|
1208
1226
|
}
|
|
1209
1227
|
},
|
|
1228
|
+
{
|
|
1229
|
+
"kind": "field",
|
|
1230
|
+
"name": "popoverFragment",
|
|
1231
|
+
"type": {
|
|
1232
|
+
"text": "DocumentFragment"
|
|
1233
|
+
},
|
|
1234
|
+
"privacy": "private",
|
|
1235
|
+
"inheritedFrom": {
|
|
1236
|
+
"name": "PickerBase",
|
|
1237
|
+
"module": "src/Picker.ts"
|
|
1238
|
+
}
|
|
1239
|
+
},
|
|
1240
|
+
{
|
|
1241
|
+
"kind": "method",
|
|
1242
|
+
"name": "generatePopover",
|
|
1243
|
+
"privacy": "private",
|
|
1244
|
+
"return": {
|
|
1245
|
+
"type": {
|
|
1246
|
+
"text": "void"
|
|
1247
|
+
}
|
|
1248
|
+
},
|
|
1249
|
+
"parameters": [
|
|
1250
|
+
{
|
|
1251
|
+
"name": "deprecatedMenu",
|
|
1252
|
+
"type": {
|
|
1253
|
+
"text": "Menu | null"
|
|
1254
|
+
}
|
|
1255
|
+
}
|
|
1256
|
+
],
|
|
1257
|
+
"inheritedFrom": {
|
|
1258
|
+
"name": "PickerBase",
|
|
1259
|
+
"module": "src/Picker.ts"
|
|
1260
|
+
}
|
|
1261
|
+
},
|
|
1210
1262
|
{
|
|
1211
1263
|
"kind": "method",
|
|
1212
1264
|
"name": "openMenu",
|
|
@@ -1303,18 +1355,6 @@
|
|
|
1303
1355
|
"module": "src/Picker.ts"
|
|
1304
1356
|
}
|
|
1305
1357
|
},
|
|
1306
|
-
{
|
|
1307
|
-
"kind": "field",
|
|
1308
|
-
"name": "renderButton",
|
|
1309
|
-
"type": {
|
|
1310
|
-
"text": "TemplateResult"
|
|
1311
|
-
},
|
|
1312
|
-
"privacy": "protected",
|
|
1313
|
-
"inheritedFrom": {
|
|
1314
|
-
"name": "PickerBase",
|
|
1315
|
-
"module": "src/Picker.ts"
|
|
1316
|
-
}
|
|
1317
|
-
},
|
|
1318
1358
|
{
|
|
1319
1359
|
"kind": "field",
|
|
1320
1360
|
"name": "dismissHelper",
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@spectrum-web-components/picker",
|
|
3
|
-
"version": "0.9.2
|
|
3
|
+
"version": "0.9.2",
|
|
4
4
|
"publishConfig": {
|
|
5
5
|
"access": "public"
|
|
6
6
|
},
|
|
@@ -49,14 +49,14 @@
|
|
|
49
49
|
],
|
|
50
50
|
"dependencies": {
|
|
51
51
|
"@spectrum-web-components/base": "^0.5.1",
|
|
52
|
-
"@spectrum-web-components/button": "^0.16.
|
|
52
|
+
"@spectrum-web-components/button": "^0.16.2",
|
|
53
53
|
"@spectrum-web-components/icon": "^0.11.1",
|
|
54
54
|
"@spectrum-web-components/icons-ui": "^0.8.1",
|
|
55
55
|
"@spectrum-web-components/icons-workflow": "^0.8.1",
|
|
56
|
-
"@spectrum-web-components/menu": "^0.11.
|
|
57
|
-
"@spectrum-web-components/overlay": "^0.13.2
|
|
58
|
-
"@spectrum-web-components/popover": "^0.11.2
|
|
59
|
-
"@spectrum-web-components/shared": "^0.13.
|
|
56
|
+
"@spectrum-web-components/menu": "^0.11.2",
|
|
57
|
+
"@spectrum-web-components/overlay": "^0.13.2",
|
|
58
|
+
"@spectrum-web-components/popover": "^0.11.2",
|
|
59
|
+
"@spectrum-web-components/shared": "^0.13.2",
|
|
60
60
|
"tslib": "^2.0.0"
|
|
61
61
|
},
|
|
62
62
|
"devDependencies": {
|
|
@@ -69,5 +69,5 @@
|
|
|
69
69
|
"./sync/index.js",
|
|
70
70
|
"./sync/sp-*.js"
|
|
71
71
|
],
|
|
72
|
-
"gitHead": "
|
|
72
|
+
"gitHead": "5ad16bd185710525afa48bd76099cb0ebde4c4cb"
|
|
73
73
|
}
|
package/src/Picker.d.ts
CHANGED
|
@@ -64,15 +64,16 @@ export declare class PickerBase extends PickerBase_base {
|
|
|
64
64
|
close(): void;
|
|
65
65
|
overlayCloseCallback: () => void;
|
|
66
66
|
protected onOverlayClosed(): void;
|
|
67
|
+
private popoverFragment;
|
|
68
|
+
private generatePopover;
|
|
67
69
|
private openMenu;
|
|
68
70
|
protected sizePopover(popover: HTMLElement): void;
|
|
69
71
|
private closeMenu;
|
|
70
72
|
protected get selectedItemContent(): MenuItemChildren;
|
|
71
73
|
protected renderLabelContent(content: Node[]): TemplateResult | Node[];
|
|
72
74
|
protected get buttonContent(): TemplateResult[];
|
|
73
|
-
protected get renderButton(): TemplateResult;
|
|
74
|
-
protected update(changes: PropertyValues<this>): void;
|
|
75
75
|
protected render(): TemplateResult;
|
|
76
|
+
protected update(changes: PropertyValues<this>): void;
|
|
76
77
|
protected get dismissHelper(): TemplateResult;
|
|
77
78
|
protected get renderPopover(): TemplateResult;
|
|
78
79
|
private _willUpdateItems;
|
|
@@ -83,7 +84,6 @@ export declare class PickerBase extends PickerBase_base {
|
|
|
83
84
|
* by the Menu within the open options overlay.
|
|
84
85
|
*/
|
|
85
86
|
protected updateMenuItems(event?: MenuItemAddedOrUpdatedEvent | MenuItemRemovedEvent): void;
|
|
86
|
-
protected firstUpdated(changedProperties: PropertyValues): void;
|
|
87
87
|
protected updated(changedProperties: PropertyValues): void;
|
|
88
88
|
protected manageSelection(): void;
|
|
89
89
|
private menuStatePromise;
|
package/src/Picker.js
CHANGED
|
@@ -11,7 +11,7 @@ governing permissions and limitations under the License.
|
|
|
11
11
|
*/
|
|
12
12
|
var _a;
|
|
13
13
|
import { __decorate } from "tslib";
|
|
14
|
-
import { html, nothing, SizedMixin, } from '@spectrum-web-components/base';
|
|
14
|
+
import { html, nothing, render, SizedMixin, } from '@spectrum-web-components/base';
|
|
15
15
|
import { classMap } from '@spectrum-web-components/base/src/directives.js';
|
|
16
16
|
import { property, query, } from '@spectrum-web-components/base/src/decorators.js';
|
|
17
17
|
import pickerStyles from './picker.css.js';
|
|
@@ -160,10 +160,22 @@ export class PickerBase extends SizedMixin(Focusable) {
|
|
|
160
160
|
}
|
|
161
161
|
this.menuStateResolver();
|
|
162
162
|
}
|
|
163
|
+
generatePopover(deprecatedMenu) {
|
|
164
|
+
if (this.popoverFragment)
|
|
165
|
+
return;
|
|
166
|
+
this.popoverFragment = document.createDocumentFragment();
|
|
167
|
+
render(this.renderPopover, this.popoverFragment, { host: this });
|
|
168
|
+
this.popover = this.popoverFragment.children[0];
|
|
169
|
+
this.optionsMenu = this.popover.children[1];
|
|
170
|
+
if (deprecatedMenu) {
|
|
171
|
+
console.warn(`Deprecation Notice: You no longer need to provide an sp-menu child to ${this.tagName.toLowerCase()}. Any styling or attributes on the sp-menu will be ignored.`);
|
|
172
|
+
}
|
|
173
|
+
}
|
|
163
174
|
async openMenu() {
|
|
164
175
|
/* c8 ignore next 9 */
|
|
165
176
|
let reparentableChildren = [];
|
|
166
177
|
const deprecatedMenu = this.querySelector('sp-menu');
|
|
178
|
+
this.generatePopover(deprecatedMenu);
|
|
167
179
|
if (deprecatedMenu) {
|
|
168
180
|
reparentableChildren = Array.from(deprecatedMenu.children);
|
|
169
181
|
}
|
|
@@ -184,7 +196,6 @@ export class PickerBase extends SizedMixin(Focusable) {
|
|
|
184
196
|
};
|
|
185
197
|
});
|
|
186
198
|
this.sizePopover(this.popover);
|
|
187
|
-
const { popover } = this;
|
|
188
199
|
this.addEventListener('sp-opened', async () => {
|
|
189
200
|
this.updateMenuItems();
|
|
190
201
|
await Promise.all([
|
|
@@ -193,17 +204,16 @@ export class PickerBase extends SizedMixin(Focusable) {
|
|
|
193
204
|
]);
|
|
194
205
|
this.menuStateResolver();
|
|
195
206
|
}, { once: true });
|
|
196
|
-
this.closeOverlay = await Picker.openOverlay(this, 'modal', popover, {
|
|
207
|
+
this.closeOverlay = await Picker.openOverlay(this, 'modal', this.popover, {
|
|
197
208
|
placement: this.placement,
|
|
198
209
|
receivesFocus: 'auto',
|
|
199
210
|
});
|
|
200
211
|
}
|
|
201
212
|
sizePopover(popover) {
|
|
213
|
+
if (this.quiet)
|
|
214
|
+
return;
|
|
202
215
|
// only use `this.offsetWidth` when Standard variant
|
|
203
|
-
|
|
204
|
-
if (menuWidth) {
|
|
205
|
-
popover.style.setProperty('min-width', menuWidth);
|
|
206
|
-
}
|
|
216
|
+
popover.style.setProperty('min-width', `${this.offsetWidth}px`);
|
|
207
217
|
}
|
|
208
218
|
closeMenu() {
|
|
209
219
|
if (this.closeOverlay) {
|
|
@@ -253,7 +263,7 @@ export class PickerBase extends SizedMixin(Focusable) {
|
|
|
253
263
|
}
|
|
254
264
|
// a helper to throw focus to the button is needed because Safari
|
|
255
265
|
// won't include buttons in the tab order even with tabindex="0"
|
|
256
|
-
|
|
266
|
+
render() {
|
|
257
267
|
return html `
|
|
258
268
|
<span
|
|
259
269
|
id="focus-helper"
|
|
@@ -284,11 +294,6 @@ export class PickerBase extends SizedMixin(Focusable) {
|
|
|
284
294
|
}
|
|
285
295
|
super.update(changes);
|
|
286
296
|
}
|
|
287
|
-
render() {
|
|
288
|
-
return html `
|
|
289
|
-
${this.renderButton} ${this.renderPopover}
|
|
290
|
-
`;
|
|
291
|
-
}
|
|
292
297
|
get dismissHelper() {
|
|
293
298
|
return html `
|
|
294
299
|
<div class="visually-hidden">
|
|
@@ -326,6 +331,8 @@ export class PickerBase extends SizedMixin(Focusable) {
|
|
|
326
331
|
* by the Menu within the open options overlay.
|
|
327
332
|
*/
|
|
328
333
|
updateMenuItems(event) {
|
|
334
|
+
if (this.open && (event === null || event === void 0 ? void 0 : event.type) === 'sp-menu-item-removed')
|
|
335
|
+
return;
|
|
329
336
|
if (this._willUpdateItems)
|
|
330
337
|
return;
|
|
331
338
|
this._willUpdateItems = true;
|
|
@@ -353,15 +360,6 @@ export class PickerBase extends SizedMixin(Focusable) {
|
|
|
353
360
|
this._willUpdateItems = false;
|
|
354
361
|
});
|
|
355
362
|
}
|
|
356
|
-
firstUpdated(changedProperties) {
|
|
357
|
-
super.firstUpdated(changedProperties);
|
|
358
|
-
// Since the sp-menu gets reparented by the popover, initialize it here
|
|
359
|
-
this.optionsMenu = this.shadowRoot.querySelector('sp-menu');
|
|
360
|
-
const deprecatedMenu = this.querySelector('sp-menu');
|
|
361
|
-
if (deprecatedMenu) {
|
|
362
|
-
console.warn(`Deprecation Notice: You no longer need to provide an sp-menu child to ${this.tagName.toLowerCase()}. Any styling or attributes on the sp-menu will be ignored.`);
|
|
363
|
-
}
|
|
364
|
-
}
|
|
365
363
|
updated(changedProperties) {
|
|
366
364
|
super.updated(changedProperties);
|
|
367
365
|
if (changedProperties.has('value') &&
|
|
@@ -466,9 +464,6 @@ __decorate([
|
|
|
466
464
|
__decorate([
|
|
467
465
|
property({ attribute: false })
|
|
468
466
|
], PickerBase.prototype, "selectedItem", void 0);
|
|
469
|
-
__decorate([
|
|
470
|
-
query('sp-popover')
|
|
471
|
-
], PickerBase.prototype, "popover", void 0);
|
|
472
467
|
export class Picker extends PickerBase {
|
|
473
468
|
constructor() {
|
|
474
469
|
super(...arguments);
|
package/src/Picker.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Picker.js","sourceRoot":"","sources":["Picker.ts"],"names":[],"mappings":"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","sourcesContent":["/*\nCopyright 2020 Adobe. All rights reserved.\nThis file is licensed to you under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License. You may obtain a copy\nof the License at http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software distributed under\nthe License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\nOF ANY KIND, either express or implied. See the License for the specific language\ngoverning permissions and limitations under the License.\n*/\n\nimport {\n CSSResultArray,\n DefaultElementSize,\n html,\n nothing,\n PropertyValues,\n SizedMixin,\n TemplateResult,\n} from '@spectrum-web-components/base';\nimport { classMap } from '@spectrum-web-components/base/src/directives.js';\nimport {\n property,\n query,\n} from '@spectrum-web-components/base/src/decorators.js';\n\nimport pickerStyles from './picker.css.js';\nimport chevronStyles from '@spectrum-web-components/icon/src/spectrum-icon-chevron.css.js';\n\nimport { Focusable } from '@spectrum-web-components/shared/src/focusable.js';\nimport { reparentChildren } from '@spectrum-web-components/shared/src/reparent-children.js';\nimport '@spectrum-web-components/icons-ui/icons/sp-icon-chevron100.js';\nimport '@spectrum-web-components/icons-workflow/icons/sp-icon-alert.js';\nimport '@spectrum-web-components/menu/sp-menu.js';\nimport type {\n Menu,\n MenuItem,\n MenuItemAddedOrUpdatedEvent,\n MenuItemChildren,\n MenuItemRemovedEvent,\n} from '@spectrum-web-components/menu';\nimport '@spectrum-web-components/popover/sp-popover.js';\nimport { Popover } from '@spectrum-web-components/popover';\nimport {\n openOverlay,\n OverlayOptions,\n Placement,\n TriggerInteractions,\n} from '@spectrum-web-components/overlay';\n\nconst chevronClass = {\n s: 'spectrum-UIIcon-ChevronDown75',\n m: 'spectrum-UIIcon-ChevronDown100',\n l: 'spectrum-UIIcon-ChevronDown200',\n xl: 'spectrum-UIIcon-ChevronDown300',\n};\n\n/**\n * @element sp-picker\n *\n * @slot label - The placeholder content for the Picker\n * @slot - menu items to be listed in the Picker\n * @fires change - Announces that the `value` of the element has changed\n * @fires sp-opened - Announces that the overlay has been opened\n * @fires sp-closed - Announces that the overlay has been closed\n */\nexport class PickerBase extends SizedMixin(Focusable) {\n /**\n * @private\n */\n public static openOverlay = async (\n target: HTMLElement,\n interaction: TriggerInteractions,\n content: HTMLElement,\n options: OverlayOptions\n ): Promise<() => void> => {\n return await openOverlay(target, interaction, content, options);\n };\n\n @query('#button')\n public button!: HTMLButtonElement;\n\n public get target(): HTMLButtonElement | this {\n return this.button;\n }\n\n @property({ type: Boolean, reflect: true })\n public disabled = false;\n\n @property({ type: Boolean, reflect: true })\n public focused = false;\n\n @property({ type: String, reflect: true })\n public icons?: 'only' | 'none';\n\n @property({ type: Boolean, reflect: true })\n public invalid = false;\n\n @property()\n public label?: string;\n\n @property({ type: Boolean, reflect: true })\n public open = false;\n\n @property({ type: Boolean, reflect: true })\n public readonly = false;\n\n public selects: undefined | 'single' = 'single';\n\n public menuItems: MenuItem[] = [];\n private restoreChildren?: () => void;\n\n public optionsMenu!: Menu;\n\n /**\n * @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\"}\n * @attr\n */\n\n @property()\n public placement: Placement = 'bottom-start';\n\n @property({ type: Boolean, reflect: true })\n public quiet = false;\n\n @property({ type: String })\n public value = '';\n\n @property({ attribute: false })\n public selectedItem?: MenuItem;\n\n private closeOverlay?: () => void;\n\n @query('sp-popover')\n private popover!: Popover;\n\n protected listRole: 'listbox' | 'menu' = 'listbox';\n protected itemRole = 'option';\n\n public constructor() {\n super();\n this.onKeydown = this.onKeydown.bind(this);\n }\n\n public get focusElement(): HTMLElement {\n if (this.open) {\n return this.optionsMenu;\n }\n return this.button;\n }\n\n public forceFocusVisible(): void {\n this.focused = true;\n }\n\n public onButtonBlur(): void {\n this.focused = false;\n (this.target as HTMLButtonElement).removeEventListener(\n 'keydown',\n this.onKeydown\n );\n }\n\n protected onButtonClick(): void {\n this.toggle();\n }\n\n public focus(options?: FocusOptions): void {\n super.focus(options);\n\n if (!this.disabled && this.focusElement) {\n this.focused = this.hasVisibleFocusInTree();\n }\n }\n\n public onHelperFocus(): void {\n // set focused to true here instead of onButtonFocus so clicks don't flash a focus outline\n this.focused = true;\n this.button.focus();\n }\n\n public onButtonFocus(): void {\n (this.target as HTMLButtonElement).addEventListener(\n 'keydown',\n this.onKeydown\n );\n }\n\n public handleChange(event: Event): void {\n event.stopPropagation();\n const target = event.target as Menu;\n const [selected] = target.selectedItems;\n this.setValueFromItem(selected, event);\n }\n\n protected onKeydown = (event: KeyboardEvent): void => {\n this.focused = true;\n if (event.code !== 'ArrowDown' && event.code !== 'ArrowUp') {\n return;\n }\n event.preventDefault();\n this.toggle(true);\n };\n\n public async setValueFromItem(\n item: MenuItem,\n menuChangeEvent?: Event\n ): Promise<void> {\n const oldSelectedItem = this.selectedItem;\n const oldValue = this.value;\n this.selectedItem = item;\n this.value = item.value;\n this.open = false;\n await this.updateComplete;\n const applyDefault = this.dispatchEvent(\n new Event('change', {\n cancelable: true,\n })\n );\n if (!applyDefault) {\n if (menuChangeEvent) {\n menuChangeEvent.preventDefault();\n }\n this.selectedItem.selected = false;\n if (oldSelectedItem) {\n oldSelectedItem.selected = true;\n }\n this.selectedItem = oldSelectedItem;\n this.value = oldValue;\n this.open = true;\n return;\n }\n if (oldSelectedItem) {\n oldSelectedItem.selected = false;\n }\n item.selected = !!this.selects;\n }\n\n public toggle(target?: boolean): void {\n if (this.readonly) {\n return;\n }\n this.open = typeof target !== 'undefined' ? target : !this.open;\n }\n\n public close(): void {\n if (this.readonly) {\n return;\n }\n this.open = false;\n }\n\n public overlayCloseCallback = (): void => {\n this.open = false;\n };\n\n protected onOverlayClosed(): void {\n this.close();\n if (this.restoreChildren) {\n this.restoreChildren();\n this.restoreChildren = undefined;\n }\n\n this.menuStateResolver();\n }\n\n private async openMenu(): Promise<void> {\n /* c8 ignore next 9 */\n let reparentableChildren: Element[] = [];\n\n const deprecatedMenu = this.querySelector('sp-menu');\n if (deprecatedMenu) {\n reparentableChildren = Array.from(deprecatedMenu.children);\n } else {\n reparentableChildren = Array.from(this.children).filter(\n (element) => {\n return !element.hasAttribute('slot');\n }\n );\n }\n\n if (reparentableChildren.length === 0) {\n this.menuStateResolver();\n return;\n }\n\n this.restoreChildren = reparentChildren<\n Element & { focused?: boolean }\n >(reparentableChildren, this.optionsMenu, () => {\n return (el) => {\n if (typeof el.focused !== 'undefined') {\n el.focused = false;\n }\n };\n });\n\n this.sizePopover(this.popover);\n const { popover } = this;\n this.addEventListener(\n 'sp-opened',\n async () => {\n this.updateMenuItems();\n await Promise.all([\n this.itemsUpdated,\n this.optionsMenu.updateComplete,\n ]);\n this.menuStateResolver();\n },\n { once: true }\n );\n this.closeOverlay = await Picker.openOverlay(this, 'modal', popover, {\n placement: this.placement,\n receivesFocus: 'auto',\n });\n }\n\n protected sizePopover(popover: HTMLElement): void {\n // only use `this.offsetWidth` when Standard variant\n const menuWidth = !this.quiet && `${this.offsetWidth}px`;\n if (menuWidth) {\n popover.style.setProperty('min-width', menuWidth);\n }\n }\n\n private closeMenu(): void {\n if (this.closeOverlay) {\n this.closeOverlay();\n delete this.closeOverlay;\n }\n }\n\n protected get selectedItemContent(): MenuItemChildren {\n if (this.selectedItem) {\n return this.selectedItem.itemChildren;\n }\n return { icon: [], content: [] };\n }\n\n protected renderLabelContent(content: Node[]): TemplateResult | Node[] {\n if (this.value && this.selectedItem) {\n return content;\n }\n return html`\n <slot name=\"label\">${this.label}</slot>\n `;\n }\n\n protected get buttonContent(): TemplateResult[] {\n const labelClasses = {\n 'visually-hidden': this.icons === 'only' && !!this.value,\n placeholder: !this.value,\n };\n return [\n html`\n <span id=\"icon\" ?hidden=${this.icons === 'none'}>\n ${this.selectedItemContent.icon}\n </span>\n <span id=\"label\" class=${classMap(labelClasses)}>\n ${this.renderLabelContent(this.selectedItemContent.content)}\n </span>\n ${this.invalid\n ? html`\n <sp-icon-alert\n class=\"validation-icon\"\n ></sp-icon-alert>\n `\n : nothing}\n <sp-icon-chevron100\n class=\"picker ${chevronClass[\n this.size as DefaultElementSize\n ]}\"\n ></sp-icon-chevron100>\n `,\n ];\n }\n\n // a helper to throw focus to the button is needed because Safari\n // won't include buttons in the tab order even with tabindex=\"0\"\n protected get renderButton(): TemplateResult {\n return html`\n <span\n id=\"focus-helper\"\n tabindex=\"${this.focused ? '-1' : '0'}\"\n @focus=${this.onHelperFocus}\n ></span>\n <button\n aria-haspopup=\"true\"\n aria-expanded=${this.open ? 'true' : 'false'}\n aria-labelledby=\"button icon label\"\n id=\"button\"\n class=\"button\"\n @blur=${this.onButtonBlur}\n @click=${this.onButtonClick}\n @focus=${this.onButtonFocus}\n ?disabled=${this.disabled}\n tabindex=\"-1\"\n >\n ${this.buttonContent}\n </button>\n `;\n }\n\n protected update(changes: PropertyValues<this>): void {\n if (this.selects) {\n // Always force `selects` to \"single\" when set.\n // TODO: Add support functionally and visually for \"multiple\"\n this.selects = 'single';\n }\n super.update(changes);\n }\n\n protected render(): TemplateResult {\n return html`\n ${this.renderButton} ${this.renderPopover}\n `;\n }\n\n protected get dismissHelper(): TemplateResult {\n return html`\n <div class=\"visually-hidden\">\n <button\n tabindex=\"-1\"\n arial-label=\"Dismiss\"\n @click=${this.close}\n ></button>\n </div>\n `;\n }\n\n protected get renderPopover(): TemplateResult {\n return html`\n <sp-popover\n id=\"popover\"\n role=\"dialog\"\n @sp-menu-item-added-or-updated=${this.updateMenuItems}\n @sp-overlay-closed=${this.onOverlayClosed}\n .overlayCloseCallback=${this.overlayCloseCallback}\n >\n ${this.dismissHelper}\n <sp-menu\n id=\"menu\"\n role=\"${this.listRole}\"\n @change=${this.handleChange}\n .selects=${this.selects}\n ></sp-menu>\n ${this.dismissHelper}\n </sp-popover>\n `;\n }\n\n private _willUpdateItems = false;\n protected itemsUpdated: Promise<void> = Promise.resolve();\n\n /**\n * Acquire the available MenuItems in the Picker by\n * direct element query or by assuming the list managed\n * by the Menu within the open options overlay.\n */\n protected updateMenuItems(\n event?: MenuItemAddedOrUpdatedEvent | MenuItemRemovedEvent\n ): void {\n if (this._willUpdateItems) return;\n this._willUpdateItems = true;\n if (event?.item === this.selectedItem) {\n this.requestUpdate();\n }\n\n let resolve = (): void => {\n return;\n };\n this.itemsUpdated = new Promise((res) => (resolve = res));\n // Debounce the update so we only update once\n // if multiple items have changed\n window.requestAnimationFrame(async () => {\n if (this.open) {\n await this.optionsMenu.updateComplete;\n this.menuItems = this.optionsMenu.childItems;\n } else {\n this.menuItems = [\n ...this.querySelectorAll('sp-menu-item'),\n ] as MenuItem[];\n }\n this.manageSelection();\n resolve();\n this._willUpdateItems = false;\n });\n }\n\n protected firstUpdated(changedProperties: PropertyValues): void {\n super.firstUpdated(changedProperties);\n\n // Since the sp-menu gets reparented by the popover, initialize it here\n this.optionsMenu = this.shadowRoot.querySelector('sp-menu') as Menu;\n\n const deprecatedMenu = this.querySelector('sp-menu');\n if (deprecatedMenu) {\n console.warn(\n `Deprecation Notice: You no longer need to provide an sp-menu child to ${this.tagName.toLowerCase()}. Any styling or attributes on the sp-menu will be ignored.`\n );\n }\n }\n\n protected updated(changedProperties: PropertyValues): void {\n super.updated(changedProperties);\n if (\n changedProperties.has('value') &&\n !changedProperties.has('selectedItem')\n ) {\n this.updateMenuItems();\n }\n if (changedProperties.has('disabled') && this.disabled) {\n this.open = false;\n }\n if (\n changedProperties.has('open') &&\n (this.open || typeof changedProperties.get('open') !== 'undefined')\n ) {\n this.menuStatePromise = new Promise(\n (res) => (this.menuStateResolver = res)\n );\n if (this.open) {\n this.openMenu();\n } else {\n this.closeMenu();\n }\n }\n }\n\n protected manageSelection(): void {\n let selectedItem: MenuItem | undefined;\n this.menuItems.forEach((item) => {\n if (this.value === item.value && !item.disabled) {\n selectedItem = item;\n } else {\n item.selected = false;\n }\n });\n if (selectedItem) {\n selectedItem.selected = !!this.selects;\n this.selectedItem = selectedItem;\n } else {\n this.value = '';\n this.selectedItem = undefined;\n }\n if (this.open) {\n this.optionsMenu.updateComplete.then(() => {\n this.optionsMenu.updateSelectedItemIndex();\n });\n }\n }\n\n private menuStatePromise = Promise.resolve();\n private menuStateResolver!: () => void;\n\n protected async getUpdateComplete(): Promise<boolean> {\n const complete = (await super.getUpdateComplete()) as boolean;\n await this.menuStatePromise;\n await this.itemsUpdated;\n return complete;\n }\n\n public connectedCallback(): void {\n this.updateMenuItems();\n this.addEventListener(\n 'sp-menu-item-added-or-updated',\n this.updateMenuItems\n );\n this.addEventListener('sp-menu-item-removed', this.updateMenuItems);\n super.connectedCallback();\n }\n\n public disconnectedCallback(): void {\n this.open = false;\n\n super.disconnectedCallback();\n }\n}\n\nexport class Picker extends PickerBase {\n public static get styles(): CSSResultArray {\n return [pickerStyles, chevronStyles];\n }\n\n protected onKeydown = (event: KeyboardEvent): void => {\n const { code } = event;\n this.focused = true;\n if (!code.startsWith('Arrow') || this.readonly) {\n return;\n }\n event.preventDefault();\n if (code === 'ArrowUp' || code === 'ArrowDown') {\n this.toggle(true);\n return;\n }\n const selectedIndex = this.selectedItem\n ? this.menuItems.indexOf(this.selectedItem)\n : -1;\n // use a positive offset to find the first non-disabled item when no selection is available.\n const nextOffset = !this.value || code === 'ArrowRight' ? 1 : -1;\n let nextIndex = selectedIndex + nextOffset;\n while (\n this.menuItems[nextIndex] &&\n this.menuItems[nextIndex].disabled\n ) {\n nextIndex += nextOffset;\n }\n if (!this.menuItems[nextIndex] || this.menuItems[nextIndex].disabled) {\n return;\n }\n if (!this.value || nextIndex !== selectedIndex) {\n this.setValueFromItem(this.menuItems[nextIndex]);\n }\n };\n}\n"]}
|
|
1
|
+
{"version":3,"file":"Picker.js","sourceRoot":"","sources":["Picker.ts"],"names":[],"mappings":"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","sourcesContent":["/*\nCopyright 2020 Adobe. All rights reserved.\nThis file is licensed to you under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License. You may obtain a copy\nof the License at http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software distributed under\nthe License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\nOF ANY KIND, either express or implied. See the License for the specific language\ngoverning permissions and limitations under the License.\n*/\n\nimport {\n CSSResultArray,\n DefaultElementSize,\n html,\n nothing,\n PropertyValues,\n render,\n SizedMixin,\n TemplateResult,\n} from '@spectrum-web-components/base';\nimport { classMap } from '@spectrum-web-components/base/src/directives.js';\nimport {\n property,\n query,\n} from '@spectrum-web-components/base/src/decorators.js';\n\nimport pickerStyles from './picker.css.js';\nimport chevronStyles from '@spectrum-web-components/icon/src/spectrum-icon-chevron.css.js';\n\nimport { Focusable } from '@spectrum-web-components/shared/src/focusable.js';\nimport { reparentChildren } from '@spectrum-web-components/shared/src/reparent-children.js';\nimport '@spectrum-web-components/icons-ui/icons/sp-icon-chevron100.js';\nimport '@spectrum-web-components/icons-workflow/icons/sp-icon-alert.js';\nimport '@spectrum-web-components/menu/sp-menu.js';\nimport type {\n Menu,\n MenuItem,\n MenuItemAddedOrUpdatedEvent,\n MenuItemChildren,\n MenuItemRemovedEvent,\n} from '@spectrum-web-components/menu';\nimport '@spectrum-web-components/popover/sp-popover.js';\nimport { Popover } from '@spectrum-web-components/popover';\nimport {\n openOverlay,\n OverlayOptions,\n Placement,\n TriggerInteractions,\n} from '@spectrum-web-components/overlay';\n\nconst chevronClass = {\n s: 'spectrum-UIIcon-ChevronDown75',\n m: 'spectrum-UIIcon-ChevronDown100',\n l: 'spectrum-UIIcon-ChevronDown200',\n xl: 'spectrum-UIIcon-ChevronDown300',\n};\n\n/**\n * @element sp-picker\n *\n * @slot label - The placeholder content for the Picker\n * @slot - menu items to be listed in the Picker\n * @fires change - Announces that the `value` of the element has changed\n * @fires sp-opened - Announces that the overlay has been opened\n * @fires sp-closed - Announces that the overlay has been closed\n */\nexport class PickerBase extends SizedMixin(Focusable) {\n /**\n * @private\n */\n public static openOverlay = async (\n target: HTMLElement,\n interaction: TriggerInteractions,\n content: HTMLElement,\n options: OverlayOptions\n ): Promise<() => void> => {\n return await openOverlay(target, interaction, content, options);\n };\n\n @query('#button')\n public button!: HTMLButtonElement;\n\n public get target(): HTMLButtonElement | this {\n return this.button;\n }\n\n @property({ type: Boolean, reflect: true })\n public disabled = false;\n\n @property({ type: Boolean, reflect: true })\n public focused = false;\n\n @property({ type: String, reflect: true })\n public icons?: 'only' | 'none';\n\n @property({ type: Boolean, reflect: true })\n public invalid = false;\n\n @property()\n public label?: string;\n\n @property({ type: Boolean, reflect: true })\n public open = false;\n\n @property({ type: Boolean, reflect: true })\n public readonly = false;\n\n public selects: undefined | 'single' = 'single';\n\n public menuItems: MenuItem[] = [];\n private restoreChildren?: () => void;\n\n public optionsMenu!: Menu;\n\n /**\n * @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\"}\n * @attr\n */\n\n @property()\n public placement: Placement = 'bottom-start';\n\n @property({ type: Boolean, reflect: true })\n public quiet = false;\n\n @property({ type: String })\n public value = '';\n\n @property({ attribute: false })\n public selectedItem?: MenuItem;\n\n private closeOverlay?: () => void;\n\n private popover!: Popover;\n\n protected listRole: 'listbox' | 'menu' = 'listbox';\n protected itemRole = 'option';\n\n public constructor() {\n super();\n this.onKeydown = this.onKeydown.bind(this);\n }\n\n public get focusElement(): HTMLElement {\n if (this.open) {\n return this.optionsMenu;\n }\n return this.button;\n }\n\n public forceFocusVisible(): void {\n this.focused = true;\n }\n\n public onButtonBlur(): void {\n this.focused = false;\n (this.target as HTMLButtonElement).removeEventListener(\n 'keydown',\n this.onKeydown\n );\n }\n\n protected onButtonClick(): void {\n this.toggle();\n }\n\n public focus(options?: FocusOptions): void {\n super.focus(options);\n\n if (!this.disabled && this.focusElement) {\n this.focused = this.hasVisibleFocusInTree();\n }\n }\n\n public onHelperFocus(): void {\n // set focused to true here instead of onButtonFocus so clicks don't flash a focus outline\n this.focused = true;\n this.button.focus();\n }\n\n public onButtonFocus(): void {\n (this.target as HTMLButtonElement).addEventListener(\n 'keydown',\n this.onKeydown\n );\n }\n\n public handleChange(event: Event): void {\n event.stopPropagation();\n const target = event.target as Menu;\n const [selected] = target.selectedItems;\n this.setValueFromItem(selected, event);\n }\n\n protected onKeydown = (event: KeyboardEvent): void => {\n this.focused = true;\n if (event.code !== 'ArrowDown' && event.code !== 'ArrowUp') {\n return;\n }\n event.preventDefault();\n this.toggle(true);\n };\n\n public async setValueFromItem(\n item: MenuItem,\n menuChangeEvent?: Event\n ): Promise<void> {\n const oldSelectedItem = this.selectedItem;\n const oldValue = this.value;\n this.selectedItem = item;\n this.value = item.value;\n this.open = false;\n await this.updateComplete;\n const applyDefault = this.dispatchEvent(\n new Event('change', {\n cancelable: true,\n })\n );\n if (!applyDefault) {\n if (menuChangeEvent) {\n menuChangeEvent.preventDefault();\n }\n this.selectedItem.selected = false;\n if (oldSelectedItem) {\n oldSelectedItem.selected = true;\n }\n this.selectedItem = oldSelectedItem;\n this.value = oldValue;\n this.open = true;\n return;\n }\n if (oldSelectedItem) {\n oldSelectedItem.selected = false;\n }\n item.selected = !!this.selects;\n }\n\n public toggle(target?: boolean): void {\n if (this.readonly) {\n return;\n }\n this.open = typeof target !== 'undefined' ? target : !this.open;\n }\n\n public close(): void {\n if (this.readonly) {\n return;\n }\n this.open = false;\n }\n\n public overlayCloseCallback = (): void => {\n this.open = false;\n };\n\n protected onOverlayClosed(): void {\n this.close();\n if (this.restoreChildren) {\n this.restoreChildren();\n this.restoreChildren = undefined;\n }\n\n this.menuStateResolver();\n }\n\n private popoverFragment!: DocumentFragment;\n\n private generatePopover(deprecatedMenu: Menu | null): void {\n if (this.popoverFragment) return;\n\n this.popoverFragment = document.createDocumentFragment();\n render(this.renderPopover, this.popoverFragment, { host: this });\n this.popover = this.popoverFragment.children[0] as Popover;\n this.optionsMenu = this.popover.children[1] as Menu;\n\n if (deprecatedMenu) {\n console.warn(\n `Deprecation Notice: You no longer need to provide an sp-menu child to ${this.tagName.toLowerCase()}. Any styling or attributes on the sp-menu will be ignored.`\n );\n }\n }\n\n private async openMenu(): Promise<void> {\n /* c8 ignore next 9 */\n let reparentableChildren: Element[] = [];\n const deprecatedMenu = this.querySelector('sp-menu');\n\n this.generatePopover(deprecatedMenu);\n if (deprecatedMenu) {\n reparentableChildren = Array.from(deprecatedMenu.children);\n } else {\n reparentableChildren = Array.from(this.children).filter(\n (element) => {\n return !element.hasAttribute('slot');\n }\n );\n }\n\n if (reparentableChildren.length === 0) {\n this.menuStateResolver();\n return;\n }\n\n this.restoreChildren = reparentChildren<\n Element & { focused?: boolean }\n >(reparentableChildren, this.optionsMenu, () => {\n return (el) => {\n if (typeof el.focused !== 'undefined') {\n el.focused = false;\n }\n };\n });\n\n this.sizePopover(this.popover);\n this.addEventListener(\n 'sp-opened',\n async () => {\n this.updateMenuItems();\n await Promise.all([\n this.itemsUpdated,\n this.optionsMenu.updateComplete,\n ]);\n this.menuStateResolver();\n },\n { once: true }\n );\n this.closeOverlay = await Picker.openOverlay(\n this,\n 'modal',\n this.popover,\n {\n placement: this.placement,\n receivesFocus: 'auto',\n }\n );\n }\n\n protected sizePopover(popover: HTMLElement): void {\n if (this.quiet) return;\n // only use `this.offsetWidth` when Standard variant\n popover.style.setProperty('min-width', `${this.offsetWidth}px`);\n }\n\n private closeMenu(): void {\n if (this.closeOverlay) {\n this.closeOverlay();\n delete this.closeOverlay;\n }\n }\n\n protected get selectedItemContent(): MenuItemChildren {\n if (this.selectedItem) {\n return this.selectedItem.itemChildren;\n }\n return { icon: [], content: [] };\n }\n\n protected renderLabelContent(content: Node[]): TemplateResult | Node[] {\n if (this.value && this.selectedItem) {\n return content;\n }\n return html`\n <slot name=\"label\">${this.label}</slot>\n `;\n }\n\n protected get buttonContent(): TemplateResult[] {\n const labelClasses = {\n 'visually-hidden': this.icons === 'only' && !!this.value,\n placeholder: !this.value,\n };\n return [\n html`\n <span id=\"icon\" ?hidden=${this.icons === 'none'}>\n ${this.selectedItemContent.icon}\n </span>\n <span id=\"label\" class=${classMap(labelClasses)}>\n ${this.renderLabelContent(this.selectedItemContent.content)}\n </span>\n ${this.invalid\n ? html`\n <sp-icon-alert\n class=\"validation-icon\"\n ></sp-icon-alert>\n `\n : nothing}\n <sp-icon-chevron100\n class=\"picker ${chevronClass[\n this.size as DefaultElementSize\n ]}\"\n ></sp-icon-chevron100>\n `,\n ];\n }\n\n // a helper to throw focus to the button is needed because Safari\n // won't include buttons in the tab order even with tabindex=\"0\"\n protected render(): TemplateResult {\n return html`\n <span\n id=\"focus-helper\"\n tabindex=\"${this.focused ? '-1' : '0'}\"\n @focus=${this.onHelperFocus}\n ></span>\n <button\n aria-haspopup=\"true\"\n aria-expanded=${this.open ? 'true' : 'false'}\n aria-labelledby=\"button icon label\"\n id=\"button\"\n class=\"button\"\n @blur=${this.onButtonBlur}\n @click=${this.onButtonClick}\n @focus=${this.onButtonFocus}\n ?disabled=${this.disabled}\n tabindex=\"-1\"\n >\n ${this.buttonContent}\n </button>\n `;\n }\n\n protected update(changes: PropertyValues<this>): void {\n if (this.selects) {\n // Always force `selects` to \"single\" when set.\n // TODO: Add support functionally and visually for \"multiple\"\n this.selects = 'single';\n }\n super.update(changes);\n }\n\n protected get dismissHelper(): TemplateResult {\n return html`\n <div class=\"visually-hidden\">\n <button\n tabindex=\"-1\"\n arial-label=\"Dismiss\"\n @click=${this.close}\n ></button>\n </div>\n `;\n }\n\n protected get renderPopover(): TemplateResult {\n return html`\n <sp-popover\n id=\"popover\"\n role=\"dialog\"\n @sp-menu-item-added-or-updated=${this.updateMenuItems}\n @sp-overlay-closed=${this.onOverlayClosed}\n .overlayCloseCallback=${this.overlayCloseCallback}\n >\n ${this.dismissHelper}\n <sp-menu\n id=\"menu\"\n role=\"${this.listRole}\"\n @change=${this.handleChange}\n .selects=${this.selects}\n ></sp-menu>\n ${this.dismissHelper}\n </sp-popover>\n `;\n }\n\n private _willUpdateItems = false;\n protected itemsUpdated: Promise<void> = Promise.resolve();\n\n /**\n * Acquire the available MenuItems in the Picker by\n * direct element query or by assuming the list managed\n * by the Menu within the open options overlay.\n */\n protected updateMenuItems(\n event?: MenuItemAddedOrUpdatedEvent | MenuItemRemovedEvent\n ): void {\n if (this.open && event?.type === 'sp-menu-item-removed') return;\n if (this._willUpdateItems) return;\n this._willUpdateItems = true;\n if (event?.item === this.selectedItem) {\n this.requestUpdate();\n }\n\n let resolve = (): void => {\n return;\n };\n this.itemsUpdated = new Promise((res) => (resolve = res));\n // Debounce the update so we only update once\n // if multiple items have changed\n window.requestAnimationFrame(async () => {\n if (this.open) {\n await this.optionsMenu.updateComplete;\n this.menuItems = this.optionsMenu.childItems;\n } else {\n this.menuItems = [\n ...this.querySelectorAll('sp-menu-item'),\n ] as MenuItem[];\n }\n this.manageSelection();\n resolve();\n this._willUpdateItems = false;\n });\n }\n\n protected updated(changedProperties: PropertyValues): void {\n super.updated(changedProperties);\n if (\n changedProperties.has('value') &&\n !changedProperties.has('selectedItem')\n ) {\n this.updateMenuItems();\n }\n if (changedProperties.has('disabled') && this.disabled) {\n this.open = false;\n }\n if (\n changedProperties.has('open') &&\n (this.open || typeof changedProperties.get('open') !== 'undefined')\n ) {\n this.menuStatePromise = new Promise(\n (res) => (this.menuStateResolver = res)\n );\n if (this.open) {\n this.openMenu();\n } else {\n this.closeMenu();\n }\n }\n }\n\n protected manageSelection(): void {\n let selectedItem: MenuItem | undefined;\n this.menuItems.forEach((item) => {\n if (this.value === item.value && !item.disabled) {\n selectedItem = item;\n } else {\n item.selected = false;\n }\n });\n if (selectedItem) {\n selectedItem.selected = !!this.selects;\n this.selectedItem = selectedItem;\n } else {\n this.value = '';\n this.selectedItem = undefined;\n }\n if (this.open) {\n this.optionsMenu.updateComplete.then(() => {\n this.optionsMenu.updateSelectedItemIndex();\n });\n }\n }\n\n private menuStatePromise = Promise.resolve();\n private menuStateResolver!: () => void;\n\n protected async getUpdateComplete(): Promise<boolean> {\n const complete = (await super.getUpdateComplete()) as boolean;\n await this.menuStatePromise;\n await this.itemsUpdated;\n return complete;\n }\n\n public connectedCallback(): void {\n this.updateMenuItems();\n this.addEventListener(\n 'sp-menu-item-added-or-updated',\n this.updateMenuItems\n );\n this.addEventListener('sp-menu-item-removed', this.updateMenuItems);\n super.connectedCallback();\n }\n\n public disconnectedCallback(): void {\n this.open = false;\n\n super.disconnectedCallback();\n }\n}\n\nexport class Picker extends PickerBase {\n public static get styles(): CSSResultArray {\n return [pickerStyles, chevronStyles];\n }\n\n protected onKeydown = (event: KeyboardEvent): void => {\n const { code } = event;\n this.focused = true;\n if (!code.startsWith('Arrow') || this.readonly) {\n return;\n }\n event.preventDefault();\n if (code === 'ArrowUp' || code === 'ArrowDown') {\n this.toggle(true);\n return;\n }\n const selectedIndex = this.selectedItem\n ? this.menuItems.indexOf(this.selectedItem)\n : -1;\n // use a positive offset to find the first non-disabled item when no selection is available.\n const nextOffset = !this.value || code === 'ArrowRight' ? 1 : -1;\n let nextIndex = selectedIndex + nextOffset;\n while (\n this.menuItems[nextIndex] &&\n this.menuItems[nextIndex].disabled\n ) {\n nextIndex += nextOffset;\n }\n if (!this.menuItems[nextIndex] || this.menuItems[nextIndex].disabled) {\n return;\n }\n if (!this.value || nextIndex !== selectedIndex) {\n this.setValueFromItem(this.menuItems[nextIndex]);\n }\n };\n}\n"]}
|