@vaadin/multi-select-combo-box 24.3.0-alpha9 → 24.3.0-beta2

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": "@vaadin/multi-select-combo-box",
3
- "version": "24.3.0-alpha9",
3
+ "version": "24.3.0-beta2",
4
4
  "publishConfig": {
5
5
  "access": "public"
6
6
  },
@@ -37,17 +37,17 @@
37
37
  ],
38
38
  "dependencies": {
39
39
  "@polymer/polymer": "^3.0.0",
40
- "@vaadin/a11y-base": "24.3.0-alpha9",
41
- "@vaadin/combo-box": "24.3.0-alpha9",
42
- "@vaadin/component-base": "24.3.0-alpha9",
43
- "@vaadin/field-base": "24.3.0-alpha9",
44
- "@vaadin/input-container": "24.3.0-alpha9",
45
- "@vaadin/item": "24.3.0-alpha9",
46
- "@vaadin/lit-renderer": "24.3.0-alpha9",
47
- "@vaadin/overlay": "24.3.0-alpha9",
48
- "@vaadin/vaadin-lumo-styles": "24.3.0-alpha9",
49
- "@vaadin/vaadin-material-styles": "24.3.0-alpha9",
50
- "@vaadin/vaadin-themable-mixin": "24.3.0-alpha9"
40
+ "@vaadin/a11y-base": "24.3.0-beta2",
41
+ "@vaadin/combo-box": "24.3.0-beta2",
42
+ "@vaadin/component-base": "24.3.0-beta2",
43
+ "@vaadin/field-base": "24.3.0-beta2",
44
+ "@vaadin/input-container": "24.3.0-beta2",
45
+ "@vaadin/item": "24.3.0-beta2",
46
+ "@vaadin/lit-renderer": "24.3.0-beta2",
47
+ "@vaadin/overlay": "24.3.0-beta2",
48
+ "@vaadin/vaadin-lumo-styles": "24.3.0-beta2",
49
+ "@vaadin/vaadin-material-styles": "24.3.0-beta2",
50
+ "@vaadin/vaadin-themable-mixin": "24.3.0-beta2"
51
51
  },
52
52
  "devDependencies": {
53
53
  "@esm-bundle/chai": "^4.3.4",
@@ -59,5 +59,5 @@
59
59
  "web-types.json",
60
60
  "web-types.lit.json"
61
61
  ],
62
- "gitHead": "ea39f40613cb73b237d08d4c48b890ee7d1844cb"
62
+ "gitHead": "0bbfb24cb8dcd6e1dca8ecf2269635efac53e4d0"
63
63
  }
@@ -15,7 +15,7 @@ registerStyles(
15
15
  width: 100%;
16
16
  }
17
17
 
18
- :host([all-chips-visible]) #wrapper {
18
+ :host([auto-expand-vertically]) #wrapper {
19
19
  flex-wrap: wrap;
20
20
  }
21
21
  `,
@@ -57,11 +57,12 @@ class MultiSelectComboBoxContainer extends InputContainer {
57
57
  static get properties() {
58
58
  return {
59
59
  /**
60
- * Set true to not collapse selected items chips into the overflow
61
- * chip and instead always show them, causing input field to grow.
62
- * @attr {boolean} all-chips-visible
60
+ * Set to true to not collapse selected items chips into the overflow
61
+ * chip and instead always expand vertically, causing input field to
62
+ * wrap into multiple lines when width is limited.
63
+ * @attr {boolean} auto-expand-vertically
63
64
  */
64
- allChipsVisible: {
65
+ autoExpandVertically: {
65
66
  type: Boolean,
66
67
  reflectToAttribute: true,
67
68
  },
@@ -60,15 +60,6 @@ class MultiSelectComboBoxInternal extends ComboBoxDataProviderMixin(ComboBoxMixi
60
60
  notify: true,
61
61
  },
62
62
 
63
- /**
64
- * Set to true to group selected items at the top of the overlay.
65
- * @attr {boolean} group-selected-items
66
- */
67
- groupSelectedItems: {
68
- type: Boolean,
69
- value: false,
70
- },
71
-
72
63
  /**
73
64
  * When set to `true`, "loading" attribute is set
74
65
  * on the host and the overlay element.
@@ -97,6 +88,15 @@ class MultiSelectComboBoxInternal extends ComboBoxDataProviderMixin(ComboBoxMixi
97
88
  value: () => [],
98
89
  },
99
90
 
91
+ /**
92
+ * Set to true to group selected items at the top of the overlay.
93
+ * @attr {boolean} selected-items-on-top
94
+ */
95
+ selectedItemsOnTop: {
96
+ type: Boolean,
97
+ value: false,
98
+ },
99
+
100
100
  /**
101
101
  * Last input value entered by the user before value is updated.
102
102
  * Used to store `filter` property value before clearing it.
@@ -165,7 +165,12 @@ class MultiSelectComboBoxInternal extends ComboBoxDataProviderMixin(ComboBoxMixi
165
165
  * @override
166
166
  */
167
167
  _setDropdownItems(items) {
168
- if (this.filter || this.readonly || !this.groupSelectedItems) {
168
+ if (this.readonly) {
169
+ this._dropdownItems = this.selectedItems;
170
+ return;
171
+ }
172
+
173
+ if (this.filter || !this.selectedItemsOnTop) {
169
174
  this._dropdownItems = items;
170
175
  return;
171
176
  }
@@ -173,7 +178,7 @@ class MultiSelectComboBoxInternal extends ComboBoxDataProviderMixin(ComboBoxMixi
173
178
  if (items && items.length && this.topGroup && this.topGroup.length) {
174
179
  // Filter out items included to the top group.
175
180
  const filteredItems = items.filter(
176
- (item) => !this.topGroup.some((selectedItem) => this._getItemValue(item) === this._getItemValue(selectedItem)),
181
+ (item) => this._comboBox._findIndex(item, this.topGroup, this.itemIdPath) === -1,
177
182
  );
178
183
 
179
184
  this._dropdownItems = this.topGroup.concat(filteredItems);
@@ -201,6 +206,8 @@ class MultiSelectComboBoxInternal extends ComboBoxDataProviderMixin(ComboBoxMixi
201
206
  _initScroller() {
202
207
  const comboBox = this.getRootNode().host;
203
208
 
209
+ this._comboBox = comboBox;
210
+
204
211
  super._initScroller(comboBox);
205
212
  }
206
213
 
@@ -172,13 +172,20 @@ export interface MultiSelectComboBoxEventMap<TItem> extends HTMLElementEventMap
172
172
  * @fires {CustomEvent} validated - Fired whenever the field is validated.
173
173
  */
174
174
  declare class MultiSelectComboBox<TItem = ComboBoxDefaultItem> extends HTMLElement {
175
+ /**
176
+ * Set to true to auto expand horizontally, causing input field to
177
+ * grow until max width is reached.
178
+ * @attr {boolean} auto-expand-horizontally
179
+ */
180
+ autoExpandHorizontally: boolean;
181
+
175
182
  /**
176
183
  * Set to true to not collapse selected items chips into the overflow
177
- * chip and instead always show them all, causing input field to grow
178
- * and wrap into multiple lines when width is limited.
179
- * @attr {boolean} all-chips-visible
184
+ * chip and instead always expand vertically, causing input field to
185
+ * wrap into multiple lines when width is limited.
186
+ * @attr {boolean} auto-expand-vertically
180
187
  */
181
- allChipsVisible: boolean;
188
+ autoExpandVertically: boolean;
182
189
 
183
190
  /**
184
191
  * When true, the user can input a value that is not present in the items list.
@@ -218,12 +225,6 @@ declare class MultiSelectComboBox<TItem = ComboBoxDefaultItem> extends HTMLEleme
218
225
  */
219
226
  filter: string;
220
227
 
221
- /**
222
- * Set to true to group selected items at the top of the overlay.
223
- * @attr {boolean} group-selected-items
224
- */
225
- groupSelectedItems: boolean;
226
-
227
228
  /**
228
229
  * A full set of items to filter the visible options from.
229
230
  * The items can be of either `String` or `Object` type.
@@ -322,6 +323,12 @@ declare class MultiSelectComboBox<TItem = ComboBoxDefaultItem> extends HTMLEleme
322
323
  */
323
324
  selectedItems: TItem[];
324
325
 
326
+ /**
327
+ * Set to true to group selected items at the top of the overlay.
328
+ * @attr {boolean} selected-items-on-top
329
+ */
330
+ selectedItemsOnTop: boolean;
331
+
325
332
  /**
326
333
  * Total number of items.
327
334
  */
@@ -47,12 +47,12 @@ const multiSelectComboBox = css`
47
47
  padding: 0;
48
48
  }
49
49
 
50
- :host([all-chips-visible]) #chips {
50
+ :host([auto-expand-vertically]) #chips {
51
51
  display: contents;
52
52
  }
53
53
 
54
- :host([all-chips-visible]) [class$='container'] {
55
- width: fit-content;
54
+ :host([auto-expand-horizontally]) [class$='container'] {
55
+ width: auto;
56
56
  }
57
57
  `;
58
58
 
@@ -175,7 +175,7 @@ class MultiSelectComboBox extends ResizeMixin(InputControlMixin(ThemableMixin(El
175
175
  size="{{size}}"
176
176
  filtered-items="[[__effectiveFilteredItems]]"
177
177
  selected-items="[[selectedItems]]"
178
- group-selected-items="[[groupSelectedItems]]"
178
+ selected-items-on-top="[[selectedItemsOnTop]]"
179
179
  top-group="[[_topGroup]]"
180
180
  opened="{{opened}}"
181
181
  renderer="[[renderer]]"
@@ -187,7 +187,7 @@ class MultiSelectComboBox extends ResizeMixin(InputControlMixin(ThemableMixin(El
187
187
  >
188
188
  <vaadin-multi-select-combo-box-container
189
189
  part="input-field"
190
- all-chips-visible="[[allChipsVisible]]"
190
+ auto-expand-vertically="[[autoExpandVertically]]"
191
191
  readonly="[[readonly]]"
192
192
  disabled="[[disabled]]"
193
193
  invalid="[[invalid]]"
@@ -224,17 +224,29 @@ class MultiSelectComboBox extends ResizeMixin(InputControlMixin(ThemableMixin(El
224
224
 
225
225
  static get properties() {
226
226
  return {
227
+ /**
228
+ * Set to true to auto expand horizontally, causing input field to
229
+ * grow until max width is reached.
230
+ * @attr {boolean} auto-expand-horizontally
231
+ */
232
+ autoExpandHorizontally: {
233
+ type: Boolean,
234
+ value: false,
235
+ reflectToAttribute: true,
236
+ observer: '_autoExpandHorizontallyChanged',
237
+ },
238
+
227
239
  /**
228
240
  * Set to true to not collapse selected items chips into the overflow
229
- * chip and instead always show them all, causing input field to grow
230
- * and wrap into multiple lines when width is limited.
231
- * @attr {boolean} all-chips-visible
241
+ * chip and instead always expand vertically, causing input field to
242
+ * wrap into multiple lines when width is limited.
243
+ * @attr {boolean} auto-expand-vertically
232
244
  */
233
- allChipsVisible: {
245
+ autoExpandVertically: {
234
246
  type: Boolean,
235
247
  value: false,
236
248
  reflectToAttribute: true,
237
- observer: '_allChipsVisibleChanged',
249
+ observer: '_autoExpandVerticallyChanged',
238
250
  },
239
251
 
240
252
  /**
@@ -254,15 +266,6 @@ class MultiSelectComboBox extends ResizeMixin(InputControlMixin(ThemableMixin(El
254
266
  value: false,
255
267
  },
256
268
 
257
- /**
258
- * Set to true to group selected items at the top of the overlay.
259
- * @attr {boolean} group-selected-items
260
- */
261
- groupSelectedItems: {
262
- type: Boolean,
263
- value: false,
264
- },
265
-
266
269
  /**
267
270
  * A full set of items to filter the visible options from.
268
271
  * The items can be of either `String` or `Object` type.
@@ -465,6 +468,15 @@ class MultiSelectComboBox extends ResizeMixin(InputControlMixin(ThemableMixin(El
465
468
  */
466
469
  filteredItems: Array,
467
470
 
471
+ /**
472
+ * Set to true to group selected items at the top of the overlay.
473
+ * @attr {boolean} selected-items-on-top
474
+ */
475
+ selectedItemsOnTop: {
476
+ type: Boolean,
477
+ value: false,
478
+ },
479
+
468
480
  /** @private */
469
481
  value: {
470
482
  type: String,
@@ -511,7 +523,7 @@ class MultiSelectComboBox extends ResizeMixin(InputControlMixin(ThemableMixin(El
511
523
  return [
512
524
  '_selectedItemsChanged(selectedItems, selectedItems.*)',
513
525
  '__updateOverflowChip(_overflow, _overflowItems, disabled, readonly)',
514
- '__updateTopGroup(groupSelectedItems, selectedItems, opened)',
526
+ '__updateTopGroup(selectedItemsOnTop, selectedItems, opened)',
515
527
  ];
516
528
  }
517
529
 
@@ -699,8 +711,15 @@ class MultiSelectComboBox extends ResizeMixin(InputControlMixin(ThemableMixin(El
699
711
  }
700
712
 
701
713
  /** @private */
702
- _allChipsVisibleChanged(visible, oldVisible) {
703
- if (visible || oldVisible) {
714
+ _autoExpandHorizontallyChanged(autoExpand, oldAutoExpand) {
715
+ if (autoExpand || oldAutoExpand) {
716
+ this.__updateChips();
717
+ }
718
+ }
719
+
720
+ /** @private */
721
+ _autoExpandVerticallyChanged(autoExpand, oldAutoExpand) {
722
+ if (autoExpand || oldAutoExpand) {
704
723
  this.__updateChips();
705
724
  }
706
725
  }
@@ -783,6 +802,10 @@ class MultiSelectComboBox extends ResizeMixin(InputControlMixin(ThemableMixin(El
783
802
 
784
803
  // Update selected for dropdown items
785
804
  this.requestContentUpdate();
805
+
806
+ if (this.opened) {
807
+ this.$.comboBox.$.overlay._updateOverlayWidth();
808
+ }
786
809
  }
787
810
 
788
811
  /** @private */
@@ -872,8 +895,8 @@ class MultiSelectComboBox extends ResizeMixin(InputControlMixin(ThemableMixin(El
872
895
  }
873
896
 
874
897
  /** @private */
875
- __updateTopGroup(groupSelectedItems, selectedItems, opened) {
876
- if (!groupSelectedItems) {
898
+ __updateTopGroup(selectedItemsOnTop, selectedItems, opened) {
899
+ if (!selectedItemsOnTop) {
877
900
  this._topGroup = [];
878
901
  } else if (!opened) {
879
902
  this._topGroup = [...selectedItems];
@@ -946,13 +969,51 @@ class MultiSelectComboBox extends ResizeMixin(InputControlMixin(ThemableMixin(El
946
969
 
947
970
  const chipMinWidth = parseInt(getComputedStyle(this).getPropertyValue('--_chip-min-width'));
948
971
 
972
+ if (this.autoExpandHorizontally) {
973
+ const chips = [];
974
+
975
+ // First, add all chips to make the field fully expand
976
+ for (let i = items.length - 1, refNode = null; i >= 0; i--) {
977
+ const chip = this.__createChip(items[i]);
978
+ this.insertBefore(chip, refNode);
979
+ refNode = chip;
980
+ chips.unshift(chip);
981
+ }
982
+
983
+ const overflowItems = [];
984
+ const availableWidth = this._inputField.$.wrapper.clientWidth - this.$.chips.clientWidth;
985
+
986
+ // When auto expanding vertically, no need to measure width
987
+ if (!this.autoExpandVertically && availableWidth < inputWidth) {
988
+ // Always show at least last item as a chip
989
+ while (chips.length > 1) {
990
+ const lastChip = chips.pop();
991
+ lastChip.remove();
992
+ overflowItems.unshift(items.pop());
993
+
994
+ // Remove chips until there is enough width for the input element to fit
995
+ const neededWidth = overflowItems.length > 0 ? inputWidth + this.__getOverflowWidth() : inputWidth;
996
+ if (this._inputField.$.wrapper.clientWidth - this.$.chips.clientWidth >= neededWidth) {
997
+ break;
998
+ }
999
+ }
1000
+
1001
+ if (chips.length === 1) {
1002
+ chips[0].style.maxWidth = `${Math.max(chipMinWidth, remainingWidth)}px`;
1003
+ }
1004
+ }
1005
+
1006
+ this._overflowItems = overflowItems;
1007
+ return;
1008
+ }
1009
+
949
1010
  // Add chips until remaining width is exceeded
950
1011
  for (let i = items.length - 1, refNode = null; i >= 0; i--) {
951
1012
  const chip = this.__createChip(items[i]);
952
1013
  this.insertBefore(chip, refNode);
953
1014
 
954
- // If all the chips are visible, no need to measure remaining width
955
- if (!this.allChipsVisible && this.$.chips.clientWidth > remainingWidth) {
1015
+ // When auto expanding vertically, no need to measure remaining width
1016
+ if (!this.autoExpandVertically && this.$.chips.clientWidth > remainingWidth) {
956
1017
  // Always show at least last selected item as a chip
957
1018
  if (refNode === null) {
958
1019
  chip.style.maxWidth = `${Math.max(chipMinWidth, remainingWidth)}px`;
@@ -51,7 +51,7 @@ registerStyles(
51
51
  registerStyles(
52
52
  'vaadin-multi-select-combo-box-container',
53
53
  css`
54
- :host([all-chips-visible]) {
54
+ :host([auto-expand-vertically]) {
55
55
  padding-block: var(--lumo-space-xs);
56
56
  }
57
57
  `,
@@ -81,7 +81,7 @@ const multiSelectComboBox = css`
81
81
  mask-image: none;
82
82
  }
83
83
 
84
- :host([all-chips-visible]) ::slotted([slot='chip']) {
84
+ :host([auto-expand-vertically]) ::slotted([slot='chip']) {
85
85
  margin-block: calc(var(--lumo-space-xs) / 2);
86
86
  }
87
87
 
@@ -89,7 +89,7 @@ const multiSelectComboBox = css`
89
89
  padding-inline-end: 0;
90
90
  }
91
91
 
92
- :host([all-chips-visible]) ::slotted([slot='input']) {
92
+ :host([auto-expand-vertically]) ::slotted([slot='input']) {
93
93
  min-height: calc(var(--lumo-text-field-size, var(--lumo-size-m)) - 2 * var(--lumo-space-xs));
94
94
  }
95
95
 
@@ -56,7 +56,7 @@ const multiSelectComboBox = css`
56
56
  padding: 0 0.5rem;
57
57
  }
58
58
 
59
- :host([all-chips-visible]) ::slotted([slot='chip']) {
59
+ :host([auto-expand-vertically]) ::slotted([slot='chip']) {
60
60
  margin-top: 0.25rem;
61
61
  align-self: flex-start;
62
62
  }
package/web-types.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "$schema": "https://json.schemastore.org/web-types",
3
3
  "name": "@vaadin/multi-select-combo-box",
4
- "version": "24.3.0-alpha9",
4
+ "version": "24.3.0-beta2",
5
5
  "description-markup": "markdown",
6
6
  "contributions": {
7
7
  "html": {
@@ -198,8 +198,8 @@
198
198
  }
199
199
  },
200
200
  {
201
- "name": "all-chips-visible",
202
- "description": "Set to true to not collapse selected items chips into the overflow\nchip and instead always show them all, causing input field to grow\nand wrap into multiple lines when width is limited.",
201
+ "name": "auto-expand-horizontally",
202
+ "description": "Set to true to auto expand horizontally, causing input field to\ngrow until max width is reached.",
203
203
  "value": {
204
204
  "type": [
205
205
  "boolean",
@@ -209,8 +209,8 @@
209
209
  }
210
210
  },
211
211
  {
212
- "name": "auto-open-disabled",
213
- "description": "Set true to prevent the overlay from opening automatically.",
212
+ "name": "auto-expand-vertically",
213
+ "description": "Set to true to not collapse selected items chips into the overflow\nchip and instead always expand vertically, causing input field to\nwrap into multiple lines when width is limited.",
214
214
  "value": {
215
215
  "type": [
216
216
  "boolean",
@@ -220,8 +220,8 @@
220
220
  }
221
221
  },
222
222
  {
223
- "name": "group-selected-items",
224
- "description": "Set to true to group selected items at the top of the overlay.",
223
+ "name": "auto-open-disabled",
224
+ "description": "Set true to prevent the overlay from opening automatically.",
225
225
  "value": {
226
226
  "type": [
227
227
  "boolean",
@@ -340,6 +340,17 @@
340
340
  ]
341
341
  }
342
342
  },
343
+ {
344
+ "name": "selected-items-on-top",
345
+ "description": "Set to true to group selected items at the top of the overlay.",
346
+ "value": {
347
+ "type": [
348
+ "boolean",
349
+ "null",
350
+ "undefined"
351
+ ]
352
+ }
353
+ },
343
354
  {
344
355
  "name": "theme",
345
356
  "description": "The theme variants to apply to the component.",
@@ -531,8 +542,8 @@
531
542
  }
532
543
  },
533
544
  {
534
- "name": "allChipsVisible",
535
- "description": "Set to true to not collapse selected items chips into the overflow\nchip and instead always show them all, causing input field to grow\nand wrap into multiple lines when width is limited.",
545
+ "name": "autoExpandHorizontally",
546
+ "description": "Set to true to auto expand horizontally, causing input field to\ngrow until max width is reached.",
536
547
  "value": {
537
548
  "type": [
538
549
  "boolean",
@@ -542,8 +553,8 @@
542
553
  }
543
554
  },
544
555
  {
545
- "name": "autoOpenDisabled",
546
- "description": "Set true to prevent the overlay from opening automatically.",
556
+ "name": "autoExpandVertically",
557
+ "description": "Set to true to not collapse selected items chips into the overflow\nchip and instead always expand vertically, causing input field to\nwrap into multiple lines when width is limited.",
547
558
  "value": {
548
559
  "type": [
549
560
  "boolean",
@@ -553,8 +564,8 @@
553
564
  }
554
565
  },
555
566
  {
556
- "name": "groupSelectedItems",
557
- "description": "Set to true to group selected items at the top of the overlay.",
567
+ "name": "autoOpenDisabled",
568
+ "description": "Set true to prevent the overlay from opening automatically.",
558
569
  "value": {
559
570
  "type": [
560
571
  "boolean",
@@ -736,6 +747,17 @@
736
747
  "undefined"
737
748
  ]
738
749
  }
750
+ },
751
+ {
752
+ "name": "selectedItemsOnTop",
753
+ "description": "Set to true to group selected items at the top of the overlay.",
754
+ "value": {
755
+ "type": [
756
+ "boolean",
757
+ "null",
758
+ "undefined"
759
+ ]
760
+ }
739
761
  }
740
762
  ],
741
763
  "events": [
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "$schema": "https://json.schemastore.org/web-types",
3
3
  "name": "@vaadin/multi-select-combo-box",
4
- "version": "24.3.0-alpha9",
4
+ "version": "24.3.0-beta2",
5
5
  "description-markup": "markdown",
6
6
  "framework": "lit",
7
7
  "framework-config": {
@@ -69,22 +69,22 @@
69
69
  }
70
70
  },
71
71
  {
72
- "name": "?allChipsVisible",
73
- "description": "Set to true to not collapse selected items chips into the overflow\nchip and instead always show them all, causing input field to grow\nand wrap into multiple lines when width is limited.",
72
+ "name": "?autoExpandHorizontally",
73
+ "description": "Set to true to auto expand horizontally, causing input field to\ngrow until max width is reached.",
74
74
  "value": {
75
75
  "kind": "expression"
76
76
  }
77
77
  },
78
78
  {
79
- "name": "?autoOpenDisabled",
80
- "description": "Set true to prevent the overlay from opening automatically.",
79
+ "name": "?autoExpandVertically",
80
+ "description": "Set to true to not collapse selected items chips into the overflow\nchip and instead always expand vertically, causing input field to\nwrap into multiple lines when width is limited.",
81
81
  "value": {
82
82
  "kind": "expression"
83
83
  }
84
84
  },
85
85
  {
86
- "name": "?groupSelectedItems",
87
- "description": "Set to true to group selected items at the top of the overlay.",
86
+ "name": "?autoOpenDisabled",
87
+ "description": "Set true to prevent the overlay from opening automatically.",
88
88
  "value": {
89
89
  "kind": "expression"
90
90
  }
@@ -110,6 +110,13 @@
110
110
  "kind": "expression"
111
111
  }
112
112
  },
113
+ {
114
+ "name": "?selectedItemsOnTop",
115
+ "description": "Set to true to group selected items at the top of the overlay.",
116
+ "value": {
117
+ "kind": "expression"
118
+ }
119
+ },
113
120
  {
114
121
  "name": ".label",
115
122
  "description": "The label text for the input node.\nWhen no light dom defined via [slot=label], this value will be used.",