@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
package/dist/option.js CHANGED
@@ -5,10 +5,9 @@
5
5
  */
6
6
  import { LitElement, html, unsafeCSS, css } from 'lit';
7
7
  import { query, property } from 'lit/decorators.js';
8
- import { Selected, Disabled, AttachInternals, Role, DesignToken, customElement, getTextContent, setCustomState, ScrollController, addCustomState, deleteCustomState } from '@m3e/web/core';
8
+ import { Selected, Disabled, AttachInternals, Role, DesignToken, customElement, getTextContent, setCustomState, ScrollController, MutationController, hasAssignedNodes, deleteCustomState, addCustomState } from '@m3e/web/core';
9
9
  import { typeaheadLabel, removeAriaReferencedId, addAriaReferencedId } from '@m3e/web/core/a11y';
10
- import { positionAnchor } from '@m3e/web/core/anchoring';
11
- import { M3eDirectionality } from '@m3e/web/core/bidi';
10
+ import { M3eFloatingPanelElement } from '@m3e/web/core/anchoring';
12
11
 
13
12
  /******************************************************************************
14
13
  Copyright (c) Microsoft Corporation.
@@ -65,7 +64,10 @@ var _M3eOptionElement_instances, _M3eOptionElement_value, _M3eOptionElement_text
65
64
  * @slot - Renders the label of the option.
66
65
  *
67
66
  * @attr disabled - Whether the element is disabled.
67
+ * @attr disable-highlight - Whether text highlighting is disabled.
68
+ * @attr highlight-mode - The mode in which to highlight a term.
68
69
  * @attr selected - Whether the element is selected.
70
+ * @attr term - The search term to highlight.
69
71
  * @attr value - A string representing the value of the option.
70
72
  *
71
73
  * @cssprop --m3e-option-container-height - The height of the option container.
@@ -102,6 +104,21 @@ let M3eOptionElement = class M3eOptionElement extends Selected(Disabled(AttachIn
102
104
  _M3eOptionElement_value.set(this, void 0);
103
105
  /** @private */
104
106
  _M3eOptionElement_textContent.set(this, "");
107
+ /**
108
+ * The search term to highlight.
109
+ * @default ""
110
+ */
111
+ this.term = "";
112
+ /**
113
+ * The mode in which to highlight a term.
114
+ * @default "contains"
115
+ */
116
+ this.highlightMode = "contains";
117
+ /**
118
+ * Whether text highlighting is disabled.
119
+ * @default false
120
+ */
121
+ this.disableHighlight = false;
105
122
  }
106
123
  /** A string representing the value of the option. */
107
124
  get value() {
@@ -110,9 +127,13 @@ let M3eOptionElement = class M3eOptionElement extends Selected(Disabled(AttachIn
110
127
  set value(value) {
111
128
  __classPrivateFieldSet(this, _M3eOptionElement_value, value, "f");
112
129
  }
130
+ /** The textual label of the option. */
131
+ get label() {
132
+ return __classPrivateFieldGet(this, _M3eOptionElement_textContent, "f");
133
+ }
113
134
  /** @internal */
114
135
  [(_M3eOptionElement_value = new WeakMap(), _M3eOptionElement_textContent = new WeakMap(), _M3eOptionElement_instances = new WeakSet(), typeaheadLabel)]() {
115
- return __classPrivateFieldGet(this, _M3eOptionElement_textContent, "f");
136
+ return this.label;
116
137
  }
117
138
  /** Whether the option represents an empty option. */
118
139
  get isEmpty() {
@@ -132,7 +153,7 @@ let M3eOptionElement = class M3eOptionElement extends Selected(Disabled(AttachIn
132
153
  update(changedProperties) {
133
154
  super.update(changedProperties);
134
155
  if (changedProperties.has("selected") && this.selected) {
135
- const panel = this.closest("[role='listbox']") ?? this.closest("m3e-select");
156
+ const panel = this.closest("[role='listbox']") ?? this.closest("m3e-autocomplete") ?? this.closest("m3e-select");
136
157
  if (panel && panel.ariaMultiSelectable !== "true" && !panel.hasAttribute("multi")) {
137
158
  panel.querySelectorAll("m3e-option").forEach(x => {
138
159
  if (x !== this && x.selected) {
@@ -144,7 +165,7 @@ let M3eOptionElement = class M3eOptionElement extends Selected(Disabled(AttachIn
144
165
  }
145
166
  /** @inheritdoc */
146
167
  render() {
147
- return html`<div class="base"><m3e-state-layer class="state-layer" ?disabled="${this.disabled}"></m3e-state-layer><m3e-focus-ring class="focus-ring" ?disabled="${this.disabled}"></m3e-focus-ring><m3e-ripple class="ripple" ?disabled="${this.disabled}"></m3e-ripple><div class="touch" aria-hidden="true"></div><div class="wrapper"><div class="icon" aria-hidden="true"><svg class="check" viewBox="0 -960 960 960"><path fill="currentColor" d="M382-240 154-468l57-57 171 171 367-367 57 57-424 424Z"/></svg></div><m3e-text-overflow class="label"><slot @slotchange="${__classPrivateFieldGet(this, _M3eOptionElement_instances, "m", _M3eOptionElement_handleSlotChange)}"></slot></m3e-text-overflow></div></div>`;
168
+ return html`<div class="base"><m3e-state-layer class="state-layer" ?disabled="${this.disabled}"></m3e-state-layer><m3e-focus-ring class="focus-ring" ?disabled="${this.disabled}"></m3e-focus-ring><m3e-ripple class="ripple" ?disabled="${this.disabled}"></m3e-ripple><div class="touch" aria-hidden="true"></div><div class="wrapper"><div class="icon" aria-hidden="true"><svg class="check" viewBox="0 -960 960 960"><path fill="currentColor" d="M382-240 154-468l57-57 171 171 367-367 57 57-424 424Z"/></svg></div><m3e-text-overflow class="label"><m3e-text-highlight term="${this.term}" mode="${this.highlightMode}" ?disabled="${this.disableHighlight}"><slot @slotchange="${__classPrivateFieldGet(this, _M3eOptionElement_instances, "m", _M3eOptionElement_handleSlotChange)}"></slot></m3e-text-highlight></m3e-text-overflow></div></div>`;
148
169
  }
149
170
  };
150
171
  _M3eOptionElement_handleSlotChange = function _M3eOptionElement_handleSlotChange(e) {
@@ -157,6 +178,14 @@ __decorate([query(".focus-ring")], M3eOptionElement.prototype, "focusRing", void
157
178
  __decorate([query(".state-layer")], M3eOptionElement.prototype, "stateLayer", void 0);
158
179
  __decorate([query(".ripple")], M3eOptionElement.prototype, "_ripple", void 0);
159
180
  __decorate([property()], M3eOptionElement.prototype, "value", null);
181
+ __decorate([property()], M3eOptionElement.prototype, "term", void 0);
182
+ __decorate([property({
183
+ attribute: "highlight-mode"
184
+ })], M3eOptionElement.prototype, "highlightMode", void 0);
185
+ __decorate([property({
186
+ attribute: "disable-highlight",
187
+ type: Boolean
188
+ })], M3eOptionElement.prototype, "disableHighlight", void 0);
160
189
  M3eOptionElement = __decorate([customElement("m3e-option")], M3eOptionElement);
161
190
 
162
191
  var _M3eOptGroupElement_instances, _M3eOptGroupElement_labelId, _M3eOptGroupElement_label, _M3eOptGroupElement_handleLabelSlotChange;
@@ -226,8 +255,7 @@ M3eOptGroupElement.styles = css`:host { display: block; --_option-padding-start:
226
255
  M3eOptGroupElement.__nextId = 0;
227
256
  M3eOptGroupElement = M3eOptGroupElement_1 = __decorate([customElement("m3e-optgroup")], M3eOptGroupElement);
228
257
 
229
- var _M3eOptionPanelElement_instances, _M3eOptionPanelElement_trigger, _M3eOptionPanelElement_anchor, _M3eOptionPanelElement_anchorCleanup, _M3eOptionPanelElement_documentClickHandler, _M3eOptionPanelElement_scrollController, _M3eOptionPanelElement_toggleHandler, _M3eOptionPanelElement_handleSlotChange, _M3eOptionPanelElement_handleDocumentClick;
230
- var M3eOptionPanelElement_1;
258
+ var _M3eOptionPanelElement_instances, _M3eOptionPanelElement_scrollController, _M3eOptionPanelElement_handleNoDataSlotChange, _M3eOptionPanelElement_handleLoadingSlotChange, _M3eOptionPanelElement_handleMutation;
231
259
  /**
232
260
  * Presents a list of options on a temporary surface.
233
261
  *
@@ -256,151 +284,96 @@ var M3eOptionPanelElement_1;
256
284
  * @cssprop --m3e-option-panel-text-highlight-container-color - Background color used for text highlight matches.
257
285
  * @cssprop --m3e-option-panel-text-highlight-color - Text color used for text highlight matches.
258
286
  */
259
- let M3eOptionPanelElement = M3eOptionPanelElement_1 = class M3eOptionPanelElement extends AttachInternals(Role(LitElement, "listbox")) {
287
+ let M3eOptionPanelElement = class M3eOptionPanelElement extends Role(M3eFloatingPanelElement, "listbox") {
260
288
  constructor() {
261
- super(...arguments);
289
+ super();
262
290
  _M3eOptionPanelElement_instances.add(this);
263
291
  /** @private */
264
- _M3eOptionPanelElement_trigger.set(this, void 0);
265
- /** @private */
266
- _M3eOptionPanelElement_anchor.set(this, void 0);
267
- /** @private */
268
- _M3eOptionPanelElement_anchorCleanup.set(this, void 0);
269
- /** @private */
270
- _M3eOptionPanelElement_documentClickHandler.set(this, e => __classPrivateFieldGet(this, _M3eOptionPanelElement_instances, "m", _M3eOptionPanelElement_handleDocumentClick).call(this, e));
271
- /** @private */
272
292
  _M3eOptionPanelElement_scrollController.set(this, new ScrollController(this, {
273
293
  target: null,
274
294
  callback: () => this.hide(false)
275
295
  }));
276
- /** @private */
277
- _M3eOptionPanelElement_toggleHandler.set(this, e => {
278
- if (e.newState === "closed") {
279
- __classPrivateFieldGet(this, _M3eOptionPanelElement_anchorCleanup, "f")?.call(this);
280
- __classPrivateFieldSet(this, _M3eOptionPanelElement_anchorCleanup, undefined, "f");
281
- }
296
+ /**
297
+ * The state for which to present content.
298
+ * @default "content"
299
+ */
300
+ this.state = "content";
301
+ new MutationController(this, {
302
+ config: {
303
+ childList: true,
304
+ subtree: true
305
+ },
306
+ callback: () => __classPrivateFieldGet(this, _M3eOptionPanelElement_instances, "m", _M3eOptionPanelElement_handleMutation).call(this)
282
307
  });
283
308
  }
284
- /** Whether the panel is open. */
285
- get isOpen() {
286
- return __classPrivateFieldGet(this, _M3eOptionPanelElement_trigger, "f") !== undefined;
287
- }
288
- /** @inheritdoc */
289
- connectedCallback() {
290
- super.connectedCallback();
291
- addCustomState(this, "-no-animate");
292
- this.setAttribute("popover", "manual");
293
- this.addEventListener("toggle", __classPrivateFieldGet(this, _M3eOptionPanelElement_toggleHandler, "f"));
294
- document.addEventListener("click", __classPrivateFieldGet(this, _M3eOptionPanelElement_documentClickHandler, "f"));
295
- }
296
309
  /** @inheritdoc */
297
- disconnectedCallback() {
298
- super.disconnectedCallback();
299
- this.removeEventListener("toggle", __classPrivateFieldGet(this, _M3eOptionPanelElement_toggleHandler, "f"));
300
- document.removeEventListener("click", __classPrivateFieldGet(this, _M3eOptionPanelElement_documentClickHandler, "f"));
301
- }
302
- /**
303
- * Opens the panel.
304
- * @param {HTMLElement} trigger The element that triggered the panel.
305
- * @param {HTMLElement | undefined} anchor The element used to position the panel.
306
- * @returns {Promise<void>} A `Promise` that resolves when the panel is opened.
307
- */
308
310
  async show(trigger, anchor) {
309
- if (__classPrivateFieldGet(this, _M3eOptionPanelElement_trigger, "f") && __classPrivateFieldGet(this, _M3eOptionPanelElement_trigger, "f") !== trigger) {
310
- this.hide();
311
- }
312
- __classPrivateFieldSet(this, _M3eOptionPanelElement_anchorCleanup, await positionAnchor(this, anchor ?? trigger, {
313
- position: "bottom-start",
314
- inline: true,
315
- flip: true
316
- }, (x, y, position) => {
317
- setCustomState(this, "-top", position.includes("top"));
318
- setCustomState(this, "-bottom", position.includes("bottom"));
319
- if (M3eDirectionality.current === "rtl") {
320
- this.style.right = `${window.innerWidth - x - this.clientWidth}px`;
321
- this.style.left = "";
322
- } else {
323
- this.style.left = `${x}px`;
324
- this.style.right = "";
325
- }
326
- this.style.top = `${y}px`;
327
- }), "f");
328
- this.showPopover();
329
- __classPrivateFieldSet(this, _M3eOptionPanelElement_trigger, trigger, "f");
330
- __classPrivateFieldGet(this, _M3eOptionPanelElement_trigger, "f").ariaExpanded = "true";
331
- __classPrivateFieldSet(this, _M3eOptionPanelElement_anchor, anchor, "f");
332
- __classPrivateFieldGet(this, _M3eOptionPanelElement_scrollController, "f").observe(__classPrivateFieldGet(this, _M3eOptionPanelElement_trigger, "f"));
333
- }
334
- /**
335
- * Hides the panel.
336
- * @param {boolean} [restoreFocus=false] Whether to restore focus to the panel's trigger.
337
- */
338
- hide(restoreFocus = false) {
339
- this.hidePopover();
340
- if (__classPrivateFieldGet(this, _M3eOptionPanelElement_trigger, "f")) {
341
- __classPrivateFieldGet(this, _M3eOptionPanelElement_trigger, "f").ariaExpanded = "false";
342
- if (restoreFocus) {
343
- __classPrivateFieldGet(this, _M3eOptionPanelElement_trigger, "f").focus();
344
- }
345
- __classPrivateFieldGet(this, _M3eOptionPanelElement_scrollController, "f").unobserve(__classPrivateFieldGet(this, _M3eOptionPanelElement_trigger, "f"));
346
- __classPrivateFieldSet(this, _M3eOptionPanelElement_trigger, undefined, "f");
347
- }
311
+ await super.show(trigger, anchor);
312
+ __classPrivateFieldGet(this, _M3eOptionPanelElement_scrollController, "f").observe(trigger);
348
313
  }
349
- /**
350
- * Toggles the panel.
351
- * @param {HTMLElement} trigger The element that triggered the panel.
352
- * @param {HTMLElement | undefined} anchor The element used to position the panel.
353
- * @returns {Promise<void>} A `Promise` that resolves when the panel is opened or closed.
354
- */
355
- async toggle(trigger, anchor) {
356
- if (__classPrivateFieldGet(this, _M3eOptionPanelElement_trigger, "f")) {
357
- this.hide();
358
- } else {
359
- await this.show(trigger, anchor);
314
+ /** @inheritdoc */
315
+ hide(restoreFocus) {
316
+ if (this.trigger) {
317
+ __classPrivateFieldGet(this, _M3eOptionPanelElement_scrollController, "f").unobserve(this.trigger);
360
318
  }
319
+ super.hide(restoreFocus);
361
320
  }
362
321
  /** @inheritdoc */
363
- firstUpdated(_changedProperties) {
364
- super.firstUpdated(_changedProperties);
365
- requestAnimationFrame(() => deleteCustomState(this, "-no-animate"));
322
+ connectedCallback() {
323
+ super.connectedCallback();
324
+ __classPrivateFieldGet(this, _M3eOptionPanelElement_instances, "m", _M3eOptionPanelElement_handleMutation).call(this);
366
325
  }
367
326
  /** @inheritdoc */
368
327
  render() {
369
- return html`<div class="base"><slot @slotchange="${__classPrivateFieldGet(this, _M3eOptionPanelElement_instances, "m", _M3eOptionPanelElement_handleSlotChange)}"></slot></div>`;
328
+ return html`<div class="base"><slot></slot><div class="no-data" aria-hidden="true"><slot name="no-data" @slotchange="${__classPrivateFieldGet(this, _M3eOptionPanelElement_instances, "m", _M3eOptionPanelElement_handleNoDataSlotChange)}"></slot></div><div class="loading" aria-hidden="true"><slot name="loading" @slotchange="${__classPrivateFieldGet(this, _M3eOptionPanelElement_instances, "m", _M3eOptionPanelElement_handleLoadingSlotChange)}"></slot></div></div>`;
370
329
  }
371
330
  };
372
- _M3eOptionPanelElement_trigger = new WeakMap();
373
- _M3eOptionPanelElement_anchor = new WeakMap();
374
- _M3eOptionPanelElement_anchorCleanup = new WeakMap();
375
- _M3eOptionPanelElement_documentClickHandler = new WeakMap();
376
331
  _M3eOptionPanelElement_scrollController = new WeakMap();
377
- _M3eOptionPanelElement_toggleHandler = new WeakMap();
378
332
  _M3eOptionPanelElement_instances = new WeakSet();
379
- _M3eOptionPanelElement_handleSlotChange = function _M3eOptionPanelElement_handleSlotChange() {
380
- const options = [...this.querySelectorAll("m3e-option")];
381
- options.forEach((x, i) => {
382
- setCustomState(x, "-first", i === 0 && !(x.parentElement instanceof M3eOptGroupElement));
383
- setCustomState(x, "-last", i === options.length - 1);
384
- });
333
+ _M3eOptionPanelElement_handleNoDataSlotChange = function _M3eOptionPanelElement_handleNoDataSlotChange(e) {
334
+ setCustomState(this, "-with-no-data", hasAssignedNodes(e.target));
335
+ };
336
+ _M3eOptionPanelElement_handleLoadingSlotChange = function _M3eOptionPanelElement_handleLoadingSlotChange(e) {
337
+ setCustomState(this, "-with-loading", hasAssignedNodes(e.target));
338
+ setCustomState(this, "-with-loading-indicator", this.querySelector("m3e-loading-indicator[slot='loading'], m3e-circular-progress-indicator[slot='loading']") !== null);
385
339
  };
386
- _M3eOptionPanelElement_handleDocumentClick = function _M3eOptionPanelElement_handleDocumentClick(e) {
387
- if (!e.composedPath().some(x => x instanceof M3eOptionPanelElement_1 || x === __classPrivateFieldGet(this, _M3eOptionPanelElement_trigger, "f") || x === __classPrivateFieldGet(this, _M3eOptionPanelElement_anchor, "f"))) {
388
- this.hide();
340
+ _M3eOptionPanelElement_handleMutation = function _M3eOptionPanelElement_handleMutation() {
341
+ const options = this.querySelectorAll("m3e-option");
342
+ let first = false;
343
+ let last;
344
+ for (let i = 0; i < options.length; i++) {
345
+ const option = options[i];
346
+ if (option.hidden) {
347
+ deleteCustomState(option, "-first");
348
+ deleteCustomState(option, "-last");
349
+ } else if (!first && !(option.parentElement instanceof M3eOptGroupElement)) {
350
+ addCustomState(option, "-first");
351
+ first = true;
352
+ addCustomState(option, "-last");
353
+ last = option;
354
+ } else {
355
+ deleteCustomState(option, "-first");
356
+ if (last) {
357
+ deleteCustomState(last, "-last");
358
+ }
359
+ addCustomState(option, "-last");
360
+ last = option;
361
+ }
389
362
  }
390
363
  };
391
364
  (() => {
392
365
  if (typeof window !== "undefined") {
393
366
  const lightDomStyle = new CSSStyleSheet();
394
- lightDomStyle.replaceSync(css`m3e-option-panel > m3e-divider { margin-block: var(--m3e-option-panel-divider-spacing, 0.5rem); }`.toString());
367
+ lightDomStyle.replaceSync(css`m3e-option-panel > m3e-divider { margin-block: var(--m3e-option-panel-divider-spacing, 0.5rem); } m3e-option-panel m3e-option[hidden], m3e-option-panel m3e-optgroup[hidden] { display: none; }`.toString());
395
368
  document.adoptedStyleSheets = [...document.adoptedStyleSheets, lightDomStyle];
396
369
  }
397
370
  })();
398
371
  /** The styles of the element. */
399
- M3eOptionPanelElement.styles = css`:host { position: absolute; flex-direction: column; padding: unset; margin: unset; border: unset; overflow-y: auto; scrollbar-width: ${DesignToken.scrollbar.thinWidth}; scrollbar-color: ${DesignToken.scrollbar.color}; scroll-padding-block: calc( var(--m3e-focus-ring-thickness, 3px) + var(--m3e-option-panel-container-padding-block, 0.25rem) ); border-radius: var(--m3e-option-panel-container-shape, ${DesignToken.shape.corner.large}); min-width: var(--m3e-option-panel-container-min-width, 7rem); max-width: var(--m3e-option-panel-container-max-width, 17.5rem); max-height: var(--m3e-option-panel-container-max-height, 17.5rem); background-color: var(--m3e-option-panel-container-color, ${DesignToken.color.surfaceContainer}); box-shadow: var(--m3e-option-panel-container-elevation, ${DesignToken.elevation.level3}); opacity: 0; display: none; } .base { display: flex; flex-direction: column; row-gap: var(--m3e-option-panel-gap, 0.125rem); min-width: inherit; max-width: inherit; padding-block: var(--m3e-option-panel-container-padding-block, 0.25rem); padding-inline: var(--m3e-option-panel-container-padding-inline, 0.25rem); --m3e-text-highlight-container-color: var( --m3e-option-panel-text-highlight-container-color, ${DesignToken.color.tertiaryContainer} ); --m3e-text-highlight-color: var( --m3e-option-panel-text-highlight-color, ${DesignToken.color.onTertiaryContainer} ); --m3e-focus-ring-outward-offset: 0px; --m3e-focus-ring-growth-factor: 1.5; } :host(:not(:state(-no-animate))) { transition: ${unsafeCSS(`opacity ${DesignToken.motion.duration.short2} ${DesignToken.motion.easing.standard},
400
- transform ${DesignToken.motion.duration.short2} ${DesignToken.motion.easing.standard},
401
- overlay ${DesignToken.motion.duration.short2} ${DesignToken.motion.easing.standard} allow-discrete,
402
- display ${DesignToken.motion.duration.short2} ${DesignToken.motion.easing.standard} allow-discrete`)}; } :host { transform: scaleY(0.8); } :host(:popover-open) { transform: scaleY(1); display: block; opacity: 1; } :host::backdrop { background-color: transparent; } :host(:state(-bottom)) { transform-origin: top; } :host(:state(-top)) { transform-origin: bottom; } @starting-style { :host(:popover-open) { transform: scaleY(0.8); } } @media (prefers-reduced-motion) { :host(:not(:state(-no-animate))) { transition: none; } } @media (forced-colors: active) { :host { background-color: Menu; color: MenuText; outline: 1px solid MenuText; } }`;
403
- M3eOptionPanelElement = M3eOptionPanelElement_1 = __decorate([customElement("m3e-option-panel")], M3eOptionPanelElement);
372
+ M3eOptionPanelElement.styles = [M3eFloatingPanelElement.styles, css`:host { --m3e-floating-panel-container-shape: var( --m3e-option-panel-container-shape, ${DesignToken.shape.corner.large} ); --m3e-floating-panel-container-min-width: var(--m3e-option-panel-container-min-width, 7rem); --m3e-floating-panel-container-max-width: var(--m3e-option-panel-container-max-width, 17.5rem); --m3e-floating-panel-container-max-height: var(--m3e-option-panel-container-max-height, 17.5rem); --m3e-floating-panel-container-color: var( --m3e-option-panel-container-color, ${DesignToken.color.surfaceContainer} ); --m3e-floating-panel-container-elevation: var( --m3e-option-panel-container-elevation, ${DesignToken.elevation.level3} ); --m3e-floating-panel-container-padding-inline: var(--m3e-option-panel-container-padding-inline, 0.25rem); --m3e-floating-panel-container-padding-block: var(--m3e-option-panel-container-padding-block, 0.25rem); } .base { row-gap: var(--m3e-option-panel-gap, 0.125rem); --m3e-text-highlight-container-color: var( --m3e-option-panel-text-highlight-container-color, ${DesignToken.color.tertiaryContainer} ); --m3e-text-highlight-color: var( --m3e-option-panel-text-highlight-color, ${DesignToken.color.onTertiaryContainer} ); --m3e-focus-ring-outward-offset: 0px; --m3e-focus-ring-growth-factor: 1.5; } .no-data { display: flex; align-items: center; box-sizing: border-box; min-height: var(--m3e-option-panel-no-data-container-height, 2.75rem); padding: var(--m3e-option-panel-no-data-container-padding, 0.75rem); color: var(--m3e-option-panel-no-data-color, ${DesignToken.color.onSurfaceVariant}); font-size: var(--m3e-option-panel-no-data-font-size, ${DesignToken.typescale.standard.label.large.fontSize}); font-weight: var( --m3e-option-panel-no-data-font-weight, ${DesignToken.typescale.standard.label.large.fontWeight} ); line-height: var( --m3e-option-panel-no-data-line-height, ${DesignToken.typescale.standard.label.large.lineHeight} ); letter-spacing: var( --m3e-option-panel-no-data-tracking, ${DesignToken.typescale.standard.label.large.tracking} ); } .loading { display: flex; align-items: center; box-sizing: border-box; min-height: var(--m3e-option-panel-loading-container-height, 2.75rem); padding: var(--m3e-option-panel-loading-container-padding, 0.75rem); color: var(--m3e-option-panel-loading-color, ${DesignToken.color.onSurfaceVariant}); font-size: var(--m3e-option-panel-loading-font-size, ${DesignToken.typescale.standard.label.large.fontSize}); font-weight: var( --m3e-option-panel-loading-font-weight, ${DesignToken.typescale.standard.label.large.fontWeight} ); line-height: var( --m3e-option-panel-loading-line-height, ${DesignToken.typescale.standard.label.large.lineHeight} ); letter-spacing: var( --m3e-option-panel-loading-tracking, ${DesignToken.typescale.standard.label.large.tracking} ); } :host(:state(-no-data)) slot:not([name]), :host(:state(-loading)) slot:not([name]), :host(:state(-loading)) .no-data, :host(:not(:state(-no-data))) .no-data, :host(:not(:state(-with-no-data))) .no-data, :host(:not(:state(-loading))) .loading, :host(:not(:state(-with-loading))) .loading { display: none; } :host(:state(-no-data)) .base, :host(:state(-loading)) .base { overflow-y: hidden; } :host(:state(-with-loading-indicator)) .loading { padding: 0; justify-content: center; }`];
373
+ __decorate([property({
374
+ reflect: true
375
+ })], M3eOptionPanelElement.prototype, "state", void 0);
376
+ M3eOptionPanelElement = __decorate([customElement("m3e-option-panel")], M3eOptionPanelElement);
404
377
 
405
378
  export { M3eOptGroupElement, M3eOptionElement, M3eOptionPanelElement };
406
379
  //# sourceMappingURL=option.js.map