@spectrum-web-components/picker 0.14.2 → 0.15.1-overlay.7

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@spectrum-web-components/picker",
3
- "version": "0.14.2",
3
+ "version": "0.15.1-overlay.7+a493756c7",
4
4
  "publishConfig": {
5
5
  "access": "public"
6
6
  },
@@ -66,16 +66,16 @@
66
66
  ],
67
67
  "dependencies": {
68
68
  "@spectrum-web-components/base": "^0.7.4",
69
- "@spectrum-web-components/button": "^0.20.2",
70
- "@spectrum-web-components/icon": "^0.12.8",
71
- "@spectrum-web-components/icons-ui": "^0.9.9",
72
- "@spectrum-web-components/icons-workflow": "^0.9.9",
73
- "@spectrum-web-components/menu": "^0.16.14",
74
- "@spectrum-web-components/overlay": "^0.19.2",
75
- "@spectrum-web-components/popover": "^0.12.14",
69
+ "@spectrum-web-components/button": "^0.20.3",
70
+ "@spectrum-web-components/icon": "^0.12.9",
71
+ "@spectrum-web-components/icons-ui": "^0.9.10",
72
+ "@spectrum-web-components/icons-workflow": "^0.9.10",
73
+ "@spectrum-web-components/menu": "^0.16.16-overlay.7+a493756c7",
74
+ "@spectrum-web-components/overlay": "^0.19.4-overlay.7+a493756c7",
75
+ "@spectrum-web-components/popover": "^0.12.16-overlay.7+a493756c7",
76
76
  "@spectrum-web-components/reactive-controllers": "^0.3.5",
77
77
  "@spectrum-web-components/shared": "^0.15.5",
78
- "@spectrum-web-components/tray": "^0.5.0"
78
+ "@spectrum-web-components/tray": "^0.5.1"
79
79
  },
80
80
  "devDependencies": {
81
81
  "@spectrum-css/picker": "^2.0.5"
@@ -88,5 +88,5 @@
88
88
  "./sync/index.js",
89
89
  "./sync/sp-*.js"
90
90
  ],
91
- "gitHead": "5e11d828243bb3ff572c25b33a8d58844a89f524"
91
+ "gitHead": "a493756c787f12c6266ddeb11cba260cd66b6e41"
92
92
  }
package/src/Picker.d.ts CHANGED
@@ -1,12 +1,14 @@
1
1
  import { CSSResultArray, PropertyValues, TemplateResult } from '@spectrum-web-components/base';
2
+ import { StyleInfo } from '@spectrum-web-components/base/src/directives.js';
2
3
  import { Focusable } from '@spectrum-web-components/shared/src/focusable.js';
3
4
  import '@spectrum-web-components/icons-ui/icons/sp-icon-chevron100.js';
4
5
  import '@spectrum-web-components/icons-workflow/icons/sp-icon-alert.js';
6
+ import '@spectrum-web-components/overlay/sp-overlay.js';
5
7
  import '@spectrum-web-components/menu/sp-menu.js';
6
- import type { Menu, MenuItem, MenuItemAddedOrUpdatedEvent, MenuItemChildren, MenuItemRemovedEvent } from '@spectrum-web-components/menu';
8
+ import type { Menu, MenuItem, MenuItemChildren } from '@spectrum-web-components/menu';
7
9
  import '@spectrum-web-components/tray/sp-tray.js';
8
10
  import '@spectrum-web-components/popover/sp-popover.js';
9
- import { OverlayOptions, Placement, TriggerInteractions } from '@spectrum-web-components/overlay';
11
+ import { Placement } from '@spectrum-web-components/overlay';
10
12
  import { MatchMediaController } from '@spectrum-web-components/reactive-controllers/src/MatchMedia.js';
11
13
  declare const PickerBase_base: typeof Focusable & {
12
14
  new (...args: any[]): import("@spectrum-web-components/base").SizedElementInterface;
@@ -22,10 +24,6 @@ declare const PickerBase_base: typeof Focusable & {
22
24
  * @fires sp-closed - Announces that the overlay has been closed
23
25
  */
24
26
  export declare class PickerBase extends PickerBase_base {
25
- /**
26
- * @private
27
- */
28
- static openOverlay: (target: HTMLElement, interaction: TriggerInteractions, content: HTMLElement, options: OverlayOptions) => Promise<() => void>;
29
27
  protected isMobile: MatchMediaController;
30
28
  button: HTMLButtonElement;
31
29
  get target(): HTMLButtonElement | this;
@@ -37,8 +35,7 @@ export declare class PickerBase extends PickerBase_base {
37
35
  open: boolean;
38
36
  readonly: boolean;
39
37
  selects: undefined | 'single';
40
- menuItems: MenuItem[];
41
- private restoreChildren?;
38
+ get menuItems(): MenuItem[];
42
39
  optionsMenu: Menu;
43
40
  /**
44
41
  * @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"}
@@ -47,9 +44,9 @@ export declare class PickerBase extends PickerBase_base {
47
44
  placement: Placement;
48
45
  quiet: boolean;
49
46
  value: string;
50
- selectedItem?: MenuItem;
51
- private closeOverlay?;
52
- private popoverEl;
47
+ get selectedItem(): MenuItem | undefined;
48
+ set selectedItem(selectedItem: MenuItem | undefined);
49
+ _selectedItem?: MenuItem;
53
50
  protected listRole: 'listbox' | 'menu';
54
51
  protected itemRole: string;
55
52
  constructor();
@@ -64,33 +61,24 @@ export declare class PickerBase extends PickerBase_base {
64
61
  protected onKeydown: (event: KeyboardEvent) => void;
65
62
  setValueFromItem(item: MenuItem, menuChangeEvent?: Event): Promise<void>;
66
63
  protected setMenuItemSelected(item: MenuItem, value: boolean): void;
64
+ private preventToggle;
67
65
  toggle(target?: boolean): void;
68
66
  close(): void;
69
- overlayOpenCallback: () => Promise<void>;
70
- overlayCloseCallback: () => Promise<void>;
71
- private popoverFragment;
72
- private generatePopover;
73
- private openMenu;
74
- protected sizePopover(popover: HTMLElement): void;
75
- private closeMenu;
67
+ protected get containerStyles(): StyleInfo;
76
68
  protected get selectedItemContent(): MenuItemChildren;
69
+ protected set selectedItemContent(selectedItemContent: MenuItemChildren | undefined);
70
+ _selectedItemContent?: MenuItemChildren;
77
71
  protected renderLabelContent(content: Node[]): TemplateResult | Node[];
78
72
  protected get buttonContent(): TemplateResult[];
73
+ protected get renderOverlay(): TemplateResult;
79
74
  protected render(): TemplateResult;
80
75
  protected update(changes: PropertyValues<this>): void;
81
76
  protected get dismissHelper(): TemplateResult;
82
- protected get renderPopover(): TemplateResult;
83
- private _willUpdateItems;
84
- protected itemsUpdated: Promise<void>;
85
- /**
86
- * Acquire the available MenuItems in the Picker by
87
- * direct element query or by assuming the list managed
88
- * by the Menu within the open options overlay.
89
- */
90
- protected updateMenuItems(event?: MenuItemAddedOrUpdatedEvent | MenuItemRemovedEvent): void;
77
+ protected get renderContainer(): TemplateResult;
78
+ private willManageSelection;
79
+ protected shouldScheduleManageSelection(event?: Event): void;
80
+ protected shouldManageSelection(): void;
91
81
  protected manageSelection(): Promise<void>;
92
- private menuStatePromise;
93
- private menuStateResolver;
94
82
  private selectionPromise;
95
83
  private selectionResolver;
96
84
  protected getUpdateComplete(): Promise<boolean>;
@@ -99,6 +87,7 @@ export declare class PickerBase extends PickerBase_base {
99
87
  }
100
88
  export declare class Picker extends PickerBase {
101
89
  static get styles(): CSSResultArray;
90
+ protected get containerStyles(): StyleInfo;
102
91
  protected onKeydown: (event: KeyboardEvent) => void;
103
92
  }
104
93
  export {};
package/src/Picker.dev.js CHANGED
@@ -13,10 +13,12 @@ var __decorateClass = (decorators, target, key, kind) => {
13
13
  import {
14
14
  html,
15
15
  nothing,
16
- render,
17
16
  SizedMixin
18
17
  } from "@spectrum-web-components/base";
19
- import { classMap } from "@spectrum-web-components/base/src/directives.js";
18
+ import {
19
+ classMap,
20
+ styleMap
21
+ } from "@spectrum-web-components/base/src/directives.js";
20
22
  import {
21
23
  property,
22
24
  query
@@ -24,15 +26,12 @@ import {
24
26
  import pickerStyles from "./picker.css.js";
25
27
  import chevronStyles from "@spectrum-web-components/icon/src/spectrum-icon-chevron.css.js";
26
28
  import { Focusable } from "@spectrum-web-components/shared/src/focusable.js";
27
- import { reparentChildren } from "@spectrum-web-components/shared/src/reparent-children.js";
28
29
  import "@spectrum-web-components/icons-ui/icons/sp-icon-chevron100.js";
29
30
  import "@spectrum-web-components/icons-workflow/icons/sp-icon-alert.js";
31
+ import "@spectrum-web-components/overlay/sp-overlay.js";
30
32
  import "@spectrum-web-components/menu/sp-menu.js";
31
33
  import "@spectrum-web-components/tray/sp-tray.js";
32
34
  import "@spectrum-web-components/popover/sp-popover.js";
33
- import {
34
- openOverlay
35
- } from "@spectrum-web-components/overlay";
36
35
  import {
37
36
  IS_MOBILE,
38
37
  MatchMediaController
@@ -53,7 +52,6 @@ export class PickerBase extends SizedMixin(Focusable) {
53
52
  this.open = false;
54
53
  this.readonly = false;
55
54
  this.selects = "single";
56
- this.menuItems = [];
57
55
  this.placement = "bottom-start";
58
56
  this.quiet = false;
59
57
  this.value = "";
@@ -67,29 +65,34 @@ export class PickerBase extends SizedMixin(Focusable) {
67
65
  event.preventDefault();
68
66
  this.toggle(true);
69
67
  };
70
- this.overlayOpenCallback = async () => {
71
- this.updateMenuItems();
72
- await this.itemsUpdated;
73
- await this.optionsMenu.updateComplete;
74
- requestAnimationFrame(() => this.menuStateResolver());
75
- };
76
- this.overlayCloseCallback = async () => {
77
- if (this.restoreChildren) {
78
- this.restoreChildren();
79
- this.restoreChildren = void 0;
80
- }
81
- this.close();
82
- requestAnimationFrame(() => this.menuStateResolver());
83
- };
84
- this._willUpdateItems = false;
85
- this.itemsUpdated = Promise.resolve();
86
- this.menuStatePromise = Promise.resolve();
68
+ this.preventToggle = false;
69
+ this.willManageSelection = false;
87
70
  this.selectionPromise = Promise.resolve();
88
71
  this.onKeydown = this.onKeydown.bind(this);
72
+ this.addEventListener("focusout", (event) => {
73
+ if (event.relatedTarget && this.contains(event.relatedTarget) || event.target !== this) {
74
+ return;
75
+ }
76
+ this.open = false;
77
+ });
89
78
  }
90
79
  get target() {
91
80
  return this.button;
92
81
  }
82
+ get menuItems() {
83
+ return this.optionsMenu.childItems;
84
+ }
85
+ get selectedItem() {
86
+ return this._selectedItem;
87
+ }
88
+ set selectedItem(selectedItem) {
89
+ this.selectedItemContent = selectedItem ? selectedItem.itemChildren : void 0;
90
+ if (selectedItem === this.selectedItem)
91
+ return;
92
+ const oldSelectedItem = this.selectedItem;
93
+ this._selectedItem = selectedItem;
94
+ this.requestUpdate("selectedItem", oldSelectedItem);
95
+ }
93
96
  get focusElement() {
94
97
  if (this.open) {
95
98
  return this.optionsMenu;
@@ -128,20 +131,22 @@ export class PickerBase extends SizedMixin(Focusable) {
128
131
  handleChange(event) {
129
132
  const target = event.target;
130
133
  const [selected] = target.selectedItems;
134
+ event.stopPropagation();
131
135
  if (event.cancelable) {
132
- event.stopPropagation();
133
136
  this.setValueFromItem(selected, event);
134
137
  } else {
135
138
  this.open = false;
136
139
  }
137
140
  }
138
141
  async setValueFromItem(item, menuChangeEvent) {
142
+ this.open = false;
139
143
  const oldSelectedItem = this.selectedItem;
140
144
  const oldValue = this.value;
141
- this.selectedItem = item;
142
- this.value = item.value;
143
- this.open = false;
144
- await this.updateComplete;
145
+ if (this.selects) {
146
+ this.selectedItem = item;
147
+ this.value = item.value;
148
+ await this.updateComplete;
149
+ }
145
150
  const applyDefault = this.dispatchEvent(
146
151
  new Event("change", {
147
152
  bubbles: true,
@@ -149,7 +154,7 @@ export class PickerBase extends SizedMixin(Focusable) {
149
154
  composed: true
150
155
  })
151
156
  );
152
- if (!applyDefault) {
157
+ if (!applyDefault && this.selects) {
153
158
  if (menuChangeEvent) {
154
159
  menuChangeEvent.preventDefault();
155
160
  }
@@ -173,6 +178,8 @@ export class PickerBase extends SizedMixin(Focusable) {
173
178
  item.selected = value;
174
179
  }
175
180
  toggle(target) {
181
+ if (this.preventToggle)
182
+ return;
176
183
  if (this.readonly) {
177
184
  return;
178
185
  }
@@ -184,77 +191,23 @@ export class PickerBase extends SizedMixin(Focusable) {
184
191
  }
185
192
  this.open = false;
186
193
  }
187
- async generatePopover() {
188
- if (!this.popoverFragment) {
189
- this.popoverFragment = document.createDocumentFragment();
190
- }
191
- render(this.renderPopover, this.popoverFragment, { host: this });
192
- this.popoverEl = this.popoverFragment.children[0];
193
- this.optionsMenu = this.popoverEl.children[1];
194
- }
195
- async openMenu() {
196
- let reparentableChildren = [];
197
- const deprecatedMenu = this.querySelector(":scope > sp-menu");
198
- await this.generatePopover();
199
- if (deprecatedMenu) {
200
- reparentableChildren = Array.from(deprecatedMenu.children);
201
- } else {
202
- reparentableChildren = Array.from(this.children).filter(
203
- (element) => {
204
- return !element.hasAttribute("slot");
205
- }
206
- );
207
- }
208
- if (reparentableChildren.length === 0) {
209
- this.menuStateResolver();
210
- return;
211
- }
212
- this.restoreChildren = reparentChildren(reparentableChildren, this.optionsMenu, {
213
- position: "beforeend",
214
- prepareCallback: (el) => {
215
- if (this.value === el.value) {
216
- this.setMenuItemSelected(el, true);
217
- }
218
- return (el2) => {
219
- if (typeof el2.focused !== "undefined") {
220
- el2.focused = false;
221
- }
222
- };
223
- }
224
- });
225
- this.sizePopover(this.popoverEl);
226
- if (true) {
227
- window.__swc.ignoreWarningLevels.deprecation = true;
228
- }
229
- this.closeOverlay = Picker.openOverlay(this, "modal", this.popoverEl, {
230
- placement: this.isMobile.matches ? "none" : this.placement,
231
- receivesFocus: "auto"
232
- });
233
- if (true) {
234
- window.__swc.ignoreWarningLevels.deprecation = false;
235
- }
236
- }
237
- sizePopover(popover) {
194
+ get containerStyles() {
238
195
  if (this.isMobile.matches) {
239
- popover.style.setProperty("--swc-menu-width", `100%`);
240
- return;
241
- }
242
- if (this.quiet)
243
- return;
244
- popover.style.setProperty("min-width", `${this.offsetWidth}px`);
245
- }
246
- async closeMenu() {
247
- if (this.closeOverlay) {
248
- const closeOverlay = this.closeOverlay;
249
- delete this.closeOverlay;
250
- (await closeOverlay)();
196
+ return {
197
+ "--swc-menu-width": "100%"
198
+ };
251
199
  }
200
+ return {};
252
201
  }
253
202
  get selectedItemContent() {
254
- if (this.selectedItem) {
255
- return this.selectedItem.itemChildren;
256
- }
257
- return { icon: [], content: [] };
203
+ return this._selectedItemContent || { icon: [], content: [] };
204
+ }
205
+ set selectedItemContent(selectedItemContent) {
206
+ if (selectedItemContent === this.selectedItemContent)
207
+ return;
208
+ const oldContent = this.selectedItemContent;
209
+ this._selectedItemContent = selectedItemContent;
210
+ this.requestUpdate("selectedItemContent", oldContent);
258
211
  }
259
212
  renderLabelContent(content) {
260
213
  if (this.value && this.selectedItem) {
@@ -288,13 +241,39 @@ export class PickerBase extends SizedMixin(Focusable) {
288
241
  `
289
242
  ];
290
243
  }
244
+ get renderOverlay() {
245
+ return html`
246
+ <sp-overlay
247
+ .triggerElement=${this}
248
+ .offset=${0}
249
+ ?open=${this.open}
250
+ .placement=${this.placement}
251
+ type="auto"
252
+ @beforetoggle=${(event) => {
253
+ this.open = event.target.open;
254
+ if (!this.open) {
255
+ this.preventToggle = true;
256
+ requestAnimationFrame(
257
+ () => this.preventToggle = false
258
+ );
259
+ this.optionsMenu.updateSelectedItemIndex();
260
+ this.optionsMenu.closeDescendentOverlays();
261
+ } else {
262
+ this.optionsMenu.focus();
263
+ }
264
+ }}
265
+ >
266
+ ${this.renderContainer}
267
+ </sp-overlay>
268
+ `;
269
+ }
291
270
  // a helper to throw focus to the button is needed because Safari
292
271
  // won't include buttons in the tab order even with tabindex="0"
293
272
  render() {
294
273
  return html`
295
274
  <span
296
275
  id="focus-helper"
297
- tabindex="${this.focused ? "-1" : "0"}"
276
+ tabindex="${this.focused || this.open ? "-1" : "0"}"
298
277
  @focus=${this.onHelperFocus}
299
278
  ></span>
300
279
  <button
@@ -311,6 +290,7 @@ export class PickerBase extends SizedMixin(Focusable) {
311
290
  >
312
291
  ${this.buttonContent}
313
292
  </button>
293
+ ${this.renderOverlay}
314
294
  `;
315
295
  }
316
296
  update(changes) {
@@ -320,18 +300,8 @@ export class PickerBase extends SizedMixin(Focusable) {
320
300
  if (changes.has("disabled") && this.disabled) {
321
301
  this.open = false;
322
302
  }
323
- if (changes.has("open") && (this.open || typeof changes.get("open") !== "undefined")) {
324
- this.menuStatePromise = new Promise(
325
- (res) => this.menuStateResolver = res
326
- );
327
- if (this.open) {
328
- this.openMenu();
329
- } else {
330
- this.closeMenu();
331
- }
332
- }
333
- if (changes.has("value") && !changes.has("selectedItem")) {
334
- this.updateMenuItems();
303
+ if (changes.has("value")) {
304
+ this.shouldScheduleManageSelection();
335
305
  }
336
306
  if (true) {
337
307
  if (!this.hasUpdated && this.querySelector("sp-menu")) {
@@ -357,7 +327,7 @@ export class PickerBase extends SizedMixin(Focusable) {
357
327
  </div>
358
328
  `;
359
329
  }
360
- get renderPopover() {
330
+ get renderContainer() {
361
331
  const content = html`
362
332
  ${this.dismissHelper}
363
333
  <sp-menu
@@ -365,7 +335,11 @@ export class PickerBase extends SizedMixin(Focusable) {
365
335
  role="${this.listRole}"
366
336
  @change=${this.handleChange}
367
337
  .selects=${this.selects}
368
- ></sp-menu>
338
+ .selected=${this.value ? [this.value] : []}
339
+ @sp-menu-item-added-or-updated=${this.shouldManageSelection}
340
+ >
341
+ <slot @slotchange=${this.shouldScheduleManageSelection}></slot>
342
+ </sp-menu>
369
343
  ${this.dismissHelper}
370
344
  `;
371
345
  if (this.isMobile.matches) {
@@ -373,9 +347,7 @@ export class PickerBase extends SizedMixin(Focusable) {
373
347
  <sp-tray
374
348
  id="popover"
375
349
  role="dialog"
376
- @sp-menu-item-added-or-updated=${this.updateMenuItems}
377
- .overlayOpenCallback=${this.overlayOpenCallback}
378
- .overlayCloseCallback=${this.overlayCloseCallback}
350
+ style=${styleMap(this.containerStyles)}
379
351
  >
380
352
  ${content}
381
353
  </sp-tray>
@@ -385,56 +357,38 @@ export class PickerBase extends SizedMixin(Focusable) {
385
357
  <sp-popover
386
358
  id="popover"
387
359
  role="dialog"
388
- @sp-menu-item-added-or-updated=${this.updateMenuItems}
389
- .overlayOpenCallback=${this.overlayOpenCallback}
390
- .overlayCloseCallback=${this.overlayCloseCallback}
360
+ style=${styleMap(this.containerStyles)}
361
+ placement=${this.placement}
391
362
  >
392
363
  ${content}
393
364
  </sp-popover>
394
365
  `;
395
366
  }
396
- /**
397
- * Acquire the available MenuItems in the Picker by
398
- * direct element query or by assuming the list managed
399
- * by the Menu within the open options overlay.
400
- */
401
- updateMenuItems(event) {
402
- if (this.open && (event == null ? void 0 : event.type) === "sp-menu-item-removed")
403
- return;
404
- if (this._willUpdateItems)
405
- return;
406
- this._willUpdateItems = true;
407
- if ((event == null ? void 0 : event.item) === this.selectedItem) {
408
- this.requestUpdate();
367
+ shouldScheduleManageSelection(event) {
368
+ if (!this.willManageSelection && (!event || event.target.getRootNode().host === this)) {
369
+ this.willManageSelection = true;
370
+ requestAnimationFrame(() => {
371
+ requestAnimationFrame(() => {
372
+ this.manageSelection();
373
+ });
374
+ });
409
375
  }
410
- let resolve = () => {
376
+ }
377
+ shouldManageSelection() {
378
+ if (this.willManageSelection) {
411
379
  return;
412
- };
413
- this.itemsUpdated = new Promise((res) => resolve = res);
414
- window.requestAnimationFrame(async () => {
415
- if (this.open) {
416
- await this.optionsMenu.updateComplete;
417
- this.menuItems = this.optionsMenu.childItems;
418
- } else {
419
- this.menuItems = [
420
- ...this.querySelectorAll(
421
- 'sp-menu-item:not([slot="submenu"] *)'
422
- )
423
- ];
424
- }
425
- this.manageSelection();
426
- resolve();
427
- this._willUpdateItems = false;
428
- });
380
+ }
381
+ this.willManageSelection = true;
382
+ this.manageSelection();
429
383
  }
430
384
  async manageSelection() {
431
385
  if (this.selects == null)
432
386
  return;
433
- await this.menuStatePromise;
434
387
  this.selectionPromise = new Promise(
435
388
  (res) => this.selectionResolver = res
436
389
  );
437
390
  let selectedItem;
391
+ await this.optionsMenu.updateComplete;
438
392
  this.menuItems.forEach((item) => {
439
393
  if (this.value === item.value && !item.disabled) {
440
394
  selectedItem = item;
@@ -454,21 +408,14 @@ export class PickerBase extends SizedMixin(Focusable) {
454
408
  this.optionsMenu.updateSelectedItemIndex();
455
409
  }
456
410
  this.selectionResolver();
411
+ this.willManageSelection = false;
457
412
  }
458
413
  async getUpdateComplete() {
459
414
  const complete = await super.getUpdateComplete();
460
- await this.menuStatePromise;
461
- await this.itemsUpdated;
462
415
  await this.selectionPromise;
463
416
  return complete;
464
417
  }
465
418
  connectedCallback() {
466
- this.updateMenuItems();
467
- this.addEventListener(
468
- "sp-menu-item-added-or-updated",
469
- this.updateMenuItems
470
- );
471
- this.addEventListener("sp-menu-item-removed", this.updateMenuItems);
472
419
  super.connectedCallback();
473
420
  }
474
421
  disconnectedCallback() {
@@ -476,12 +423,6 @@ export class PickerBase extends SizedMixin(Focusable) {
476
423
  super.disconnectedCallback();
477
424
  }
478
425
  }
479
- /**
480
- * @private
481
- */
482
- PickerBase.openOverlay = async (target, interaction, content, options) => {
483
- return await openOverlay(target, interaction, content, options);
484
- };
485
426
  __decorateClass([
486
427
  query("#button")
487
428
  ], PickerBase.prototype, "button", 2);
@@ -506,6 +447,9 @@ __decorateClass([
506
447
  __decorateClass([
507
448
  property({ type: Boolean, reflect: true })
508
449
  ], PickerBase.prototype, "readonly", 2);
450
+ __decorateClass([
451
+ query("sp-menu")
452
+ ], PickerBase.prototype, "optionsMenu", 2);
509
453
  __decorateClass([
510
454
  property()
511
455
  ], PickerBase.prototype, "placement", 2);
@@ -517,7 +461,10 @@ __decorateClass([
517
461
  ], PickerBase.prototype, "value", 2);
518
462
  __decorateClass([
519
463
  property({ attribute: false })
520
- ], PickerBase.prototype, "selectedItem", 2);
464
+ ], PickerBase.prototype, "selectedItem", 1);
465
+ __decorateClass([
466
+ property({ attribute: false })
467
+ ], PickerBase.prototype, "selectedItemContent", 1);
521
468
  export class Picker extends PickerBase {
522
469
  constructor() {
523
470
  super(...arguments);
@@ -549,5 +496,12 @@ export class Picker extends PickerBase {
549
496
  static get styles() {
550
497
  return [pickerStyles, chevronStyles];
551
498
  }
499
+ get containerStyles() {
500
+ const styles = super.containerStyles;
501
+ if (!this.quiet) {
502
+ styles["min-width"] = `${this.offsetWidth}px`;
503
+ }
504
+ return styles;
505
+ }
552
506
  }
553
507
  //# sourceMappingURL=Picker.dev.js.map