@m3e/web 2.3.1 → 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 (146) hide show
  1. package/LICENSE +1 -1
  2. package/dist/all.js +195 -11
  3. package/dist/all.js.map +1 -1
  4. package/dist/all.min.js +44 -44
  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 +1 -1
  9. package/dist/autocomplete.min.js +1 -1
  10. package/dist/avatar.js +1 -1
  11. package/dist/avatar.min.js +1 -1
  12. package/dist/badge.js +1 -1
  13. package/dist/badge.min.js +1 -1
  14. package/dist/bottom-sheet.js +1 -1
  15. package/dist/bottom-sheet.min.js +1 -1
  16. package/dist/button-group.js +1 -1
  17. package/dist/button-group.min.js +1 -1
  18. package/dist/button.js +1 -1
  19. package/dist/button.min.js +1 -1
  20. package/dist/calendar.js +1 -1
  21. package/dist/calendar.min.js +1 -1
  22. package/dist/card.js +1 -1
  23. package/dist/card.min.js +1 -1
  24. package/dist/checkbox.js +1 -1
  25. package/dist/checkbox.min.js +1 -1
  26. package/dist/chips.js +1 -1
  27. package/dist/chips.min.js +1 -1
  28. package/dist/core-a11y.js +5 -3
  29. package/dist/core-a11y.js.map +1 -1
  30. package/dist/core-a11y.min.js +6 -6
  31. package/dist/core-a11y.min.js.map +1 -1
  32. package/dist/core-anchoring.js +1 -1
  33. package/dist/core-anchoring.min.js +1 -1
  34. package/dist/core-bidi.js +1 -1
  35. package/dist/core-bidi.min.js +1 -1
  36. package/dist/core-layout.js +1 -1
  37. package/dist/core-layout.min.js +1 -1
  38. package/dist/core-platform.js +1 -1
  39. package/dist/core-platform.min.js +1 -1
  40. package/dist/core.js +4 -4
  41. package/dist/core.js.map +1 -1
  42. package/dist/core.min.js +1 -1
  43. package/dist/core.min.js.map +1 -1
  44. package/dist/css-custom-data.json +85 -85
  45. package/dist/custom-elements.json +1551 -1466
  46. package/dist/datepicker.js +1 -1
  47. package/dist/datepicker.min.js +1 -1
  48. package/dist/dialog.js +1 -1
  49. package/dist/dialog.min.js +1 -1
  50. package/dist/divider.js +1 -1
  51. package/dist/divider.min.js +1 -1
  52. package/dist/drawer-container.js +1 -1
  53. package/dist/drawer-container.min.js +1 -1
  54. package/dist/expansion-panel.js +1 -1
  55. package/dist/expansion-panel.min.js +1 -1
  56. package/dist/fab-menu.js +1 -1
  57. package/dist/fab-menu.min.js +1 -1
  58. package/dist/fab.js +1 -1
  59. package/dist/fab.min.js +1 -1
  60. package/dist/form-field.js +1 -1
  61. package/dist/form-field.min.js +1 -1
  62. package/dist/heading.js +1 -1
  63. package/dist/heading.min.js +1 -1
  64. package/dist/html-custom-data.json +79 -79
  65. package/dist/icon-button.js +1 -1
  66. package/dist/icon-button.min.js +1 -1
  67. package/dist/icon.js +146 -6
  68. package/dist/icon.js.map +1 -1
  69. package/dist/icon.min.js +2 -2
  70. package/dist/icon.min.js.map +1 -1
  71. package/dist/index.js +1 -1
  72. package/dist/index.min.js +1 -1
  73. package/dist/list.js +1 -1
  74. package/dist/list.min.js +1 -1
  75. package/dist/loading-indicator.js +1 -1
  76. package/dist/loading-indicator.min.js +1 -1
  77. package/dist/menu.js +1 -1
  78. package/dist/menu.min.js +1 -1
  79. package/dist/nav-bar.js +1 -1
  80. package/dist/nav-bar.min.js +1 -1
  81. package/dist/nav-menu.js +1 -1
  82. package/dist/nav-menu.min.js +1 -1
  83. package/dist/nav-rail.js +1 -1
  84. package/dist/nav-rail.min.js +1 -1
  85. package/dist/option.js +1 -1
  86. package/dist/option.min.js +1 -1
  87. package/dist/paginator.js +1 -1
  88. package/dist/paginator.min.js +1 -1
  89. package/dist/progress-indicator.js +1 -1
  90. package/dist/progress-indicator.min.js +1 -1
  91. package/dist/radio-group.js +1 -1
  92. package/dist/radio-group.min.js +1 -1
  93. package/dist/search.js +1 -1
  94. package/dist/search.min.js +1 -1
  95. package/dist/segmented-button.js +1 -1
  96. package/dist/segmented-button.min.js +1 -1
  97. package/dist/select.js +1 -1
  98. package/dist/select.min.js +1 -1
  99. package/dist/shape.js +1 -1
  100. package/dist/shape.min.js +1 -1
  101. package/dist/skeleton.js +48 -4
  102. package/dist/skeleton.js.map +1 -1
  103. package/dist/skeleton.min.js +2 -2
  104. package/dist/skeleton.min.js.map +1 -1
  105. package/dist/slide-group.js +1 -1
  106. package/dist/slide-group.min.js +1 -1
  107. package/dist/slider.js +1 -1
  108. package/dist/slider.min.js +1 -1
  109. package/dist/snackbar.js +1 -1
  110. package/dist/snackbar.min.js +1 -1
  111. package/dist/split-button.js +1 -1
  112. package/dist/split-button.min.js +1 -1
  113. package/dist/split-pane.js +1 -1
  114. package/dist/split-pane.min.js +1 -1
  115. package/dist/src/core/a11y/list-key/ListKeyManager.d.ts.map +1 -1
  116. package/dist/src/core/shared/primitives/ElevationElement.d.ts +1 -1
  117. package/dist/src/core/shared/primitives/FocusRingElement.d.ts +1 -1
  118. package/dist/src/core/shared/primitives/RippleElement.d.ts +1 -1
  119. package/dist/src/icon/IconElement.d.ts +7 -1
  120. package/dist/src/icon/IconElement.d.ts.map +1 -1
  121. package/dist/src/icon/IconRegistry.d.ts +54 -0
  122. package/dist/src/icon/IconRegistry.d.ts.map +1 -0
  123. package/dist/src/icon/IconWeight.d.ts +3 -0
  124. package/dist/src/icon/IconWeight.d.ts.map +1 -0
  125. package/dist/src/icon/index.d.ts +1 -0
  126. package/dist/src/icon/index.d.ts.map +1 -1
  127. package/dist/src/icon/registerIcon.d.ts +14 -0
  128. package/dist/src/icon/registerIcon.d.ts.map +1 -0
  129. package/dist/src/skeleton/SkeletonElement.d.ts.map +1 -1
  130. package/dist/stepper.js +1 -1
  131. package/dist/stepper.min.js +1 -1
  132. package/dist/switch.js +1 -1
  133. package/dist/switch.min.js +1 -1
  134. package/dist/tabs.js +1 -1
  135. package/dist/tabs.min.js +1 -1
  136. package/dist/textarea-autosize.js +1 -1
  137. package/dist/textarea-autosize.min.js +1 -1
  138. package/dist/theme.js +1 -1
  139. package/dist/theme.min.js +1 -1
  140. package/dist/toc.js +1 -1
  141. package/dist/toc.min.js +1 -1
  142. package/dist/toolbar.js +1 -1
  143. package/dist/toolbar.min.js +1 -1
  144. package/dist/tooltip.js +1 -1
  145. package/dist/tooltip.min.js +1 -1
  146. 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';
@@ -5670,7 +5670,7 @@ M3eFilterChipElement.formAssociated = true;
5670
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; } }`];
5671
5671
  M3eFilterChipElement = __decorate([customElement$1("m3e-filter-chip")], M3eFilterChipElement);
5672
5672
 
5673
- 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;
5674
5674
  /**
5675
5675
  * A container that organizes filter chips into a cohesive group, enabling selection and
5676
5676
  * deselection of values used to refine content or trigger contextual behavior.
@@ -5715,7 +5715,7 @@ let M3eFilterChipSetElement = class M3eFilterChipSetElement extends Labelled$1(D
5715
5715
  /** @private */
5716
5716
  _M3eFilterChipSetElement_directionalitySubscription.set(this, void 0);
5717
5717
  /** @internal */
5718
- 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);
5719
5719
  /**
5720
5720
  * Whether multiple chips can be selected.
5721
5721
  * @default false
@@ -5748,7 +5748,7 @@ let M3eFilterChipSetElement = class M3eFilterChipSetElement extends Labelled$1(D
5748
5748
  }
5749
5749
  }
5750
5750
  /** @inheritdoc @internal */
5751
- 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)]() {
5752
5752
  const values = this.value;
5753
5753
  if (Array.isArray(values)) {
5754
5754
  const data = new FormData();
@@ -10283,7 +10283,7 @@ var _M3eElevationElement_instances, _M3eElevationElement_hoverController, _M3eEl
10283
10283
  * The component can also be attached to another element using the `for` attribute. When attached, elevation will
10284
10284
  * be lifted by 1 level on hover. This can be disabled using the `disabled` attribute.
10285
10285
  *
10286
- * 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.
10287
10287
  *
10288
10288
  * @example
10289
10289
  * The following example illustrates basic markup. Note how the parenting element's position is `relative`. A parenting
@@ -10461,7 +10461,7 @@ var _M3eFocusRingElement_instances, _M3eFocusRingElement_focusController, _M3eFo
10461
10461
  * The focus ring is displayed when the interactive element receives visible focus and hidden when focus is lost.
10462
10462
  * This can be disabled using the `disabled` attribute.
10463
10463
  *
10464
- * 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.
10465
10465
  *
10466
10466
  * @example
10467
10467
  * The following example illustrates attaching a focus ring to an interactive element. In this example, the parenting div
@@ -10690,7 +10690,7 @@ var _M3eRippleElement_instances, _M3eRippleElement_ripple, _M3eRippleElement_pre
10690
10690
  *
10691
10691
  * The pressed state actives either using both pointer and keyboard events. For keyboard events, `SPACE` activate a ripple.
10692
10692
  *
10693
- * 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.
10694
10694
  *
10695
10695
  * @example
10696
10696
  * The following example illustrates attaching a ripple to an interactive element. In this example, the parenting div
@@ -15438,6 +15438,117 @@ __decorate([property({
15438
15438
  })], M3eHeadingElement.prototype, "level", void 0);
15439
15439
  M3eHeadingElement = __decorate([customElement$1("m3e-heading")], M3eHeadingElement);
15440
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;
15441
15552
  /**
15442
15553
  * A small symbol used to easily identify an action or category.
15443
15554
  *
@@ -15475,6 +15586,8 @@ M3eHeadingElement = __decorate([customElement$1("m3e-heading")], M3eHeadingEleme
15475
15586
  let M3eIconElement = class M3eIconElement extends Role$1(LitElement, "img") {
15476
15587
  constructor() {
15477
15588
  super(...arguments);
15589
+ /** @private */
15590
+ _M3eIconElement_iconRegistryUnobserve.set(this, void 0);
15478
15591
  /** The name of the icon. */
15479
15592
  this.name = "";
15480
15593
  /**
@@ -15511,6 +15624,22 @@ let M3eIconElement = class M3eIconElement extends Role$1(LitElement, "img") {
15511
15624
  super.connectedCallback();
15512
15625
  }
15513
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 */
15514
15643
  updated(_changedProperties) {
15515
15644
  super.updated(_changedProperties);
15516
15645
  if (_changedProperties.has("filled")) {
@@ -15528,11 +15657,12 @@ let M3eIconElement = class M3eIconElement extends Role$1(LitElement, "img") {
15528
15657
  }
15529
15658
  /** @inheritdoc */
15530
15659
  render() {
15531
- 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>`;
15532
15661
  }
15533
15662
  };
15663
+ _M3eIconElement_iconRegistryUnobserve = new WeakMap();
15534
15664
  /** The styles of the element. */
15535
- 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; }`;
15536
15666
  __decorate([query(".icon")], M3eIconElement.prototype, "_icon", void 0);
15537
15667
  __decorate([property()], M3eIconElement.prototype, "name", void 0);
15538
15668
  __decorate([property({
@@ -15552,6 +15682,16 @@ __decorate([property({
15552
15682
  })], M3eIconElement.prototype, "opticalSize", void 0);
15553
15683
  M3eIconElement = __decorate([customElement$1("m3e-icon")], M3eIconElement);
15554
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
+
15555
15695
  /**
15556
15696
  * Component design tokens that control the `M3eIconButtonElement` for all size variants.
15557
15697
  * @internal
@@ -23548,8 +23688,52 @@ async function _M3eSkeletonElement_createShape(element) {
23548
23688
  __classPrivateFieldGet(this, _M3eSkeletonElement_anchoringCleanupMap, "f").set(shape, anchoringCleanup);
23549
23689
  this.shadowRoot?.appendChild(shape);
23550
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
+ })();
23551
23735
  /** The styles of the element. */
23552
- 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; } }`;
23553
23737
  __decorate([property({
23554
23738
  reflect: true
23555
23739
  })], M3eSkeletonElement.prototype, "shape", void 0);
@@ -31523,5 +31707,5 @@ M3eTooltipElement.styles = css`:host { display: contents; } .base { position: ab
31523
31707
  __decorate([property()], M3eTooltipElement.prototype, "position", void 0);
31524
31708
  M3eTooltipElement = __decorate([customElement$1("m3e-tooltip")], M3eTooltipElement);
31525
31709
 
31526
- 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 };
31527
31711
  //# sourceMappingURL=all.js.map