@spectrum-web-components/picker 0.33.2 → 0.33.3-overlay.66

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/src/Picker.d.ts CHANGED
@@ -1,22 +1,20 @@
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;
13
15
  prototype: import("@spectrum-web-components/base").SizedElementInterface;
14
16
  };
15
17
  export declare class PickerBase extends PickerBase_base {
16
- /**
17
- * @private
18
- */
19
- static openOverlay: (target: HTMLElement, interaction: TriggerInteractions, content: HTMLElement, options: OverlayOptions) => Promise<() => void>;
20
18
  protected isMobile: MatchMediaController;
21
19
  button: HTMLButtonElement;
22
20
  get target(): HTMLButtonElement | this;
@@ -28,8 +26,7 @@ export declare class PickerBase extends PickerBase_base {
28
26
  open: boolean;
29
27
  readonly: boolean;
30
28
  selects: undefined | 'single';
31
- menuItems: MenuItem[];
32
- private restoreChildren?;
29
+ get menuItems(): MenuItem[];
33
30
  optionsMenu: Menu;
34
31
  /**
35
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" | "none"}
@@ -38,15 +35,17 @@ export declare class PickerBase extends PickerBase_base {
38
35
  placement: Placement;
39
36
  quiet: boolean;
40
37
  value: string;
41
- selectedItem?: MenuItem;
42
- private closeOverlay?;
43
- private popoverEl;
38
+ get selectedItem(): MenuItem | undefined;
39
+ set selectedItem(selectedItem: MenuItem | undefined);
40
+ _selectedItem?: MenuItem;
44
41
  protected listRole: 'listbox' | 'menu';
45
42
  protected itemRole: string;
46
43
  constructor();
47
44
  get focusElement(): HTMLElement;
48
45
  forceFocusVisible(): void;
49
46
  onButtonBlur(): void;
47
+ private preventNextToggle;
48
+ protected handlePointerdown(): void;
50
49
  protected onButtonClick(): void;
51
50
  focus(options?: FocusOptions): void;
52
51
  onHelperFocus(): void;
@@ -57,34 +56,25 @@ export declare class PickerBase extends PickerBase_base {
57
56
  protected setMenuItemSelected(item: MenuItem, value: boolean): void;
58
57
  toggle(target?: boolean): void;
59
58
  close(): void;
60
- overlayOpenCallback: () => Promise<void>;
61
- overlayCloseCallback: () => Promise<void>;
62
- private popoverFragment;
63
- private generatePopover;
64
- private openMenu;
65
- protected sizePopover(popover: HTMLElement): void;
66
- private closeMenu;
59
+ protected get containerStyles(): StyleInfo;
67
60
  protected get selectedItemContent(): MenuItemChildren;
61
+ protected set selectedItemContent(selectedItemContent: MenuItemChildren | undefined);
62
+ _selectedItemContent?: MenuItemChildren;
68
63
  protected renderLabelContent(content: Node[]): TemplateResult | Node[];
69
64
  protected get buttonContent(): TemplateResult[];
65
+ protected get renderOverlay(): TemplateResult;
70
66
  protected render(): TemplateResult;
71
67
  protected update(changes: PropertyValues<this>): void;
72
68
  protected get dismissHelper(): TemplateResult;
73
- protected get renderPopover(): TemplateResult;
74
- private _willUpdateItems;
75
- protected itemsUpdated: Promise<void>;
76
- /**
77
- * Acquire the available MenuItems in the Picker by
78
- * direct element query or by assuming the list managed
79
- * by the Menu within the open options overlay.
80
- */
81
- protected updateMenuItems(event?: MenuItemAddedOrUpdatedEvent | MenuItemRemovedEvent): void;
69
+ protected get renderContainer(): TemplateResult;
70
+ private willManageSelection;
71
+ protected shouldScheduleManageSelection(event?: Event): void;
72
+ protected shouldManageSelection(): void;
82
73
  protected manageSelection(): Promise<void>;
83
- private menuStatePromise;
84
- private menuStateResolver;
85
74
  private selectionPromise;
86
75
  private selectionResolver;
87
76
  protected getUpdateComplete(): Promise<boolean>;
77
+ private recentlyConnected;
88
78
  connectedCallback(): void;
89
79
  disconnectedCallback(): void;
90
80
  }
@@ -99,7 +89,7 @@ export declare class PickerBase extends PickerBase_base {
99
89
  */
100
90
  export declare class Picker extends PickerBase {
101
91
  static get styles(): CSSResultArray;
102
- protected sizePopover(popover: HTMLElement): void;
92
+ protected get containerStyles(): StyleInfo;
103
93
  protected onKeydown: (event: KeyboardEvent) => void;
104
94
  }
105
95
  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,12 +52,12 @@ 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 = "";
60
58
  this.listRole = "listbox";
61
59
  this.itemRole = "option";
60
+ this.preventNextToggle = false;
62
61
  this.onKeydown = (event) => {
63
62
  this.focused = true;
64
63
  if (event.code !== "ArrowDown" && event.code !== "ArrowUp") {
@@ -67,29 +66,34 @@ export class PickerBase extends SizedMixin(Focusable) {
67
66
  event.preventDefault();
68
67
  this.toggle(true);
69
68
  };
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();
69
+ this.willManageSelection = false;
87
70
  this.selectionPromise = Promise.resolve();
71
+ this.recentlyConnected = false;
88
72
  this.onKeydown = this.onKeydown.bind(this);
73
+ this.addEventListener("focusout", (event) => {
74
+ if (event.relatedTarget && this.contains(event.relatedTarget) || event.target !== this) {
75
+ return;
76
+ }
77
+ this.open = false;
78
+ });
89
79
  }
90
80
  get target() {
91
81
  return this.button;
92
82
  }
83
+ get menuItems() {
84
+ return this.optionsMenu.childItems;
85
+ }
86
+ get selectedItem() {
87
+ return this._selectedItem;
88
+ }
89
+ set selectedItem(selectedItem) {
90
+ this.selectedItemContent = selectedItem ? selectedItem.itemChildren : void 0;
91
+ if (selectedItem === this.selectedItem)
92
+ return;
93
+ const oldSelectedItem = this.selectedItem;
94
+ this._selectedItem = selectedItem;
95
+ this.requestUpdate("selectedItem", oldSelectedItem);
96
+ }
93
97
  get focusElement() {
94
98
  if (this.open) {
95
99
  return this.optionsMenu;
@@ -106,8 +110,14 @@ export class PickerBase extends SizedMixin(Focusable) {
106
110
  this.onKeydown
107
111
  );
108
112
  }
113
+ handlePointerdown() {
114
+ this.preventNextToggle = this.open;
115
+ }
109
116
  onButtonClick() {
110
- this.toggle();
117
+ if (!this.preventNextToggle) {
118
+ this.toggle();
119
+ }
120
+ this.preventNextToggle = false;
111
121
  }
112
122
  focus(options) {
113
123
  super.focus(options);
@@ -128,20 +138,22 @@ export class PickerBase extends SizedMixin(Focusable) {
128
138
  handleChange(event) {
129
139
  const target = event.target;
130
140
  const [selected] = target.selectedItems;
141
+ event.stopPropagation();
131
142
  if (event.cancelable) {
132
- event.stopPropagation();
133
143
  this.setValueFromItem(selected, event);
134
144
  } else {
135
145
  this.open = false;
136
146
  }
137
147
  }
138
148
  async setValueFromItem(item, menuChangeEvent) {
149
+ this.open = false;
139
150
  const oldSelectedItem = this.selectedItem;
140
151
  const oldValue = this.value;
141
- this.selectedItem = item;
142
- this.value = item.value;
143
- this.open = false;
144
- await this.updateComplete;
152
+ if (this.selects) {
153
+ this.selectedItem = item;
154
+ this.value = item.value;
155
+ await this.updateComplete;
156
+ }
145
157
  const applyDefault = this.dispatchEvent(
146
158
  new Event("change", {
147
159
  bubbles: true,
@@ -149,7 +161,7 @@ export class PickerBase extends SizedMixin(Focusable) {
149
161
  composed: true
150
162
  })
151
163
  );
152
- if (!applyDefault) {
164
+ if (!applyDefault && this.selects) {
153
165
  if (menuChangeEvent) {
154
166
  menuChangeEvent.preventDefault();
155
167
  }
@@ -184,74 +196,23 @@ export class PickerBase extends SizedMixin(Focusable) {
184
196
  }
185
197
  this.open = false;
186
198
  }
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) {
199
+ get containerStyles() {
238
200
  if (this.isMobile.matches) {
239
- popover.style.setProperty("--swc-menu-width", `100%`);
240
- return;
241
- }
242
- }
243
- async closeMenu() {
244
- if (this.closeOverlay) {
245
- const closeOverlay = this.closeOverlay;
246
- delete this.closeOverlay;
247
- (await closeOverlay)();
201
+ return {
202
+ "--swc-menu-width": "100%"
203
+ };
248
204
  }
205
+ return {};
249
206
  }
250
207
  get selectedItemContent() {
251
- if (this.selectedItem) {
252
- return this.selectedItem.itemChildren;
253
- }
254
- return { icon: [], content: [] };
208
+ return this._selectedItemContent || { icon: [], content: [] };
209
+ }
210
+ set selectedItemContent(selectedItemContent) {
211
+ if (selectedItemContent === this.selectedItemContent)
212
+ return;
213
+ const oldContent = this.selectedItemContent;
214
+ this._selectedItemContent = selectedItemContent;
215
+ this.requestUpdate("selectedItemContent", oldContent);
255
216
  }
256
217
  renderLabelContent(content) {
257
218
  if (this.value && this.selectedItem) {
@@ -285,13 +246,37 @@ export class PickerBase extends SizedMixin(Focusable) {
285
246
  `
286
247
  ];
287
248
  }
249
+ get renderOverlay() {
250
+ return html`
251
+ <sp-overlay
252
+ .triggerElement=${this}
253
+ .offset=${0}
254
+ ?open=${this.open}
255
+ .placement=${this.placement}
256
+ type="auto"
257
+ .receivesFocus=${"true"}
258
+ @beforetoggle=${(event) => {
259
+ if (event.composedPath()[0] !== event.target) {
260
+ return;
261
+ }
262
+ this.open = event.newState === "open";
263
+ if (!this.open) {
264
+ this.optionsMenu.updateSelectedItemIndex();
265
+ this.optionsMenu.closeDescendentOverlays();
266
+ }
267
+ }}
268
+ >
269
+ ${this.renderContainer}
270
+ </sp-overlay>
271
+ `;
272
+ }
288
273
  // a helper to throw focus to the button is needed because Safari
289
274
  // won't include buttons in the tab order even with tabindex="0"
290
275
  render() {
291
276
  return html`
292
277
  <span
293
278
  id="focus-helper"
294
- tabindex="${this.focused ? "-1" : "0"}"
279
+ tabindex="${this.focused || this.open ? "-1" : "0"}"
295
280
  @focus=${this.onHelperFocus}
296
281
  ></span>
297
282
  <button
@@ -303,11 +288,13 @@ export class PickerBase extends SizedMixin(Focusable) {
303
288
  @blur=${this.onButtonBlur}
304
289
  @click=${this.onButtonClick}
305
290
  @focus=${this.onButtonFocus}
291
+ @pointerdown=${this.handlePointerdown}
306
292
  ?disabled=${this.disabled}
307
293
  tabindex="-1"
308
294
  >
309
295
  ${this.buttonContent}
310
296
  </button>
297
+ ${this.renderOverlay}
311
298
  `;
312
299
  }
313
300
  update(changes) {
@@ -317,21 +304,15 @@ export class PickerBase extends SizedMixin(Focusable) {
317
304
  if (changes.has("disabled") && this.disabled) {
318
305
  this.open = false;
319
306
  }
320
- if (changes.has("open") && (this.open || typeof changes.get("open") !== "undefined")) {
321
- this.menuStatePromise = new Promise(
322
- (res) => this.menuStateResolver = res
323
- );
324
- if (this.open) {
325
- this.openMenu();
326
- } else {
327
- this.closeMenu();
328
- }
307
+ if (changes.has("value")) {
308
+ this.shouldScheduleManageSelection();
329
309
  }
330
- if (changes.has("value") && !changes.has("selectedItem")) {
331
- this.updateMenuItems();
310
+ if (!this.hasUpdated) {
311
+ const deprecatedMenu = this.querySelector(":scope > sp-menu");
312
+ deprecatedMenu == null ? void 0 : deprecatedMenu.setAttribute("selects", "inherit");
332
313
  }
333
314
  if (true) {
334
- if (!this.hasUpdated && this.querySelector("sp-menu")) {
315
+ if (!this.hasUpdated && this.querySelector(":scope > sp-menu")) {
335
316
  const { localName } = this;
336
317
  window.__swc.warn(
337
318
  this,
@@ -354,7 +335,7 @@ export class PickerBase extends SizedMixin(Focusable) {
354
335
  </div>
355
336
  `;
356
337
  }
357
- get renderPopover() {
338
+ get renderContainer() {
358
339
  const content = html`
359
340
  ${this.dismissHelper}
360
341
  <sp-menu
@@ -362,7 +343,11 @@ export class PickerBase extends SizedMixin(Focusable) {
362
343
  role="${this.listRole}"
363
344
  @change=${this.handleChange}
364
345
  .selects=${this.selects}
365
- ></sp-menu>
346
+ .selected=${this.value ? [this.value] : []}
347
+ @sp-menu-item-added-or-updated=${this.shouldManageSelection}
348
+ >
349
+ <slot @slotchange=${this.shouldScheduleManageSelection}></slot>
350
+ </sp-menu>
366
351
  ${this.dismissHelper}
367
352
  `;
368
353
  if (this.isMobile.matches) {
@@ -370,9 +355,7 @@ export class PickerBase extends SizedMixin(Focusable) {
370
355
  <sp-tray
371
356
  id="popover"
372
357
  role="dialog"
373
- @sp-menu-item-added-or-updated=${this.updateMenuItems}
374
- .overlayOpenCallback=${this.overlayOpenCallback}
375
- .overlayCloseCallback=${this.overlayCloseCallback}
358
+ style=${styleMap(this.containerStyles)}
376
359
  >
377
360
  ${content}
378
361
  </sp-tray>
@@ -382,56 +365,42 @@ export class PickerBase extends SizedMixin(Focusable) {
382
365
  <sp-popover
383
366
  id="popover"
384
367
  role="dialog"
385
- @sp-menu-item-added-or-updated=${this.updateMenuItems}
386
- .overlayOpenCallback=${this.overlayOpenCallback}
387
- .overlayCloseCallback=${this.overlayCloseCallback}
368
+ style=${styleMap(this.containerStyles)}
369
+ placement=${this.placement}
388
370
  >
389
371
  ${content}
390
372
  </sp-popover>
391
373
  `;
392
374
  }
393
- /**
394
- * Acquire the available MenuItems in the Picker by
395
- * direct element query or by assuming the list managed
396
- * by the Menu within the open options overlay.
397
- */
398
- updateMenuItems(event) {
399
- if (this.open && (event == null ? void 0 : event.type) === "sp-menu-item-removed")
400
- return;
401
- if (this._willUpdateItems)
402
- return;
403
- this._willUpdateItems = true;
404
- if ((event == null ? void 0 : event.item) === this.selectedItem) {
405
- this.requestUpdate();
375
+ shouldScheduleManageSelection(event) {
376
+ if (!this.willManageSelection && (!event || event.target.getRootNode().host === this)) {
377
+ this.willManageSelection = true;
378
+ requestAnimationFrame(() => {
379
+ requestAnimationFrame(() => {
380
+ this.manageSelection();
381
+ });
382
+ });
406
383
  }
407
- let resolve = () => {
384
+ }
385
+ shouldManageSelection() {
386
+ if (this.willManageSelection) {
408
387
  return;
409
- };
410
- this.itemsUpdated = new Promise((res) => resolve = res);
411
- window.requestAnimationFrame(async () => {
412
- if (this.open) {
413
- await this.optionsMenu.updateComplete;
414
- this.menuItems = this.optionsMenu.childItems;
415
- } else {
416
- this.menuItems = [
417
- ...this.querySelectorAll(
418
- 'sp-menu-item:not([slot="submenu"] *)'
419
- )
420
- ];
421
- }
422
- this.manageSelection();
423
- resolve();
424
- this._willUpdateItems = false;
425
- });
388
+ }
389
+ this.willManageSelection = true;
390
+ this.manageSelection();
426
391
  }
427
392
  async manageSelection() {
428
393
  if (this.selects == null)
429
394
  return;
430
- await this.menuStatePromise;
431
395
  this.selectionPromise = new Promise(
432
396
  (res) => this.selectionResolver = res
433
397
  );
434
398
  let selectedItem;
399
+ await this.optionsMenu.updateComplete;
400
+ if (this.recentlyConnected) {
401
+ await new Promise((res) => requestAnimationFrame(() => res(true)));
402
+ this.recentlyConnected = false;
403
+ }
435
404
  this.menuItems.forEach((item) => {
436
405
  if (this.value === item.value && !item.disabled) {
437
406
  selectedItem = item;
@@ -451,34 +420,22 @@ export class PickerBase extends SizedMixin(Focusable) {
451
420
  this.optionsMenu.updateSelectedItemIndex();
452
421
  }
453
422
  this.selectionResolver();
423
+ this.willManageSelection = false;
454
424
  }
455
425
  async getUpdateComplete() {
456
426
  const complete = await super.getUpdateComplete();
457
- await this.menuStatePromise;
458
- await this.itemsUpdated;
459
427
  await this.selectionPromise;
460
428
  return complete;
461
429
  }
462
430
  connectedCallback() {
463
- this.updateMenuItems();
464
- this.addEventListener(
465
- "sp-menu-item-added-or-updated",
466
- this.updateMenuItems
467
- );
468
- this.addEventListener("sp-menu-item-removed", this.updateMenuItems);
469
431
  super.connectedCallback();
432
+ this.recentlyConnected = this.hasUpdated;
470
433
  }
471
434
  disconnectedCallback() {
472
435
  this.close();
473
436
  super.disconnectedCallback();
474
437
  }
475
438
  }
476
- /**
477
- * @private
478
- */
479
- PickerBase.openOverlay = async (target, interaction, content, options) => {
480
- return await openOverlay(target, interaction, content, options);
481
- };
482
439
  __decorateClass([
483
440
  query("#button")
484
441
  ], PickerBase.prototype, "button", 2);
@@ -503,6 +460,9 @@ __decorateClass([
503
460
  __decorateClass([
504
461
  property({ type: Boolean, reflect: true })
505
462
  ], PickerBase.prototype, "readonly", 2);
463
+ __decorateClass([
464
+ query("sp-menu")
465
+ ], PickerBase.prototype, "optionsMenu", 2);
506
466
  __decorateClass([
507
467
  property()
508
468
  ], PickerBase.prototype, "placement", 2);
@@ -514,7 +474,10 @@ __decorateClass([
514
474
  ], PickerBase.prototype, "value", 2);
515
475
  __decorateClass([
516
476
  property({ attribute: false })
517
- ], PickerBase.prototype, "selectedItem", 2);
477
+ ], PickerBase.prototype, "selectedItem", 1);
478
+ __decorateClass([
479
+ property({ attribute: false })
480
+ ], PickerBase.prototype, "selectedItemContent", 1);
518
481
  export class Picker extends PickerBase {
519
482
  constructor() {
520
483
  super(...arguments);
@@ -546,11 +509,12 @@ export class Picker extends PickerBase {
546
509
  static get styles() {
547
510
  return [pickerStyles, chevronStyles];
548
511
  }
549
- sizePopover(popover) {
550
- super.sizePopover(popover);
551
- if (this.quiet)
552
- return;
553
- popover.style.setProperty("min-width", `${this.offsetWidth}px`);
512
+ get containerStyles() {
513
+ const styles = super.containerStyles;
514
+ if (!this.quiet) {
515
+ styles["min-width"] = `${this.offsetWidth}px`;
516
+ }
517
+ return styles;
554
518
  }
555
519
  }
556
520
  //# sourceMappingURL=Picker.dev.js.map