@m3e/web 2.3.0 → 2.3.2

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 (152) hide show
  1. package/LICENSE +1 -1
  2. package/dist/all.js +249 -26
  3. package/dist/all.js.map +1 -1
  4. package/dist/all.min.js +45 -45
  5. package/dist/all.min.js.map +1 -1
  6. package/dist/app-bar.js +1 -1
  7. package/dist/app-bar.min.js +1 -1
  8. package/dist/autocomplete.js +27 -7
  9. package/dist/autocomplete.js.map +1 -1
  10. package/dist/autocomplete.min.js +2 -2
  11. package/dist/autocomplete.min.js.map +1 -1
  12. package/dist/avatar.js +1 -1
  13. package/dist/avatar.min.js +1 -1
  14. package/dist/badge.js +1 -1
  15. package/dist/badge.min.js +1 -1
  16. package/dist/bottom-sheet.js +1 -1
  17. package/dist/bottom-sheet.min.js +1 -1
  18. package/dist/button-group.js +1 -1
  19. package/dist/button-group.min.js +1 -1
  20. package/dist/button.js +1 -1
  21. package/dist/button.min.js +1 -1
  22. package/dist/calendar.js +1 -1
  23. package/dist/calendar.min.js +1 -1
  24. package/dist/card.js +1 -1
  25. package/dist/card.min.js +1 -1
  26. package/dist/checkbox.js +1 -1
  27. package/dist/checkbox.min.js +1 -1
  28. package/dist/chips.js +1 -1
  29. package/dist/chips.min.js +1 -1
  30. package/dist/core-a11y.js +5 -3
  31. package/dist/core-a11y.js.map +1 -1
  32. package/dist/core-a11y.min.js +6 -6
  33. package/dist/core-a11y.min.js.map +1 -1
  34. package/dist/core-anchoring.js +1 -1
  35. package/dist/core-anchoring.min.js +1 -1
  36. package/dist/core-bidi.js +1 -1
  37. package/dist/core-bidi.min.js +1 -1
  38. package/dist/core-layout.js +1 -1
  39. package/dist/core-layout.min.js +1 -1
  40. package/dist/core-platform.js +1 -1
  41. package/dist/core-platform.min.js +1 -1
  42. package/dist/core.js +4 -4
  43. package/dist/core.js.map +1 -1
  44. package/dist/core.min.js +1 -1
  45. package/dist/core.min.js.map +1 -1
  46. package/dist/css-custom-data.json +60 -60
  47. package/dist/custom-elements.json +986 -837
  48. package/dist/datepicker.js +1 -1
  49. package/dist/datepicker.min.js +1 -1
  50. package/dist/dialog.js +1 -1
  51. package/dist/dialog.min.js +1 -1
  52. package/dist/divider.js +1 -1
  53. package/dist/divider.min.js +1 -1
  54. package/dist/drawer-container.js +1 -1
  55. package/dist/drawer-container.min.js +1 -1
  56. package/dist/expansion-panel.js +1 -1
  57. package/dist/expansion-panel.min.js +1 -1
  58. package/dist/fab-menu.js +1 -1
  59. package/dist/fab-menu.min.js +1 -1
  60. package/dist/fab.js +1 -1
  61. package/dist/fab.min.js +1 -1
  62. package/dist/form-field.js +1 -1
  63. package/dist/form-field.min.js +1 -1
  64. package/dist/heading.js +1 -1
  65. package/dist/heading.min.js +1 -1
  66. package/dist/html-custom-data.json +25 -25
  67. package/dist/icon-button.js +1 -1
  68. package/dist/icon-button.min.js +1 -1
  69. package/dist/icon.js +146 -6
  70. package/dist/icon.js.map +1 -1
  71. package/dist/icon.min.js +2 -2
  72. package/dist/icon.min.js.map +1 -1
  73. package/dist/index.js +1 -1
  74. package/dist/index.min.js +1 -1
  75. package/dist/list.js +1 -1
  76. package/dist/list.min.js +1 -1
  77. package/dist/loading-indicator.js +1 -1
  78. package/dist/loading-indicator.min.js +1 -1
  79. package/dist/menu.js +1 -1
  80. package/dist/menu.min.js +1 -1
  81. package/dist/nav-bar.js +1 -1
  82. package/dist/nav-bar.min.js +1 -1
  83. package/dist/nav-menu.js +1 -1
  84. package/dist/nav-menu.min.js +1 -1
  85. package/dist/nav-rail.js +1 -1
  86. package/dist/nav-rail.min.js +1 -1
  87. package/dist/option.js +1 -1
  88. package/dist/option.min.js +1 -1
  89. package/dist/paginator.js +1 -1
  90. package/dist/paginator.min.js +1 -1
  91. package/dist/progress-indicator.js +1 -1
  92. package/dist/progress-indicator.min.js +1 -1
  93. package/dist/radio-group.js +1 -1
  94. package/dist/radio-group.min.js +1 -1
  95. package/dist/search.js +1 -1
  96. package/dist/search.min.js +1 -1
  97. package/dist/segmented-button.js +1 -1
  98. package/dist/segmented-button.min.js +1 -1
  99. package/dist/select.js +29 -10
  100. package/dist/select.js.map +1 -1
  101. package/dist/select.min.js +2 -2
  102. package/dist/select.min.js.map +1 -1
  103. package/dist/shape.js +1 -1
  104. package/dist/shape.min.js +1 -1
  105. package/dist/skeleton.js +48 -4
  106. package/dist/skeleton.js.map +1 -1
  107. package/dist/skeleton.min.js +2 -2
  108. package/dist/skeleton.min.js.map +1 -1
  109. package/dist/slide-group.js +1 -1
  110. package/dist/slide-group.min.js +1 -1
  111. package/dist/slider.js +1 -1
  112. package/dist/slider.min.js +1 -1
  113. package/dist/snackbar.js +1 -1
  114. package/dist/snackbar.min.js +1 -1
  115. package/dist/split-button.js +1 -1
  116. package/dist/split-button.min.js +1 -1
  117. package/dist/split-pane.js +1 -1
  118. package/dist/split-pane.min.js +1 -1
  119. package/dist/src/autocomplete/AutocompleteElement.d.ts.map +1 -1
  120. package/dist/src/core/a11y/list-key/ListKeyManager.d.ts.map +1 -1
  121. package/dist/src/core/shared/primitives/ElevationElement.d.ts +1 -1
  122. package/dist/src/core/shared/primitives/FocusRingElement.d.ts +1 -1
  123. package/dist/src/core/shared/primitives/RippleElement.d.ts +1 -1
  124. package/dist/src/icon/IconElement.d.ts +7 -1
  125. package/dist/src/icon/IconElement.d.ts.map +1 -1
  126. package/dist/src/icon/IconRegistry.d.ts +54 -0
  127. package/dist/src/icon/IconRegistry.d.ts.map +1 -0
  128. package/dist/src/icon/IconWeight.d.ts +3 -0
  129. package/dist/src/icon/IconWeight.d.ts.map +1 -0
  130. package/dist/src/icon/index.d.ts +1 -0
  131. package/dist/src/icon/index.d.ts.map +1 -1
  132. package/dist/src/icon/registerIcon.d.ts +14 -0
  133. package/dist/src/icon/registerIcon.d.ts.map +1 -0
  134. package/dist/src/select/SelectElement.d.ts.map +1 -1
  135. package/dist/src/skeleton/SkeletonElement.d.ts.map +1 -1
  136. package/dist/stepper.js +1 -1
  137. package/dist/stepper.min.js +1 -1
  138. package/dist/switch.js +1 -1
  139. package/dist/switch.min.js +1 -1
  140. package/dist/tabs.js +1 -1
  141. package/dist/tabs.min.js +1 -1
  142. package/dist/textarea-autosize.js +1 -1
  143. package/dist/textarea-autosize.min.js +1 -1
  144. package/dist/theme.js +1 -1
  145. package/dist/theme.min.js +1 -1
  146. package/dist/toc.js +1 -1
  147. package/dist/toc.min.js +1 -1
  148. package/dist/toolbar.js +1 -1
  149. package/dist/toolbar.min.js +1 -1
  150. package/dist/tooltip.js +1 -1
  151. package/dist/tooltip.min.js +1 -1
  152. package/package.json +1 -1
package/LICENSE CHANGED
@@ -1,6 +1,6 @@
1
1
  MIT License
2
2
 
3
- Copyright (c) 2025 matraic
3
+ Copyright (c) 2025–2026 matraic
4
4
  Contact: matraic@yahoo.com
5
5
 
6
6
  Permission is hereby granted, free of charge, to any person obtaining a copy
package/dist/all.js CHANGED
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * @license MIT
3
- * Copyright (c) 2025 matraic
3
+ * Copyright (c) 2025–2026 matraic
4
4
  * See LICENSE file in the project root for full license text.
5
5
  */
6
6
  import { __classPrivateFieldGet, __decorate, __classPrivateFieldSet } from 'tslib';
@@ -358,7 +358,7 @@ __decorate([property({
358
358
  __decorate([debounce$1(40)], M3eAppBarElement.prototype, "_updateScroll", null);
359
359
  M3eAppBarElement = __decorate([customElement$1("m3e-app-bar")], M3eAppBarElement);
360
360
 
361
- 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_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_projectClone, _M3eAutocompleteElement_updateMenuState, _M3eAutocompleteElement_hideMenu, _M3eAutocompleteElement_activateOption, _M3eAutocompleteElement_updateSelectionState, _M3eAutocompleteElement_selectOption, _M3eAutocompleteElement_filterOption, _M3eAutocompleteElement_filterOptions, _M3eAutocompleteElement_clearOptions, _M3eAutocompleteElement_announceResults, _M3eAutocompleteElement_autoActivate, _M3eAutocompleteElement_deactivateOption;
361
+ 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_menuPointerUpHandler, _M3eAutocompleteElement_menuPressedOption, _M3eAutocompleteElement_options_get, _M3eAutocompleteElement_input_get, _M3eAutocompleteElement_hasNoDataSlot_get, _M3eAutocompleteElement_hasLoadingSlot_get, _M3eAutocompleteElement_shouldShowMenu_get, _M3eAutocompleteElement_formField_get, _M3eAutocompleteElement_handleMutation, _M3eAutocompleteElement_handleClick, _M3eAutocompleteElement_handleFormFieldPointerDown, _M3eAutocompleteElement_handleFocus, _M3eAutocompleteElement_handleBlur, _M3eAutocompleteElement_handleInput, _M3eAutocompleteElement_handleChange, _M3eAutocompleteElement_handleKeyDown, _M3eAutocompleteElement_handleMenuPointerDown, _M3eAutocompleteElement_handleMenuPointerUp, _M3eAutocompleteElement_handleMenuToggle, _M3eAutocompleteElement_destroyMenu, _M3eAutocompleteElement_showMenu, _M3eAutocompleteElement_projectClone, _M3eAutocompleteElement_updateMenuState, _M3eAutocompleteElement_hideMenu, _M3eAutocompleteElement_activateOption, _M3eAutocompleteElement_updateSelectionState, _M3eAutocompleteElement_selectOption, _M3eAutocompleteElement_filterOption, _M3eAutocompleteElement_filterOptions, _M3eAutocompleteElement_clearOptions, _M3eAutocompleteElement_announceResults, _M3eAutocompleteElement_autoActivate, _M3eAutocompleteElement_deactivateOption;
362
362
  var M3eAutocompleteElement_1;
363
363
  /**
364
364
  * Enhances a text input with suggested options.
@@ -450,6 +450,10 @@ let M3eAutocompleteElement = M3eAutocompleteElement_1 = class M3eAutocompleteEle
450
450
  /** @private */
451
451
  _M3eAutocompleteElement_menuPointerDownHandler.set(this, e => __classPrivateFieldGet(this, _M3eAutocompleteElement_instances, "m", _M3eAutocompleteElement_handleMenuPointerDown).call(this, e));
452
452
  /** @private */
453
+ _M3eAutocompleteElement_menuPointerUpHandler.set(this, e => __classPrivateFieldGet(this, _M3eAutocompleteElement_instances, "m", _M3eAutocompleteElement_handleMenuPointerUp).call(this, e));
454
+ /** @private */
455
+ _M3eAutocompleteElement_menuPressedOption.set(this, void 0);
456
+ /** @private */
453
457
  this._listKeyManager = new ListKeyManager().withWrap().withHomeAndEnd().withPageUpAndDown().withVerticalOrientation().withSkipPredicate(item => item.disabled || item.hidden === true).onActiveItemChange(() => {
454
458
  if (this._listKeyManager.activeItem) {
455
459
  __classPrivateFieldGet(this, _M3eAutocompleteElement_instances, "m", _M3eAutocompleteElement_activateOption).call(this, this._listKeyManager.activeItem);
@@ -640,6 +644,8 @@ _M3eAutocompleteElement_inputHandler = new WeakMap();
640
644
  _M3eAutocompleteElement_changeHandler = new WeakMap();
641
645
  _M3eAutocompleteElement_menuToggleHandler = new WeakMap();
642
646
  _M3eAutocompleteElement_menuPointerDownHandler = new WeakMap();
647
+ _M3eAutocompleteElement_menuPointerUpHandler = new WeakMap();
648
+ _M3eAutocompleteElement_menuPressedOption = new WeakMap();
643
649
  _M3eAutocompleteElement_instances = new WeakSet();
644
650
  _M3eAutocompleteElement_options_get = function _M3eAutocompleteElement_options_get() {
645
651
  return this._listKeyManager?.items ?? [];
@@ -820,18 +826,30 @@ _M3eAutocompleteElement_handleKeyDown = function _M3eAutocompleteElement_handleK
820
826
  }
821
827
  };
822
828
  _M3eAutocompleteElement_handleMenuPointerDown = function _M3eAutocompleteElement_handleMenuPointerDown(e) {
829
+ __classPrivateFieldSet(this, _M3eAutocompleteElement_menuPressedOption, undefined, "f");
823
830
  if (e.button === 2) return;
831
+ // Prevent click to avoid stealing focus.
824
832
  e.preventDefault();
825
833
  e.stopImmediatePropagation();
826
834
  const option = e.composedPath().find(x => x instanceof HTMLElement && x.tagName === "M3E-OPTION");
827
835
  if (option && !option.disabled) {
836
+ __classPrivateFieldSet(this, _M3eAutocompleteElement_menuPressedOption, option, "f");
837
+ }
838
+ };
839
+ _M3eAutocompleteElement_handleMenuPointerUp = function _M3eAutocompleteElement_handleMenuPointerUp(e) {
840
+ const pressedOption = __classPrivateFieldGet(this, _M3eAutocompleteElement_menuPressedOption, "f");
841
+ __classPrivateFieldSet(this, _M3eAutocompleteElement_menuPressedOption, undefined, "f");
842
+ if (e.button === 2) return;
843
+ if (!pressedOption) return;
844
+ const option = e.composedPath().find(x => x instanceof HTMLElement && x.tagName === "M3E-OPTION");
845
+ if (option === pressedOption) {
828
846
  this._listKeyManager.setActiveItem(option);
829
847
  __classPrivateFieldGet(this, _M3eAutocompleteElement_instances, "m", _M3eAutocompleteElement_selectOption).call(this, option);
830
- if (!prefersReducedMotion$1()) {
831
- setTimeout(() => __classPrivateFieldGet(this, _M3eAutocompleteElement_instances, "m", _M3eAutocompleteElement_hideMenu).call(this), 150);
832
- } else {
833
- __classPrivateFieldGet(this, _M3eAutocompleteElement_instances, "m", _M3eAutocompleteElement_hideMenu).call(this);
834
- }
848
+ }
849
+ if (!prefersReducedMotion$1()) {
850
+ setTimeout(() => __classPrivateFieldGet(this, _M3eAutocompleteElement_instances, "m", _M3eAutocompleteElement_hideMenu).call(this), 150);
851
+ } else {
852
+ __classPrivateFieldGet(this, _M3eAutocompleteElement_instances, "m", _M3eAutocompleteElement_hideMenu).call(this);
835
853
  }
836
854
  };
837
855
  _M3eAutocompleteElement_handleMenuToggle = function _M3eAutocompleteElement_handleMenuToggle(e) {
@@ -864,6 +882,7 @@ _M3eAutocompleteElement_destroyMenu = function _M3eAutocompleteElement_destroyMe
864
882
  __classPrivateFieldGet(this, _M3eAutocompleteElement_menu, "f").remove();
865
883
  __classPrivateFieldGet(this, _M3eAutocompleteElement_menu, "f").removeEventListener("toggle", __classPrivateFieldGet(this, _M3eAutocompleteElement_menuToggleHandler, "f"));
866
884
  __classPrivateFieldGet(this, _M3eAutocompleteElement_menu, "f").removeEventListener("pointerdown", __classPrivateFieldGet(this, _M3eAutocompleteElement_menuPointerDownHandler, "f"));
885
+ __classPrivateFieldGet(this, _M3eAutocompleteElement_menu, "f").removeEventListener("pointerup", __classPrivateFieldGet(this, _M3eAutocompleteElement_menuPointerUpHandler, "f"));
867
886
  __classPrivateFieldSet(this, _M3eAutocompleteElement_menu, undefined, "f");
868
887
  if (__classPrivateFieldGet(this, _M3eAutocompleteElement_instances, "a", _M3eAutocompleteElement_input_get)) {
869
888
  __classPrivateFieldGet(this, _M3eAutocompleteElement_instances, "a", _M3eAutocompleteElement_input_get).ariaExpanded = "false";
@@ -897,6 +916,7 @@ _M3eAutocompleteElement_showMenu = function _M3eAutocompleteElement_showMenu() {
897
916
  __classPrivateFieldGet(this, _M3eAutocompleteElement_menu, "f").fitAnchorWidth = true;
898
917
  __classPrivateFieldGet(this, _M3eAutocompleteElement_menu, "f").addEventListener("toggle", __classPrivateFieldGet(this, _M3eAutocompleteElement_menuToggleHandler, "f"));
899
918
  __classPrivateFieldGet(this, _M3eAutocompleteElement_menu, "f").addEventListener("pointerdown", __classPrivateFieldGet(this, _M3eAutocompleteElement_menuPointerDownHandler, "f"));
919
+ __classPrivateFieldGet(this, _M3eAutocompleteElement_menu, "f").addEventListener("pointerup", __classPrivateFieldGet(this, _M3eAutocompleteElement_menuPointerUpHandler, "f"));
900
920
  __classPrivateFieldGet(this, _M3eAutocompleteElement_instances, "m", _M3eAutocompleteElement_projectClone).call(this);
901
921
  __classPrivateFieldGet(this, _M3eAutocompleteElement_instances, "m", _M3eAutocompleteElement_updateMenuState).call(this, __classPrivateFieldGet(this, _M3eAutocompleteElement_menu, "f"), count);
902
922
  (__classPrivateFieldGet(this, _M3eAutocompleteElement_instances, "a", _M3eAutocompleteElement_formField_get) ?? __classPrivateFieldGet(this, _M3eAutocompleteElement_instances, "a", _M3eAutocompleteElement_input_get)).insertAdjacentElement("afterend", __classPrivateFieldGet(this, _M3eAutocompleteElement_menu, "f"));
@@ -5650,7 +5670,7 @@ M3eFilterChipElement.formAssociated = true;
5650
5670
  M3eFilterChipElement.styles = [M3eChipElement.styles, css`:host([selected]:not(:state(-hide-selection))) .wrapper { padding-inline-start: var(--m3e-chip-with-icon-padding-start, 0.5rem); } .icon { display: flex; align-items: center; justify-content: center; } .check { width: 1em; font-size: var(--m3e-chip-icon-size, 1.125rem); } :host(:not(:disabled):not([disabled-interactive])) .check { color: var(--m3e-chip-selected-leading-icon-color, ${DesignToken$1.color.onSecondaryContainer}); } :host(:not([selected])) .check, :host(:state(-hide-selection)) .check, :host(:state(-hide-selection):not(:state(-with-icon))) .icon { display: none; } :host(:not(:state(-with-icon))) .icon { margin-inline-start: calc(0px - var(--m3e-chip-with-icon-padding-start, 0.5rem)); transition: margin-inline-start ${DesignToken$1.motion.spring.fastEffects}; } :host([selected]) .icon { margin-inline-start: 0; } :host([selected]:not(:state(-hide-selection))) ::slotted([slot="icon"]) { display: none !important; } :host(:not(:disabled):not([disabled-interactive]):not([selected])) .base { color: var(--m3e-chip-unselected-label-text-color, ${DesignToken$1.color.onSurfaceVariant}); --m3e-ripple-color: var(--m3e-chip-unselected-ripple-color, ${DesignToken$1.color.onSurfaceVariant}); --m3e-state-layer-focus-color: var( --m3e-chip-unselected-state-layer-focus-color, ${DesignToken$1.color.onSurfaceVariant} ); --m3e-state-layer-hover-color: var( --m3e-chip-unselected-state-layer-hover-color, ${DesignToken$1.color.onSurfaceVariant} ); } :host(:not(:disabled):not([disabled-interactive]):not([selected])) ::slotted([slot="icon"]) { color: var(--m3e-chip-unselected-leading-icon-color, ${DesignToken$1.color.primary}); } :host(:not(:disabled):not([disabled-interactive]):not([selected])) ::slotted([slot="trailing-icon"]) { color: var(--m3e-chip-unselected-trailing-icon-color, ${DesignToken$1.color.onSurfaceVariant}); } :host(:not(:disabled):not([disabled-interactive])[selected]) .base { outline-offset: unset; outline-width: var(--m3e-chip-selected-outline-thickness, 0); color: var(--m3e-chip-selected-label-text-color, ${DesignToken$1.color.onSecondaryContainer}); background-color: var(--m3e-chip-selected-container-color, ${DesignToken$1.color.secondaryContainer}); --m3e-state-layer-hover-color: var( --m3e-chip-selected-container-hover-color, ${DesignToken$1.color.onSecondaryContainer} ); --m3e-state-layer-focus-color: var( --m3e-chip-selected-container-focus-color, ${DesignToken$1.color.onSecondaryContainer} ); --m3e-elevation-hover-level: var(--m3e-chip-selected-hover-elevation, ${DesignToken$1.elevation.level1}); --m3e-ripple-color: var(--m3e-chip-selected-ripple-color, ${DesignToken$1.color.onSecondaryContainer}); --m3e-state-layer-focus-color: var( --m3e-chip-selected-state-layer-focus-color, ${DesignToken$1.color.onSecondaryContainer} ); --m3e-state-layer-hover-color: var( --m3e-chip-selected-state-layer-hover-color, ${DesignToken$1.color.onSecondaryContainer} ); } :host(:not(:disabled):not([disabled-interactive])[selected]) ::slotted([slot="icon"]) { color: var(--m3e-chip-selected-leading-icon-color, ${DesignToken$1.color.onSecondaryContainer}); } :host(:not(:disabled):not([disabled-interactive]):not([selected])) ::slotted([slot="trailing-icon"]) { color: var(--m3e-chip-selected-trailing-icon-color, ${DesignToken$1.color.onSecondaryContainer}); } @media (prefers-reduced-motion) { .base, :host(:not(:state(-with-icon))) .icon { transition: none; } } @media (forced-colors: active) { :host(:not(:disabled):not([disabled-interactive]):not([selected])) .base, :host(:not(:disabled):not([disabled-interactive]):not([selected])) ::slotted([slot="icon"]), :host(:not(:disabled):not([disabled-interactive]):not([selected])) ::slotted([slot="trailing-icon"]) { color: CanvasText; } :host(:not(:disabled):not([disabled-interactive])[selected]) .base, :host(:not(:disabled):not([disabled-interactive])[selected]) ::slotted([slot="icon"]), :host(:not(:disabled):not([disabled-interactive])[selected]) ::slotted([slot="trailing-icon"]), :host(:not(:disabled):not([disabled-interactive])) .check { color: ButtonText; } :host(:not(:disabled):not([disabled-interactive])[selected]) .base { outline-offset: calc(0px - var(--m3e-outlined-chip-outline-thickness, 1px)); outline-width: var(--m3e-outlined-chip-outline-thickness, 1px); outline-color: ButtonText; } }`];
5651
5671
  M3eFilterChipElement = __decorate([customElement$1("m3e-filter-chip")], M3eFilterChipElement);
5652
5672
 
5653
- var _M3eFilterChipSetElement_instances, _M3eFilterChipSetElement_directionalitySubscription, _M3eFilterChipSetElement_handleSlotChange, _M3eFilterChipSetElement_handleKeyDown, _M3eFilterChipSetElement_handleChange, _M3eFilterChipSetElement_updateChipRole, _a$9;
5673
+ var _M3eFilterChipSetElement_instances, _M3eFilterChipSetElement_directionalitySubscription, _M3eFilterChipSetElement_handleSlotChange, _M3eFilterChipSetElement_handleKeyDown, _M3eFilterChipSetElement_handleChange, _M3eFilterChipSetElement_updateChipRole, _a$a;
5654
5674
  /**
5655
5675
  * A container that organizes filter chips into a cohesive group, enabling selection and
5656
5676
  * deselection of values used to refine content or trigger contextual behavior.
@@ -5695,7 +5715,7 @@ let M3eFilterChipSetElement = class M3eFilterChipSetElement extends Labelled$1(D
5695
5715
  /** @private */
5696
5716
  _M3eFilterChipSetElement_directionalitySubscription.set(this, void 0);
5697
5717
  /** @internal */
5698
- this[_a$9] = new SelectionManager().onActiveItemChange(() => this[selectionManager].activeItem?.focus()).withWrap().withDirectionality(M3eDirectionality.current);
5718
+ this[_a$a] = new SelectionManager().onActiveItemChange(() => this[selectionManager].activeItem?.focus()).withWrap().withDirectionality(M3eDirectionality.current);
5699
5719
  /**
5700
5720
  * Whether multiple chips can be selected.
5701
5721
  * @default false
@@ -5728,7 +5748,7 @@ let M3eFilterChipSetElement = class M3eFilterChipSetElement extends Labelled$1(D
5728
5748
  }
5729
5749
  }
5730
5750
  /** @inheritdoc @internal */
5731
- get [(_M3eFilterChipSetElement_directionalitySubscription = new WeakMap(), _M3eFilterChipSetElement_instances = new WeakSet(), _a$9 = selectionManager, formValue$1)]() {
5751
+ get [(_M3eFilterChipSetElement_directionalitySubscription = new WeakMap(), _M3eFilterChipSetElement_instances = new WeakSet(), _a$a = selectionManager, formValue$1)]() {
5732
5752
  const values = this.value;
5733
5753
  if (Array.isArray(values)) {
5734
5754
  const data = new FormData();
@@ -10263,7 +10283,7 @@ var _M3eElevationElement_instances, _M3eElevationElement_hoverController, _M3eEl
10263
10283
  * The component can also be attached to another element using the `for` attribute. When attached, elevation will
10264
10284
  * be lifted by 1 level on hover. This can be disabled using the `disabled` attribute.
10265
10285
  *
10266
- * Alternately, use the `attach` and `detach` methods to programmatically attach and detach this element to another.
10286
+ * Alternatively, use the `attach` and `detach` methods to programmatically attach and detach this element to another.
10267
10287
  *
10268
10288
  * @example
10269
10289
  * The following example illustrates basic markup. Note how the parenting element's position is `relative`. A parenting
@@ -10441,7 +10461,7 @@ var _M3eFocusRingElement_instances, _M3eFocusRingElement_focusController, _M3eFo
10441
10461
  * The focus ring is displayed when the interactive element receives visible focus and hidden when focus is lost.
10442
10462
  * This can be disabled using the `disabled` attribute.
10443
10463
  *
10444
- * Alternately, you can use the `show` and `hide` methods to programmatically control the focus ring.
10464
+ * Alternatively, you can use the `show` and `hide` methods to programmatically control the focus ring.
10445
10465
  *
10446
10466
  * @example
10447
10467
  * The following example illustrates attaching a focus ring to an interactive element. In this example, the parenting div
@@ -10670,7 +10690,7 @@ var _M3eRippleElement_instances, _M3eRippleElement_ripple, _M3eRippleElement_pre
10670
10690
  *
10671
10691
  * The pressed state actives either using both pointer and keyboard events. For keyboard events, `SPACE` activate a ripple.
10672
10692
  *
10673
- * Alternately, you can use the `show` and `hide` methods to programmatically control the ripple.
10693
+ * Alternatively, you can use the `show` and `hide` methods to programmatically control the ripple.
10674
10694
  *
10675
10695
  * @example
10676
10696
  * The following example illustrates attaching a ripple to an interactive element. In this example, the parenting div
@@ -15418,6 +15438,117 @@ __decorate([property({
15418
15438
  })], M3eHeadingElement.prototype, "level", void 0);
15419
15439
  M3eHeadingElement = __decorate([customElement$1("m3e-heading")], M3eHeadingElement);
15420
15440
 
15441
+ var _a$9, _IconRegistry_icons, _IconRegistry_observers, _IconRegistry_createKey, _IconRegistry_validateSvgIconInfo;
15442
+ /** @private */
15443
+ const PATH_DATA_PATTERN = /^[MmLlHhVvCcSsQqTtAaZz0-9.,\s-]+$/;
15444
+ /** @private */
15445
+ const VIEW_BOX_PATTERN = /^-?\d+(\.\d+)?\s+-?\d+(\.\d+)?\s+-?\d+(\.\d+)?\s+-?\d+(\.\d+)?$/;
15446
+ /**
15447
+ * Service to register and display icons used by the `m3e-icon` component.
15448
+ * @internal
15449
+ */
15450
+ class IconRegistry {
15451
+ /**
15452
+ * Adds an icon to the registry for the given variant and weight.
15453
+ * @param {string} name The name of the icon.
15454
+ * @param {IconVariant} variant The variant of the icon.
15455
+ * @param {SvgIconFillSet} fillSet The SVG data for both fill states (outlined and filled) of the icon.
15456
+ */
15457
+ static addIcon(name, variant, fillSet) {
15458
+ const trustOutlinedViewBox = typeof fillSet.outlined === "string";
15459
+ const trustFilledViewBox = typeof fillSet.filled === "string";
15460
+ if (typeof fillSet.outlined === "string") {
15461
+ fillSet.outlined = {
15462
+ viewBox: "0 -960 960 960",
15463
+ path: fillSet.outlined
15464
+ };
15465
+ }
15466
+ if (typeof fillSet.filled === "string") {
15467
+ fillSet.filled = {
15468
+ viewBox: "0 -960 960 960",
15469
+ path: fillSet.filled
15470
+ };
15471
+ }
15472
+ __classPrivateFieldGet(this, _a$9, "m", _IconRegistry_validateSvgIconInfo).call(this, name, variant, fillSet.outlined, trustOutlinedViewBox);
15473
+ __classPrivateFieldGet(this, _a$9, "m", _IconRegistry_validateSvgIconInfo).call(this, name, variant, fillSet.filled, trustFilledViewBox);
15474
+ if (window !== undefined) {
15475
+ const key = __classPrivateFieldGet(this, _a$9, "m", _IconRegistry_createKey).call(this, name, variant);
15476
+ __classPrivateFieldGet(this, _a$9, "f", _IconRegistry_icons).set(key, {
15477
+ outlined: svg`<svg viewBox="${fillSet.outlined.viewBox}"><path d="${fillSet.outlined.path}"/></svg>`,
15478
+ filled: svg`<svg viewBox="${fillSet.filled.viewBox}"><path d="${fillSet.filled.path}"/></svg>`
15479
+ });
15480
+ __classPrivateFieldGet(this, _a$9, "f", _IconRegistry_observers).get(key)?.forEach(x => x());
15481
+ }
15482
+ }
15483
+ /**
15484
+ * Determines whether an icon is registered for the given variant.
15485
+ * @param {string} name The name of the icon.
15486
+ * @param {IconVariant} variant The variant of the icon.
15487
+ * @returns {boolean} Whether `icon` is registered for the given `variant`.
15488
+ */
15489
+ static isIconRegistered(name, variant) {
15490
+ return window !== undefined && __classPrivateFieldGet(this, _a$9, "f", _IconRegistry_icons).has(__classPrivateFieldGet(this, _a$9, "m", _IconRegistry_createKey).call(this, name, variant));
15491
+ }
15492
+ /**
15493
+ * Renders an icon from the registry.
15494
+ * @param {string} name The name of the icon.
15495
+ * @param {IconVariant} variant The variant of the icon.
15496
+ * @param {boolean} filled Whether to render a filled variant of the icon.
15497
+ * @returns {SVGTemplateResult | undefined} A `SVGTemplateResult` used to render the icon.
15498
+ */
15499
+ static renderIcon(name, variant, filled) {
15500
+ const data = __classPrivateFieldGet(this, _a$9, "f", _IconRegistry_icons).get(__classPrivateFieldGet(this, _a$9, "m", _IconRegistry_createKey).call(this, name, variant));
15501
+ return filled ? data?.filled : data?.outlined;
15502
+ }
15503
+ /**
15504
+ * Begins observing registration for the specified icon.
15505
+ * @param {string} name The name of the icon to observe.
15506
+ * @param {IconVariant} variant The variant of the icon to observe.
15507
+ * @param {() => void} callback Callback invoked when the specified icon is registered for the given variant.
15508
+ * @returns {() => void} Function used to stop observing.
15509
+ */
15510
+ static observe(name, variant, callback) {
15511
+ if (window === undefined) return () => {};
15512
+ const key = __classPrivateFieldGet(this, _a$9, "m", _IconRegistry_createKey).call(this, name, variant);
15513
+ if (!__classPrivateFieldGet(this, _a$9, "f", _IconRegistry_observers).has(key)) {
15514
+ __classPrivateFieldGet(this, _a$9, "f", _IconRegistry_observers).set(key, [callback]);
15515
+ } else {
15516
+ __classPrivateFieldGet(this, _a$9, "f", _IconRegistry_observers).get(key)?.push(callback);
15517
+ }
15518
+ return () => {
15519
+ const callbacks = __classPrivateFieldGet(this, _a$9, "f", _IconRegistry_observers).get(key);
15520
+ if (callbacks) {
15521
+ const index = callbacks.indexOf(callback);
15522
+ if (index >= 0) {
15523
+ callbacks.splice(index, 1);
15524
+ }
15525
+ if (callbacks.length == 0) {
15526
+ __classPrivateFieldGet(this, _a$9, "f", _IconRegistry_observers).delete(key);
15527
+ }
15528
+ }
15529
+ };
15530
+ }
15531
+ }
15532
+ _a$9 = IconRegistry, _IconRegistry_createKey = function _IconRegistry_createKey(name, variant) {
15533
+ return `${variant}-${name}`;
15534
+ }, _IconRegistry_validateSvgIconInfo = function _IconRegistry_validateSvgIconInfo(name, variant, info, trustViewBox = false) {
15535
+ if (!trustViewBox && !VIEW_BOX_PATTERN.test(info.viewBox)) {
15536
+ throw new Error(`Unable to register icon '${name}' for variant '${variant}'. Invalid viewbox data.`);
15537
+ }
15538
+ if (!PATH_DATA_PATTERN.test(info.path)) {
15539
+ throw new Error(`Unable to register icon '${name}' for variant '${variant}'. Invalid path data.`);
15540
+ }
15541
+ };
15542
+ /** @private */
15543
+ _IconRegistry_icons = {
15544
+ value: new Map()
15545
+ };
15546
+ /** @private */
15547
+ _IconRegistry_observers = {
15548
+ value: new Map()
15549
+ };
15550
+
15551
+ var _M3eIconElement_iconRegistryUnobserve;
15421
15552
  /**
15422
15553
  * A small symbol used to easily identify an action or category.
15423
15554
  *
@@ -15455,6 +15586,8 @@ M3eHeadingElement = __decorate([customElement$1("m3e-heading")], M3eHeadingEleme
15455
15586
  let M3eIconElement = class M3eIconElement extends Role$1(LitElement, "img") {
15456
15587
  constructor() {
15457
15588
  super(...arguments);
15589
+ /** @private */
15590
+ _M3eIconElement_iconRegistryUnobserve.set(this, void 0);
15458
15591
  /** The name of the icon. */
15459
15592
  this.name = "";
15460
15593
  /**
@@ -15491,6 +15624,22 @@ let M3eIconElement = class M3eIconElement extends Role$1(LitElement, "img") {
15491
15624
  super.connectedCallback();
15492
15625
  }
15493
15626
  /** @inheritdoc */
15627
+ disconnectedCallback() {
15628
+ super.disconnectedCallback();
15629
+ __classPrivateFieldGet(this, _M3eIconElement_iconRegistryUnobserve, "f")?.call(this);
15630
+ }
15631
+ /** @inheritdoc */
15632
+ willUpdate(_changedProperties) {
15633
+ super.willUpdate(_changedProperties);
15634
+ if (_changedProperties.has("name") && !IconRegistry.isIconRegistered(this.name, this.variant)) {
15635
+ __classPrivateFieldSet(this, _M3eIconElement_iconRegistryUnobserve, IconRegistry.observe(this.name, this.variant, () => {
15636
+ this.requestUpdate();
15637
+ __classPrivateFieldGet(this, _M3eIconElement_iconRegistryUnobserve, "f")?.call(this);
15638
+ __classPrivateFieldSet(this, _M3eIconElement_iconRegistryUnobserve, undefined, "f");
15639
+ }), "f");
15640
+ }
15641
+ }
15642
+ /** @inheritdoc */
15494
15643
  updated(_changedProperties) {
15495
15644
  super.updated(_changedProperties);
15496
15645
  if (_changedProperties.has("filled")) {
@@ -15508,11 +15657,12 @@ let M3eIconElement = class M3eIconElement extends Role$1(LitElement, "img") {
15508
15657
  }
15509
15658
  /** @inheritdoc */
15510
15659
  render() {
15511
- return html`<div class="icon" aria-hidden="true">${this.name}</div>`;
15660
+ return IconRegistry.isIconRegistered(this.name, this.variant) ? IconRegistry.renderIcon(this.name, this.variant, this.filled) : html`<div class="icon" aria-hidden="true">${this.name}</div>`;
15512
15661
  }
15513
15662
  };
15663
+ _M3eIconElement_iconRegistryUnobserve = new WeakMap();
15514
15664
  /** The styles of the element. */
15515
- M3eIconElement.styles = css`:host { display: inline-block; user-select: none; font-size: var(--m3e-icon-size, 1.5rem); width: 1em; vertical-align: middle; overflow: hidden; } .icon { font-weight: normal; font-style: normal; line-height: 1; letter-spacing: normal; text-transform: none; white-space: nowrap; word-wrap: normal; direction: ltr; font-feature-settings: "liga"; -webkit-font-smoothing: antialiased; width: inherit; height: inherit; vertical-align: inherit; font-variation-settings: "FILL" var(--_icon-fill, 0), "wght" var(--_icon-weight, 400), "GRAD" var(--_icon-grade, 0), "opsz" var(--_icon-optical-size, 24); } :host([variant="outlined"]) .icon { font-family: "Material Symbols Outlined"; } :host([variant="rounded"]) .icon { font-family: "Material Symbols Rounded"; } :host([variant="sharp"]) .icon { font-family: "Material Symbols Sharp"; }`;
15665
+ M3eIconElement.styles = css`:host { display: inline-block; user-select: none; font-size: var(--m3e-icon-size, 1.5rem); width: 1em; height: 1em; vertical-align: middle; overflow: hidden; } .icon { font-weight: normal; font-style: normal; line-height: 1; letter-spacing: normal; text-transform: none; white-space: nowrap; word-wrap: normal; direction: ltr; font-feature-settings: "liga"; -webkit-font-smoothing: antialiased; width: inherit; height: inherit; vertical-align: inherit; font-variation-settings: "FILL" var(--_icon-fill, 0), "wght" var(--_icon-weight, 400), "GRAD" var(--_icon-grade, 0), "opsz" var(--_icon-optical-size, 24); } :host([variant="outlined"]) .icon { font-family: "Material Symbols Outlined"; } :host([variant="rounded"]) .icon { font-family: "Material Symbols Rounded"; } :host([variant="sharp"]) .icon { font-family: "Material Symbols Sharp"; } svg { font-size: inherit; width: 1em; height: 1em; }`;
15516
15666
  __decorate([query(".icon")], M3eIconElement.prototype, "_icon", void 0);
15517
15667
  __decorate([property()], M3eIconElement.prototype, "name", void 0);
15518
15668
  __decorate([property({
@@ -15532,6 +15682,16 @@ __decorate([property({
15532
15682
  })], M3eIconElement.prototype, "opticalSize", void 0);
15533
15683
  M3eIconElement = __decorate([customElement$1("m3e-icon")], M3eIconElement);
15534
15684
 
15685
+ /**
15686
+ * Registers an SVG icon to the internal icon registry used by `m3e-icon`.
15687
+ * @param {string} name The name of the icon.
15688
+ * @param {IconVariant} variant The variant of the icon.
15689
+ * @param data The outlined and filled SVG information of the icon.
15690
+ */
15691
+ function registerIcon(name, variant, data) {
15692
+ IconRegistry.addIcon(name, variant, data);
15693
+ }
15694
+
15535
15695
  /**
15536
15696
  * Component design tokens that control the `M3eIconButtonElement` for all size variants.
15537
15697
  * @internal
@@ -22765,7 +22925,7 @@ __decorate([property({
22765
22925
  })], M3eSegmentedButtonElement.prototype, "hideSelectionIndicator", void 0);
22766
22926
  M3eSegmentedButtonElement = __decorate([customElement$1("m3e-segmented-button")], M3eSegmentedButtonElement);
22767
22927
 
22768
- var _M3eSelectElement_instances, _M3eSelectElement_clone, _M3eSelectElement_menu, _M3eSelectElement_ignoreKeyUp, _M3eSelectElement_ignoreFocusVisible, _M3eSelectElement_id, _M3eSelectElement_listId, _M3eSelectElement_clickHandler, _M3eSelectElement_keyDownHandler, _M3eSelectElement_keyUpHandler, _M3eSelectElement_menuToggleHandler, _M3eSelectElement_menuPointerDownHandler, _M3eSelectElement_options_get, _M3eSelectElement_selected_get, _M3eSelectElement_formField_get, _M3eSelectElement_handleMutation, _M3eSelectElement_handleClick, _M3eSelectElement_handleKeyDown, _M3eSelectElement_handleKeyUp, _M3eSelectElement_handleMenuPointerDown, _M3eSelectElement_handleMenuToggle, _M3eSelectElement_destroyMenu, _M3eSelectElement_toggleMenu, _M3eSelectElement_showMenu, _M3eSelectElement_hideMenu, _M3eSelectElement_activateOption, _M3eSelectElement_updateSelectionState, _M3eSelectElement_selectOption;
22928
+ var _M3eSelectElement_instances, _M3eSelectElement_clone, _M3eSelectElement_menu, _M3eSelectElement_ignoreKeyUp, _M3eSelectElement_ignoreFocusVisible, _M3eSelectElement_id, _M3eSelectElement_listId, _M3eSelectElement_clickHandler, _M3eSelectElement_keyDownHandler, _M3eSelectElement_keyUpHandler, _M3eSelectElement_menuToggleHandler, _M3eSelectElement_menuPointerDownHandler, _M3eSelectElement_menuPointerUpHandler, _M3eSelectElement_menuPressedOption, _M3eSelectElement_options_get, _M3eSelectElement_selected_get, _M3eSelectElement_formField_get, _M3eSelectElement_handleMutation, _M3eSelectElement_handleClick, _M3eSelectElement_handleKeyDown, _M3eSelectElement_handleKeyUp, _M3eSelectElement_handleMenuPointerDown, _M3eSelectElement_handleMenuPointerUp, _M3eSelectElement_handleMenuToggle, _M3eSelectElement_destroyMenu, _M3eSelectElement_toggleMenu, _M3eSelectElement_showMenu, _M3eSelectElement_hideMenu, _M3eSelectElement_activateOption, _M3eSelectElement_updateSelectionState, _M3eSelectElement_selectOption;
22769
22929
  var M3eSelectElement_1;
22770
22930
  /**
22771
22931
  * A form control that allows users to select a value from a set of predefined options.
@@ -22849,6 +23009,10 @@ let M3eSelectElement = M3eSelectElement_1 = class M3eSelectElement extends Focus
22849
23009
  /** @private */
22850
23010
  _M3eSelectElement_menuPointerDownHandler.set(this, e => __classPrivateFieldGet(this, _M3eSelectElement_instances, "m", _M3eSelectElement_handleMenuPointerDown).call(this, e));
22851
23011
  /** @private */
23012
+ _M3eSelectElement_menuPointerUpHandler.set(this, e => __classPrivateFieldGet(this, _M3eSelectElement_instances, "m", _M3eSelectElement_handleMenuPointerUp).call(this, e));
23013
+ /** @private */
23014
+ _M3eSelectElement_menuPressedOption.set(this, void 0);
23015
+ /** @private */
22852
23016
  this._listKeyManager = new ListKeyManager().withWrap().withHomeAndEnd().withPageUpAndDown().withVerticalOrientation().withTypeahead().onActiveItemChange(() => {
22853
23017
  if (this._listKeyManager.activeItem) {
22854
23018
  __classPrivateFieldGet(this, _M3eSelectElement_instances, "m", _M3eSelectElement_activateOption).call(this, this._listKeyManager.activeItem);
@@ -22898,7 +23062,7 @@ let M3eSelectElement = M3eSelectElement_1 = class M3eSelectElement extends Focus
22898
23062
  }
22899
23063
  }
22900
23064
  /** @inheritdoc @internal */
22901
- get [(_M3eSelectElement_clone = new WeakMap(), _M3eSelectElement_menu = new WeakMap(), _M3eSelectElement_ignoreKeyUp = new WeakMap(), _M3eSelectElement_ignoreFocusVisible = new WeakMap(), _M3eSelectElement_id = new WeakMap(), _M3eSelectElement_listId = new WeakMap(), _M3eSelectElement_clickHandler = new WeakMap(), _M3eSelectElement_keyDownHandler = new WeakMap(), _M3eSelectElement_keyUpHandler = new WeakMap(), _M3eSelectElement_menuToggleHandler = new WeakMap(), _M3eSelectElement_menuPointerDownHandler = new WeakMap(), _M3eSelectElement_instances = new WeakSet(), _M3eSelectElement_options_get = function _M3eSelectElement_options_get() {
23065
+ get [(_M3eSelectElement_clone = new WeakMap(), _M3eSelectElement_menu = new WeakMap(), _M3eSelectElement_ignoreKeyUp = new WeakMap(), _M3eSelectElement_ignoreFocusVisible = new WeakMap(), _M3eSelectElement_id = new WeakMap(), _M3eSelectElement_listId = new WeakMap(), _M3eSelectElement_clickHandler = new WeakMap(), _M3eSelectElement_keyDownHandler = new WeakMap(), _M3eSelectElement_keyUpHandler = new WeakMap(), _M3eSelectElement_menuToggleHandler = new WeakMap(), _M3eSelectElement_menuPointerDownHandler = new WeakMap(), _M3eSelectElement_menuPointerUpHandler = new WeakMap(), _M3eSelectElement_menuPressedOption = new WeakMap(), _M3eSelectElement_instances = new WeakSet(), _M3eSelectElement_options_get = function _M3eSelectElement_options_get() {
22902
23066
  return this._listKeyManager?.items ?? [];
22903
23067
  }, _M3eSelectElement_selected_get = function _M3eSelectElement_selected_get() {
22904
23068
  return __classPrivateFieldGet(this, _M3eSelectElement_instances, "a", _M3eSelectElement_options_get).filter(x => x.selected);
@@ -23077,23 +23241,36 @@ _M3eSelectElement_handleKeyUp = function _M3eSelectElement_handleKeyUp(e) {
23077
23241
  }
23078
23242
  };
23079
23243
  _M3eSelectElement_handleMenuPointerDown = function _M3eSelectElement_handleMenuPointerDown(e) {
23244
+ __classPrivateFieldSet(this, _M3eSelectElement_menuPressedOption, undefined, "f");
23080
23245
  if (e.button === 2) return;
23246
+ // Prevent click to avoid stealing focus.
23081
23247
  e.preventDefault();
23082
23248
  e.stopImmediatePropagation();
23083
23249
  const option = e.composedPath().find(x => x instanceof HTMLElement && x.tagName === "M3E-OPTION");
23084
23250
  if (option && !option.disabled) {
23251
+ __classPrivateFieldSet(this, _M3eSelectElement_menuPressedOption, option, "f");
23252
+ }
23253
+ };
23254
+ _M3eSelectElement_handleMenuPointerUp = function _M3eSelectElement_handleMenuPointerUp(e) {
23255
+ const pressedOption = __classPrivateFieldGet(this, _M3eSelectElement_menuPressedOption, "f");
23256
+ __classPrivateFieldSet(this, _M3eSelectElement_menuPressedOption, undefined, "f");
23257
+ if (e.button === 2) return;
23258
+ if (!pressedOption) return;
23259
+ const option = e.composedPath().find(x => x instanceof HTMLElement && x.tagName === "M3E-OPTION");
23260
+ if (option === pressedOption) {
23085
23261
  __classPrivateFieldGet(this, _M3eSelectElement_instances, "m", _M3eSelectElement_selectOption).call(this, option);
23086
23262
  this._listKeyManager.setActiveItem(option);
23087
- if (!this.multi) {
23088
- if (!prefersReducedMotion$1()) {
23089
- setTimeout(() => __classPrivateFieldGet(this, _M3eSelectElement_instances, "m", _M3eSelectElement_hideMenu).call(this), 150);
23090
- } else {
23091
- __classPrivateFieldGet(this, _M3eSelectElement_instances, "m", _M3eSelectElement_hideMenu).call(this);
23092
- }
23093
- } else {
23263
+ if (this.multi) {
23094
23264
  this.requestUpdate();
23095
23265
  }
23096
23266
  }
23267
+ if (!this.multi) {
23268
+ if (!prefersReducedMotion$1()) {
23269
+ setTimeout(() => __classPrivateFieldGet(this, _M3eSelectElement_instances, "m", _M3eSelectElement_hideMenu).call(this), 150);
23270
+ } else {
23271
+ __classPrivateFieldGet(this, _M3eSelectElement_instances, "m", _M3eSelectElement_hideMenu).call(this);
23272
+ }
23273
+ }
23097
23274
  };
23098
23275
  _M3eSelectElement_handleMenuToggle = function _M3eSelectElement_handleMenuToggle(e) {
23099
23276
  if (!__classPrivateFieldGet(this, _M3eSelectElement_menu, "f")) return;
@@ -23126,6 +23303,7 @@ _M3eSelectElement_destroyMenu = function _M3eSelectElement_destroyMenu(e) {
23126
23303
  __classPrivateFieldGet(this, _M3eSelectElement_menu, "f").remove();
23127
23304
  __classPrivateFieldGet(this, _M3eSelectElement_menu, "f").removeEventListener("toggle", __classPrivateFieldGet(this, _M3eSelectElement_menuToggleHandler, "f"));
23128
23305
  __classPrivateFieldGet(this, _M3eSelectElement_menu, "f").removeEventListener("pointerdown", __classPrivateFieldGet(this, _M3eSelectElement_menuPointerDownHandler, "f"));
23306
+ __classPrivateFieldGet(this, _M3eSelectElement_menu, "f").removeEventListener("pointerup", __classPrivateFieldGet(this, _M3eSelectElement_menuPointerUpHandler, "f"));
23129
23307
  __classPrivateFieldSet(this, _M3eSelectElement_menu, undefined, "f");
23130
23308
  this.ariaExpanded = "false";
23131
23309
  this.removeAttribute("aria-controls");
@@ -23163,6 +23341,7 @@ _M3eSelectElement_showMenu = function _M3eSelectElement_showMenu() {
23163
23341
  __classPrivateFieldGet(this, _M3eSelectElement_menu, "f").fitAnchorWidth = true;
23164
23342
  __classPrivateFieldGet(this, _M3eSelectElement_menu, "f").addEventListener("toggle", __classPrivateFieldGet(this, _M3eSelectElement_menuToggleHandler, "f"));
23165
23343
  __classPrivateFieldGet(this, _M3eSelectElement_menu, "f").addEventListener("pointerdown", __classPrivateFieldGet(this, _M3eSelectElement_menuPointerDownHandler, "f"));
23344
+ __classPrivateFieldGet(this, _M3eSelectElement_menu, "f").addEventListener("pointerup", __classPrivateFieldGet(this, _M3eSelectElement_menuPointerUpHandler, "f"));
23166
23345
  if (__classPrivateFieldGet(this, _M3eSelectElement_clone, "f")) {
23167
23346
  __classPrivateFieldGet(this, _M3eSelectElement_menu, "f").replaceChildren(...__classPrivateFieldGet(this, _M3eSelectElement_clone, "f").childNodes);
23168
23347
  }
@@ -23509,8 +23688,52 @@ async function _M3eSkeletonElement_createShape(element) {
23509
23688
  __classPrivateFieldGet(this, _M3eSkeletonElement_anchoringCleanupMap, "f").set(shape, anchoringCleanup);
23510
23689
  this.shadowRoot?.appendChild(shape);
23511
23690
  };
23691
+ (() => {
23692
+ if (window !== undefined) {
23693
+ registerStyleSheet$1(css`@property --_m3e-skeleton-wave-pct { syntax: "<number>"; inherits: true; initial-value: 0; } @property --_m3e-skeleton-pulse-norm { syntax: "<number>"; inherits: true; initial-value: 0; } :root { --_m3e-skeleton-wave-span: 40vw; --_m3e-skeleton-pulse-min: 0.06; }</number></number>`);
23694
+ const reducedMediaQuery = window.matchMedia("(prefers-reduced-motion: reduce)");
23695
+ const forcedColorsMediaQuery = window.matchMedia("(forced-colors: active)");
23696
+ let waveAnimation = null;
23697
+ let pulseAnimation = null;
23698
+ function startAnimations() {
23699
+ waveAnimation = document.documentElement.animate([{
23700
+ ["--_m3e-skeleton-wave-pct"]: 0
23701
+ }, {
23702
+ ["--_m3e-skeleton-wave-pct"]: 1
23703
+ }], {
23704
+ duration: 2100,
23705
+ iterations: Infinity,
23706
+ easing: "linear"
23707
+ });
23708
+ pulseAnimation = document.documentElement.animate([{
23709
+ ["--_m3e-skeleton-pulse-norm"]: 0
23710
+ }, {
23711
+ ["--_m3e-skeleton-pulse-norm"]: 1
23712
+ }, {
23713
+ ["--_m3e-skeleton-pulse-norm"]: 0
23714
+ }], {
23715
+ duration: 1200,
23716
+ iterations: Infinity,
23717
+ easing: "ease-in-out"
23718
+ });
23719
+ }
23720
+ function applyMotionState() {
23721
+ if (reducedMediaQuery.matches || forcedColorsMediaQuery.matches) {
23722
+ waveAnimation?.pause();
23723
+ pulseAnimation?.pause();
23724
+ } else {
23725
+ waveAnimation?.play();
23726
+ pulseAnimation?.play();
23727
+ }
23728
+ }
23729
+ startAnimations();
23730
+ applyMotionState();
23731
+ reducedMediaQuery.addEventListener("change", applyMotionState);
23732
+ forcedColorsMediaQuery.addEventListener("change", applyMotionState);
23733
+ }
23734
+ })();
23512
23735
  /** The styles of the element. */
23513
- M3eSkeletonElement.styles = css`:host { display: contents; } .shape { position: absolute; overflow: hidden; pointer-events: none; opacity: 1; background-color: var(--m3e-skeleton-color, ${DesignToken$1.color.surface}); } .shape::before { content: ""; position: absolute; left: 0; top: 0; width: 100%; height: 100%; background-color: color-mix( in srgb, var(--m3e-skeleton-tint-color, ${DesignToken$1.color.onSurface}) var(--m3e-skeleton-tint-opacity, 8%), transparent ); } :host(:not([loaded])) slot { visibility: hidden; } :host([loaded]) .shape { opacity: 0; transition: ${unsafeCSS(`opacity ${DesignToken$1.motion.duration.short3} ${DesignToken$1.motion.easing.standard}`)}; } :host([shape="rounded"]) .shape { border-radius: var(--m3e-skeleton-rounded-shape, var(--m3e-skeleton-shape, ${DesignToken$1.shape.corner.large})); } :host([shape="circular"]) .shape { border-radius: var(--m3e-skeleton-circular-shape, var(--m3e-skeleton-shape, ${DesignToken$1.shape.corner.full})); } :host([shape="square"]) .shape { border-radius: var(--m3e-skeleton-square-shape, var(--m3e-skeleton-shape, 0px)); } :host([animation="pulse"]:not([loaded])) .shape::after { content: ""; position: absolute; top: 0; left: 0; width: 100%; height: 100%; animation: pulse 1.2s ease-in-out infinite; background-color: var(--m3e-skeleton-tint-color, ${DesignToken$1.color.surfaceDim}); } :host([animation="wave"]:not([loaded])) .shape::after { content: ""; position: absolute; top: 0; left: -150%; height: 100%; width: 150%; opacity: var(--m3e-skeleton-accent-opacity, 6%); background: linear-gradient( 90deg, transparent, var(--m3e-skeleton-accent-color, ${DesignToken$1.color.onSurface}), transparent ); animation: wave 2.1s linear infinite; } @keyframes pulse { 0% { opacity: 1; } 50% { opacity: var(--m3e-skeleton-accent-opacity, 6%); } 100% { opacity: 1; } } @keyframes wave { 0% { left: -150%; } 100% { left: 100%; } } @media (forced-colors: active) { :host([loaded]) .shape { transition: none; } .shape::after { display: none; } .shape { background-color: GrayText; } } @media (prefers-reduced-motion) { :host([loaded]) .shape { transition: none; } .shape::after { display: none; } }`;
23736
+ M3eSkeletonElement.styles = css`:host { display: contents; } .shape { position: absolute; overflow: hidden; pointer-events: none; opacity: 1; background-color: var(--m3e-skeleton-color, ${DesignToken$1.color.surface}); } .shape::before { content: ""; position: absolute; left: 0; top: 0; width: 100%; height: 100%; background-color: color-mix( in srgb, var(--m3e-skeleton-tint-color, ${DesignToken$1.color.onSurface}) var(--m3e-skeleton-tint-opacity, 8%), transparent ); } :host(:not([loaded])) slot { visibility: hidden; } :host([loaded]) .shape { opacity: 0; transition: ${unsafeCSS(`opacity ${DesignToken$1.motion.duration.short3} ${DesignToken$1.motion.easing.standard}`)}; } :host([shape="rounded"]) .shape { border-radius: var(--m3e-skeleton-rounded-shape, var(--m3e-skeleton-shape, ${DesignToken$1.shape.corner.large})); } :host([shape="circular"]) .shape { border-radius: var(--m3e-skeleton-circular-shape, var(--m3e-skeleton-shape, ${DesignToken$1.shape.corner.full})); } :host([shape="square"]) .shape { border-radius: var(--m3e-skeleton-square-shape, var(--m3e-skeleton-shape, 0px)); } :host([animation="pulse"]:not([loaded])) .shape::after { content: ""; position: absolute; top: 0; left: 0; width: 100%; height: 100%; opacity: calc( var(--m3e-skeleton-accent-opacity, 0.06) + (1 - var(--m3e-skeleton-accent-opacity, 0.06)) * var(--_m3e-skeleton-pulse-norm) ); background-color: var(--m3e-skeleton-tint-color, ${DesignToken$1.color.surfaceDim}); } :host([animation="wave"]:not([loaded])) .shape::after { content: ""; position: absolute; top: 0; left: 0; width: 100%; height: 100%; background-image: linear-gradient( 90deg, transparent 0%, transparent 35%, var(--m3e-skeleton-accent-color, ${DesignToken$1.color.onSurface}) 50%, transparent 65%, transparent 100% ); background-attachment: fixed; background-size: calc(100vw + var(--_m3e-skeleton-wave-span) * 2) 100%; background-position-x: calc( var(--_m3e-skeleton-wave-pct) * (100vw + var(--_m3e-skeleton-wave-span) * 2) - var(--_m3e-skeleton-wave-span) ); opacity: var(--m3e-skeleton-accent-opacity, 0.06); } @media (forced-colors: active) { :host([loaded]) .shape { transition: none; } .shape::after { display: none; } .shape { background-color: GrayText; } } @media (prefers-reduced-motion) { :host([loaded]) .shape { transition: none; } .shape::after { display: none; } }`;
23514
23737
  __decorate([property({
23515
23738
  reflect: true
23516
23739
  })], M3eSkeletonElement.prototype, "shape", void 0);
@@ -31484,5 +31707,5 @@ M3eTooltipElement.styles = css`:host { display: contents; } .base { position: ab
31484
31707
  __decorate([property()], M3eTooltipElement.prototype, "position", void 0);
31485
31708
  M3eTooltipElement = __decorate([customElement$1("m3e-tooltip")], M3eTooltipElement);
31486
31709
 
31487
- export { ActionElementBase, AnimationLoopController, AttachInternals, CalendarViewElementBase, Checked, CheckedIndeterminate, ConstraintValidation, DesignToken, Dirty, Disabled, DisabledInteractive, EventAttribute, FocusController, Focusable, FormAssociated, FormSubmitter, HoverController, HtmlFor, InertController, IntersectionController, KeyboardClick, Labelled, LinkButton, LongPressController, M3eAccordionElement, M3eActionListElement, M3eAppBarElement, M3eAssistChipElement, M3eAutocompleteElement, M3eAvatarElement, M3eBadgeElement, M3eBottomSheetActionElement, M3eBottomSheetElement, M3eBottomSheetTriggerElement, M3eButtonElement, M3eButtonGroupElement, M3eButtonSegmentElement, M3eCalendarElement, M3eCardElement, M3eCheckboxElement, M3eChipElement, M3eChipSetElement, M3eCircularProgressIndicatorElement, M3eCollapsibleElement, M3eDatepickerElement, M3eDatepickerToggleElement, M3eDialogActionElement, M3eDialogElement, M3eDialogTriggerElement, M3eDividerElement, M3eDrawerContainerElement, M3eDrawerToggleElement, M3eElevationElement, M3eExpandableListItemElement, M3eExpansionHeaderElement, M3eExpansionPanelElement, M3eFabElement, M3eFabMenuElement, M3eFabMenuItemElement, M3eFabMenuTriggerElement, M3eFilterChipElement, M3eFilterChipSetElement, M3eFocusRingElement, M3eFormFieldElement, M3eHeadingElement, M3eIconButtonElement, M3eIconElement, M3eInputChipElement, M3eInputChipSetElement, M3eLinearProgressIndicatorElement, M3eListActionElement, M3eListElement, M3eListItemButtonElement, M3eListItemElement, M3eListOptionElement, M3eLoadingIndicatorElement, M3eMenuElement, M3eMenuItemCheckboxElement, M3eMenuItemElement, M3eMenuItemGroupElement, M3eMenuItemRadioElement, M3eMenuTriggerElement, M3eMonthViewElement, M3eMultiYearViewElement, M3eNavBarElement, M3eNavItemElement, M3eNavMenuElement, M3eNavMenuItemElement, M3eNavMenuItemGroupElement, M3eNavRailElement, M3eNavRailToggleElement, M3eOptGroupElement, M3eOptionElement, M3eOptionPanelElement, M3ePaginatorElement, M3ePseudoCheckboxElement, M3ePseudoRadioElement, M3eRadioElement, M3eRadioGroupElement, M3eRichTooltipActionElement, M3eRichTooltipElement, M3eRippleElement, M3eScrollContainerElement, M3eSearchBarElement, M3eSearchViewElement, M3eSegmentedButtonElement, M3eSelectElement, M3eSelectionListElement, M3eShapeElement, M3eSkeletonElement, M3eSlideElement, M3eSlideGroupElement, M3eSliderElement, M3eSliderThumbElement, M3eSnackbar, M3eSnackbarElement, M3eSplitButtonElement, M3eSplitPaneElement, M3eStateLayerElement, M3eStepElement, M3eStepPanelElement, M3eStepperElement, M3eStepperNextElement, M3eStepperPreviousElement, M3eStepperResetElement, M3eSuggestionChipElement, M3eSwitchElement, M3eTabElement, M3eTabPanelElement, M3eTabsElement, M3eTextHighlightElement, M3eTextOverflowElement, M3eTextareaAutosizeElement, M3eThemeElement, M3eTocElement, M3eTocItemElement, M3eToolbarElement, M3eTooltipElement, M3eYearViewElement, MutationController, PressedController, ProgressElementIndicatorBase, ReadOnly, ReconnectedCallback, Required, RequiredConstraintValidation, ResizeController, Role, ScrollController, ScrollLockController, Selected, StepperButtonElementBase, SuppressInitialAnimation, TocGenerator, TooltipElementBase, Touched, VelocityTracker, Vertical, addCustomState, checkOrSelect, computeCssSize, computeLineCount, customElement, dateConverter, debounce, defaultValue, deleteCustomState, findFormFieldControl, focusWhenReady, forcedColorsActive, formValue, generateClipPaths, getTextContent, guid, hasAssignedNodes, hasCustomState, hasKeys, interceptProperty, internals, isAttachInternalsMixin, isCheckedIndeterminateMixin, isCheckedMixin, isCheckedOrSelected, isCheckedOrSelectedMixin, isConstraintValidationMixin, isDirtyMixin, isDisabledInteractiveMixin, isDisabledMixin, isFormAssociatedMixin, isFormFieldControl, isFormSubmitterMixin, isHtmlForMixin, isLabelledMixin, isLinkButtonMixin, isReadOnlyMixin, isRequiredConstraintValidationMixin, isRequiredMixin, isSelectedMixin, isTouchedMixin, isVerticalMixin, prefersReducedMotion, registerStyleSheet, renderPseudoLink, resolveElementById, resolveFragmentUrl, safeStyleMap, scrollIntoViewIfNeeded, setCustomState, spaceSeparatedStringConverter, updateLabels, validate, waitForUpgrade };
31710
+ export { ActionElementBase, AnimationLoopController, AttachInternals, CalendarViewElementBase, Checked, CheckedIndeterminate, ConstraintValidation, DesignToken, Dirty, Disabled, DisabledInteractive, EventAttribute, FocusController, Focusable, FormAssociated, FormSubmitter, HoverController, HtmlFor, InertController, IntersectionController, KeyboardClick, Labelled, LinkButton, LongPressController, M3eAccordionElement, M3eActionListElement, M3eAppBarElement, M3eAssistChipElement, M3eAutocompleteElement, M3eAvatarElement, M3eBadgeElement, M3eBottomSheetActionElement, M3eBottomSheetElement, M3eBottomSheetTriggerElement, M3eButtonElement, M3eButtonGroupElement, M3eButtonSegmentElement, M3eCalendarElement, M3eCardElement, M3eCheckboxElement, M3eChipElement, M3eChipSetElement, M3eCircularProgressIndicatorElement, M3eCollapsibleElement, M3eDatepickerElement, M3eDatepickerToggleElement, M3eDialogActionElement, M3eDialogElement, M3eDialogTriggerElement, M3eDividerElement, M3eDrawerContainerElement, M3eDrawerToggleElement, M3eElevationElement, M3eExpandableListItemElement, M3eExpansionHeaderElement, M3eExpansionPanelElement, M3eFabElement, M3eFabMenuElement, M3eFabMenuItemElement, M3eFabMenuTriggerElement, M3eFilterChipElement, M3eFilterChipSetElement, M3eFocusRingElement, M3eFormFieldElement, M3eHeadingElement, M3eIconButtonElement, M3eIconElement, M3eInputChipElement, M3eInputChipSetElement, M3eLinearProgressIndicatorElement, M3eListActionElement, M3eListElement, M3eListItemButtonElement, M3eListItemElement, M3eListOptionElement, M3eLoadingIndicatorElement, M3eMenuElement, M3eMenuItemCheckboxElement, M3eMenuItemElement, M3eMenuItemGroupElement, M3eMenuItemRadioElement, M3eMenuTriggerElement, M3eMonthViewElement, M3eMultiYearViewElement, M3eNavBarElement, M3eNavItemElement, M3eNavMenuElement, M3eNavMenuItemElement, M3eNavMenuItemGroupElement, M3eNavRailElement, M3eNavRailToggleElement, M3eOptGroupElement, M3eOptionElement, M3eOptionPanelElement, M3ePaginatorElement, M3ePseudoCheckboxElement, M3ePseudoRadioElement, M3eRadioElement, M3eRadioGroupElement, M3eRichTooltipActionElement, M3eRichTooltipElement, M3eRippleElement, M3eScrollContainerElement, M3eSearchBarElement, M3eSearchViewElement, M3eSegmentedButtonElement, M3eSelectElement, M3eSelectionListElement, M3eShapeElement, M3eSkeletonElement, M3eSlideElement, M3eSlideGroupElement, M3eSliderElement, M3eSliderThumbElement, M3eSnackbar, M3eSnackbarElement, M3eSplitButtonElement, M3eSplitPaneElement, M3eStateLayerElement, M3eStepElement, M3eStepPanelElement, M3eStepperElement, M3eStepperNextElement, M3eStepperPreviousElement, M3eStepperResetElement, M3eSuggestionChipElement, M3eSwitchElement, M3eTabElement, M3eTabPanelElement, M3eTabsElement, M3eTextHighlightElement, M3eTextOverflowElement, M3eTextareaAutosizeElement, M3eThemeElement, M3eTocElement, M3eTocItemElement, M3eToolbarElement, M3eTooltipElement, M3eYearViewElement, MutationController, PressedController, ProgressElementIndicatorBase, ReadOnly, ReconnectedCallback, Required, RequiredConstraintValidation, ResizeController, Role, ScrollController, ScrollLockController, Selected, StepperButtonElementBase, SuppressInitialAnimation, TocGenerator, TooltipElementBase, Touched, VelocityTracker, Vertical, addCustomState, checkOrSelect, computeCssSize, computeLineCount, customElement, dateConverter, debounce, defaultValue, deleteCustomState, findFormFieldControl, focusWhenReady, forcedColorsActive, formValue, generateClipPaths, getTextContent, guid, hasAssignedNodes, hasCustomState, hasKeys, interceptProperty, internals, isAttachInternalsMixin, isCheckedIndeterminateMixin, isCheckedMixin, isCheckedOrSelected, isCheckedOrSelectedMixin, isConstraintValidationMixin, isDirtyMixin, isDisabledInteractiveMixin, isDisabledMixin, isFormAssociatedMixin, isFormFieldControl, isFormSubmitterMixin, isHtmlForMixin, isLabelledMixin, isLinkButtonMixin, isReadOnlyMixin, isRequiredConstraintValidationMixin, isRequiredMixin, isSelectedMixin, isTouchedMixin, isVerticalMixin, prefersReducedMotion, registerIcon, registerStyleSheet, renderPseudoLink, resolveElementById, resolveFragmentUrl, safeStyleMap, scrollIntoViewIfNeeded, setCustomState, spaceSeparatedStringConverter, updateLabels, validate, waitForUpgrade };
31488
31711
  //# sourceMappingURL=all.js.map