@m3e/web 2.0.5 → 2.1.0

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.
Files changed (137) hide show
  1. package/dist/all.js +773 -473
  2. package/dist/all.js.map +1 -1
  3. package/dist/all.min.js +52 -58
  4. package/dist/all.min.js.map +1 -1
  5. package/dist/autocomplete.js +342 -69
  6. package/dist/autocomplete.js.map +1 -1
  7. package/dist/autocomplete.min.js +1 -1
  8. package/dist/autocomplete.min.js.map +1 -1
  9. package/dist/chips.js +18 -4
  10. package/dist/chips.js.map +1 -1
  11. package/dist/chips.min.js +1 -1
  12. package/dist/chips.min.js.map +1 -1
  13. package/dist/core-a11y.js +3 -118
  14. package/dist/core-a11y.js.map +1 -1
  15. package/dist/core-a11y.min.js +13 -4
  16. package/dist/core-a11y.min.js.map +1 -1
  17. package/dist/core-anchoring.js +193 -1
  18. package/dist/core-anchoring.js.map +1 -1
  19. package/dist/core-anchoring.min.js +1 -1
  20. package/dist/core-anchoring.min.js.map +1 -1
  21. package/dist/core.js +119 -91
  22. package/dist/core.js.map +1 -1
  23. package/dist/core.min.js +1 -1
  24. package/dist/core.min.js.map +1 -1
  25. package/dist/css-custom-data.json +406 -326
  26. package/dist/custom-elements.json +4321 -3297
  27. package/dist/html-custom-data.json +169 -94
  28. package/dist/loading-indicator.js +1 -0
  29. package/dist/loading-indicator.js.map +1 -1
  30. package/dist/loading-indicator.min.js +1 -1
  31. package/dist/loading-indicator.min.js.map +1 -1
  32. package/dist/menu.js +1 -1
  33. package/dist/menu.js.map +1 -1
  34. package/dist/menu.min.js +1 -1
  35. package/dist/menu.min.js.map +1 -1
  36. package/dist/option.js +94 -121
  37. package/dist/option.js.map +1 -1
  38. package/dist/option.min.js +1 -1
  39. package/dist/option.min.js.map +1 -1
  40. package/dist/progress-indicator.js +2 -0
  41. package/dist/progress-indicator.js.map +1 -1
  42. package/dist/progress-indicator.min.js +2 -2
  43. package/dist/progress-indicator.min.js.map +1 -1
  44. package/dist/select.js +59 -23
  45. package/dist/select.js.map +1 -1
  46. package/dist/select.min.js +1 -1
  47. package/dist/select.min.js.map +1 -1
  48. package/dist/src/autocomplete/AutocompleteElement.d.ts +71 -2
  49. package/dist/src/autocomplete/AutocompleteElement.d.ts.map +1 -1
  50. package/dist/src/autocomplete/AutocompleteFilterMode.d.ts +3 -0
  51. package/dist/src/autocomplete/AutocompleteFilterMode.d.ts.map +1 -0
  52. package/dist/src/autocomplete/QueryEventDetail.d.ts +12 -0
  53. package/dist/src/autocomplete/QueryEventDetail.d.ts.map +1 -0
  54. package/dist/src/autocomplete/index.d.ts +2 -0
  55. package/dist/src/autocomplete/index.d.ts.map +1 -1
  56. package/dist/src/chips/ChipElement.d.ts +2 -0
  57. package/dist/src/chips/ChipElement.d.ts.map +1 -1
  58. package/dist/src/chips/InputChipSetChangeEventDetail.d.ts +13 -0
  59. package/dist/src/chips/InputChipSetChangeEventDetail.d.ts.map +1 -0
  60. package/dist/src/chips/InputChipSetElement.d.ts +10 -0
  61. package/dist/src/chips/InputChipSetElement.d.ts.map +1 -1
  62. package/dist/src/chips/index.d.ts +1 -0
  63. package/dist/src/chips/index.d.ts.map +1 -1
  64. package/dist/src/core/a11y/FocusTrapElement.d.ts +1 -1
  65. package/dist/src/core/a11y/list-key/ListKeyManager.d.ts.map +1 -1
  66. package/dist/src/core/a11y/list-key/RadioKeyManager.d.ts +1 -2
  67. package/dist/src/core/a11y/list-key/RadioKeyManager.d.ts.map +1 -1
  68. package/dist/src/core/a11y/list-key/SelectionManager.d.ts +1 -2
  69. package/dist/src/core/a11y/list-key/SelectionManager.d.ts.map +1 -1
  70. package/dist/src/core/a11y/list-key/Typeahead.d.ts.map +1 -1
  71. package/dist/src/core/anchoring/FloatingPanelElement.d.ts +74 -0
  72. package/dist/src/core/anchoring/FloatingPanelElement.d.ts.map +1 -0
  73. package/dist/src/core/anchoring/index.d.ts +1 -0
  74. package/dist/src/core/anchoring/index.d.ts.map +1 -1
  75. package/dist/src/core/shared/controllers/MutationController.d.ts.map +1 -1
  76. package/dist/src/core/shared/controllers/ResizeController.d.ts.map +1 -1
  77. package/dist/src/core/shared/mixins/AttachInternals.d.ts.map +1 -1
  78. package/dist/src/core/shared/primitives/TextHighlightElement.d.ts +9 -2
  79. package/dist/src/core/shared/primitives/TextHighlightElement.d.ts.map +1 -1
  80. package/dist/src/core/shared/primitives/TextHighlightMode.d.ts +3 -0
  81. package/dist/src/core/shared/primitives/TextHighlightMode.d.ts.map +1 -0
  82. package/dist/src/core/shared/primitives/index.d.ts +2 -1
  83. package/dist/src/core/shared/primitives/index.d.ts.map +1 -1
  84. package/dist/src/loading-indicator/LoadingIndicatorElement.d.ts.map +1 -1
  85. package/dist/src/menu/MenuItemElementBase.d.ts.map +1 -1
  86. package/dist/src/option/OptionElement.d.ts +21 -1
  87. package/dist/src/option/OptionElement.d.ts.map +1 -1
  88. package/dist/src/option/OptionPanelElement.d.ts +11 -34
  89. package/dist/src/option/OptionPanelElement.d.ts.map +1 -1
  90. package/dist/src/option/OptionPanelState.d.ts +3 -0
  91. package/dist/src/option/OptionPanelState.d.ts.map +1 -0
  92. package/dist/src/option/index.d.ts +1 -0
  93. package/dist/src/option/index.d.ts.map +1 -1
  94. package/dist/src/progress-indicator/CircularProgressIndicatorElement.d.ts.map +1 -1
  95. package/dist/src/progress-indicator/LinearProgressIndicatorElement.d.ts.map +1 -1
  96. package/dist/src/select/SelectElement.d.ts +3 -2
  97. package/dist/src/select/SelectElement.d.ts.map +1 -1
  98. package/dist/src/toc/TocElement.d.ts.map +1 -1
  99. package/dist/toc.js +0 -1
  100. package/dist/toc.js.map +1 -1
  101. package/dist/toc.min.js +1 -1
  102. package/dist/toc.min.js.map +1 -1
  103. package/package.json +1 -1
  104. package/dist/datepicker.js +0 -2346
  105. package/dist/datepicker.js.map +0 -1
  106. package/dist/datepicker.min.js +0 -102
  107. package/dist/datepicker.min.js.map +0 -1
  108. package/dist/src/core/shared/decorators/component.d.ts +0 -19
  109. package/dist/src/core/shared/decorators/component.d.ts.map +0 -1
  110. package/dist/src/core/shared/decorators/element.d.ts +0 -19
  111. package/dist/src/core/shared/decorators/element.d.ts.map +0 -1
  112. package/dist/src/core/shared/utils/getState.d.ts +0 -15
  113. package/dist/src/core/shared/utils/getState.d.ts.map +0 -1
  114. package/dist/src/datepicker/CalendarElement.d.ts +0 -203
  115. package/dist/src/datepicker/CalendarElement.d.ts.map +0 -1
  116. package/dist/src/datepicker/CalendarView.d.ts +0 -3
  117. package/dist/src/datepicker/CalendarView.d.ts.map +0 -1
  118. package/dist/src/datepicker/CalendarViewElementBase.d.ts +0 -28
  119. package/dist/src/datepicker/CalendarViewElementBase.d.ts.map +0 -1
  120. package/dist/src/datepicker/DateAdapter.d.ts +0 -4
  121. package/dist/src/datepicker/DateAdapter.d.ts.map +0 -1
  122. package/dist/src/datepicker/DatepickerElement.d.ts +0 -180
  123. package/dist/src/datepicker/DatepickerElement.d.ts.map +0 -1
  124. package/dist/src/datepicker/DatepickerToggleElement.d.ts +0 -21
  125. package/dist/src/datepicker/DatepickerToggleElement.d.ts.map +0 -1
  126. package/dist/src/datepicker/DatepickerVariant.d.ts +0 -3
  127. package/dist/src/datepicker/DatepickerVariant.d.ts.map +0 -1
  128. package/dist/src/datepicker/MonthViewElement.d.ts +0 -35
  129. package/dist/src/datepicker/MonthViewElement.d.ts.map +0 -1
  130. package/dist/src/datepicker/MultiYearViewElement.d.ts +0 -27
  131. package/dist/src/datepicker/MultiYearViewElement.d.ts.map +0 -1
  132. package/dist/src/datepicker/YearViewElement.d.ts +0 -27
  133. package/dist/src/datepicker/YearViewElement.d.ts.map +0 -1
  134. package/dist/src/datepicker/index.d.ts +0 -10
  135. package/dist/src/datepicker/index.d.ts.map +0 -1
  136. package/dist/src/datepicker/utils.d.ts +0 -26
  137. package/dist/src/datepicker/utils.d.ts.map +0 -1
@@ -5,8 +5,9 @@
5
5
  */
6
6
  import { LitElement, html, css } from 'lit';
7
7
  import { property } from 'lit/decorators.js';
8
- import { HtmlFor, customElement, setCustomState, prefersReducedMotion, scrollIntoViewIfNeeded, forcedColorsActive, deleteCustomState, addCustomState } from '@m3e/web/core';
9
- import { ListKeyManager } from '@m3e/web/core/a11y';
8
+ import { HtmlFor, MutationController, setCustomState, deleteCustomState, customElement, prefersReducedMotion, scrollIntoViewIfNeeded, forcedColorsActive, addCustomState } from '@m3e/web/core';
9
+ import { ListKeyManager, M3eLiveAnnouncer } from '@m3e/web/core/a11y';
10
+ import { M3eOptGroupElement } from '@m3e/web/option';
10
11
 
11
12
  /******************************************************************************
12
13
  Copyright (c) Microsoft Corporation.
@@ -47,7 +48,7 @@ typeof SuppressedError === "function" ? SuppressedError : function (error, suppr
47
48
  return e.name = "SuppressedError", e.error = error, e.suppressed = suppressed, e;
48
49
  };
49
50
 
50
- var _M3eAutocompleteElement_instances, _M3eAutocompleteElement_id, _M3eAutocompleteElement_menuId, _M3eAutocompleteElement_ignoreFocusVisible, _M3eAutocompleteElement_menu, _M3eAutocompleteElement_textHighlight, _M3eAutocompleteElement_ignoreHideMenuOnBlur, _M3eAutocompleteElement_clickHandler, _M3eAutocompleteElement_formFieldPointerDownHandler, _M3eAutocompleteElement_focusHandler, _M3eAutocompleteElement_blurHandler, _M3eAutocompleteElement_keyDownHandler, _M3eAutocompleteElement_inputHandler, _M3eAutocompleteElement_changeHandler, _M3eAutocompleteElement_menuToggleHandler, _M3eAutocompleteElement_menuPointerDownHandler, _M3eAutocompleteElement_input_get, _M3eAutocompleteElement_hasVisibleOptions_get, _M3eAutocompleteElement_minMenuWidth_get, _M3eAutocompleteElement_formField_get, _M3eAutocompleteElement_handleSlotChange, _M3eAutocompleteElement_handleClick, _M3eAutocompleteElement_handleFormFieldPointerDown, _M3eAutocompleteElement_handleFocus, _M3eAutocompleteElement_handleBlur, _M3eAutocompleteElement_handleInput, _M3eAutocompleteElement_handleChange, _M3eAutocompleteElement_handleKeyDown, _M3eAutocompleteElement_handleMenuPointerDown, _M3eAutocompleteElement_handleMenuToggle, _M3eAutocompleteElement_destroyMenu, _M3eAutocompleteElement_showMenu, _M3eAutocompleteElement_hideMenu, _M3eAutocompleteElement_activateOption, _M3eAutocompleteElement_selectOption, _M3eAutocompleteElement_filterOptions, _M3eAutocompleteElement_autoActivate, _M3eAutocompleteElement_deactivateOption;
51
+ var _M3eAutocompleteElement_instances, _M3eAutocompleteElement_id, _M3eAutocompleteElement_menuId, _M3eAutocompleteElement_clone, _M3eAutocompleteElement_ignoreFocusVisible, _M3eAutocompleteElement_menu, _M3eAutocompleteElement_ignoreHideMenuOnBlur, _M3eAutocompleteElement_inputChanged, _M3eAutocompleteElement_hasFocus, _M3eAutocompleteElement_mutationAbortController, _M3eAutocompleteElement_clickHandler, _M3eAutocompleteElement_formFieldPointerDownHandler, _M3eAutocompleteElement_focusHandler, _M3eAutocompleteElement_blurHandler, _M3eAutocompleteElement_keyDownHandler, _M3eAutocompleteElement_inputHandler, _M3eAutocompleteElement_changeHandler, _M3eAutocompleteElement_menuToggleHandler, _M3eAutocompleteElement_menuPointerDownHandler, _M3eAutocompleteElement_options_get, _M3eAutocompleteElement_input_get, _M3eAutocompleteElement_hasNoDataSlot_get, _M3eAutocompleteElement_hasLoadingSlot_get, _M3eAutocompleteElement_shouldShowMenu_get, _M3eAutocompleteElement_minMenuWidth_get, _M3eAutocompleteElement_formField_get, _M3eAutocompleteElement_handleMutation, _M3eAutocompleteElement_handleClick, _M3eAutocompleteElement_handleFormFieldPointerDown, _M3eAutocompleteElement_handleFocus, _M3eAutocompleteElement_handleBlur, _M3eAutocompleteElement_handleInput, _M3eAutocompleteElement_handleChange, _M3eAutocompleteElement_handleKeyDown, _M3eAutocompleteElement_handleMenuPointerDown, _M3eAutocompleteElement_handleMenuToggle, _M3eAutocompleteElement_destroyMenu, _M3eAutocompleteElement_showMenu, _M3eAutocompleteElement_updateMenuState, _M3eAutocompleteElement_hideMenu, _M3eAutocompleteElement_activateOption, _M3eAutocompleteElement_updateSelectionState, _M3eAutocompleteElement_selectOption, _M3eAutocompleteElement_filterOption, _M3eAutocompleteElement_filterOptions, _M3eAutocompleteElement_announceResults, _M3eAutocompleteElement_autoActivate, _M3eAutocompleteElement_deactivateOption;
51
52
  var M3eAutocompleteElement_1;
52
53
  /**
53
54
  * Enhances a text input with suggested options.
@@ -76,30 +77,49 @@ var M3eAutocompleteElement_1;
76
77
  * @tag m3e-autocomplete
77
78
  *
78
79
  * @attr auto-activate - Whether the first option should be automatically activated.
80
+ * @attr case-sensitive - Whether filtering is case sensitive.
81
+ * @attr filter - Mode in which to filter options.
79
82
  * @attr hide-selection-indicator - Whether to hide the selection indicator.
83
+ * @attr hide-loading - Whether to hide the menu when loading options.
84
+ * @attr hide-no-data - Whether to hide the menu when there are no options to show.
85
+ * @attr loading - Whether options are being loaded.
86
+ * @attr loading-label - The text announced and presented when loading options.
87
+ * @attr no-data-label - The text announced and presented when no options are available for the current term.
80
88
  * @attr required - Whether the user is required to make a selection when interacting with the autocomplete.
89
+ * @attr results-label - The text announced when available options change for the current term.
81
90
  *
82
91
  * @slot - Renders the options of the autocomplete.
92
+ * @slot loading - Renders content when loading options.
93
+ * @slot no-data - Renders content when there are no options to show.
83
94
  *
84
95
  * @fires toggle - Emitted when the options menu opens or closes.
96
+ * @fires query - Emitted when the input is focused or when the user modifies its value.
85
97
  */
86
98
  let M3eAutocompleteElement = M3eAutocompleteElement_1 = class M3eAutocompleteElement extends HtmlFor(LitElement) {
87
99
  constructor() {
88
- super(...arguments);
100
+ super();
89
101
  _M3eAutocompleteElement_instances.add(this);
90
102
  /** @private */
91
103
  _M3eAutocompleteElement_id.set(this, `m3e-autocomplete-${M3eAutocompleteElement_1.__nextId}`);
92
104
  /** @private */
93
105
  _M3eAutocompleteElement_menuId.set(this, `${__classPrivateFieldGet(this, _M3eAutocompleteElement_id, "f")}-menu`);
94
106
  /** @private */
107
+ this._options = new Array();
108
+ /** @private */
109
+ _M3eAutocompleteElement_clone.set(this, void 0);
110
+ /** @private */
95
111
  _M3eAutocompleteElement_ignoreFocusVisible.set(this, false);
96
112
  /** @private */
97
113
  _M3eAutocompleteElement_menu.set(this, void 0);
98
114
  /** @private */
99
- _M3eAutocompleteElement_textHighlight.set(this, void 0);
100
- /** @private */
101
115
  _M3eAutocompleteElement_ignoreHideMenuOnBlur.set(this, false);
102
116
  /** @private */
117
+ _M3eAutocompleteElement_inputChanged.set(this, false);
118
+ /** @private */
119
+ _M3eAutocompleteElement_hasFocus.set(this, false);
120
+ /** @private */
121
+ _M3eAutocompleteElement_mutationAbortController.set(this, void 0);
122
+ /** @private */
103
123
  _M3eAutocompleteElement_clickHandler.set(this, () => __classPrivateFieldGet(this, _M3eAutocompleteElement_instances, "m", _M3eAutocompleteElement_handleClick).call(this));
104
124
  /** @private */
105
125
  _M3eAutocompleteElement_formFieldPointerDownHandler.set(this, () => __classPrivateFieldGet(this, _M3eAutocompleteElement_instances, "m", _M3eAutocompleteElement_handleFormFieldPointerDown).call(this));
@@ -118,7 +138,7 @@ let M3eAutocompleteElement = M3eAutocompleteElement_1 = class M3eAutocompleteEle
118
138
  /** @private */
119
139
  _M3eAutocompleteElement_menuPointerDownHandler.set(this, e => __classPrivateFieldGet(this, _M3eAutocompleteElement_instances, "m", _M3eAutocompleteElement_handleMenuPointerDown).call(this, e));
120
140
  /** @private */
121
- this._listKeyManager = new ListKeyManager().withWrap().withHomeAndEnd().withPageUpAndDown().withVerticalOrientation().withSkipPredicate(item => item.disabled || item.style.display === "none").onActiveItemChange(() => {
141
+ this._listKeyManager = new ListKeyManager().withWrap().withHomeAndEnd().withPageUpAndDown().withVerticalOrientation().withSkipPredicate(item => item.disabled || item.hidden).onActiveItemChange(() => {
122
142
  if (this._listKeyManager.activeItem) {
123
143
  __classPrivateFieldGet(this, _M3eAutocompleteElement_instances, "m", _M3eAutocompleteElement_activateOption).call(this, this._listKeyManager.activeItem);
124
144
  }
@@ -138,10 +158,57 @@ let M3eAutocompleteElement = M3eAutocompleteElement_1 = class M3eAutocompleteEle
138
158
  * @default false
139
159
  */
140
160
  this.autoActivate = false;
161
+ /**
162
+ * Whether filtering is case sensitive.
163
+ * @default false
164
+ */
165
+ this.caseSensitive = false;
166
+ /**
167
+ * Mode in which to filter options.
168
+ * @default "contains"
169
+ */
170
+ this.filter = "contains";
171
+ /**
172
+ * Whether options are being loaded.
173
+ * @default false
174
+ */
175
+ this.loading = false;
176
+ /**
177
+ * Whether to hide the menu when there are no options to show.
178
+ * @default false
179
+ */
180
+ this.hideNoData = false;
181
+ /**
182
+ * Whether to hide the menu when loading options.
183
+ * @default false
184
+ */
185
+ this.hideLoading = false;
186
+ /**
187
+ * The text announced and presented when loading options.
188
+ * @default "Loading..."
189
+ */
190
+ this.loadingLabel = "Loading...";
191
+ /**
192
+ * The text announced and presented when no options are available for the current term.
193
+ * @default "No options"
194
+ */
195
+ this.noDataLabel = "No options";
196
+ /**
197
+ * The text announced when available options change for the current term.
198
+ * @default (count) => `${count} options`
199
+ */
200
+ this.resultsLabel = count => `${count} options`;
201
+ new MutationController(this, {
202
+ config: {
203
+ childList: true,
204
+ subtree: true
205
+ },
206
+ callback: () => __classPrivateFieldGet(this, _M3eAutocompleteElement_instances, "m", _M3eAutocompleteElement_handleMutation).call(this)
207
+ });
141
208
  }
142
209
  /** The options that can be selected. */
143
210
  get options() {
144
- return this._listKeyManager?.items ?? [];
211
+ return this._options ?? [];
145
212
  }
146
213
  /** @inheritdoc */
147
214
  attach(control) {
@@ -182,9 +249,6 @@ let M3eAutocompleteElement = M3eAutocompleteElement_1 = class M3eAutocompleteEle
182
249
  clear(restoreFocus = false) {
183
250
  if (!__classPrivateFieldGet(this, _M3eAutocompleteElement_instances, "a", _M3eAutocompleteElement_input_get)) return;
184
251
  __classPrivateFieldGet(this, _M3eAutocompleteElement_instances, "a", _M3eAutocompleteElement_input_get).value = "";
185
- if (__classPrivateFieldGet(this, _M3eAutocompleteElement_textHighlight, "f")) {
186
- __classPrivateFieldGet(this, _M3eAutocompleteElement_textHighlight, "f").term = "";
187
- }
188
252
  __classPrivateFieldGet(this, _M3eAutocompleteElement_instances, "m", _M3eAutocompleteElement_filterOptions).call(this);
189
253
  if (restoreFocus) {
190
254
  __classPrivateFieldGet(this, _M3eAutocompleteElement_instances, "a", _M3eAutocompleteElement_input_get).focus();
@@ -193,16 +257,49 @@ let M3eAutocompleteElement = M3eAutocompleteElement_1 = class M3eAutocompleteEle
193
257
  }
194
258
  }
195
259
  /** @inheritdoc */
260
+ connectedCallback() {
261
+ super.connectedCallback();
262
+ __classPrivateFieldGet(this, _M3eAutocompleteElement_instances, "m", _M3eAutocompleteElement_handleMutation).call(this);
263
+ }
264
+ /** @inheritdoc */
265
+ update(changedProperties) {
266
+ super.update(changedProperties);
267
+ if (changedProperties.has("hideNoData") && this.hideNoData && __classPrivateFieldGet(this, _M3eAutocompleteElement_menu, "f")) {
268
+ setCustomState(__classPrivateFieldGet(this, _M3eAutocompleteElement_menu, "f"), "-no-data", false);
269
+ }
270
+ if (changedProperties.has("loading")) {
271
+ if (this.loading) {
272
+ if (__classPrivateFieldGet(this, _M3eAutocompleteElement_hasFocus, "f")) {
273
+ if (this.loadingLabel) {
274
+ M3eLiveAnnouncer.announce(this.loadingLabel, "polite");
275
+ }
276
+ if (!__classPrivateFieldGet(this, _M3eAutocompleteElement_menu, "f") && __classPrivateFieldGet(this, _M3eAutocompleteElement_instances, "a", _M3eAutocompleteElement_shouldShowMenu_get)) {
277
+ __classPrivateFieldGet(this, _M3eAutocompleteElement_instances, "m", _M3eAutocompleteElement_showMenu).call(this);
278
+ }
279
+ }
280
+ } else if (__classPrivateFieldGet(this, _M3eAutocompleteElement_menu, "f") && !__classPrivateFieldGet(this, _M3eAutocompleteElement_instances, "a", _M3eAutocompleteElement_shouldShowMenu_get)) {
281
+ __classPrivateFieldGet(this, _M3eAutocompleteElement_instances, "m", _M3eAutocompleteElement_hideMenu).call(this);
282
+ } else if (__classPrivateFieldGet(this, _M3eAutocompleteElement_menu, "f")) {
283
+ deleteCustomState(__classPrivateFieldGet(this, _M3eAutocompleteElement_menu, "f"), "-loading");
284
+ } else if (__classPrivateFieldGet(this, _M3eAutocompleteElement_hasFocus, "f")) {
285
+ __classPrivateFieldGet(this, _M3eAutocompleteElement_instances, "m", _M3eAutocompleteElement_showMenu).call(this);
286
+ }
287
+ }
288
+ }
289
+ /** @inheritdoc */
196
290
  render() {
197
- return html`<div class="options" role="listbox"><slot @slotchange="${__classPrivateFieldGet(this, _M3eAutocompleteElement_instances, "m", _M3eAutocompleteElement_handleSlotChange)}"></slot></div>`;
291
+ return html`<div class="options" aria-hidden="true"><slot></slot></div>`;
198
292
  }
199
293
  };
200
294
  _M3eAutocompleteElement_id = new WeakMap();
201
295
  _M3eAutocompleteElement_menuId = new WeakMap();
296
+ _M3eAutocompleteElement_clone = new WeakMap();
202
297
  _M3eAutocompleteElement_ignoreFocusVisible = new WeakMap();
203
298
  _M3eAutocompleteElement_menu = new WeakMap();
204
- _M3eAutocompleteElement_textHighlight = new WeakMap();
205
299
  _M3eAutocompleteElement_ignoreHideMenuOnBlur = new WeakMap();
300
+ _M3eAutocompleteElement_inputChanged = new WeakMap();
301
+ _M3eAutocompleteElement_hasFocus = new WeakMap();
302
+ _M3eAutocompleteElement_mutationAbortController = new WeakMap();
206
303
  _M3eAutocompleteElement_clickHandler = new WeakMap();
207
304
  _M3eAutocompleteElement_formFieldPointerDownHandler = new WeakMap();
208
305
  _M3eAutocompleteElement_focusHandler = new WeakMap();
@@ -213,11 +310,20 @@ _M3eAutocompleteElement_changeHandler = new WeakMap();
213
310
  _M3eAutocompleteElement_menuToggleHandler = new WeakMap();
214
311
  _M3eAutocompleteElement_menuPointerDownHandler = new WeakMap();
215
312
  _M3eAutocompleteElement_instances = new WeakSet();
313
+ _M3eAutocompleteElement_options_get = function _M3eAutocompleteElement_options_get() {
314
+ return this._listKeyManager?.items ?? [];
315
+ };
216
316
  _M3eAutocompleteElement_input_get = function _M3eAutocompleteElement_input_get() {
217
317
  return this.control ? this.control : null;
218
318
  };
219
- _M3eAutocompleteElement_hasVisibleOptions_get = function _M3eAutocompleteElement_hasVisibleOptions_get() {
220
- return this.options.some(x => x.style.display !== "none");
319
+ _M3eAutocompleteElement_hasNoDataSlot_get = function _M3eAutocompleteElement_hasNoDataSlot_get() {
320
+ return (__classPrivateFieldGet(this, _M3eAutocompleteElement_clone, "f")?.querySelector("[slot='no-data']") ?? null) !== null;
321
+ };
322
+ _M3eAutocompleteElement_hasLoadingSlot_get = function _M3eAutocompleteElement_hasLoadingSlot_get() {
323
+ return (__classPrivateFieldGet(this, _M3eAutocompleteElement_clone, "f")?.querySelector("[slot='loading']") ?? null) !== null;
324
+ };
325
+ _M3eAutocompleteElement_shouldShowMenu_get = function _M3eAutocompleteElement_shouldShowMenu_get() {
326
+ return __classPrivateFieldGet(this, _M3eAutocompleteElement_instances, "a", _M3eAutocompleteElement_options_get).some(x => !x.hidden) || this.loading && !this.hideLoading && this.loadingLabel.length > 0 || !this.loading && !this.hideNoData && this.noDataLabel.length > 0;
221
327
  };
222
328
  _M3eAutocompleteElement_minMenuWidth_get = function _M3eAutocompleteElement_minMenuWidth_get() {
223
329
  const formField = __classPrivateFieldGet(this, _M3eAutocompleteElement_instances, "a", _M3eAutocompleteElement_formField_get);
@@ -226,15 +332,43 @@ _M3eAutocompleteElement_minMenuWidth_get = function _M3eAutocompleteElement_minM
226
332
  _M3eAutocompleteElement_formField_get = function _M3eAutocompleteElement_formField_get() {
227
333
  return this.control?.closest("m3e-form-field") ?? null;
228
334
  };
229
- _M3eAutocompleteElement_handleSlotChange = function _M3eAutocompleteElement_handleSlotChange() {
230
- if (__classPrivateFieldGet(this, _M3eAutocompleteElement_menu, "f")) return;
335
+ _M3eAutocompleteElement_handleMutation = /** @private */
336
+ async function _M3eAutocompleteElement_handleMutation() {
337
+ if (__classPrivateFieldGet(this, _M3eAutocompleteElement_mutationAbortController, "f")) {
338
+ __classPrivateFieldGet(this, _M3eAutocompleteElement_mutationAbortController, "f").abort();
339
+ }
340
+ const mutationAbortController = new AbortController();
341
+ __classPrivateFieldSet(this, _M3eAutocompleteElement_mutationAbortController, mutationAbortController, "f");
342
+ const options = [...this.querySelectorAll("m3e-option")];
343
+ for (const option of options) {
344
+ if (mutationAbortController.signal.aborted) {
345
+ break;
346
+ }
347
+ if (option.isUpdatePending) {
348
+ await option.updateComplete;
349
+ }
350
+ }
351
+ if (mutationAbortController.signal.aborted) {
352
+ return;
353
+ }
354
+ this._options = options;
355
+ __classPrivateFieldSet(this, _M3eAutocompleteElement_clone, this.cloneNode(true), "f");
231
356
  const {
232
357
  added
233
- } = this._listKeyManager.setItems([...this.querySelectorAll("m3e-option")]);
358
+ } = this._listKeyManager.setItems([...__classPrivateFieldGet(this, _M3eAutocompleteElement_clone, "f").querySelectorAll("m3e-option")]);
234
359
  added.forEach(x => {
235
360
  x.id = x.id || `${__classPrivateFieldGet(this, _M3eAutocompleteElement_id, "f")}-option-${this._listKeyManager.items.indexOf(x)}`;
236
361
  setCustomState(x, "-hide-selection-indicator", this.hideSelectionIndicator);
237
362
  });
363
+ if (__classPrivateFieldGet(this, _M3eAutocompleteElement_menu, "f")) {
364
+ const count = __classPrivateFieldGet(this, _M3eAutocompleteElement_instances, "m", _M3eAutocompleteElement_filterOptions).call(this);
365
+ __classPrivateFieldGet(this, _M3eAutocompleteElement_menu, "f").replaceChildren(...__classPrivateFieldGet(this, _M3eAutocompleteElement_clone, "f").childNodes);
366
+ if (!__classPrivateFieldGet(this, _M3eAutocompleteElement_instances, "a", _M3eAutocompleteElement_shouldShowMenu_get)) {
367
+ __classPrivateFieldGet(this, _M3eAutocompleteElement_instances, "m", _M3eAutocompleteElement_hideMenu).call(this);
368
+ } else {
369
+ __classPrivateFieldGet(this, _M3eAutocompleteElement_instances, "m", _M3eAutocompleteElement_updateMenuState).call(this, __classPrivateFieldGet(this, _M3eAutocompleteElement_menu, "f"), count);
370
+ }
371
+ }
238
372
  };
239
373
  _M3eAutocompleteElement_handleClick = function _M3eAutocompleteElement_handleClick() {
240
374
  __classPrivateFieldSet(this, _M3eAutocompleteElement_ignoreFocusVisible, true, "f");
@@ -244,10 +378,21 @@ _M3eAutocompleteElement_handleFormFieldPointerDown = function _M3eAutocompleteEl
244
378
  __classPrivateFieldSet(this, _M3eAutocompleteElement_ignoreHideMenuOnBlur, true, "f");
245
379
  };
246
380
  _M3eAutocompleteElement_handleFocus = function _M3eAutocompleteElement_handleFocus() {
381
+ __classPrivateFieldSet(this, _M3eAutocompleteElement_hasFocus, true, "f");
247
382
  __classPrivateFieldSet(this, _M3eAutocompleteElement_ignoreFocusVisible, true, "f");
383
+ if (this.options.length == 0 && !this.control.readOnly) {
384
+ this.dispatchEvent(new CustomEvent("query", {
385
+ detail: {
386
+ term: __classPrivateFieldGet(this, _M3eAutocompleteElement_instances, "a", _M3eAutocompleteElement_input_get)?.value ?? ""
387
+ },
388
+ bubbles: true,
389
+ composed: true
390
+ }));
391
+ }
248
392
  __classPrivateFieldGet(this, _M3eAutocompleteElement_instances, "m", _M3eAutocompleteElement_showMenu).call(this);
249
393
  };
250
394
  _M3eAutocompleteElement_handleBlur = function _M3eAutocompleteElement_handleBlur() {
395
+ __classPrivateFieldSet(this, _M3eAutocompleteElement_hasFocus, false, "f");
251
396
  if (!__classPrivateFieldGet(this, _M3eAutocompleteElement_ignoreHideMenuOnBlur, "f")) {
252
397
  __classPrivateFieldGet(this, _M3eAutocompleteElement_instances, "m", _M3eAutocompleteElement_hideMenu).call(this);
253
398
  }
@@ -255,19 +400,30 @@ _M3eAutocompleteElement_handleBlur = function _M3eAutocompleteElement_handleBlur
255
400
  };
256
401
  _M3eAutocompleteElement_handleInput = function _M3eAutocompleteElement_handleInput(e) {
257
402
  if (!__classPrivateFieldGet(this, _M3eAutocompleteElement_instances, "a", _M3eAutocompleteElement_input_get) || e.defaultPrevented) return;
258
- if (__classPrivateFieldGet(this, _M3eAutocompleteElement_textHighlight, "f")) {
259
- __classPrivateFieldGet(this, _M3eAutocompleteElement_textHighlight, "f").term = __classPrivateFieldGet(this, _M3eAutocompleteElement_instances, "a", _M3eAutocompleteElement_input_get).value;
260
- }
261
- __classPrivateFieldGet(this, _M3eAutocompleteElement_instances, "m", _M3eAutocompleteElement_filterOptions).call(this);
262
- if (!__classPrivateFieldGet(this, _M3eAutocompleteElement_menu, "f")) {
263
- __classPrivateFieldGet(this, _M3eAutocompleteElement_instances, "m", _M3eAutocompleteElement_showMenu).call(this);
264
- } else if (!__classPrivateFieldGet(this, _M3eAutocompleteElement_instances, "a", _M3eAutocompleteElement_hasVisibleOptions_get)) {
265
- __classPrivateFieldGet(this, _M3eAutocompleteElement_instances, "m", _M3eAutocompleteElement_hideMenu).call(this);
403
+ this.dispatchEvent(new CustomEvent("query", {
404
+ detail: {
405
+ term: __classPrivateFieldGet(this, _M3eAutocompleteElement_instances, "a", _M3eAutocompleteElement_input_get).value
406
+ },
407
+ bubbles: true,
408
+ composed: true
409
+ }));
410
+ __classPrivateFieldSet(this, _M3eAutocompleteElement_inputChanged, true, "f");
411
+ try {
412
+ if (!__classPrivateFieldGet(this, _M3eAutocompleteElement_menu, "f")) {
413
+ __classPrivateFieldGet(this, _M3eAutocompleteElement_instances, "m", _M3eAutocompleteElement_showMenu).call(this);
414
+ } else {
415
+ __classPrivateFieldGet(this, _M3eAutocompleteElement_instances, "m", _M3eAutocompleteElement_filterOptions).call(this);
416
+ if (!__classPrivateFieldGet(this, _M3eAutocompleteElement_instances, "a", _M3eAutocompleteElement_shouldShowMenu_get)) {
417
+ __classPrivateFieldGet(this, _M3eAutocompleteElement_instances, "m", _M3eAutocompleteElement_hideMenu).call(this);
418
+ }
419
+ }
420
+ } finally {
421
+ __classPrivateFieldSet(this, _M3eAutocompleteElement_inputChanged, false, "f");
422
+ __classPrivateFieldGet(this, _M3eAutocompleteElement_instances, "a", _M3eAutocompleteElement_formField_get)?.notifyControlStateChange(true);
266
423
  }
267
- __classPrivateFieldGet(this, _M3eAutocompleteElement_instances, "a", _M3eAutocompleteElement_formField_get)?.notifyControlStateChange(true);
268
424
  };
269
425
  _M3eAutocompleteElement_handleChange = function _M3eAutocompleteElement_handleChange() {
270
- if (__classPrivateFieldGet(this, _M3eAutocompleteElement_instances, "a", _M3eAutocompleteElement_input_get) && this.required && !this.options.some(x => x.selected && !x.disabled)) {
426
+ if (__classPrivateFieldGet(this, _M3eAutocompleteElement_instances, "a", _M3eAutocompleteElement_input_get) && this.required && !__classPrivateFieldGet(this, _M3eAutocompleteElement_instances, "a", _M3eAutocompleteElement_options_get).some(x => x.selected && !x.disabled)) {
271
427
  __classPrivateFieldGet(this, _M3eAutocompleteElement_instances, "a", _M3eAutocompleteElement_input_get).value = "";
272
428
  }
273
429
  };
@@ -342,7 +498,7 @@ _M3eAutocompleteElement_handleMenuPointerDown = function _M3eAutocompleteElement
342
498
  _M3eAutocompleteElement_handleMenuToggle = function _M3eAutocompleteElement_handleMenuToggle(e) {
343
499
  if (!__classPrivateFieldGet(this, _M3eAutocompleteElement_menu, "f")) return;
344
500
  if (e.newState !== "closed") {
345
- const option = this.options.find(x => x.selected && !x.disabled);
501
+ const option = __classPrivateFieldGet(this, _M3eAutocompleteElement_instances, "a", _M3eAutocompleteElement_options_get).find(x => x.selected && !x.disabled);
346
502
  if (option) {
347
503
  this._listKeyManager.setActiveItem(option);
348
504
  scrollIntoViewIfNeeded(option, __classPrivateFieldGet(this, _M3eAutocompleteElement_menu, "f"));
@@ -364,14 +520,12 @@ _M3eAutocompleteElement_handleMenuToggle = function _M3eAutocompleteElement_hand
364
520
  }
365
521
  };
366
522
  _M3eAutocompleteElement_destroyMenu = function _M3eAutocompleteElement_destroyMenu(e) {
367
- if (!__classPrivateFieldGet(this, _M3eAutocompleteElement_menu, "f") || !__classPrivateFieldGet(this, _M3eAutocompleteElement_textHighlight, "f")) return;
368
- [...__classPrivateFieldGet(this, _M3eAutocompleteElement_textHighlight, "f").childNodes].forEach(x => this.append(x));
369
- __classPrivateFieldGet(this, _M3eAutocompleteElement_textHighlight, "f").remove();
523
+ if (!__classPrivateFieldGet(this, _M3eAutocompleteElement_menu, "f")) return;
524
+ __classPrivateFieldGet(this, _M3eAutocompleteElement_clone, "f")?.replaceChildren(...__classPrivateFieldGet(this, _M3eAutocompleteElement_menu, "f").childNodes);
370
525
  __classPrivateFieldGet(this, _M3eAutocompleteElement_menu, "f").remove();
371
526
  __classPrivateFieldGet(this, _M3eAutocompleteElement_menu, "f").removeEventListener("toggle", __classPrivateFieldGet(this, _M3eAutocompleteElement_menuToggleHandler, "f"));
372
527
  __classPrivateFieldGet(this, _M3eAutocompleteElement_menu, "f").removeEventListener("pointerdown", __classPrivateFieldGet(this, _M3eAutocompleteElement_menuPointerDownHandler, "f"));
373
528
  __classPrivateFieldSet(this, _M3eAutocompleteElement_menu, undefined, "f");
374
- __classPrivateFieldSet(this, _M3eAutocompleteElement_textHighlight, undefined, "f");
375
529
  if (__classPrivateFieldGet(this, _M3eAutocompleteElement_instances, "a", _M3eAutocompleteElement_input_get)) {
376
530
  __classPrivateFieldGet(this, _M3eAutocompleteElement_instances, "a", _M3eAutocompleteElement_input_get).ariaExpanded = "false";
377
531
  __classPrivateFieldGet(this, _M3eAutocompleteElement_instances, "a", _M3eAutocompleteElement_input_get).removeAttribute("aria-controls");
@@ -385,20 +539,32 @@ _M3eAutocompleteElement_destroyMenu = function _M3eAutocompleteElement_destroyMe
385
539
  }));
386
540
  };
387
541
  _M3eAutocompleteElement_showMenu = function _M3eAutocompleteElement_showMenu() {
388
- if (__classPrivateFieldGet(this, _M3eAutocompleteElement_menu, "f") || !__classPrivateFieldGet(this, _M3eAutocompleteElement_instances, "a", _M3eAutocompleteElement_input_get) || __classPrivateFieldGet(this, _M3eAutocompleteElement_instances, "a", _M3eAutocompleteElement_input_get).readOnly || __classPrivateFieldGet(this, _M3eAutocompleteElement_instances, "a", _M3eAutocompleteElement_input_get).disabled || !__classPrivateFieldGet(this, _M3eAutocompleteElement_instances, "a", _M3eAutocompleteElement_hasVisibleOptions_get)) return;
389
- __classPrivateFieldGet(this, _M3eAutocompleteElement_instances, "m", _M3eAutocompleteElement_filterOptions).call(this);
542
+ if (__classPrivateFieldGet(this, _M3eAutocompleteElement_menu, "f") || !__classPrivateFieldGet(this, _M3eAutocompleteElement_instances, "a", _M3eAutocompleteElement_input_get) || __classPrivateFieldGet(this, _M3eAutocompleteElement_instances, "a", _M3eAutocompleteElement_input_get).readOnly || __classPrivateFieldGet(this, _M3eAutocompleteElement_instances, "a", _M3eAutocompleteElement_input_get).disabled) return;
543
+ const count = __classPrivateFieldGet(this, _M3eAutocompleteElement_instances, "m", _M3eAutocompleteElement_filterOptions).call(this);
544
+ if (!__classPrivateFieldGet(this, _M3eAutocompleteElement_instances, "a", _M3eAutocompleteElement_shouldShowMenu_get)) return;
390
545
  __classPrivateFieldSet(this, _M3eAutocompleteElement_menu, document.createElement("m3e-option-panel"), "f");
391
546
  __classPrivateFieldGet(this, _M3eAutocompleteElement_menu, "f").id = __classPrivateFieldGet(this, _M3eAutocompleteElement_menuId, "f");
392
547
  __classPrivateFieldGet(this, _M3eAutocompleteElement_menu, "f").style.overflowX = "hidden";
393
548
  __classPrivateFieldGet(this, _M3eAutocompleteElement_menu, "f").style.minWidth = __classPrivateFieldGet(this, _M3eAutocompleteElement_instances, "a", _M3eAutocompleteElement_minMenuWidth_get);
394
549
  __classPrivateFieldGet(this, _M3eAutocompleteElement_menu, "f").addEventListener("toggle", __classPrivateFieldGet(this, _M3eAutocompleteElement_menuToggleHandler, "f"));
395
550
  __classPrivateFieldGet(this, _M3eAutocompleteElement_menu, "f").addEventListener("pointerdown", __classPrivateFieldGet(this, _M3eAutocompleteElement_menuPointerDownHandler, "f"));
396
- __classPrivateFieldSet(this, _M3eAutocompleteElement_textHighlight, document.createElement("m3e-text-highlight"), "f");
397
- __classPrivateFieldGet(this, _M3eAutocompleteElement_textHighlight, "f").term = __classPrivateFieldGet(this, _M3eAutocompleteElement_instances, "a", _M3eAutocompleteElement_input_get).value;
398
- __classPrivateFieldGet(this, _M3eAutocompleteElement_menu, "f").appendChild(__classPrivateFieldGet(this, _M3eAutocompleteElement_textHighlight, "f"));
399
- for (const node of [...this.childNodes]) {
400
- __classPrivateFieldGet(this, _M3eAutocompleteElement_textHighlight, "f").append(node);
551
+ if (__classPrivateFieldGet(this, _M3eAutocompleteElement_clone, "f")) {
552
+ const children = [...__classPrivateFieldGet(this, _M3eAutocompleteElement_clone, "f").childNodes];
553
+ if (!__classPrivateFieldGet(this, _M3eAutocompleteElement_instances, "a", _M3eAutocompleteElement_hasNoDataSlot_get) && this.noDataLabel) {
554
+ const noDataSpan = document.createElement("span");
555
+ noDataSpan.slot = "no-data";
556
+ noDataSpan.textContent = this.noDataLabel;
557
+ children.push(noDataSpan);
558
+ }
559
+ if (!__classPrivateFieldGet(this, _M3eAutocompleteElement_instances, "a", _M3eAutocompleteElement_hasLoadingSlot_get) && this.loadingLabel) {
560
+ const loadingSpan = document.createElement("span");
561
+ loadingSpan.slot = "loading";
562
+ loadingSpan.textContent = this.loadingLabel;
563
+ children.push(loadingSpan);
564
+ }
565
+ __classPrivateFieldGet(this, _M3eAutocompleteElement_menu, "f").replaceChildren(...children);
401
566
  }
567
+ __classPrivateFieldGet(this, _M3eAutocompleteElement_instances, "m", _M3eAutocompleteElement_updateMenuState).call(this, __classPrivateFieldGet(this, _M3eAutocompleteElement_menu, "f"), count);
402
568
  (__classPrivateFieldGet(this, _M3eAutocompleteElement_instances, "a", _M3eAutocompleteElement_formField_get) ?? __classPrivateFieldGet(this, _M3eAutocompleteElement_instances, "a", _M3eAutocompleteElement_input_get)).insertAdjacentElement("afterend", __classPrivateFieldGet(this, _M3eAutocompleteElement_menu, "f"));
403
569
  __classPrivateFieldGet(this, _M3eAutocompleteElement_instances, "a", _M3eAutocompleteElement_input_get).setAttribute("aria-controls", __classPrivateFieldGet(this, _M3eAutocompleteElement_menuId, "f"));
404
570
  __classPrivateFieldGet(this, _M3eAutocompleteElement_instances, "a", _M3eAutocompleteElement_input_get).setAttribute("aria-owns", __classPrivateFieldGet(this, _M3eAutocompleteElement_menuId, "f"));
@@ -409,6 +575,10 @@ _M3eAutocompleteElement_showMenu = function _M3eAutocompleteElement_showMenu() {
409
575
  const input = __classPrivateFieldGet(this, _M3eAutocompleteElement_instances, "a", _M3eAutocompleteElement_input_get);
410
576
  setTimeout(() => __classPrivateFieldGet(this, _M3eAutocompleteElement_menu, "f")?.show(input, __classPrivateFieldGet(this, _M3eAutocompleteElement_instances, "a", _M3eAutocompleteElement_formField_get)?.menuAnchor));
411
577
  };
578
+ _M3eAutocompleteElement_updateMenuState = function _M3eAutocompleteElement_updateMenuState(menu, count) {
579
+ setCustomState(menu, "-loading", this.loading);
580
+ setCustomState(menu, "-no-data", count == 0);
581
+ };
412
582
  _M3eAutocompleteElement_hideMenu = function _M3eAutocompleteElement_hideMenu() {
413
583
  __classPrivateFieldGet(this, _M3eAutocompleteElement_menu, "f")?.hide();
414
584
  __classPrivateFieldGet(this, _M3eAutocompleteElement_instances, "a", _M3eAutocompleteElement_input_get)?.removeAttribute("aria-activedescendant");
@@ -422,7 +592,7 @@ _M3eAutocompleteElement_activateOption = function _M3eAutocompleteElement_activa
422
592
  behavior: "instant"
423
593
  });
424
594
  const focusVisible = forceFocusVisible || !__classPrivateFieldGet(this, _M3eAutocompleteElement_ignoreFocusVisible, "f") && (__classPrivateFieldGet(this, _M3eAutocompleteElement_instances, "a", _M3eAutocompleteElement_input_get).matches(":focus-visible") || forcedColorsActive());
425
- this.options.forEach(x => {
595
+ __classPrivateFieldGet(this, _M3eAutocompleteElement_instances, "a", _M3eAutocompleteElement_options_get).forEach(x => {
426
596
  const active = x === option && focusVisible;
427
597
  if (active) {
428
598
  x.focusRing?.show();
@@ -434,56 +604,124 @@ _M3eAutocompleteElement_activateOption = function _M3eAutocompleteElement_activa
434
604
  });
435
605
  }
436
606
  };
437
- _M3eAutocompleteElement_selectOption = function _M3eAutocompleteElement_selectOption(option) {
607
+ _M3eAutocompleteElement_updateSelectionState = /** @private */
608
+ async function _M3eAutocompleteElement_updateSelectionState(clone) {
609
+ const option = this._options[this._listKeyManager.items.indexOf(clone)];
610
+ if (option) {
611
+ option.selected = clone.selected;
612
+ if (option.isUpdatePending) {
613
+ await option.updateComplete;
614
+ }
615
+ }
616
+ };
617
+ _M3eAutocompleteElement_selectOption = /** @private */
618
+ async function _M3eAutocompleteElement_selectOption(option) {
438
619
  if (option.selected) return;
439
620
  option.selected = true;
440
- option.requestUpdate();
621
+ await __classPrivateFieldGet(this, _M3eAutocompleteElement_instances, "m", _M3eAutocompleteElement_updateSelectionState).call(this, option);
622
+ if (option.isUpdatePending) {
623
+ await option.updateComplete;
624
+ }
441
625
  this.requestUpdate();
626
+ if (this.isUpdatePending) {
627
+ await this.updateComplete;
628
+ }
442
629
  if (__classPrivateFieldGet(this, _M3eAutocompleteElement_instances, "a", _M3eAutocompleteElement_input_get)) {
443
630
  __classPrivateFieldGet(this, _M3eAutocompleteElement_instances, "a", _M3eAutocompleteElement_input_get).value = option.value;
444
631
  }
445
632
  __classPrivateFieldGet(this, _M3eAutocompleteElement_instances, "a", _M3eAutocompleteElement_formField_get)?.notifyControlStateChange(true);
446
633
  };
634
+ _M3eAutocompleteElement_filterOption = function _M3eAutocompleteElement_filterOption(clone, option, term, exactTerm) {
635
+ const value = this.caseSensitive ? option.value : option.value.toLowerCase();
636
+ switch (this.filter) {
637
+ case "starts-with":
638
+ clone.term = exactTerm;
639
+ clone.highlightMode = this.filter;
640
+ return value.startsWith(term);
641
+ case "ends-with":
642
+ clone.term = exactTerm;
643
+ clone.highlightMode = this.filter;
644
+ return value.endsWith(term);
645
+ case "contains":
646
+ clone.term = exactTerm;
647
+ clone.highlightMode = this.filter;
648
+ return value.includes(term);
649
+ case "none":
650
+ clone.disableHighlight = true;
651
+ return true;
652
+ default:
653
+ clone.disableHighlight = true;
654
+ return this.filter(option, exactTerm);
655
+ }
656
+ };
447
657
  _M3eAutocompleteElement_filterOptions = function _M3eAutocompleteElement_filterOptions() {
448
- if (!__classPrivateFieldGet(this, _M3eAutocompleteElement_instances, "a", _M3eAutocompleteElement_input_get)) return;
449
- const term = __classPrivateFieldGet(this, _M3eAutocompleteElement_instances, "a", _M3eAutocompleteElement_input_get).value.toLocaleLowerCase();
658
+ if (!__classPrivateFieldGet(this, _M3eAutocompleteElement_instances, "a", _M3eAutocompleteElement_input_get)) return 0;
659
+ const oldCount = __classPrivateFieldGet(this, _M3eAutocompleteElement_instances, "a", _M3eAutocompleteElement_options_get).filter(x => !x.hidden).length;
660
+ const shouldAnnounce = !this.loading && __classPrivateFieldGet(this, _M3eAutocompleteElement_inputChanged, "f");
661
+ __classPrivateFieldSet(this, _M3eAutocompleteElement_inputChanged, false, "f");
662
+ const exactTerm = __classPrivateFieldGet(this, _M3eAutocompleteElement_instances, "a", _M3eAutocompleteElement_input_get).value;
663
+ const term = this.caseSensitive ? exactTerm : exactTerm.toLocaleLowerCase();
664
+ let newCount = 0;
450
665
  let first = false;
451
666
  let last;
452
- for (const option of this.options) {
453
- const value = option.value.toLocaleLowerCase();
454
- const hidden = !value.includes(term);
455
- option.style.display = hidden ? "none" : "";
456
- if (hidden) {
457
- __classPrivateFieldGet(this, _M3eAutocompleteElement_instances, "m", _M3eAutocompleteElement_deactivateOption).call(this, option);
458
- deleteCustomState(option, "-first");
459
- deleteCustomState(option, "-last");
460
- } else if (!first) {
461
- addCustomState(option, "-first");
462
- first = true;
463
- addCustomState(option, "-last");
464
- last = option;
667
+ for (let i = 0; i < __classPrivateFieldGet(this, _M3eAutocompleteElement_instances, "a", _M3eAutocompleteElement_options_get).length; i++) {
668
+ const clone = __classPrivateFieldGet(this, _M3eAutocompleteElement_instances, "a", _M3eAutocompleteElement_options_get)[i];
669
+ const option = this._options[i];
670
+ clone.hidden = !__classPrivateFieldGet(this, _M3eAutocompleteElement_instances, "m", _M3eAutocompleteElement_filterOption).call(this, clone, option, term, exactTerm);
671
+ if (clone.hidden) {
672
+ __classPrivateFieldGet(this, _M3eAutocompleteElement_instances, "m", _M3eAutocompleteElement_deactivateOption).call(this, clone);
673
+ deleteCustomState(clone, "-first");
674
+ deleteCustomState(clone, "-last");
465
675
  } else {
466
- deleteCustomState(option, "-first");
467
- if (last) {
468
- deleteCustomState(last, "-last");
676
+ newCount++;
677
+ if (!first && !(clone.parentElement instanceof M3eOptGroupElement)) {
678
+ addCustomState(clone, "-first");
679
+ first = true;
680
+ addCustomState(clone, "-last");
681
+ last = clone;
682
+ } else {
683
+ deleteCustomState(clone, "-first");
684
+ if (last) {
685
+ deleteCustomState(last, "-last");
686
+ }
687
+ addCustomState(clone, "-last");
688
+ last = clone;
469
689
  }
470
- addCustomState(option, "-last");
471
- last = option;
472
690
  }
473
- if (option.selected && value !== term) {
474
- option.selected = false;
691
+ if (clone.selected && option.value !== exactTerm) {
692
+ clone.selected = false;
693
+ __classPrivateFieldGet(this, _M3eAutocompleteElement_instances, "m", _M3eAutocompleteElement_updateSelectionState).call(this, clone);
475
694
  }
476
695
  }
477
- const groups = __classPrivateFieldGet(this, _M3eAutocompleteElement_menu, "f")?.querySelectorAll("m3e-optgroup") ?? this.querySelectorAll("m3e-optgroup");
696
+ if (__classPrivateFieldGet(this, _M3eAutocompleteElement_menu, "f")) {
697
+ __classPrivateFieldGet(this, _M3eAutocompleteElement_instances, "m", _M3eAutocompleteElement_updateMenuState).call(this, __classPrivateFieldGet(this, _M3eAutocompleteElement_menu, "f"), newCount);
698
+ }
699
+ const groups = __classPrivateFieldGet(this, _M3eAutocompleteElement_menu, "f")?.querySelectorAll("m3e-optgroup") ?? __classPrivateFieldGet(this, _M3eAutocompleteElement_clone, "f")?.querySelectorAll("m3e-optgroup") ?? [];
478
700
  for (const group of groups) {
479
- const hidden = [...group.querySelectorAll("m3e-option")].every(x => x.style.display === "none");
480
- group.style.display = hidden ? "none" : "";
701
+ group.hidden = [...group.querySelectorAll("m3e-option")].every(x => x.hidden);
702
+ }
703
+ if (shouldAnnounce) {
704
+ __classPrivateFieldGet(this, _M3eAutocompleteElement_instances, "m", _M3eAutocompleteElement_announceResults).call(this, oldCount, newCount);
481
705
  }
482
706
  __classPrivateFieldGet(this, _M3eAutocompleteElement_instances, "m", _M3eAutocompleteElement_autoActivate).call(this);
707
+ return newCount;
708
+ };
709
+ _M3eAutocompleteElement_announceResults = function _M3eAutocompleteElement_announceResults(oldCount, newCount) {
710
+ if (!__classPrivateFieldGet(this, _M3eAutocompleteElement_hasFocus, "f")) return;
711
+ if (newCount == 0) {
712
+ if (oldCount > 0 && this.noDataLabel) {
713
+ M3eLiveAnnouncer.announce(this.noDataLabel, "polite");
714
+ }
715
+ } else if (oldCount != newCount) {
716
+ const message = this.resultsLabel instanceof Function ? this.resultsLabel(newCount) : this.resultsLabel;
717
+ if (message) {
718
+ M3eLiveAnnouncer.announce(message, "polite");
719
+ }
720
+ }
483
721
  };
484
722
  _M3eAutocompleteElement_autoActivate = function _M3eAutocompleteElement_autoActivate() {
485
723
  if (this.autoActivate && (!this._listKeyManager.activeItem || !this._listKeyManager.activeItem.selected)) {
486
- const option = this.options.find(x => !x.disabled && x.style.display !== "none");
724
+ const option = __classPrivateFieldGet(this, _M3eAutocompleteElement_instances, "a", _M3eAutocompleteElement_options_get).find(x => !x.disabled && !x.hidden);
487
725
  if (option) {
488
726
  this._listKeyManager.setActiveItem(option);
489
727
  if (__classPrivateFieldGet(this, _M3eAutocompleteElement_menu, "f")) {
@@ -519,6 +757,41 @@ __decorate([property({
519
757
  attribute: "auto-activate",
520
758
  type: Boolean
521
759
  })], M3eAutocompleteElement.prototype, "autoActivate", void 0);
760
+ __decorate([property({
761
+ attribute: "case-sensitive",
762
+ type: Boolean
763
+ })], M3eAutocompleteElement.prototype, "caseSensitive", void 0);
764
+ __decorate([property({
765
+ converter: {
766
+ fromAttribute(value) {
767
+ if (value === null) return "contains";
768
+ if (value === "starts-with" || value === "ends-with" || value === "contains" || value === "none") {
769
+ return value;
770
+ }
771
+ return "contains";
772
+ }
773
+ }
774
+ })], M3eAutocompleteElement.prototype, "filter", void 0);
775
+ __decorate([property({
776
+ type: Boolean
777
+ })], M3eAutocompleteElement.prototype, "loading", void 0);
778
+ __decorate([property({
779
+ attribute: "hide-no-data",
780
+ type: Boolean
781
+ })], M3eAutocompleteElement.prototype, "hideNoData", void 0);
782
+ __decorate([property({
783
+ attribute: "hide-loading",
784
+ type: Boolean
785
+ })], M3eAutocompleteElement.prototype, "hideLoading", void 0);
786
+ __decorate([property({
787
+ attribute: "loading-label"
788
+ })], M3eAutocompleteElement.prototype, "loadingLabel", void 0);
789
+ __decorate([property({
790
+ attribute: "no-data-label"
791
+ })], M3eAutocompleteElement.prototype, "noDataLabel", void 0);
792
+ __decorate([property({
793
+ attribute: "results-label"
794
+ })], M3eAutocompleteElement.prototype, "resultsLabel", void 0);
522
795
  M3eAutocompleteElement = M3eAutocompleteElement_1 = __decorate([customElement("m3e-autocomplete")], M3eAutocompleteElement);
523
796
 
524
797
  export { M3eAutocompleteElement };