@m3e/web 2.3.1 → 2.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +1 -1
- package/README.md +1 -0
- package/dist/all.js +940 -42
- package/dist/all.js.map +1 -1
- package/dist/all.min.js +44 -44
- package/dist/all.min.js.map +1 -1
- package/dist/app-bar.js +1 -1
- package/dist/app-bar.min.js +1 -1
- package/dist/autocomplete.js +1 -1
- package/dist/autocomplete.min.js +1 -1
- package/dist/avatar.js +1 -1
- package/dist/avatar.min.js +1 -1
- package/dist/badge.js +1 -1
- package/dist/badge.min.js +1 -1
- package/dist/bottom-sheet.js +1 -1
- package/dist/bottom-sheet.min.js +1 -1
- package/dist/button-group.js +1 -1
- package/dist/button-group.min.js +1 -1
- package/dist/button.js +1 -1
- package/dist/button.min.js +1 -1
- package/dist/calendar.js +1 -1
- package/dist/calendar.min.js +1 -1
- package/dist/card.js +1 -1
- package/dist/card.min.js +1 -1
- package/dist/checkbox.js +1 -1
- package/dist/checkbox.min.js +1 -1
- package/dist/chips.js +1 -1
- package/dist/chips.min.js +1 -1
- package/dist/core-a11y.js +5 -3
- package/dist/core-a11y.js.map +1 -1
- package/dist/core-a11y.min.js +6 -6
- package/dist/core-a11y.min.js.map +1 -1
- package/dist/core-anchoring.js +1 -1
- package/dist/core-anchoring.min.js +1 -1
- package/dist/core-bidi.js +1 -1
- package/dist/core-bidi.min.js +1 -1
- package/dist/core-layout.js +1 -1
- package/dist/core-layout.min.js +1 -1
- package/dist/core-platform.js +1 -1
- package/dist/core-platform.min.js +1 -1
- package/dist/core.js +6 -6
- package/dist/core.js.map +1 -1
- package/dist/core.min.js +2 -2
- package/dist/core.min.js.map +1 -1
- package/dist/css-custom-data.json +290 -180
- package/dist/custom-elements.json +22418 -21145
- package/dist/datepicker.js +1 -1
- package/dist/datepicker.min.js +1 -1
- package/dist/dialog.js +1 -1
- package/dist/dialog.min.js +1 -1
- package/dist/divider.js +1 -1
- package/dist/divider.min.js +1 -1
- package/dist/drawer-container.js +1 -1
- package/dist/drawer-container.min.js +1 -1
- package/dist/expansion-panel.js +1 -1
- package/dist/expansion-panel.min.js +1 -1
- package/dist/fab-menu.js +1 -1
- package/dist/fab-menu.min.js +1 -1
- package/dist/fab.js +1 -1
- package/dist/fab.min.js +1 -1
- package/dist/form-field.js +1 -1
- package/dist/form-field.min.js +1 -1
- package/dist/heading.js +1 -1
- package/dist/heading.min.js +1 -1
- package/dist/html-custom-data.json +172 -133
- package/dist/icon-button.js +1 -1
- package/dist/icon-button.min.js +1 -1
- package/dist/icon.js +146 -6
- package/dist/icon.js.map +1 -1
- package/dist/icon.min.js +2 -2
- package/dist/icon.min.js.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.min.js +1 -1
- package/dist/list.js +2 -2
- package/dist/list.js.map +1 -1
- package/dist/list.min.js +2 -2
- package/dist/list.min.js.map +1 -1
- package/dist/loading-indicator.js +1 -1
- package/dist/loading-indicator.min.js +1 -1
- package/dist/menu.js +1 -1
- package/dist/menu.min.js +1 -1
- package/dist/nav-bar.js +1 -1
- package/dist/nav-bar.min.js +1 -1
- package/dist/nav-menu.js +19 -27
- package/dist/nav-menu.js.map +1 -1
- package/dist/nav-menu.min.js +2 -2
- package/dist/nav-menu.min.js.map +1 -1
- package/dist/nav-rail.js +1 -1
- package/dist/nav-rail.min.js +1 -1
- package/dist/option.js +1 -1
- package/dist/option.min.js +1 -1
- package/dist/paginator.js +1 -1
- package/dist/paginator.min.js +1 -1
- package/dist/progress-indicator.js +1 -1
- package/dist/progress-indicator.min.js +1 -1
- package/dist/radio-group.js +1 -1
- package/dist/radio-group.min.js +1 -1
- package/dist/search.js +1 -1
- package/dist/search.min.js +1 -1
- package/dist/segmented-button.js +1 -1
- package/dist/segmented-button.min.js +1 -1
- package/dist/select.js +1 -1
- package/dist/select.min.js +1 -1
- package/dist/shape.js +1 -1
- package/dist/shape.min.js +1 -1
- package/dist/skeleton.js +48 -4
- package/dist/skeleton.js.map +1 -1
- package/dist/skeleton.min.js +2 -2
- package/dist/skeleton.min.js.map +1 -1
- package/dist/slide-group.js +1 -1
- package/dist/slide-group.min.js +1 -1
- package/dist/slider.js +1 -1
- package/dist/slider.min.js +1 -1
- package/dist/snackbar.js +1 -1
- package/dist/snackbar.min.js +1 -1
- package/dist/split-button.js +1 -1
- package/dist/split-button.min.js +1 -1
- package/dist/split-pane.js +1 -1
- package/dist/split-pane.min.js +1 -1
- package/dist/src/all.d.ts +1 -0
- package/dist/src/all.d.ts.map +1 -1
- package/dist/src/core/a11y/list-key/ListKeyManager.d.ts.map +1 -1
- package/dist/src/core/shared/primitives/ElevationElement.d.ts +1 -1
- package/dist/src/core/shared/primitives/FocusRingElement.d.ts +1 -1
- package/dist/src/core/shared/primitives/PseudoCheckboxElement.d.ts.map +1 -1
- package/dist/src/core/shared/primitives/PseudoRadioElement.d.ts.map +1 -1
- package/dist/src/core/shared/primitives/RippleElement.d.ts +1 -1
- package/dist/src/icon/IconElement.d.ts +7 -1
- package/dist/src/icon/IconElement.d.ts.map +1 -1
- package/dist/src/icon/IconRegistry.d.ts +54 -0
- package/dist/src/icon/IconRegistry.d.ts.map +1 -0
- package/dist/src/icon/IconWeight.d.ts +3 -0
- package/dist/src/icon/IconWeight.d.ts.map +1 -0
- package/dist/src/icon/index.d.ts +1 -0
- package/dist/src/icon/index.d.ts.map +1 -1
- package/dist/src/icon/registerIcon.d.ts +14 -0
- package/dist/src/icon/registerIcon.d.ts.map +1 -0
- package/dist/src/list/ListItemElement.d.ts.map +1 -1
- package/dist/src/nav-menu/NavMenuElement.d.ts +18 -6
- package/dist/src/nav-menu/NavMenuElement.d.ts.map +1 -1
- package/dist/src/nav-menu/NavMenuItemElement.d.ts +3 -5
- package/dist/src/nav-menu/NavMenuItemElement.d.ts.map +1 -1
- package/dist/src/skeleton/SkeletonElement.d.ts.map +1 -1
- package/dist/src/tree/TreeElement.d.ts +150 -0
- package/dist/src/tree/TreeElement.d.ts.map +1 -0
- package/dist/src/tree/TreeItemElement.d.ts +131 -0
- package/dist/src/tree/TreeItemElement.d.ts.map +1 -0
- package/dist/src/tree/index.d.ts +3 -0
- package/dist/src/tree/index.d.ts.map +1 -0
- package/dist/stepper.js +1 -1
- package/dist/stepper.min.js +1 -1
- package/dist/switch.js +1 -1
- package/dist/switch.min.js +1 -1
- package/dist/tabs.js +1 -1
- package/dist/tabs.min.js +1 -1
- package/dist/textarea-autosize.js +1 -1
- package/dist/textarea-autosize.min.js +1 -1
- package/dist/theme.js +1 -1
- package/dist/theme.min.js +1 -1
- package/dist/toc.js +1 -1
- package/dist/toc.min.js +1 -1
- package/dist/toolbar.js +1 -1
- package/dist/toolbar.min.js +1 -1
- package/dist/tooltip.js +1 -1
- package/dist/tooltip.min.js +1 -1
- package/dist/tree.js +737 -0
- package/dist/tree.js.map +1 -0
- package/dist/tree.min.js +7 -0
- package/dist/tree.min.js.map +1 -0
- package/package.json +7 -2
|
@@ -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{__decorate as i}from"tslib";import{unsafeCSS as o,LitElement as t,html as a,css as n}from"lit";import{query as e,property as r}from"lit/decorators.js";import{DesignToken as c,generateClipPaths as l,ReconnectedCallback as s,Role as C,customElement as d}from"@m3e/web/core";const p=o("var(--m3e-loading-indicator-size, 2.375rem)"),g=o(`var(--m3e-loading-indicator-active-indicator-color, ${c.color.primary})`),m=o(`var(--m3e-loading-indicator-contained-active-indicator-color, ${c.color.onPrimaryContainer})`),L=o(`var(--m3e-loading-indicator-contained-container-color, ${c.color.secondaryContainer})`),v=o(`var(--m3e-loading-indicator-container-shape, ${c.shape.corner.full})`),u=o("var(--m3e-loading-indicator-container-size, 3rem)"),y={"4-sided-cookie":"M230.389 50.473C293.109 23.2328 356.767 86.8908 329.527 149.611L325.023 159.981C316.707 179.13 316.707 200.87 325.023 220.019L329.527 230.389C356.767 293.109 293.109 356.767 230.389 329.527L220.019 325.023C200.87 316.707 179.13 316.707 159.981 325.023L149.611 329.527C86.8908 356.767 23.2328 293.109 50.473 230.389L54.9768 220.019C63.2934 200.87 63.2934 179.13 54.9768 159.981L50.473 149.611C23.2328 86.8908 86.8908 23.2328 149.611 50.473L159.981 54.9768C179.13 63.2934 200.87 63.2934 220.019 54.9768L230.389 50.473Z","7-sided-cookie":"M142.67 51.7842C146.243 48.6394 148.029 47.067 149.671 45.7954C173.425 27.4015 206.575 27.4015 230.329 45.7954C231.971 47.067 233.757 48.6394 237.33 51.7842C238.526 52.8372 239.124 53.3636 239.724 53.8672C248.136 60.9247 258.171 65.7683 268.92 67.9594C269.688 68.1158 270.471 68.2562 272.038 68.537C276.719 69.3756 279.059 69.7949 281.075 70.2889C310.234 77.4346 330.902 103.411 331.364 133.493C331.396 135.573 331.283 137.953 331.057 142.713C330.982 144.307 330.944 145.104 330.925 145.888C330.665 156.88 333.143 167.763 338.136 177.553C338.493 178.252 338.872 178.953 339.63 180.356C341.894 184.547 343.026 186.642 343.897 188.53C356.503 215.834 349.127 248.226 325.949 267.344C324.347 268.666 322.42 270.061 318.566 272.852C317.276 273.787 316.63 274.254 316.007 274.729C307.27 281.377 300.326 290.105 295.803 300.122C295.48 300.837 295.169 301.571 294.547 303.04C292.69 307.427 291.761 309.62 290.832 311.48C277.393 338.382 247.526 352.798 218.162 346.556C216.132 346.124 213.842 345.484 209.262 344.204C207.728 343.776 206.962 343.562 206.203 343.369C195.569 340.668 184.431 340.668 173.797 343.369C173.038 343.562 172.272 343.776 170.738 344.204C166.158 345.484 163.868 346.124 161.838 346.556C132.474 352.798 102.607 338.382 89.168 311.48C88.2388 309.62 87.3102 307.427 85.453 303.04C84.8311 301.571 84.5202 300.837 84.1975 300.122C79.6741 290.105 72.7297 281.377 63.993 274.729C63.3696 274.254 62.7244 273.787 61.434 272.852C57.5801 270.061 55.6532 268.666 54.0507 267.344C30.873 248.226 23.4965 215.834 36.1027 188.53C36.9742 186.642 38.1062 184.547 40.3703 180.356C41.1283 178.953 41.5074 178.252 41.8636 177.553C46.8568 167.763 49.3353 156.88 49.0745 145.888C49.0559 145.104 49.0182 144.307 48.9426 142.713C48.7168 137.953 48.6039 135.573 48.6359 133.493C49.0982 103.411 69.7665 77.4346 98.9252 70.2889C100.941 69.7949 103.281 69.3756 107.962 68.537C109.529 68.2562 110.312 68.1158 111.08 67.9594C121.829 65.7683 131.864 60.9247 140.276 53.8672C140.876 53.3636 141.474 52.8372 142.67 51.7842Z",oval:"M271.309 271.309C201.705 340.913 108.877 360.935 63.9707 316.029C19.0648 271.123 39.0867 178.295 108.691 108.691C178.295 39.0867 271.123 19.0648 316.029 63.9707C360.935 108.877 340.913 201.705 271.309 271.309Z",pentagon:"M155.064 49.459C176.093 34.1803 204.569 34.1803 225.598 49.459L322.926 120.171C343.955 135.45 352.754 162.532 344.722 187.253L307.546 301.668C299.514 326.39 276.476 343.127 250.483 343.127H130.18C104.186 343.127 81.1489 326.39 73.1164 301.668L35.9407 187.253C27.9082 162.532 36.7077 135.45 57.737 120.171L155.064 49.459Z",pill:"M116.116 71.7851C169.162 18.7383 255.168 18.7383 308.215 71.7851C361.262 124.832 361.262 210.838 308.215 263.884L263.884 308.215C210.838 361.262 124.832 361.262 71.7851 308.215C18.7383 255.168 18.7383 169.162 71.7851 116.116L116.116 71.7851Z","soft-burst":"M175.147 33.1508C181.983 22.2831 198.017 22.2831 204.853 33.1508L221.238 59.2009C225.731 66.3458 234.797 69.2506 242.692 66.0751L271.475 54.4972C283.482 49.6671 296.455 58.9613 295.507 71.7154L293.235 102.288C292.612 110.673 298.215 118.278 306.494 120.284L336.681 127.601C349.275 130.653 354.23 145.692 345.861 155.461L325.8 178.877C320.298 185.3 320.298 194.7 325.8 201.123L345.861 224.539C354.23 234.308 349.275 249.347 336.681 252.399L306.494 259.716C298.215 261.722 292.612 269.327 293.235 277.712L295.507 308.285C296.455 321.039 283.482 330.333 271.475 325.503L242.692 313.925C234.797 310.749 225.731 313.654 221.238 320.799L204.853 346.849C198.017 357.717 181.983 357.717 175.147 346.849L158.762 320.799C154.269 313.654 145.203 310.749 137.308 313.925L108.525 325.503C96.5177 330.333 83.5454 321.039 84.4931 308.285L86.7649 277.712C87.388 269.327 81.785 261.722 73.5056 259.716L43.3186 252.399C30.7252 249.347 25.7702 234.308 34.1391 224.539L54.1997 201.123C59.7018 194.7 59.7018 185.3 54.1997 178.877L34.1391 155.461C25.7702 145.692 30.7252 130.653 43.3186 127.601L73.5056 120.284C81.785 118.278 87.388 110.673 86.7649 102.288L84.4931 71.7154C83.5454 58.9613 96.5177 49.6671 108.525 54.4972L137.308 66.0751C145.203 69.2506 154.269 66.3458 158.762 59.201L175.147 33.1508Z","very-sunny":"M166.725 43.1869C177.261 25.6044 202.739 25.6044 213.275 43.1868L225.124 62.9597C231.268 73.2136 243.399 78.2385 254.995 75.3327L277.355 69.7294C297.237 64.7468 315.253 82.7627 310.271 102.645L304.667 125.005C301.762 136.601 306.786 148.732 317.04 154.876L336.813 166.725C354.396 177.261 354.396 202.739 336.813 213.275L317.04 225.124C306.786 231.268 301.762 243.399 304.667 254.995L310.271 277.355C315.253 297.237 297.237 315.253 277.355 310.271L254.995 304.667C243.399 301.762 231.268 306.786 225.124 317.04L213.275 336.813C202.739 354.396 177.261 354.396 166.725 336.813L154.876 317.04C148.732 306.786 136.601 301.762 125.005 304.667L102.646 310.271C82.7627 315.253 64.7468 297.237 69.7294 277.355L75.3327 254.995C78.2385 243.399 73.2136 231.268 62.9597 225.124L43.1869 213.275C25.6044 202.739 25.6044 177.261 43.1868 166.725L62.9597 154.876C73.2136 148.732 78.2385 136.601 75.3327 125.005L69.7294 102.646C64.7468 82.7627 82.7627 64.7468 102.645 69.7294L125.005 75.3327C136.601 78.2385 148.732 73.2136 154.876 62.9597L166.725 43.1869Z"};let f=new Array;const h=new Map;for(const i in y)f.push(y[i]),h.set(i,f.length-1);const b={};f=l(f,300);for(const i of h)b[i[0]]=o(f[i[1]]);const k=b;let $=class extends(s(C(t,"progressbar"))){constructor(){super(...arguments),this.variant="uncontained"}connectedCallback(){super.connectedCallback(),this.ariaValueMin=this.ariaValueMin||"0",this.ariaValueMax=this.ariaValueMax||"100"}disconnectedCallback(){super.disconnectedCallback(),this._activeIndicator?.classList.toggle("animate",!1)}reconnectedCallback(){super.reconnectedCallback(),this._activeIndicator?.classList.toggle("animate",!0)}firstUpdated(i){super.firstUpdated(i),this._activeIndicator?.classList.toggle("animate",!0)}render(){return a`<div class="container" aria-hidden="true"><div class="active-indicator"></div></div>`}};$.styles=n`:host { display: inline-block; aspect-ratio: 1 / 1; contain: strict; vertical-align: middle; content-visibility: auto; } :host([variant="uncontained"]) { width: ${p}; } :host([variant="contained"]) { width: ${u}; } :host([variant="uncontained"]) .active-indicator { background-color: ${g}; } :host([variant="contained"]) .active-indicator { background-color: ${m}; } :host([variant="contained"]) .container { background-color: ${L}; } .container { width: 100%; height: 100%; display: flex; align-items: center; justify-content: center; border-radius: ${v}; } .active-indicator { margin: auto; aspect-ratio: 1 / 1; width: calc(${p} * 0.842); transform-origin: center; transition: clip-path ${c.motion.spring.slowEffects}; will-change: transform, clip-path; --_polygon-soft-burst: polygon(${k["soft-burst"]}); --_polygon-7-sided-cookie: polygon(${k["7-sided-cookie"]}); --_polygon-pentagon: polygon(${k.pentagon}); --_polygon-pill: polygon(${k.pill}); --_polygon-very-sunny: polygon(${k["very-sunny"]}); --_polygon-4-sided-cookie: polygon(${k["4-sided-cookie"]}); --_polygon-oval: polygon(${k.oval}); } .active-indicator.animate { animation: rotate 4998ms infinite; } @keyframes rotate { 0% { clip-path: var(--_polygon-soft-burst); transform: rotate(0deg); animation-timing-function: cubic-bezier(0.5, 0.2, 0, 0.8); } 14% { clip-path: var(--_polygon-7-sided-cookie); transform: rotate(154deg); animation-timing-function: cubic-bezier(0.5, 0.2, 0, 0.8); } 29% { clip-path: var(--_polygon-pentagon); transform: rotate(309deg); animation-timing-function: cubic-bezier(0.5, 0.2, 0, 0.8); } 43% { clip-path: var(--_polygon-pill); transform: rotate(463deg); animation-timing-function: cubic-bezier(0.5, 0.2, 0, 0.8); } 57% { clip-path: var(--_polygon-very-sunny); transform: rotate(617deg); animation-timing-function: cubic-bezier(0.5, 0.2, 0, 0.8); } 71% { clip-path: var(--_polygon-4-sided-cookie); transform: rotate(771deg); animation-timing-function: cubic-bezier(0.5, 0.2, 0, 0.8); } 83% { clip-path: var(--_polygon-oval); transform: rotate(926deg); animation-timing-function: cubic-bezier(0.5, 0.2, 0, 0.8); } 100% { clip-path: var(--_polygon-soft-burst); transform: rotate(1080deg); } } @media (forced-colors: active) { .active-indicator { background-color: CanvasText !important; } }`,i([e(".active-indicator")],$.prototype,"_activeIndicator",void 0),i([r({reflect:!0})],$.prototype,"variant",void 0),$=i([d("m3e-loading-indicator")],$);export{$ as M3eLoadingIndicatorElement};
|
package/dist/menu.js
CHANGED
package/dist/menu.min.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{__decorate as e,__classPrivateFieldGet as t,__classPrivateFieldSet as i}from"tslib";import{LitElement as n,nothing as s,html as o,unsafeCSS as r,css as a}from"lit";import{query as l,state as c,property as h}from"lit/decorators.js";import{KeyboardClick as m,Focusable as d,AttachInternals as u,Disabled as p,FocusController as f,isLinkButtonMixin as v,renderPseudoLink as b,DesignToken as g,HtmlFor as k,ActionElementBase as y,customElement as w,LinkButton as $,Role as E,HoverController as x,setCustomState as M,hasAssignedNodes as L,SuppressInitialAnimation as C,ScrollController as _,deleteCustomState as W,addCustomState as T,registerStyleSheet as S,Checked as A,prefersReducedMotion as P}from"@m3e/web/core";import{addAriaReferencedId as D,removeAriaReferencedId as z,RovingTabIndexManager as I}from"@m3e/web/core/a11y";import{positionAnchor as O}from"@m3e/web/core/anchoring";import{M3eDirectionality as R}from"@m3e/web/core/bidi";class U extends(m(d(u(p(n),!0)))){constructor(){super(),new f(this,{callback:e=>{e&&this.menu?._activate()}})}get menu(){return this.closest("m3e-menu")}firstUpdated(e){super.firstUpdated(e),[this._focusRing,this._stateLayer,this._ripple].forEach(e=>e?.attach(this))}render(){return o`<div class="base"><m3e-state-layer class="state-layer" ?disabled="${this.disabled}"></m3e-state-layer><m3e-focus-ring class="focus-ring" ?disabled="${this.disabled}"></m3e-focus-ring><m3e-ripple class="ripple" ?disabled="${this.disabled}"></m3e-ripple><div class="touch" aria-hidden="true"></div>${v(this)?this[b]():s}<div class="wrapper">${this._renderContent()}</div></div>`}}U.styles=a`:host { display: inline-block; outline: none; user-select: none; flex: none; height: var(--m3e-menu-item-container-height, 2.75rem); -webkit-tap-highlight-color: rgba(0, 0, 0, 0); } :host(:not(:disabled)) .base { color: var(--m3e-menu-item-color, ${g.color.onSurface}); } :host(:not([aria-expanded="true"])) .base { --m3e-state-layer-hover-color: var(--m3e-menu-item-container-hover-color, ${g.color.onSurface}); --m3e-state-layer-focus-color: var(--m3e-menu-item-container-focus-color, ${g.color.onSurface}); --m3e-ripple-color: var(--m3e-menu-item-ripple-color, ${g.color.onSurface}); } :host(:not(:disabled)[aria-expanded="true"]) .base { background-color: color-mix( in srgb, var(--m3e-menu-item-active-state-layer-color, ${g.color.onSurface}) var(--m3e-menu-active-state-layer-opacity, 8%), transparent ); } :host([aria-expanded="true"]) .state-layer { display: none; } :host(:not(:disabled)[checked]) .base { color: var(--m3e-menu-item-selected-color, ${g.color.onTertiaryContainer}); background-color: var(--m3e-menu-item-selected-container-color, ${g.color.tertiaryContainer}); } :host([checked]) .base { --m3e-state-layer-hover-color: var( --m3e-menu-item-selected-container-hover-color, ${g.color.onTertiaryContainer} ); --m3e-state-layer-focus-color: var( --m3e-menu-item-selected-container-focus-color, ${g.color.onTertiaryContainer} ); --m3e-ripple-color: var(--m3e-menu-item-selected-ripple-color, ${g.color.onTertiaryContainer}); } :host(:not(:disabled)) { cursor: pointer; } :host(:disabled) .base { color: color-mix( in srgb, var(--m3e-menu-item-disabled-color, ${g.color.onSurface}) var(--m3e-menu-item-disabled-opacity, 38%), transparent ); } .base { box-sizing: border-box; vertical-align: middle; display: inline-flex; align-items: center; position: relative; width: 100%; height: 100%; border-radius: var(--m3e-menu-item-shape, ${g.shape.corner.extraSmall}); transition: ${r(`border-radius ${g.motion.spring.fastEffects}`)}; } :host([checked]:not(:state(-first))) .base { border-top-left-radius: var(--m3e-menu-item-selected-shape, ${g.shape.corner.medium}); border-top-right-radius: var(--m3e-menu-item-selected-shape, ${g.shape.corner.medium}); } :host([checked]:not(:state(-last))) .base { border-bottom-left-radius: var(--m3e-menu-item-selected-shape, ${g.shape.corner.medium}); border-bottom-right-radius: var(--m3e-menu-item-selected-shape, ${g.shape.corner.medium}); } :host(:state(-first)) .base { border-top-left-radius: var(--m3e-menu-item-first-child-shape, ${g.shape.corner.medium}); border-top-right-radius: var(--m3e-menu-item-first-child-shape, ${g.shape.corner.medium}); } :host(:state(-last)) .base { border-bottom-left-radius: var(--m3e-menu-item-last-child-shape, ${g.shape.corner.medium}); border-bottom-right-radius: var(--m3e-menu-item-last-child-shape, ${g.shape.corner.medium}); } .touch { position: absolute; height: 3rem; left: 0; right: 0; } .wrapper { flex: 1 1 auto; display: inline-flex; align-items: center; column-gap: var(--m3e-menu-item-icon-label-space, 0.5rem); padding-inline-start: var(--m3e-menu-item-padding-start, 0.75rem); padding-inline-end: var(--m3e-menu-item-padding-end, 0.75rem); font-size: var(--m3e-menu-item-label-text-font-size, ${g.typescale.standard.label.large.fontSize}); font-weight: var( --m3e-menu-item-label-text-font-weight, ${g.typescale.standard.label.large.fontWeight} ); line-height: var( --m3e-menu-item-label-text-line-height, ${g.typescale.standard.label.large.lineHeight} ); letter-spacing: var(--m3e-menu-item-label-text-tracking, ${g.typescale.standard.label.large.tracking}); } .focus-ring { border-radius: var(--m3e-menu-item-focus-ring-shape, inherit); } .content { flex: 1 1 auto; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } ::slotted([slot="icon"]), ::slotted([slot="trailing-icon"]), .trailing-icon { flex: none; width: 1em; font-size: var(--m3e-menu-item-icon-size, 1.25rem) !important; } @media (prefers-reduced-motion) { .base { transition: none; } } @media (forced-colors: active) { .base { background-color: Menu; color: MenuText; } :host(:disabled) .base { color: GrayText; } }`,e([l(".focus-ring")],U.prototype,"_focusRing",void 0),e([l(".state-layer")],U.prototype,"_stateLayer",void 0),e([l(".ripple")],U.prototype,"_ripple",void 0);let Y=class extends(k(y)){get menu(){return"M3E-MENU"===this.control?.tagName?this.control:null}attach(e){super.attach(e);const t=this.menu;t&&(this.parentElement&&(this.parentElement.ariaHasPopup="menu",this.parentElement.ariaExpanded="false",t.id&&D(this.parentElement,"aria-controls",t.id)),this.closest("m3e-menu")&&(t.submenu=!0))}detach(){if(this.parentElement){this.parentElement.ariaHasPopup=null,this.parentElement.ariaExpanded=null;const e=this.menu;e?.id&&z(this.parentElement,"aria-controls",e.id)}super.detach()}_onClick(){this.parentElement&&("M3E-MENU-ITEM"===this.parentElement.tagName?this.menu?.show(this.parentElement):this.menu?.toggle(this.parentElement))}};var B,H,K,N,Z,X,j,q,G,V,F,J;Y=e([w("m3e-menu-trigger")],Y);let Q=J=class extends($(E(U,"menuitem"))){constructor(){super(),B.add(this),H.set(this,e=>t(this,B,"m",G).call(this,e)),K.set(this,e=>t(this,B,"m",V).call(this,e)),N.set(this,()=>t(this,B,"m",F).call(this)),this._hasSubmenu=!1,Z.set(this,void 0),new x(this,{startDelay:500,endDelay:500,callback:e=>{e&&!this.disabled&&t(this,Z,"f")&&t(this,Z,"f").menu?.show(this)}})}get submenu(){return t(this,Z,"f")?.menu??null}connectedCallback(){super.connectedCallback(),this.addEventListener("click",t(this,H,"f")),this.addEventListener("keydown",t(this,K,"f")),this.addEventListener("mouseenter",t(this,N,"f"))}disconnectedCallback(){super.disconnectedCallback(),this.removeEventListener("click",t(this,H,"f")),this.removeEventListener("keydown",t(this,K,"f")),this.removeEventListener("mouseenter",t(this,N,"f"))}_renderContent(){return o`<slot name="icon" aria-hidden="true" @slotchange="${t(this,B,"m",j)}"></slot><span class="content"><slot @slotchange="${t(this,B,"m",X)}"></slot></span>${this._hasSubmenu?"ltr"===R.current?o`<svg class="trailing-icon" aria-hidden="true" viewBox="0 -960 960 960" fill="currentColor"><path d="M400-280v-400l200 200-200 200Z"/></svg>`:o`<svg class="trailing-icon" aria-hidden="true" viewBox="0 -960 960 960" fill="currentColor"><path d="M560-280 360-480l200-200v400Z"/></svg>`:o`<slot name="trailing-icon" aria-hidden="true" @slotchange="${t(this,B,"m",q)}"></slot>`}`}};var ee,te,ie,ne,se,oe,re,ae,le,ce,he,me,de,ue,pe,fe;H=new WeakMap,K=new WeakMap,N=new WeakMap,Z=new WeakMap,B=new WeakSet,X=function(e){i(this,Z,e.target.assignedElements({flatten:!0}).find(e=>e instanceof Y),"f"),this._hasSubmenu=void 0!==t(this,Z,"f")},j=function(e){M(this,"-with-icon",L(e.target))},q=function(e){M(this,"-with-trailing-icon",L(e.target))},G=function(e){e.defaultPrevented||this._hasSubmenu||this.menu?.hideAll(!0)},V=function(e){if(!e.defaultPrevented&&!this.disabled)switch(e.key){case"Right":case"ArrowRight":"ltr"===R.current&&(e.preventDefault(),this.submenu?.show(this));break;case"Left":case"ArrowLeft":"rtl"===R.current&&(e.preventDefault(),this.submenu?.show(this))}},F=function(){this.menu?.items.forEach(e=>{e instanceof J&&e!==this&&e.submenu?.isOpen&&e.submenu.hide()})},e([c()],Q.prototype,"_hasSubmenu",void 0),Q=J=e([w("m3e-menu-item")],Q);let ve=fe=class extends(C(u(E(n,"menu")))){constructor(){super(...arguments),ee.add(this),te.set(this,void 0),ie.set(this,void 0),ne.set(this,(new I).withWrap().withHomeAndEnd().withVerticalOrientation()),se.set(this,e=>t(this,ee,"m",he).call(this,e)),oe.set(this,()=>t(this,ee,"m",me).call(this)),re.set(this,e=>t(this,ee,"m",de).call(this,e)),ae.set(this,new _(this,{target:null,callback:e=>e instanceof fe?e.items.filter(e=>e instanceof Q).forEach(e=>e.submenu?.hide()):this.hideAll()})),le.set(this,e=>{"closed"===e.newState?(t(this,ie,"f")?.call(this),i(this,ie,void 0,"f")):setTimeout(()=>{t(this,ne,"f").setActiveItem(t(this,ne,"f").items.find(e=>!e.disabled))},40)}),this.positionX="after",this.positionY="below",this.variant="standard",this.submenu=!1}get items(){return t(this,ne,"f").items}get isOpen(){return void 0!==t(this,te,"f")}connectedCallback(){super.connectedCallback(),this.tabIndex=-1,this.setAttribute("popover","manual"),this.addEventListener("keydown",t(this,se,"f")),this.addEventListener("mouseenter",t(this,oe,"f")),this.addEventListener("toggle",t(this,le,"f")),document.addEventListener("click",t(this,re,"f"))}disconnectedCallback(){super.disconnectedCallback(),this.removeEventListener("keydown",t(this,se,"f")),this.removeEventListener("mouseenter",t(this,oe,"f")),this.removeEventListener("toggle",t(this,le,"f")),document.removeEventListener("click",t(this,re,"f")),t(this,ee,"m",pe).call(this)}async show(e){t(this,te,"f")&&t(this,te,"f")!==e&&this.hide();let n=this.positionX;"rtl"===R.current&&(n="before"===n?"after":"before"),i(this,ie,await O(this,e,{position:this.submenu?"before"===n?"left-start":"right-start":"above"===this.positionY?"before"===n?"top-end":"top-start":"before"===n?"bottom-end":"bottom-start",inline:!0,flip:!0,shift:"main",offset:this.submenu?void 0:4},(e,i,n)=>{if(this.submenu){if(t(this,te,"f")){const e=t(this,ee,"m",ue).call(this,t(this,te,"f")).y;M(this,"-shift-down",!1),M(this,"-shift-up",!1),M(this,Math.round(i)===Math.round(e)?"-shift-down":"-shift-up",!0)}}else M(this,"-top",n.includes("top")),M(this,"-bottom",n.includes("bottom"));"rtl"===R.current?this.style.right=window.innerWidth-e-this.clientWidth+"px":this.style.left=`${e}px`,this.style.top=`${i}px`}),"f");const s=e.closest("m3e-menu");s?this.variant=s.variant:this._activate(),this.showPopover(),i(this,te,e,"f"),t(this,te,"f").ariaExpanded="true",t(this,ae,"f").observe(t(this,te,"f"))}hide(e=!1){for(const e of t(this,ne,"f").items){const t=e.submenu;t&&t.isOpen&&t.hide()}t(this,ee,"m",pe).call(this),this.hidePopover(),t(this,te,"f")&&(t(this,te,"f").ariaExpanded="false",e&&t(this,te,"f").focus(),t(this,ae,"f").unobserve(t(this,te,"f")),i(this,te,void 0,"f"))}hideAll(e=!1){let i=this;for(;t(i,te,"f");){const e=t(i,te,"f").closest("m3e-menu");if(!e)break;i=e}i.hide(e)}async toggle(e){t(this,te,"f")?this.hide():await this.show(e)}render(){return o`<div class="base"><slot @slotchange="${t(this,ee,"m",ce)}"></slot></div>`}_activate(){this!==fe.__activeMenu&&(fe.__activeMenu&&W(fe.__activeMenu,"-active"),fe.__activeMenu=this,T(fe.__activeMenu,"-active"))}};var be,ge,ke,ye,we,$e,Ee,xe,Me,Le,Ce,_e;te=new WeakMap,ie=new WeakMap,ne=new WeakMap,se=new WeakMap,oe=new WeakMap,re=new WeakMap,ae=new WeakMap,le=new WeakMap,ee=new WeakSet,ce=function(){const{added:e}=t(this,ne,"f").setItems([...this.querySelectorAll("m3e-menu-item,m3e-menu-item-checkbox,m3e-menu-item-radio")].filter(e=>e.closest("m3e-menu")===this));t(this,ne,"f").activeItem||t(this,ne,"f").updateActiveItem(e.find(e=>!e.disabled)),t(this,ne,"f").items.forEach((e,i)=>{M(e,"-first",0===i&&!e.previousElementSibling),M(e,"-last",i===t(this,ne,"f").items.length-1)})},he=function(e){switch(e.key){case"Right":case"ArrowRight":"rtl"===R.current?(e.preventDefault(),this.hide(!0)):t(this,ne,"f").onKeyDown(e);break;case"Left":case"ArrowLeft":"ltr"===R.current?(e.preventDefault(),this.hide(!0)):t(this,ne,"f").onKeyDown(e);break;case"Tab":this.hideAll();break;case"Escape":e.shiftKey||e.ctrlKey||this.hide(!0);break;default:t(this,ne,"f").onKeyDown(e)}},me=function(){this._activate()},de=function(e){this.submenu||e.composedPath().some(e=>e instanceof fe||e===t(this,te,"f"))||this.hide()},ue=function(e){let t=0,i=0;for(let n=e;n;n=n.offsetParent instanceof HTMLElement?n.offsetParent:null)t+=n.offsetLeft-n.scrollLeft+n.clientLeft,i+=n.offsetTop-n.scrollTop+n.clientTop;return{x:t,y:i}},pe=function(){this===fe.__activeMenu&&(W(fe.__activeMenu,"-active"),fe.__activeMenu=void 0)},S(a`m3e-menu > m3e-divider { margin-block: var(--m3e-menu-divider-spacing, 0.5rem); }`),ve.styles=a`:host { position: absolute; padding: unset; margin: unset; border: unset; overflow-y: auto; overflow-x: visible; scrollbar-width: ${g.scrollbar.thinWidth}; scrollbar-color: ${g.scrollbar.color}; scroll-padding-block: calc( var(--m3e-focus-ring-thickness, 3px) + var(--m3e-menu-container-padding-block, 0.25rem) ); min-width: var(--m3e-menu-container-min-width, 7rem); max-width: var(--m3e-menu-container-max-width, 17.5rem); max-height: var(--m3e-menu-container-max-height, 17.5rem); box-shadow: var(--m3e-menu-container-elevation, ${g.elevation.level3}); opacity: 0; display: none; } .base { display: flex; flex-direction: column; row-gap: var(--m3e-menu-gap, 0.125rem); min-width: inherit; max-width: inherit; padding-block: var(--m3e-menu-container-padding-block, 0.25rem); padding-inline: var(--m3e-menu-container-padding-inline, 0.25rem); --m3e-focus-ring-outward-offset: 0px; --m3e-focus-ring-growth-factor: 1.5; } :host(:not(:state(-active))) { border-radius: var(--m3e-menu-container-shape, ${g.shape.corner.small}); } :host(:not(:state(-active))) .base { --m3e-menu-item-first-child-shape: ${g.shape.corner.extraSmall}; --m3e-menu-item-last-child-shape: ${g.shape.corner.extraSmall}; } :host(:state(-active)) { border-radius: var(--m3e-menu-active-container-shape, ${g.shape.corner.large}); } :host(:not(:state(-no-animate))) { transition: ${r(`opacity ${g.motion.duration.short2} ${g.motion.easing.standard}, \n transform ${g.motion.duration.short2} ${g.motion.easing.standard},\n overlay ${g.motion.duration.short2} ${g.motion.easing.standard} allow-discrete,\n display ${g.motion.duration.short2} ${g.motion.easing.standard} allow-discrete,\n border-radius ${g.motion.spring.fastEffects}`)}; } :host(:not([submenu])) { transform: scaleY(0.8); } :host(:not([submenu]):popover-open) { transform: scaleY(1); } :host::backdrop { background-color: transparent; } :host(:popover-open) { display: block; opacity: 1; } :host(:state(-bottom)) { transform-origin: top; } :host(:state(-top)) { transform-origin: bottom; } :host(:state(-shift-down)) { margin-top: calc(0px - var(--m3e-menu-container-padding-block, 0.25rem)); } :host(:state(-shift-up)) { margin-top: var(--m3e-menu-container-padding-block, 0.25rem); } :host([variant="vibrant"]) { background-color: var(--m3e-vibrant-menu-container-color, ${g.color.tertiaryContainer}); --m3e-menu-item-color: var(--m3e-vibrant-menu-item-color, ${g.color.onTertiaryContainer}); --m3e-menu-item-container-hover-color: var( --m3e-vibrant-menu-item-container-hover-color, ${g.color.onTertiaryContainer} ); --m3e-menu-item-container-focus-color: var( --m3e-vibrant-menu-item-container-focus-color, ${g.color.onTertiaryContainer} ); --m3e-menu-item-ripple-color: var(--m3e-vibrant-menu-item-ripple-color, ${g.color.onTertiaryContainer}); --m3e-menu-item-active-state-layer-color: var( --m3e-vibrant-menu-item-active-state-layer-color, ${g.color.onTertiaryContainer} ); --m3e-menu-item-selected-color: var(--m3e-vibrant-menu-item-selected-color, ${g.color.onTertiary}); --m3e-menu-item-selected-container-color: var( --m3e-vibrant-menu-item-selected-container-color, ${g.color.tertiary} ); --m3e-menu-item-selected-container-hover-color: var( --m3e-vibrant-menu-item-selected-container-hover-color, ${g.color.onTertiary} ); --m3e-menu-item-container-selected-focus-color: var( --m3e-vibrant-menu-item-selected-container-focus-color, ${g.color.onTertiary} ); --m3e-menu-item-selected-ripple-color: var( --m3e-vibrant-menu-item-selected-ripple-color, ${g.color.onTertiary} ); --m3e-menu-item-disabled-color: var( --m3e-vibrant-menu-item-disabled-color, ${g.color.onTertiaryContainer} ); } :host([variant="standard"]) { background-color: var(--m3e-menu-container-color, ${g.color.surfaceContainer}); } @starting-style { :host(:popover-open) { opacity: 0; } :host(:not([submenu]):popover-open) { transform: scaleY(0.8); } } @media (prefers-reduced-motion) { :host(:not(:state(-no-animate))) { transition: none; } } @media (forced-colors: active) { :host { background-color: Menu; color: MenuText; outline: 1px solid MenuText; } }`,e([h({attribute:"position-x"})],ve.prototype,"positionX",void 0),e([h({attribute:"position-y"})],ve.prototype,"positionY",void 0),e([h({reflect:!0})],ve.prototype,"variant",void 0),e([h({type:Boolean,reflect:!0})],ve.prototype,"submenu",void 0),ve=fe=e([w("m3e-menu")],ve);let We=class extends(A(E(U,"menuitemcheckbox"))){constructor(){super(...arguments),be.add(this),ge.set(this,e=>t(this,be,"m",Me).call(this,e)),ke.set(this,e=>t(this,be,"m",Le).call(this,e)),ye.set(this,()=>t(this,be,"m",Ce).call(this)),we.set(this,()=>t(this,be,"m",_e).call(this)),$e.set(this,!1)}connectedCallback(){super.connectedCallback(),this.addEventListener("click",t(this,ge,"f")),this.addEventListener("keydown",t(this,ke,"f")),this.addEventListener("keyup",t(this,ye,"f")),this.addEventListener("mouseenter",t(this,we,"f"))}disconnectedCallback(){super.disconnectedCallback(),this.removeEventListener("click",t(this,ge,"f")),this.removeEventListener("keydown",t(this,ke,"f")),this.removeEventListener("keyup",t(this,ye,"f")),this.removeEventListener("mouseenter",t(this,we,"f"))}_renderContent(){return o`<div class="icon"><svg class="check" viewBox="0 -960 960 960" aria-hidden="true"><path fill="currentColor" d="M382-240 154-468l57-57 171 171 367-367 57 57-424 424Z"/></svg><slot name="icon" @slotchange="${t(this,be,"m",Ee)}"></slot></div><slot></slot><slot name="trailing-icon" aria-hidden="true" @slotchange="${t(this,be,"m",xe)}"></slot>`}};ge=new WeakMap,ke=new WeakMap,ye=new WeakMap,we=new WeakMap,$e=new WeakMap,be=new WeakSet,Ee=function(e){M(this,"-with-icon",L(e.target))},xe=function(e){M(this,"-with-trailing-icon",L(e.target))},Me=function(e){e.defaultPrevented||(this.checked=!this.checked,this.performUpdate(),t(this,$e,"f")||(P()?this.menu?.hideAll(!0):setTimeout(()=>this.menu?.hideAll(!0),150)))},Le=function(e){i(this,$e," "===e.key,"f")},Ce=function(){i(this,$e,!1,"f")},_e=function(){this.menu?.items.forEach(e=>{e instanceof Q&&e.submenu?.isOpen&&e.submenu.hide()})},We.styles=[U.styles,a`.icon { display: flex; align-items: center; justify-content: center; transition: margin-inline-start ${g.motion.spring.fastEffects}; } :host(:not(:state(-with-icon))) .icon { margin-inline-start: calc(0px - var(--m3e-menu-item-icon-label-space, 0.75rem)); } .check { width: 1em; font-size: var(--m3e-menu-item-icon-size, 1.25rem) !important; } :host(:not([checked])) .check { display: none; } :host([checked]) .icon { margin-inline-start: 0; } :host([checked]) ::slotted([slot="icon"]) { display: none !important; } @media (prefers-reduced-motion) { .icon { transition: none; } }`],We=e([w("m3e-menu-item-checkbox")],We);let Te=class extends(E(n,"group")){render(){return o`<slot></slot>`}};var Se,Ae,Pe,De,ze,Ie,Oe,Re,Ue,Ye,Be,He;Te.styles=a`:host { display: contents; }`,Te=e([w("m3e-menu-item-group")],Te);let Ke=class extends(A(E(U,"menuitemradio"))){constructor(){super(...arguments),Se.add(this),Ae.set(this,e=>t(this,Se,"m",Ue).call(this,e)),Pe.set(this,e=>t(this,Se,"m",Ye).call(this,e)),De.set(this,()=>t(this,Se,"m",Be).call(this)),ze.set(this,()=>t(this,Se,"m",He).call(this)),Ie.set(this,!1)}connectedCallback(){super.connectedCallback(),this.addEventListener("click",t(this,Ae,"f")),this.addEventListener("keydown",t(this,Pe,"f")),this.addEventListener("keyup",t(this,De,"f")),this.addEventListener("mouseenter",t(this,ze,"f"))}disconnectedCallback(){super.disconnectedCallback(),this.removeEventListener("click",t(this,Ae,"f")),this.removeEventListener("keydown",t(this,Pe,"f")),this.removeEventListener("keyup",t(this,De,"f")),this.removeEventListener("mouseenter",t(this,ze,"f"))}update(e){super.update(e),e.has("checked")&&this.checked&&(this.closest("[role='group']")??this.closest("m3e-menu"))?.querySelectorAll("m3e-menu-item-radio").forEach(e=>{e!==this&&e.checked&&(e.checked=!1)})}_renderContent(){return o`<div class="icon"><svg class="check" viewBox="0 -960 960 960" aria-hidden="true"><path fill="currentColor" d="M382-240 154-468l57-57 171 171 367-367 57 57-424 424Z"/></svg><slot name="icon" @slotchange="${t(this,Se,"m",Oe)}"></slot></div><slot></slot><slot name="trailing-icon" aria-hidden="true" @slotchange="${t(this,Se,"m",Re)}"></slot>`}};Ae=new WeakMap,Pe=new WeakMap,De=new WeakMap,ze=new WeakMap,Ie=new WeakMap,Se=new WeakSet,Oe=function(e){M(this,"-with-icon",L(e.target))},Re=function(e){M(this,"-with-trailing-icon",L(e.target))},Ue=function(e){e.defaultPrevented||(this.checked=!0,this.performUpdate(),t(this,Ie,"f")||(P()?this.menu?.hideAll(!0):setTimeout(()=>this.menu?.hideAll(!0),150)))},Ye=function(e){i(this,Ie," "===e.key,"f")},Be=function(){i(this,Ie,!1,"f")},He=function(){this.menu?.items.forEach(e=>{e instanceof Q&&e.submenu?.isOpen&&e.submenu.hide()})},Ke.styles=We.styles,Ke=e([w("m3e-menu-item-radio")],Ke);export{ve as M3eMenuElement,We as M3eMenuItemCheckboxElement,Q as M3eMenuItemElement,Te as M3eMenuItemGroupElement,Ke as M3eMenuItemRadioElement,Y as M3eMenuTriggerElement};
|
package/dist/nav-bar.js
CHANGED
package/dist/nav-bar.min.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 as e,__classPrivateFieldSet as t,__decorate as i}from"tslib";import{LitElement as a,html as o,css as r,nothing as n}from"lit";import{state as l,property as s,query as c}from"lit/decorators.js";import{ReconnectedCallback as d,AttachInternals as h,Role as m,setCustomState as v,DesignToken as b,customElement as p,LinkButton as u,Selected as f,KeyboardClick as g,Focusable as y,DisabledInteractive as w,Disabled as x,renderPseudoLink as $}from"@m3e/web/core";import{SelectionManager as k,selectionManager as _}from"@m3e/web/core/a11y";import{M3eBreakpointObserver as z,Breakpoint as S}from"@m3e/web/core/layout";var C,E,I,j,B,W;let M=class extends(d(h(m(a,"navigation")))){constructor(){super(...arguments),C.add(this),this[W]=(new k).disableRovingTabIndex(),E.set(this,void 0),this.mode="compact"}get items(){return this[_].items}get selected(){return this[_].selectedItems[0]??null}get currentMode(){return this._mode??("compact"!==this.mode?"expanded":"compact")}set currentMode(e){this._mode=e}disconnectedCallback(){super.disconnectedCallback(),this._mode=void 0,e(this,E,"f")?.call(this)}reconnectedCallback(){super.reconnectedCallback(),"auto"===this.mode&&e(this,C,"m",I).call(this)}willUpdate(t){super.willUpdate(t),t.has("mode")&&(e(this,E,"f")?.call(this),"auto"===this.mode?e(this,C,"m",I).call(this):(this._mode=void 0,this._updateItems())),t.has("_mode")&&this._updateItems()}render(){return o`<div class="base"><slot @change="${e(this,C,"m",B)}" @slotchange="${e(this,C,"m",j)}"></slot></div>`}_updateItems(){const e="compact"===this.currentMode?"vertical":"horizontal";this._updateOrientation(e),v(this,"-compact","vertical"===e)}_updateOrientation(e){this[_].items.forEach(t=>t.orientation=e)}};var T,L,R;E=new WeakMap,C=new WeakSet,W=_,I=function(){t(this,E,z.observe([S.XSmall,S.Small],e=>{this._mode=e.get(S.XSmall)||e.get(S.Small)?"compact":"expanded",this._updateItems()}),"f")},j=function(){this[_].setItems([...this.querySelectorAll("m3e-nav-item")]),this._updateItems()},B=function(e){e.stopPropagation(),this.dispatchEvent(new Event("change",{bubbles:!0}))},M.styles=r`:host { display: block; overflow-x: auto; overflow-y: hidden; scrollbar-width: ${b.scrollbar.thinWidth}; scrollbar-color: ${b.scrollbar.color}; min-height: var(--m3e-nav-bar-height, 4rem); } .base { display: flex; align-items: stretch; justify-content: center; box-sizing: border-box; min-height: inherit; height: inherit; width: 100%; background-color: var(--m3e-nav-bar-container-color, ${b.color.surfaceContainer}); --_nav-item-min-width: var(--m3e-nav-bar-vertical-item-width, 7rem); }`,i([l()],M.prototype,"_mode",void 0),i([s({reflect:!0})],M.prototype,"mode",void 0),M=i([p("m3e-nav-bar")],M);let U=class extends(u(f(g(y(w(x(h(m(a,"button"),!0)))))))){constructor(){super(...arguments),T.add(this),L.set(this,t=>e(this,T,"m",R).call(this,t)),this.orientation="vertical"}get navBar(){return this.closest("m3e-nav-bar")??this.closest("m3e-nav-rail")??null}connectedCallback(){super.connectedCallback(),this.addEventListener("click",e(this,L,"f"),{capture:!0})}disconnectedCallback(){super.disconnectedCallback(),this.removeEventListener("click",e(this,L,"f"),{capture:!0})}update(e){if(super.update(e),e.has("selected")){this.ariaSelected=null,this.ariaPressed=null,this.ariaCurrent=`${this.selected}`;for(const e of this.querySelectorAll("m3e-icon"))e.toggleAttribute("filled",this.selected);this.navBar?.[_].notifySelectionChange(this)}}updated(e){super.updated(e),e.has("orientation")&&this._focusRing?.attach(this)}firstUpdated(e){super.firstUpdated(e),[this._focusRing,this._stateLayer,this._ripple].forEach(e=>e?.attach(this))}render(){const e=this.disabled||this.disabledInteractive;return o`${"vertical"===this.orientation?o`<m3e-focus-ring class="focus-ring" inward></m3e-focus-ring>`:n}<div class="outer">${this[$]()}<div class="inner">${"horizontal"===this.orientation?o`<m3e-focus-ring class="focus-ring"></m3e-focus-ring>`:n}<m3e-state-layer class="state-layer" ?disabled="${e}"></m3e-state-layer><m3e-ripple class="ripple" centered ?disabled="${e}"></m3e-ripple><div class="touch" aria-hidden="true"></div><div class="base"><div class="icon-wrapper" aria-hidden="true"><div class="icon"><slot name="icon" aria-hidden="true"></slot></div></div><div class="label"><slot></slot></div></div></div></div>`}};L=new WeakMap,T=new WeakSet,R=function(e){e.defaultPrevented||(this.selected=!0,this.dispatchEvent(new Event("input",{bubbles:!0,composed:!0,cancelable:!0}))?(this.navBar?.[_].notifySelectionChange(this),this.dispatchEvent(new Event("change",{bubbles:!0}))):this.selected=!1)},U.styles=r`:host { display: inline-block; vertical-align: middle; position: relative; outline: none; user-select: none; flex: 1; font-size: var(--m3e-nav-item-label-text-font-size, ${b.typescale.standard.label.medium.fontSize}); font-weight: var( --m3e-nav-item-label-text-font-weight, ${b.typescale.standard.label.medium.fontWeight} ); line-height: var( --m3e-nav-item-label-text-line-height, ${b.typescale.standard.label.medium.lineHeight} ); letter-spacing: var(--m3e-nav-item-label-text-tracking, ${b.typescale.standard.label.medium.tracking}); border-radius: var(--m3e-nav-item-shape, ${b.shape.corner.full}); min-width: var(--_nav-item-min-width); align-self: var(--_nav-item-align-self); -webkit-tap-highlight-color: rgba(0, 0, 0, 0); } :host([orientation="horizontal"]) { max-width: fit-content; } :host(:not(:disabled):not([disabled-interactive])) { cursor: pointer; } :host([disabled-interactive]) { cursor: not-allowed; } .outer { height: 100%; } .outer, .inner { display: flex; align-items: center; justify-content: var(--_nav-item-justify-content, center); position: relative; border-radius: inherit; } .icon-wrapper { position: relative; flex: none; } .base { justify-content: unset; box-sizing: border-box; vertical-align: middle; display: inline-flex; align-items: center; justify-content: center; position: relative; width: 100%; } .icon { position: absolute; } .label { vertical-align: middle; } ::slotted([slot="icon"]), ::slotted([slot="selected-icon"]) { width: 1em; font-size: var(--m3e-nav-item-icon-size, 1.5rem) !important; } :host(:not([selected]):not(:disabled):not([disabled-interactive])) .outer { --m3e-state-layer-hover-color: var( --m3e-nav-item-inactive-hover-state-layer-color, ${b.color.onSecondaryContainer} ); --m3e-state-layer-focus-color: var( --m3e-nav-item-inactive-focus-state-layer-color, ${b.color.onSecondaryContainer} ); --m3e-ripple-color: var( --m3e-nav-item-inactive-pressed-state-layer-color, ${b.color.onSecondaryContainer} ); } :host(:not([selected]):not(:disabled):not([disabled-interactive])) .label { color: var(--m3e-nav-item-inactive-label-text-color, ${b.color.onSurfaceVariant}); } :host(:not([selected]):not(:disabled):not([disabled-interactive])) .icon { color: var(--m3e-nav-item-inactive-icon-color, ${b.color.onSecondaryContainer}); } :host([selected]:not(:disabled):not([disabled-interactive])) .outer { --m3e-state-layer-hover-color: var( --m3e-nav-item-active-hover-state-layer-color, ${b.color.onSecondaryContainer} ); --m3e-state-layer-focus-color: var( --m3e-nav-item-active-focus-state-layer-color, ${b.color.onSecondaryContainer} ); --m3e-ripple-color: var( --m3e-nav-item-active-pressed-state-layer-color, ${b.color.onSecondaryContainer} ); } :host([selected]:not(:disabled):not([disabled-interactive])) .label { color: var(--m3e-nav-item-active-label-text-color, ${b.color.secondary}); } :host([selected]:not(:disabled):not([disabled-interactive])) .state-layer { background-color: var(--m3e-nav-item-active-container-color, ${b.color.secondaryContainer}); } :host([selected]:not(:disabled):not([disabled-interactive])) .icon { color: var(--m3e-nav-item-active-icon-color, ${b.color.onSecondaryContainer}); } :host([orientation="vertical"]) .outer { align-self: stretch; align-items: flex-start; } :host([orientation="vertical"]) .label { text-align: center; display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; line-clamp: 2; } :host([orientation="vertical"]) .base { flex-direction: column; row-gap: var(--m3e-nav-item-spacing, 0.25rem); } :host([orientation="vertical"]) .base { margin-block: var(--m3e-vertical-nav-item-active-indicator-margin, 0.375rem); } :host([orientation="vertical"]) .state-layer, :host([orientation="vertical"]) .ripple { top: var(--m3e-vertical-nav-item-active-indicator-margin, 0.375rem); bottom: unset; } :host([orientation="vertical"]) .state-layer, :host([orientation="vertical"]) .ripple, :host([orientation="vertical"]) .icon-wrapper { width: var(--m3e-vertical-nav-item-active-indicator-width, 3.5rem); } :host([orientation="vertical"]) .state-layer, :host([orientation="vertical"]) .ripple, :host([orientation="vertical"]) .icon-wrapper { height: var(--m3e-vertical-nav-item-active-indicator-height, 2rem); } :host([orientation="vertical"]) .icon { top: calc( calc(var(--m3e-vertical-nav-item-active-indicator-height, 2rem) / 2) - calc( var(--m3e-nav-item-icon-size, 1.5rem) / 2 ) ); left: calc( calc(var(--m3e-vertical-nav-item-active-indicator-width, 3.5rem) / 2) - calc( var(--m3e-nav-item-icon-size, 1.5rem) / 2 ) ); } :host([orientation="vertical"]) .focus-ring { border-radius: var(--m3e-nav-item-focus-ring-shape, ${b.shape.corner.medium}); } :host([orientation="horizontal"]) .icon-wrapper { width: var(--m3e-nav-item-icon-size, 1.5rem); height: var(--m3e-nav-item-icon-size, 1.5rem); } :host([orientation="horizontal"]) .base { padding: var(--m3e-horizontal-nav-item-padding, 1rem); } :host([orientation="horizontal"]) .label { flex: 1 1 auto; } :host([orientation="horizontal"]) .base { column-gap: var(--m3e-nav-item-spacing, 0.25rem); } :host([orientation="horizontal"]) .inner { height: var(--m3e-horizontal-nav-item-active-indicator-height, 2.5rem); width: fit-content; } .state-layer, .ripple { margin-inline: auto; } :host(:disabled) .label, :host([disabled-interactive]) .label { color: color-mix( in srgb, var(--m3e-nav-item-disabled-label-text-color, ${b.color.onSurface}) var(--m3e-nav-item-disabled-label-text-opacity, 38%), transparent ); } :host(:disabled) .icon, :host([disabled-interactive]) .icon { color: color-mix( in srgb, var(--m3e-nav-item-disabled-icon-color, ${b.color.onSurface}) var(--m3e-nav-item-disabled-icon-opacity, 38%), transparent ); } a { all: unset; display: block; position: absolute; top: 0px; left: 0px; right: 0px; bottom: 0px; z-index: 1; } @media (forced-colors: active) { :host(:disabled) .label, :host([disabled-interactive]) .label, :host(:disabled) .icon, :host([disabled-interactive]) .icon { color: GrayText; } :host(:not([selected]):not(:disabled):not([disabled-interactive])) .label, :host(:not([selected]):not(:disabled):not([disabled-interactive])) .icon { color: ButtonText; } :host([selected]:not(:disabled):not([disabled-interactive])) .state-layer { background-color: ButtonText; } :host([orientation="vertical"][selected]:not(:disabled):not([disabled-interactive])) .label { color: ButtonText; } :host([orientation="horizontal"][selected]:not(:disabled):not([disabled-interactive])) .label, :host([selected]:not(:disabled):not([disabled-interactive])) .icon { forced-color-adjust: none; color: ButtonFace; } }`,i([c(".focus-ring")],U.prototype,"_focusRing",void 0),i([c(".state-layer")],U.prototype,"_stateLayer",void 0),i([c(".ripple")],U.prototype,"_ripple",void 0),i([s({reflect:!0})],U.prototype,"orientation",void 0),U=i([p("m3e-nav-item")],U);export{M as M3eNavBarElement,U as M3eNavItemElement};
|
package/dist/nav-menu.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, __classPrivateFieldSet, __decorate } from 'tslib';
|
|
@@ -18,10 +18,9 @@ var M3eNavMenuItemElement_1;
|
|
|
18
18
|
*
|
|
19
19
|
* @description
|
|
20
20
|
* The `m3e-nav-menu-item` component represents an expandable, selectable item within a navigation menu.
|
|
21
|
-
* It supports nested child items, selection
|
|
22
|
-
*
|
|
23
|
-
*
|
|
24
|
-
*
|
|
21
|
+
* It supports nested child items, selection and disabled states, and emits events for open/close transitions.
|
|
22
|
+
* The component is highly customizable via slots and CSS custom properties, and is designed for accessible,
|
|
23
|
+
* keyboard-navigable menu structures.
|
|
25
24
|
*
|
|
26
25
|
* @example
|
|
27
26
|
* The following example illustrates a navigation menu with a top-level group of menu items.
|
|
@@ -85,7 +84,6 @@ var M3eNavMenuItemElement_1;
|
|
|
85
84
|
* @slot toggle-icon - Renders the toggle icon.
|
|
86
85
|
*
|
|
87
86
|
* @attr disabled - Whether the element is disabled.
|
|
88
|
-
* @attr indeterminate - Whether the element's selected / checked state is indeterminate.
|
|
89
87
|
* @attr open - Whether the item is expanded.
|
|
90
88
|
* @attr selected - Whether the item is selected.
|
|
91
89
|
*
|
|
@@ -463,19 +461,17 @@ let M3eNavMenuElement = M3eNavMenuElement_1 = class M3eNavMenuElement extends Ro
|
|
|
463
461
|
get items() {
|
|
464
462
|
return this[selectionManager].items;
|
|
465
463
|
}
|
|
466
|
-
/**
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
collapse(items) {
|
|
478
|
-
(items ?? this[selectionManager].items).forEach(x => x.collapse());
|
|
464
|
+
/** @internal */
|
|
465
|
+
expand(itemsOrDescendants, maybeDescendants = false) {
|
|
466
|
+
const items = Array.isArray(itemsOrDescendants) ? itemsOrDescendants : this[selectionManager].items;
|
|
467
|
+
const descendants = typeof itemsOrDescendants === "boolean" ? itemsOrDescendants : maybeDescendants;
|
|
468
|
+
items.forEach(x => x.expand(descendants));
|
|
469
|
+
}
|
|
470
|
+
/** @internal */
|
|
471
|
+
collapse(itemsOrDescendants, maybeDescendants = false) {
|
|
472
|
+
const items = Array.isArray(itemsOrDescendants) ? itemsOrDescendants : this[selectionManager].items;
|
|
473
|
+
const descendants = typeof itemsOrDescendants === "boolean" ? itemsOrDescendants : maybeDescendants;
|
|
474
|
+
items.forEach(x => x.collapse(descendants));
|
|
479
475
|
const activeItem = this[selectionManager].activeItem;
|
|
480
476
|
if (activeItem && !activeItem.visible) {
|
|
481
477
|
for (let parent = activeItem.parentItem; parent; parent = parent.parentItem) {
|
|
@@ -540,7 +536,9 @@ _M3eNavMenuElement_handleKeyDown = function _M3eNavMenuElement_handleKeyDown(e)
|
|
|
540
536
|
case " ":
|
|
541
537
|
e.preventDefault();
|
|
542
538
|
if (e.key === " " && item.ripple && !item.ripple.visible) {
|
|
539
|
+
item.ripple.centered = true;
|
|
543
540
|
item.ripple.show(0, 0, true);
|
|
541
|
+
item.ripple.centered = false;
|
|
544
542
|
}
|
|
545
543
|
if (item.hasChildItems) {
|
|
546
544
|
requestAnimationFrame(() => item.toggle());
|
|
@@ -562,10 +560,7 @@ _M3eNavMenuElement_handleKeyDown = function _M3eNavMenuElement_handleKeyDown(e)
|
|
|
562
560
|
} else {
|
|
563
561
|
const parent = item.parentItem;
|
|
564
562
|
if (parent) {
|
|
565
|
-
|
|
566
|
-
parent.collapse();
|
|
567
|
-
this[selectionManager].setActiveItem(parent);
|
|
568
|
-
});
|
|
563
|
+
this[selectionManager].setActiveItem(parent);
|
|
569
564
|
}
|
|
570
565
|
}
|
|
571
566
|
} else if (item.hasChildItems && !item.open) {
|
|
@@ -581,10 +576,7 @@ _M3eNavMenuElement_handleKeyDown = function _M3eNavMenuElement_handleKeyDown(e)
|
|
|
581
576
|
} else {
|
|
582
577
|
const parent = item.parentItem;
|
|
583
578
|
if (parent) {
|
|
584
|
-
|
|
585
|
-
parent.collapse();
|
|
586
|
-
this[selectionManager].setActiveItem(parent);
|
|
587
|
-
});
|
|
579
|
+
this[selectionManager].setActiveItem(parent);
|
|
588
580
|
}
|
|
589
581
|
}
|
|
590
582
|
} else if (item.hasChildItems && !item.open) {
|
package/dist/nav-menu.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"nav-menu.js","sources":["../../src/nav-menu/NavMenuItemElement.ts","../../src/nav-menu/NavMenuElement.ts","../../src/nav-menu/NavMenuItemGroupElement.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-unsafe-declaration-merging */\r\nimport { css, CSSResultGroup, html, LitElement, PropertyValues, unsafeCSS } from \"lit\";\r\nimport { property, query, state } from \"lit/decorators.js\";\r\nimport { ifDefined } from \"lit/directives/if-defined.js\";\r\n\r\nimport {\r\n AttachInternals,\r\n customElement,\r\n DesignToken,\r\n Disabled,\r\n EventAttribute,\r\n hasAssignedNodes,\r\n hasCustomState,\r\n M3eFocusRingElement,\r\n M3eRippleElement,\r\n M3eStateLayerElement,\r\n registerStyleSheet,\r\n Role,\r\n Selected,\r\n setCustomState,\r\n} from \"@m3e/web/core\";\r\n\r\nimport { selectionManager } from \"@m3e/web/core/a11y\";\r\n\r\nimport type { M3eNavMenuElement } from \"./NavMenuElement\";\r\n\r\n/**\r\n * An expandable item, selectable item within a navigation menu.\r\n *\r\n * @description\r\n * The `m3e-nav-menu-item` component represents an expandable, selectable item within a navigation menu.\r\n * It supports nested child items, selection, disabled and indeterminate states, and emits events for\r\n * open/close transitions. The component is highly customizable via slots and CSS custom properties, and\r\n * is designed for accessible, keyboard-navigable menu structures.\r\n *\r\n *\r\n * @example\r\n * The following example illustrates a navigation menu with a top-level group of menu items.\r\n * ```html\r\n * <m3e-nav-menu>\r\n * <m3e-nav-menu-item-group>\r\n * <m3e-heading slot=\"label\" variant=\"label\" size=\"large\">Mail</m3e-heading>\r\n * <m3e-nav-menu-item>\r\n * <m3e-icon slot=\"icon\" name=\"mail\"></m3e-icon>\r\n * <span slot=\"label\">Inbox</span>\r\n * <span slot=\"badge\">24</span>\r\n * </m3e-nav-menu-item>\r\n * <m3e-nav-menu-item>\r\n * <m3e-icon slot=\"icon\" name=\"send\"></m3e-icon>\r\n * <span slot=\"label\">Outbox</span>\r\n * </m3e-nav-menu-item>\r\n * <m3e-nav-menu-item>\r\n * <m3e-icon slot=\"icon\" name=\"favorite\"></m3e-icon>\r\n * <span slot=\"label\">Favorites</span>\r\n * </m3e-nav-menu-item>\r\n * <m3e-nav-menu-item>\r\n * <m3e-icon slot=\"icon\" name=\"delete\"></m3e-icon>\r\n * <span slot=\"label\">Trash</span>\r\n * </m3e-nav-menu-item>\r\n * </m3e-nav-menu-item-group>\r\n * </m3e-nav-menu>\r\n * ```\r\n *\r\n * @example\r\n * The next example illustrates a multilevel navigation menu.\r\n * ```html\r\n * <m3e-nav-menu>\r\n * <m3e-nav-menu-item open>\r\n * <m3e-icon slot=\"icon\" name=\"rocket_launch\"></m3e-icon>\r\n * <span slot=\"label\">Getting Started</span>\r\n * <m3e-nav-menu-item>\r\n * <m3e-icon slot=\"icon\" name=\"widgets\"></m3e-icon>\r\n * <span slot=\"label\">Overview</span>\r\n * </m3e-nav-menu-item>\r\n * <m3e-nav-menu-item>\r\n * <m3e-icon slot=\"icon\" name=\"package_2\"></m3e-icon>\r\n * <span slot=\"label\">Installation</span>\r\n * </m3e-nav-menu-item>\r\n * </m3e-nav-menu-item>\r\n * <m3e-nav-menu-item>\r\n * <span slot=\"label\">Actions</span>\r\n * <m3e-nav-menu-item><span slot=\"label\">Button</span></m3e-nav-menu-item>\r\n * <m3e-nav-menu-item><span slot=\"label\">Icon</span></m3e-nav-menu-item>\r\n * <m3e-nav-menu-item><span slot=\"label\">Icon Button</span></m3e-nav-menu-item>\r\n * </m3e-nav-menu-item>\r\n * </m3e-nav-menu>\r\n * ```\r\n *\r\n * @tag m3e-nav-menu-item\r\n *\r\n * @slot - Renders the nested child items.\r\n * @slot label - Renders the label of the item.\r\n * @slot icon - Renders the icon of the item.\r\n * @slot badge - Renders the badge of the item.\r\n * @slot selected-icon - Renders the icon of the item when selected.\r\n * @slot toggle-icon - Renders the toggle icon.\r\n *\r\n * @attr disabled - Whether the element is disabled.\r\n * @attr indeterminate - Whether the element's selected / checked state is indeterminate.\r\n * @attr open - Whether the item is expanded.\r\n * @attr selected - Whether the item is selected.\r\n *\r\n * @fires opening - Emitted when the item begins to open.\r\n * @fires opened - Emitted when the item has opened.\r\n * @fires closing - Emitted when the item begins to close.\r\n * @fires closed - Emitted when the item has closed.\r\n * @fires click - Emitted when the element is clicked.\r\n *\r\n * @cssprop --m3e-nav-menu-item-font-size - Font size for the item label.\r\n * @cssprop --m3e-nav-menu-item-font-weight - Font weight for the item label.\r\n * @cssprop --m3e-nav-menu-item-line-height - Line height for the item label.\r\n * @cssprop --m3e-nav-menu-item-tracking - Letter spacing for the item label.\r\n * @cssprop --m3e-nav-menu-item-padding - Inline padding for the item.\r\n * @cssprop --m3e-nav-menu-item-height - Height of the item.\r\n * @cssprop --m3e-nav-menu-item-spacing - Spacing between icon and label.\r\n * @cssprop --m3e-nav-menu-item-shape - Border radius of the item and focus ring.\r\n * @cssprop --m3e-nav-menu-item-icon-size - Size of the icon.\r\n * @cssprop --m3e-nav-menu-item-inset - Indentation for nested items.\r\n * @cssprop --m3e-nav-menu-item-label-color - Text color for the item label.\r\n * @cssprop --m3e-nav-menu-item-selected-label-color - Text color for selected item label.\r\n * @cssprop --m3e-nav-menu-item-selected-container-color - Background color for selected item.\r\n * @cssprop --m3e-nav-menu-item-selected-container-focus-color - Focus color for selected item container.\r\n * @cssprop --m3e-nav-menu-item-selected-container-hover-color - Hover color for selected item container.\r\n * @cssprop --m3e-nav-menu-item-selected-ripple-color - Ripple color for selected item.\r\n * @cssprop --m3e-nav-menu-item-unselected-container-focus-color - Focus color for unselected item container.\r\n * @cssprop --m3e-nav-menu-item-unselected-container-hover-color - Hover color for unselected item container.\r\n * @cssprop --m3e-nav-menu-item-unselected-ripple-color - Ripple color for unselected item.\r\n * @cssprop --m3e-nav-menu-item-open-container-color - Background color for open item with children.\r\n * @cssprop --m3e-nav-menu-item-open-container-focus-color - Focus color for open item container.\r\n * @cssprop --m3e-nav-menu-item-open-container-hover-color - Hover color for open item container.\r\n * @cssprop --m3e-nav-menu-item-open-ripple-color - Ripple color for open item.\r\n * @cssprop --m3e-nav-menu-item-disabled-color - Text color for disabled item.\r\n * @cssprop --m3e-nav-menu-item-disabled-color-opacity - Opacity for disabled item text color.\r\n * @cssprop --m3e-nav-menu-item-badge-font-size - Font size for badge slot.\r\n * @cssprop --m3e-nav-menu-item-badge-font-weight - Font weight for badge slot.\r\n * @cssprop --m3e-nav-menu-item-badge-line-height - Line height for badge slot.\r\n * @cssprop --m3e-nav-menu-item-badge-tracking - Letter spacing for badge slot.\r\n * @cssprop --m3e-nav-menu-divider-margin - Margin for divider elements.\r\n * @cssprop --m3e-nav-menu-item-vertical-inset - Vertical margin for first/last child items.\r\n */\r\n@customElement(\"m3e-nav-menu-item\")\r\nexport class M3eNavMenuItemElement extends Selected(\r\n Disabled(\r\n EventAttribute(AttachInternals(Role(LitElement, \"treeitem\"), true), \"opening\", \"opened\", \"closing\", \"closed\"),\r\n ),\r\n) {\r\n static {\r\n registerStyleSheet(css`\r\n m3e-nav-menu-item > m3e-divider {\r\n margin-block: var(--m3e-nav-menu-divider-margin, 0.25rem);\r\n flex: none;\r\n }\r\n m3e-nav-menu-item > m3e-nav-menu-item:first-of-type {\r\n margin-block-start: var(--m3e-nav-menu-item-vertical-inset, 0.25rem);\r\n }\r\n m3e-nav-menu-item > m3e-nav-menu-item:last-of-type {\r\n margin-block-end: var(--m3e-nav-menu-item-vertical-inset, 0.25rem);\r\n }\r\n `);\r\n }\r\n\r\n /** The styles of the element. */\r\n static override styles: CSSResultGroup = css`\r\n :host {\r\n display: block;\r\n flex: none;\r\n outline: none;\r\n user-select: none;\r\n -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\r\n }\r\n .base {\r\n display: flex;\r\n align-items: center;\r\n position: relative;\r\n padding-inline: var(--m3e-nav-menu-item-padding, 1.5rem);\r\n height: calc(var(--m3e-nav-menu-item-height, 3.5rem) + ${DesignToken.density.calc(-3)});\r\n column-gap: var(--m3e-nav-menu-item-spacing, 0.75rem);\r\n font-size: var(--m3e-nav-menu-item-font-size, ${DesignToken.typescale.standard.label.large.fontSize});\r\n font-weight: var(--m3e-nav-menu-item-font-weight, ${DesignToken.typescale.standard.label.large.fontWeight});\r\n line-height: var(--m3e-nav-menu-item-line-height, ${DesignToken.typescale.standard.label.large.lineHeight});\r\n letter-spacing: var(--m3e-nav-menu-item-tracking, ${DesignToken.typescale.standard.label.large.tracking});\r\n transition: ${unsafeCSS(\r\n `color ${DesignToken.motion.duration.short4} ${DesignToken.motion.easing.standard},\r\n background-color ${DesignToken.motion.duration.short4} ${DesignToken.motion.easing.standard}`,\r\n )};\r\n }\r\n .base,\r\n .focus-ring {\r\n border-radius: var(--m3e-nav-menu-item-shape, ${DesignToken.shape.corner.full});\r\n }\r\n .label {\r\n flex: 1 1 auto;\r\n display: flex;\r\n align-items: center;\r\n position: relative;\r\n overflow: hidden;\r\n vertical-align: middle;\r\n }\r\n .icon,\r\n .toggle {\r\n flex: none;\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n position: relative;\r\n vertical-align: middle;\r\n }\r\n ::slotted([slot=\"badge\"]) {\r\n flex: none;\r\n position: relative;\r\n font-size: var(--m3e-nav-menu-item-badge-font-size, ${DesignToken.typescale.standard.label.large.fontSize});\r\n font-weight: var(--m3e-nav-menu-item-badge-font-weight, ${DesignToken.typescale.standard.label.large.fontWeight});\r\n line-height: var(--m3e-nav-menu-item-badge-line-height, ${DesignToken.typescale.standard.label.large.lineHeight});\r\n letter-spacing: var(--m3e-nav-menu-item-badge-tracking, ${DesignToken.typescale.standard.label.large.tracking});\r\n }\r\n .toggle {\r\n transition: ${unsafeCSS(`transform var(--m3e-collapsible-animation-duration, ${DesignToken.motion.duration.medium1})\r\n ${DesignToken.motion.easing.standard}`)};\r\n }\r\n :host(:not(:state(-with-icon))) .icon {\r\n display: none;\r\n }\r\n .icon {\r\n margin-inline-start: -0.5rem;\r\n }\r\n .toggle {\r\n margin-inline-end: -0.5rem;\r\n }\r\n .group {\r\n padding-inline-start: var(--m3e-nav-menu-item-inset, 1rem);\r\n }\r\n :host([open]) .toggle {\r\n transform: rotate(180deg);\r\n }\r\n :host(:not(:state(-with-items))) .toggle,\r\n :host(:not(:state(-with-items))) .group {\r\n display: none;\r\n }\r\n ::slotted([slot=\"selected-icon\"]),\r\n ::slotted([slot=\"icon\"]),\r\n ::slotted([slot=\"toggle-icon\"]),\r\n .toggle-icon {\r\n vertical-align: middle;\r\n width: 1em;\r\n height: 1em;\r\n font-size: var(--m3e-nav-menu-item-icon-size, 1.5rem);\r\n }\r\n :host(:not(:disabled)) .base {\r\n cursor: pointer;\r\n }\r\n :host(:not(:disabled)) .base {\r\n color: var(--m3e-nav-menu-item-label-color, ${DesignToken.color.onSurfaceVariant});\r\n }\r\n :host(:disabled) .base {\r\n color: color-mix(\r\n in srgb,\r\n var(--m3e-nav-menu-item-disabled-color, ${DesignToken.color.onSurface})\r\n var(--m3e-nav-menu-item-disabled-color-opacity, 38%),\r\n transparent\r\n );\r\n }\r\n :host([selected]:not(:state(-with-items)):not(:disabled)) .base {\r\n color: var(--m3e-nav-menu-item-selected-label-color, ${DesignToken.color.onSecondaryContainer});\r\n background-color: var(--m3e-nav-menu-item-selected-container-color, ${DesignToken.color.secondaryContainer});\r\n --m3e-state-layer-focus-color: var(\r\n --m3e-nav-menu-item-selected-container-focus-color,\r\n ${DesignToken.color.onSecondaryContainer}\r\n );\r\n --m3e-state-layer-hover-color: var(\r\n --m3e-nav-menu-item-selected-container-hover-color,\r\n ${DesignToken.color.onSecondaryContainer}\r\n );\r\n --m3e-ripple-color: var(--m3e-nav-menu-item-selected-ripple-color, ${DesignToken.color.onSecondaryContainer});\r\n }\r\n :host(:not([selected]):not(:state(-with-items)):not(:disabled)) .base {\r\n --m3e-state-layer-focus-color: var(\r\n --m3e-nav-menu-item-unselected-container-focus-color,\r\n ${DesignToken.color.onSurface}\r\n );\r\n --m3e-state-layer-hover-color: var(\r\n --m3e-nav-menu-item-unselected-container-hover-color,\r\n ${DesignToken.color.onSurface}\r\n );\r\n --m3e-ripple-color: var(--m3e-nav-menu-item-unselected-ripple-color, ${DesignToken.color.onSurface});\r\n }\r\n .state-layer {\r\n margin-inline: auto;\r\n }\r\n :host([selected]:state(-with-items):not(:disabled)) .base {\r\n background-color: var(--m3e-nav-menu-item-open-container-color, ${DesignToken.color.surfaceContainerHighest});\r\n --m3e-state-layer-focus-color: var(\r\n --m3e-nav-menu-item-open-container-focus-color,\r\n ${DesignToken.color.onSurface}\r\n );\r\n --m3e-state-layer-hover-color: var(\r\n --m3e-nav-menu-item-open-container-hover-color,\r\n ${DesignToken.color.onSurface}\r\n );\r\n --m3e-ripple-color: var(--m3e-nav-menu-item-open-ripple-color, ${DesignToken.color.onSurface});\r\n }\r\n ::slotted(a[slot=\"label\"]) {\r\n all: unset;\r\n }\r\n @media (prefers-reduced-motion) {\r\n .base,\r\n .toggle,\r\n .state-layer {\r\n transition: none !important;\r\n }\r\n }\r\n @media (forced-colors: active) {\r\n .base,\r\n .state-layer {\r\n transition: none !important;\r\n }\r\n\r\n :host(:disabled) .base {\r\n color: GrayText;\r\n }\r\n :host(:not([selected]):not(:disabled)) .base {\r\n color: ButtonText;\r\n }\r\n :host([selected]:not(:state(-with-items)):not(:disabled)) .base {\r\n forced-color-adjust: none;\r\n color: ButtonFace;\r\n background-color: ButtonText;\r\n }\r\n :host([selected]:state(-with-items):not(:disabled)) .base {\r\n background-color: unset;\r\n color: ButtonText;\r\n }\r\n }\r\n `;\r\n\r\n /** @internal */ @query(\".state-layer\") readonly stateLayer?: M3eStateLayerElement;\r\n /** @internal */ @query(\".focus-ring\") readonly focusRing?: M3eFocusRingElement;\r\n /** @internal */ @query(\".ripple\") readonly ripple?: M3eRippleElement;\r\n /** @private */ @query(\".base\") private readonly _base?: HTMLElement;\r\n\r\n /** @private */ @state() private _hasChildItems = false;\r\n\r\n /** @private */ #items: M3eNavMenuItemElement[] = [];\r\n /** @private */ #menu: M3eNavMenuElement | null = null;\r\n /** @private */ #path = new Array<M3eNavMenuItemElement>();\r\n /** @private */ #link: HTMLAnchorElement | null = null;\r\n\r\n /**\r\n * Whether the item is expanded.\r\n * @default false\r\n */\r\n @property({ type: Boolean, reflect: true }) open = false;\r\n\r\n /** A reference to the nested `HTMLAnchorElement`. */\r\n get link(): HTMLAnchorElement | null {\r\n return this.#link;\r\n }\r\n\r\n /** A reference to the element used to present the label of the item. */\r\n get label(): HTMLElement | null {\r\n return this._base ?? null;\r\n }\r\n\r\n /** Whether the item is visible. */\r\n get visible(): boolean {\r\n return !this.#path.some((x) => !x.open);\r\n }\r\n\r\n /** The full path of the item, starting with the top-most ancestor, including this item. */\r\n get path(): ReadonlyArray<M3eNavMenuItemElement> {\r\n return [...this.#path, this];\r\n }\r\n\r\n /** Whether the item has child items. */\r\n get hasChildItems(): boolean {\r\n return this._hasChildItems;\r\n }\r\n\r\n /** The parenting item. */\r\n get parentItem(): M3eNavMenuItemElement | null {\r\n return this.#path[this.#path.length - 1] ?? null;\r\n }\r\n\r\n /** The items that immediately descend from this item. */\r\n get childItems(): readonly M3eNavMenuItemElement[] {\r\n return this.#items;\r\n }\r\n\r\n /** The one-based level of the item. */\r\n get level(): number {\r\n return this.#path.length + 1;\r\n }\r\n\r\n /**\r\n * Expands this item, and optionally, all descendants.\r\n * @param {boolean} [descendants=false] Whether to expand all descendants.\r\n */\r\n expand(descendants: boolean = false): void {\r\n if (this.hasChildItems) {\r\n this.open = true;\r\n if (descendants) {\r\n this.childItems.forEach((x) => x.expand(true));\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Collapses this item, and optionally, all descendants.\r\n * @param {boolean} [descendants=false] Whether to expand all descendants.\r\n */\r\n collapse(descendants: boolean = false): void {\r\n if (this.hasChildItems) {\r\n this.open = false;\r\n if (descendants) {\r\n this.childItems.forEach((x) => x.collapse(true));\r\n }\r\n }\r\n }\r\n\r\n /** Toggles the expanded state of the item. */\r\n toggle(): void {\r\n if (this.hasChildItems) {\r\n this.open = !this.open;\r\n }\r\n }\r\n\r\n /** @inheritdoc */\r\n override connectedCallback(): void {\r\n super.connectedCallback();\r\n\r\n this.#path.length = 0;\r\n for (\r\n let item = this.parentElement?.closest(\"m3e-nav-menu-item\");\r\n item;\r\n item = item.parentElement?.closest(\"m3e-nav-menu-item\")\r\n ) {\r\n this.#path.push(item);\r\n }\r\n this.#path.reverse();\r\n\r\n this.style.setProperty(\"--_nav-menu-item-level\", `${this.level}`);\r\n this.#menu = this.closest(\"m3e-nav-menu\");\r\n }\r\n\r\n /** @inheritdoc */\r\n override disconnectedCallback(): void {\r\n super.disconnectedCallback();\r\n this.#path.length = 0;\r\n }\r\n\r\n /** @inheritdoc */\r\n protected override update(changedProperties: PropertyValues): void {\r\n super.update(changedProperties);\r\n\r\n if (changedProperties.has(\"selected\")) {\r\n // Remove aria-selected and just use aria-current.\r\n this.ariaSelected = null;\r\n this.ariaCurrent = this.hasChildItems ? null : `${this.selected}`;\r\n for (const icon of this.querySelectorAll(\":scope > m3e-icon[slot]\")) {\r\n icon.toggleAttribute(\"filled\", this.selected);\r\n }\r\n\r\n this.#path.forEach((x) => (x.selected = this.selected));\r\n if (this.selected && !this.hasChildItems) {\r\n this.closest(\"m3e-nav-menu\")?.[selectionManager].notifySelectionChange(this);\r\n }\r\n }\r\n\r\n if (changedProperties.has(\"open\") || changedProperties.has(\"_hasChildItems\")) {\r\n this.ariaExpanded = this._hasChildItems ? `${this.open}` : null;\r\n }\r\n\r\n if ((changedProperties.has(\"_hasChildItems\") && this.disabled) || changedProperties.has(\"disabled\")) {\r\n this.#items.forEach((x) => (x.disabled = this.disabled));\r\n }\r\n }\r\n\r\n /** @inheritdoc */\r\n protected override firstUpdated(_changedProperties: PropertyValues<this>): void {\r\n super.firstUpdated(_changedProperties);\r\n\r\n const base = this._base;\r\n if (base) {\r\n [this.focusRing, this.stateLayer, this.ripple].forEach((x) => x?.attach(base));\r\n }\r\n }\r\n\r\n /** @inheritdoc */\r\n protected override render(): unknown {\r\n return html`<div class=\"base\" @click=\"${this.#handleClick}\">\r\n <m3e-state-layer class=\"state-layer\" ?disabled=\"${this.disabled}\"></m3e-state-layer>\r\n <m3e-focus-ring class=\"focus-ring\" inward ?disabled=\"${this.disabled}\"></m3e-focus-ring>\r\n <m3e-ripple class=\"ripple\" ?disabled=\"${this.disabled}\"></m3e-ripple>\r\n <div class=\"icon\" aria-hidden=\"true\">${this.#renderIcon()}</div>\r\n <div class=\"label\">\r\n <slot name=\"label\" @slotchange=\"${this.#handleSlotChange}\"></slot>\r\n </div>\r\n <slot name=\"badge\"></slot>\r\n <div aria-hidden=\"true\" class=\"toggle\">\r\n <slot name=\"toggle-icon\">\r\n <svg class=\"toggle-icon\" viewBox=\"0 -960 960 960\" fill=\"currentColor\">\r\n <path d=\"M480-360 280-560h400L480-360Z\" />\r\n </svg>\r\n </slot>\r\n </div>\r\n </div>\r\n <m3e-collapsible\r\n class=\"group\"\r\n role=\"group\"\r\n aria-hidden=\"${ifDefined(this._hasChildItems ? undefined : \"true\")}\"\r\n ?open=\"${this._hasChildItems && this.open}\"\r\n @opening=\"${this.#handleCollapsibleEvent}\"\r\n @opened=\"${this.#handleCollapsibleEvent}\"\r\n @closing=\"${this.#handleCollapsibleEvent}\"\r\n @closed=\"${this.#handleCollapsibleEvent}\"\r\n >\r\n <slot @slotchange=\"${this.#handleItemSlotChange}\"></slot>\r\n </m3e-collapsible>`;\r\n }\r\n\r\n /** @private */\r\n #renderIcon(): unknown {\r\n const icon = html`<slot name=\"icon\" @slotchange=\"${this.#handleIconSlotChange}\"></slot>`;\r\n return this.selected && !this.hasChildItems\r\n ? html`<slot name=\"selected-icon\" @slotchange=\"${this.#handleIconSlotChange}\">${icon}</slot>`\r\n : icon;\r\n }\r\n\r\n /** @private */\r\n #handleIconSlotChange(e: Event) {\r\n setCustomState(this, \"-with-icon\", hasAssignedNodes(<HTMLSlotElement>e.target));\r\n }\r\n\r\n /** @private */\r\n #handleSlotChange(e: Event): void {\r\n this.#link =\r\n (<HTMLSlotElement>e.target).assignedElements({ flatten: true }).find((x) => x instanceof HTMLAnchorElement) ??\r\n null;\r\n\r\n this.#link?.setAttribute(\"tabindex\", \"-1\");\r\n }\r\n\r\n /** @private */\r\n #handleItemSlotChange(e: Event): void {\r\n this.#items = (<HTMLSlotElement>e.target)\r\n .assignedElements({ flatten: true })\r\n .filter((x) => x instanceof M3eNavMenuItemElement);\r\n\r\n const hadChildItems = this._hasChildItems;\r\n this._hasChildItems = this.#items.length > 0;\r\n setCustomState(this, \"-with-items\", this._hasChildItems);\r\n\r\n if (hadChildItems || this._hasChildItems) {\r\n this.selected = this.#items.some((x) => x.selected);\r\n }\r\n }\r\n\r\n /** @private */\r\n #handleClick(): void {\r\n if (this.disabled) return;\r\n\r\n this.#menu?.[selectionManager].setActiveItem(this);\r\n if (!this._hasChildItems) {\r\n this.#menu?.[selectionManager].select(this);\r\n this.#path.forEach((x) => (x.selected = this.selected));\r\n this.#link?.click();\r\n\r\n const drawerContainer = this.closest(\"m3e-drawer-container\");\r\n if (drawerContainer) {\r\n const drawer = this.closest(\"[slot='start']\") ?? this.closest(\"[slot='end']\");\r\n if (\r\n drawer &&\r\n (hasCustomState(drawerContainer, `-${drawer.slot}-push`) ||\r\n hasCustomState(drawerContainer, `-${drawer.slot}-over`))\r\n ) {\r\n setTimeout(() => {\r\n drawerContainer.removeAttribute(drawer.slot);\r\n drawerContainer.dispatchEvent(new Event(\"change\", { bubbles: true }));\r\n }, 300);\r\n }\r\n }\r\n } else {\r\n this.toggle();\r\n }\r\n }\r\n\r\n /** @private */\r\n #handleCollapsibleEvent(e: Event): void {\r\n e.stopPropagation();\r\n this.dispatchEvent(new Event(e.type, { bubbles: true }));\r\n }\r\n}\r\n\r\ninterface M3eNavMenuItemElementEventMap extends HTMLElementEventMap {\r\n opening: Event;\r\n opened: Event;\r\n closing: Event;\r\n closed: Event;\r\n}\r\n\r\nexport interface M3eNavMenuItemElement {\r\n addEventListener<K extends keyof M3eNavMenuItemElementEventMap>(\r\n type: K,\r\n listener: (this: M3eNavMenuItemElement, ev: M3eNavMenuItemElementEventMap[K]) => void,\r\n options?: boolean | AddEventListenerOptions,\r\n ): void;\r\n\r\n addEventListener(\r\n type: string,\r\n listener: EventListenerOrEventListenerObject,\r\n options?: boolean | AddEventListenerOptions,\r\n ): void;\r\n\r\n removeEventListener<K extends keyof M3eNavMenuItemElementEventMap>(\r\n type: K,\r\n listener: (this: M3eNavMenuItemElement, ev: M3eNavMenuItemElementEventMap[K]) => void,\r\n options?: boolean | EventListenerOptions,\r\n ): void;\r\n\r\n removeEventListener(\r\n type: string,\r\n listener: EventListenerOrEventListenerObject,\r\n options?: boolean | EventListenerOptions,\r\n ): void;\r\n}\r\n\r\ndeclare global {\r\n interface HTMLElementTagNameMap {\r\n \"m3e-nav-menu-item\": M3eNavMenuItemElement;\r\n }\r\n}\r\n","import { css, CSSResultGroup, html, LitElement } from \"lit\";\r\n\r\nimport {\r\n customElement,\r\n DesignToken,\r\n FocusController,\r\n PressedController,\r\n registerStyleSheet,\r\n Role,\r\n scrollIntoViewIfNeeded,\r\n} from \"@m3e/web/core\";\r\n\r\nimport { SelectionManager, selectionManager } from \"@m3e/web/core/a11y\";\r\nimport { M3eDirectionality } from \"@m3e/web/core/bidi\";\r\n\r\nimport { M3eNavMenuItemElement } from \"./NavMenuItemElement\";\r\n\r\n/**\r\n * A hierarchical menu, typically used on larger devices, that allows a user to switch between views.\r\n *\r\n * @description\r\n * The `m3e-nav-menu` component provides a hierarchical, accessible navigation menu supporting\r\n * nested expandable items, keyboard navigation, and focus management. It is highly customizable\r\n * via slots and CSS custom properties, and is designed for use in sidebars, navigation drawers,\r\n * and complex menu structures.\r\n *\r\n * @example\r\n * The following example illustrates a navigation menu with a top-level group of menu items.\r\n * ```html\r\n * <m3e-nav-menu>\r\n * <m3e-nav-menu-item-group>\r\n * <m3e-heading slot=\"label\" variant=\"label\" size=\"large\">Mail</m3e-heading>\r\n * <m3e-nav-menu-item>\r\n * <m3e-icon slot=\"icon\" name=\"mail\"></m3e-icon>\r\n * <span slot=\"label\">Inbox</span>\r\n * <span slot=\"badge\">24</span>\r\n * </m3e-nav-menu-item>\r\n * <m3e-nav-menu-item>\r\n * <m3e-icon slot=\"icon\" name=\"send\"></m3e-icon>\r\n * <span slot=\"label\">Outbox</span>\r\n * </m3e-nav-menu-item>\r\n * <m3e-nav-menu-item>\r\n * <m3e-icon slot=\"icon\" name=\"favorite\"></m3e-icon>\r\n * <span slot=\"label\">Favorites</span>\r\n * </m3e-nav-menu-item>\r\n * <m3e-nav-menu-item>\r\n * <m3e-icon slot=\"icon\" name=\"delete\"></m3e-icon>\r\n * <span slot=\"label\">Trash</span>\r\n * </m3e-nav-menu-item>\r\n * </m3e-nav-menu-item-group>\r\n * </m3e-nav-menu>\r\n * ```\r\n *\r\n * @example\r\n * The next example illustrates a multilevel navigation menu.\r\n * ```html\r\n * <m3e-nav-menu>\r\n * <m3e-nav-menu-item open>\r\n * <m3e-icon slot=\"icon\" name=\"rocket_launch\"></m3e-icon>\r\n * <span slot=\"label\">Getting Started</span>\r\n * <m3e-nav-menu-item>\r\n * <m3e-icon slot=\"icon\" name=\"widgets\"></m3e-icon>\r\n * <span slot=\"label\">Overview</span>\r\n * </m3e-nav-menu-item>\r\n * <m3e-nav-menu-item>\r\n * <m3e-icon slot=\"icon\" name=\"package_2\"></m3e-icon>\r\n * <span slot=\"label\">Installation</span>\r\n * </m3e-nav-menu-item>\r\n * </m3e-nav-menu-item>\r\n * <m3e-nav-menu-item>\r\n * <span slot=\"label\">Actions</span>\r\n * <m3e-nav-menu-item><span slot=\"label\">Button</span></m3e-nav-menu-item>\r\n * <m3e-nav-menu-item><span slot=\"label\">Icon</span></m3e-nav-menu-item>\r\n * <m3e-nav-menu-item><span slot=\"label\">Icon Button</span></m3e-nav-menu-item>\r\n * </m3e-nav-menu-item>\r\n * </m3e-nav-menu>\r\n * ```\r\n *\r\n * @tag m3e-nav-menu\r\n *\r\n * @slot - Renders the items of the menu.\r\n *\r\n * @cssprop --m3e-nav-menu-padding-top - Top padding for the menu.\r\n * @cssprop --m3e-nav-menu-padding-bottom - Bottom padding for the menu.\r\n * @cssprop --m3e-nav-menu-padding-left - Left padding for the menu.\r\n * @cssprop --m3e-nav-menu-padding-right - Right padding for the menu.\r\n * @cssprop --m3e-nav-menu-divider-margin - Margin for divider elements in the menu.\r\n * @cssprop --m3e-nav-menu-scrollbar-width - Width of the menu scrollbar.\r\n * @cssprop --m3e-nav-menu-scrollbar-color - Color of the menu scrollbar.\r\n */\r\n@customElement(\"m3e-nav-menu\")\r\nexport class M3eNavMenuElement extends Role(LitElement, \"tree\") {\r\n static {\r\n registerStyleSheet(css`\r\n m3e-nav-menu > m3e-divider {\r\n margin-block: var(--m3e-nav-menu-divider-margin, 0.25rem);\r\n flex: none;\r\n }\r\n `);\r\n }\r\n\r\n /** The styles of the element. */\r\n static override styles: CSSResultGroup = css`\r\n :host {\r\n display: block;\r\n outline: none;\r\n overflow-y: auto;\r\n overflow-x: hidden;\r\n min-height: 0;\r\n scrollbar-width: ${DesignToken.scrollbar.width};\r\n scrollbar-color: ${DesignToken.scrollbar.color};\r\n }\r\n .base {\r\n width: 100%;\r\n display: flex;\r\n flex-direction: column;\r\n position: relative;\r\n min-height: inherit;\r\n box-sizing: border-box;\r\n padding-block-start: var(--m3e-nav-menu-padding-top, 0.5rem);\r\n padding-block-end: var(--m3e-nav-menu-padding-bottom, 0.5rem);\r\n padding-inline-start: var(--m3e-nav-menu-padding-left, 0.75rem);\r\n padding-inline-end: var(--m3e-nav-menu-padding-right, 0.75rem);\r\n }\r\n `;\r\n\r\n /** @private */ private static __nextId = 0;\r\n /** @private */ #ignoreFocusVisible = false;\r\n /** @private */ #ignoreFocus = false;\r\n\r\n /** @private */\r\n readonly [selectionManager] = new SelectionManager<M3eNavMenuItemElement>()\r\n .withVerticalOrientation()\r\n .withHomeAndEnd()\r\n .withTypeahead()\r\n .withSkipPredicate((x) => x.disabled || !x.visible)\r\n .disableRovingTabIndex()\r\n .onActiveItemChange(() => {\r\n if (this[selectionManager].activeItem) {\r\n this.#activateItem(this[selectionManager].activeItem);\r\n }\r\n })\r\n .onSelectedItemsChange(() => {\r\n const selected = this.selected;\r\n for (const item of this.items) {\r\n if (item !== selected) {\r\n this.#updateItemFocusVisible(item, false, false);\r\n }\r\n }\r\n\r\n if (selected?.label) {\r\n scrollIntoViewIfNeeded(selected.label, this, { block: \"start\", behavior: \"smooth\" });\r\n }\r\n });\r\n\r\n /** @private */ readonly #keyDownHandler = (e: KeyboardEvent) => this.#handleKeyDown(e);\r\n /** @private */ readonly #keyUpHandler = (e: KeyboardEvent) => this.#handleKeyUp(e);\r\n /** @private */ readonly #pointerDownHandler = (e: Event) => this.#handlePointerDown(e);\r\n\r\n constructor() {\r\n super();\r\n\r\n new PressedController(this, { callback: (pressed) => (this.#ignoreFocus = pressed) });\r\n new FocusController(this, {\r\n callback: () => {\r\n if (!this.#ignoreFocus) {\r\n this.#updateFocusVisible();\r\n }\r\n },\r\n });\r\n }\r\n\r\n /** The selected item of the menu. */\r\n get selected(): M3eNavMenuItemElement | null {\r\n return this[selectionManager].selectedItems[0] ?? null;\r\n }\r\n\r\n /** All the items of the menu. */\r\n get items(): readonly M3eNavMenuItemElement[] {\r\n return this[selectionManager].items;\r\n }\r\n\r\n /**\r\n * Expands the specified items, or all items if no items are provided.\r\n * @param {M3eNavMenuItemElement | undefined} items The items to expand.\r\n */\r\n expand(items?: M3eNavMenuItemElement[]): void {\r\n (items ?? this[selectionManager].items).forEach((x) => x.expand());\r\n }\r\n\r\n /**\r\n * Collapses the specified items, or all items if no items are provided.\r\n * @param {M3eNavMenuItemElement | undefined} items The items to collapse.\r\n */\r\n collapse(items?: M3eNavMenuItemElement[]): void {\r\n (items ?? this[selectionManager].items).forEach((x) => x.collapse());\r\n\r\n const activeItem = this[selectionManager].activeItem;\r\n if (activeItem && !activeItem.visible) {\r\n for (let parent = activeItem.parentItem; parent; parent = parent.parentItem) {\r\n if (parent.visible) {\r\n this[selectionManager].setActiveItem(parent);\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n\r\n /** @inheritdoc */\r\n override connectedCallback(): void {\r\n super.connectedCallback();\r\n\r\n this.setAttribute(\"tabindex\", \"0\");\r\n\r\n this.addEventListener(\"keydown\", this.#keyDownHandler);\r\n this.addEventListener(\"keyup\", this.#keyUpHandler);\r\n this.addEventListener(\"pointerdown\", this.#pointerDownHandler);\r\n }\r\n\r\n /** @inheritdoc */\r\n override disconnectedCallback(): void {\r\n super.disconnectedCallback();\r\n\r\n this.removeEventListener(\"keydown\", this.#keyDownHandler);\r\n this.removeEventListener(\"keyup\", this.#keyUpHandler);\r\n this.removeEventListener(\"pointerdown\", this.#pointerDownHandler);\r\n }\r\n\r\n /** @inheritdoc */\r\n protected override render(): unknown {\r\n return html`<div class=\"base\">\r\n <slot @slotchange=\"${this.#handleSlotChange}\"></slot>\r\n </div>`;\r\n }\r\n\r\n /** @private */\r\n #handleSlotChange(): void {\r\n for (const divider of this.querySelectorAll<HTMLElement>(\"m3e-divider\")) {\r\n divider.ariaHidden = \"true\";\r\n }\r\n const { added } = this[selectionManager].setItems([...this.querySelectorAll(\"m3e-nav-menu-item\")]);\r\n for (const item of added) {\r\n item.id = item.id || `m3e-nav-menu-item-${M3eNavMenuElement.__nextId++}`;\r\n }\r\n if (this[selectionManager].activeItem) {\r\n this.setAttribute(\"aria-activedescendant\", this[selectionManager].activeItem.id);\r\n this.#updateFocusVisible();\r\n } else {\r\n this.removeAttribute(\"aria-activedescendant\");\r\n }\r\n }\r\n\r\n /** @private */\r\n #handleKeyDown(e: KeyboardEvent): void {\r\n this.#ignoreFocusVisible = false;\r\n this.#updateFocusVisible();\r\n\r\n const item = this[selectionManager].activeItem;\r\n if (e.defaultPrevented || !item || item.disabled) return;\r\n\r\n switch (e.key) {\r\n case \"Enter\":\r\n case \" \":\r\n e.preventDefault();\r\n\r\n if (e.key === \" \" && item.ripple && !item.ripple.visible) {\r\n item.ripple.show(0, 0, true);\r\n }\r\n\r\n if (item.hasChildItems) {\r\n requestAnimationFrame(() => item.toggle());\r\n } else if (!item.selected) {\r\n this[selectionManager].select(item);\r\n item.link?.click();\r\n }\r\n break;\r\n\r\n case \"*\":\r\n e.preventDefault();\r\n item.expand(true);\r\n break;\r\n\r\n case \"Left\":\r\n case \"ArrowLeft\":\r\n e.preventDefault();\r\n if (M3eDirectionality.current === \"ltr\") {\r\n if (item.hasChildItems && item.open) {\r\n requestAnimationFrame(() => item.collapse());\r\n } else {\r\n const parent = item.parentItem;\r\n if (parent) {\r\n requestAnimationFrame(() => {\r\n parent.collapse();\r\n this[selectionManager].setActiveItem(parent);\r\n });\r\n }\r\n }\r\n } else if (item.hasChildItems && !item.open) {\r\n item.expand();\r\n }\r\n\r\n break;\r\n\r\n case \"Right\":\r\n case \"ArrowRight\":\r\n e.preventDefault();\r\n if (M3eDirectionality.current === \"rtl\") {\r\n if (item.hasChildItems && item.open) {\r\n requestAnimationFrame(() => item.collapse());\r\n } else {\r\n const parent = item.parentItem;\r\n if (parent) {\r\n requestAnimationFrame(() => {\r\n parent.collapse();\r\n this[selectionManager].setActiveItem(parent);\r\n });\r\n }\r\n }\r\n } else if (item.hasChildItems && !item.open) {\r\n item.expand();\r\n }\r\n break;\r\n\r\n default:\r\n this[selectionManager].onKeyDown(e);\r\n break;\r\n }\r\n }\r\n\r\n /** @private */\r\n #handleKeyUp(e: KeyboardEvent): void {\r\n const item = this[selectionManager].activeItem;\r\n if (!e.defaultPrevented && item && !item.disabled && e.key === \" \") {\r\n item.ripple?.hide();\r\n }\r\n }\r\n\r\n /** @private */\r\n #handlePointerDown(e: Event): void {\r\n if (!e.defaultPrevented && !this.#ignoreFocusVisible) {\r\n this.#ignoreFocusVisible = true;\r\n\r\n const item = e\r\n .composedPath()\r\n .reverse()\r\n .find((x) => x instanceof M3eNavMenuItemElement);\r\n\r\n if (item && !item.disabled) {\r\n this.#updateItemFocusVisible(item, true, false);\r\n }\r\n }\r\n }\r\n\r\n /** @private */\r\n #activateItem(item: M3eNavMenuItemElement): void {\r\n this.setAttribute(\"aria-activedescendant\", item.id);\r\n if (item.label) {\r\n scrollIntoViewIfNeeded(item.label, this, { block: \"nearest\", behavior: \"smooth\" });\r\n }\r\n this.#updateFocusVisible();\r\n }\r\n\r\n /** @private */\r\n #updateFocusVisible(): void {\r\n const focused = this.matches(\":focus\") || this.matches(\":focus-within\");\r\n const focusVisible = !this.#ignoreFocusVisible && this.matches(\":focus-visible\");\r\n this[selectionManager].items.forEach((x) => {\r\n const active = x === this[selectionManager].activeItem;\r\n this.#updateItemFocusVisible(x, active && focused, active && focusVisible);\r\n });\r\n }\r\n\r\n /** @private */\r\n #updateItemFocusVisible(item: M3eNavMenuItemElement, focused: boolean, focusVisible: boolean): void {\r\n if (focused && focusVisible) {\r\n item.stateLayer?.show(\"focused\");\r\n } else {\r\n item.stateLayer?.hide(\"focused\");\r\n }\r\n if (focusVisible) {\r\n item.focusRing?.show();\r\n } else {\r\n item.focusRing?.hide();\r\n }\r\n }\r\n}\r\n\r\ndeclare global {\r\n interface HTMLElementTagNameMap {\r\n \"m3e-nav-menu\": M3eNavMenuElement;\r\n }\r\n}\r\n","import { css, CSSResultGroup, html, LitElement } from \"lit\";\r\n\r\nimport { AttachInternals, customElement, deleteCustomState, Role, setCustomState } from \"@m3e/web/core\";\r\n\r\n/**\r\n * A top-level semantic grouping of items in a navigation menu.\r\n *\r\n * @description\r\n * The `m3e-nav-menu-item-group` is a top-level semantic grouping of items in a navigation menu.\r\n * It encapsulates related items under a shared heading or label, supporting visual hierarchy and accessibility.\r\n *\r\n * @example\r\n * The following example illustrates a navigation menu with a top-level group of menu items.\r\n * ```html\r\n * <m3e-nav-menu>\r\n * <m3e-nav-menu-item-group>\r\n * <m3e-heading slot=\"label\" variant=\"label\" size=\"large\">Mail</m3e-heading>\r\n * <m3e-nav-menu-item>\r\n * <m3e-icon slot=\"icon\" name=\"mail\"></m3e-icon>\r\n * <span slot=\"label\">Inbox</span>\r\n * <span slot=\"badge\">24</span>\r\n * </m3e-nav-menu-item>\r\n * <m3e-nav-menu-item>\r\n * <m3e-icon slot=\"icon\" name=\"send\"></m3e-icon>\r\n * <span slot=\"label\">Outbox</span>\r\n * </m3e-nav-menu-item>\r\n * <m3e-nav-menu-item>\r\n * <m3e-icon slot=\"icon\" name=\"favorite\"></m3e-icon>\r\n * <span slot=\"label\">Favorites</span>\r\n * </m3e-nav-menu-item>\r\n * <m3e-nav-menu-item>\r\n * <m3e-icon slot=\"icon\" name=\"delete\"></m3e-icon>\r\n * <span slot=\"label\">Trash</span>\r\n * </m3e-nav-menu-item>\r\n * </m3e-nav-menu-item-group>\r\n * </m3e-nav-menu>\r\n * ```\r\n *\r\n * @tag m3e-nav-menu-item-group\r\n *\r\n * @slot - Renders the items of the group.\r\n * @slot label - Renders the label of the group.\r\n *\r\n * @cssprop --m3e-nav-menu-item-group-label-inset - Insets the label from the start edge of the group.\r\n * @cssprop --m3e-nav-menu-item-group-label-space - Vertical spacing around the group's label.\r\n */\r\n@customElement(\"m3e-nav-menu-item-group\")\r\nexport class M3eNavMenuItemGroupElement extends AttachInternals(Role(LitElement, \"group\")) {\r\n /** The styles of the element. */\r\n static override styles: CSSResultGroup = css`\r\n :host {\r\n display: contents;\r\n }\r\n :host(:not(:state(-with-label))) .label {\r\n display: none;\r\n }\r\n .label {\r\n margin-inline-start: var(--m3e-nav-menu-item-group-label-inset, 1rem);\r\n margin-block-end: var(--m3e-nav-menu-item-group-label-space, 1rem);\r\n flex: none;\r\n }\r\n :host(:state(-divided)) .label {\r\n margin-block-start: calc(\r\n var(--m3e-nav-menu-item-group-label-space, 1rem) - var(--m3e-nav-menu-divider-margin, 0.25rem)\r\n );\r\n }\r\n :host(:not(:state(-divided))) .label {\r\n margin-block-start: var(--m3e-nav-menu-item-group-label-space, 1rem);\r\n }\r\n `;\r\n\r\n /** @private */ private static __nextId = 0;\r\n /** @private */ #labelId = `m3e-nav-menu-item-group-label-${M3eNavMenuItemGroupElement.__nextId++}`;\r\n /** @private */ #label?: Element;\r\n\r\n /** @inheritdoc */\r\n override connectedCallback(): void {\r\n super.connectedCallback();\r\n setCustomState(this, \"-divided\", this.previousElementSibling?.tagName === \"M3E-DIVIDER\");\r\n }\r\n\r\n /** @inheritdoc */\r\n override disconnectedCallback(): void {\r\n super.disconnectedCallback();\r\n deleteCustomState(this, \"-divided\");\r\n }\r\n\r\n /** @inheritdoc */\r\n protected override render(): unknown {\r\n return html`<div class=\"label\">\r\n <slot name=\"label\" @slotchange=\"${this.#handleLabelSlotChange}\"></slot>\r\n </div>\r\n <slot></slot>`;\r\n }\r\n\r\n /** @private */\r\n #handleLabelSlotChange(e: Event): void {\r\n const label = (e.target as HTMLSlotElement).assignedElements({ flatten: true })[0];\r\n if (label !== this.#label) {\r\n // If the label is changed and its id matched the reversed id,\r\n // clear the id in the event the element is moved elsewhere in the DOM.\r\n\r\n if (this.#label?.id === this.#labelId) {\r\n this.#label.id = \"\";\r\n }\r\n\r\n this.#label = label;\r\n\r\n if (this.#label) {\r\n this.#label.id = this.#label.id || this.#labelId;\r\n this.setAttribute(\"aria-labelledby\", this.#label.id);\r\n } else {\r\n this.removeAttribute(\"aria-labelledby\");\r\n }\r\n }\r\n setCustomState(this, \"-with-label\", this.#label !== undefined);\r\n }\r\n}\r\n\r\ndeclare global {\r\n interface HTMLElementTagNameMap {\r\n \"m3e-nav-menu-item-group\": M3eNavMenuItemGroupElement;\r\n }\r\n}\r\n"],"names":["M3eNavMenuItemElement","M3eNavMenuItemElement_1","Selected","Disabled","EventAttribute","AttachInternals","Role","LitElement","constructor","_hasChildItems","_M3eNavMenuItemElement_items","set","_M3eNavMenuItemElement_menu","_M3eNavMenuItemElement_path","Array","_M3eNavMenuItemElement_link","open","link","__classPrivateFieldGet","label","_base","visible","some","x","path","hasChildItems","parentItem","length","childItems","level","expand","descendants","forEach","collapse","toggle","connectedCallback","item","parentElement","closest","push","reverse","style","setProperty","__classPrivateFieldSet","disconnectedCallback","update","changedProperties","has","ariaSelected","ariaCurrent","selected","icon","querySelectorAll","toggleAttribute","selectionManager","notifySelectionChange","ariaExpanded","disabled","firstUpdated","_changedProperties","base","focusRing","stateLayer","ripple","attach","render","html","_M3eNavMenuItemElement_instances","_M3eNavMenuItemElement_handleClick","_M3eNavMenuItemElement_renderIcon","call","_M3eNavMenuItemElement_handleSlotChange","ifDefined","undefined","_M3eNavMenuItemElement_handleCollapsibleEvent","_M3eNavMenuItemElement_handleItemSlotChange","_M3eNavMenuItemElement_handleIconSlotChange","e","setCustomState","hasAssignedNodes","target","assignedElements","flatten","find","HTMLAnchorElement","setAttribute","filter","hadChildItems","setActiveItem","select","click","drawerContainer","drawer","hasCustomState","slot","setTimeout","removeAttribute","dispatchEvent","Event","bubbles","stopPropagation","type","registerStyleSheet","css","styles","DesignToken","density","calc","typescale","standard","large","fontSize","fontWeight","lineHeight","tracking","unsafeCSS","motion","duration","short4","easing","shape","corner","full","medium1","color","onSurfaceVariant","onSurface","onSecondaryContainer","secondaryContainer","surfaceContainerHighest","__decorate","query","prototype","state","property","Boolean","reflect","customElement","M3eNavMenuElement","M3eNavMenuElement_1","_M3eNavMenuElement_ignoreFocusVisible","_M3eNavMenuElement_ignoreFocus","_b","SelectionManager","withVerticalOrientation","withHomeAndEnd","withTypeahead","withSkipPredicate","disableRovingTabIndex","onActiveItemChange","activeItem","_M3eNavMenuElement_instances","_M3eNavMenuElement_activateItem","onSelectedItemsChange","items","_M3eNavMenuElement_updateItemFocusVisible","scrollIntoViewIfNeeded","block","behavior","_M3eNavMenuElement_keyDownHandler","_M3eNavMenuElement_keyUpHandler","_M3eNavMenuElement_pointerDownHandler","PressedController","callback","pressed","FocusController","_M3eNavMenuElement_updateFocusVisible","selectedItems","parent","addEventListener","removeEventListener","_M3eNavMenuElement_handleSlotChange","divider","ariaHidden","added","setItems","id","__nextId","defaultPrevented","key","preventDefault","show","requestAnimationFrame","M3eDirectionality","current","onKeyDown","hide","composedPath","focused","matches","focusVisible","active","scrollbar","width","M3eNavMenuItemGroupElement","M3eNavMenuItemGroupElement_1","_M3eNavMenuItemGroupElement_labelId","_M3eNavMenuItemGroupElement_label","previousElementSibling","tagName","deleteCustomState","_M3eNavMenuItemGroupElement_instances","_M3eNavMenuItemGroupElement_handleLabelSlotChange"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"nav-menu.js","sources":["../../src/nav-menu/NavMenuItemElement.ts","../../src/nav-menu/NavMenuElement.ts","../../src/nav-menu/NavMenuItemGroupElement.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-unsafe-declaration-merging */\r\nimport { css, CSSResultGroup, html, LitElement, PropertyValues, unsafeCSS } from \"lit\";\r\nimport { property, query, state } from \"lit/decorators.js\";\r\nimport { ifDefined } from \"lit/directives/if-defined.js\";\r\n\r\nimport {\r\n AttachInternals,\r\n customElement,\r\n DesignToken,\r\n Disabled,\r\n EventAttribute,\r\n hasAssignedNodes,\r\n hasCustomState,\r\n M3eFocusRingElement,\r\n M3eRippleElement,\r\n M3eStateLayerElement,\r\n registerStyleSheet,\r\n Role,\r\n Selected,\r\n setCustomState,\r\n} from \"@m3e/web/core\";\r\n\r\nimport { selectionManager } from \"@m3e/web/core/a11y\";\r\n\r\nimport type { M3eNavMenuElement } from \"./NavMenuElement\";\r\n\r\n/**\r\n * An expandable item, selectable item within a navigation menu.\r\n *\r\n * @description\r\n * The `m3e-nav-menu-item` component represents an expandable, selectable item within a navigation menu.\r\n * It supports nested child items, selection and disabled states, and emits events for open/close transitions.\r\n * The component is highly customizable via slots and CSS custom properties, and is designed for accessible,\r\n * keyboard-navigable menu structures.\r\n *\r\n * @example\r\n * The following example illustrates a navigation menu with a top-level group of menu items.\r\n * ```html\r\n * <m3e-nav-menu>\r\n * <m3e-nav-menu-item-group>\r\n * <m3e-heading slot=\"label\" variant=\"label\" size=\"large\">Mail</m3e-heading>\r\n * <m3e-nav-menu-item>\r\n * <m3e-icon slot=\"icon\" name=\"mail\"></m3e-icon>\r\n * <span slot=\"label\">Inbox</span>\r\n * <span slot=\"badge\">24</span>\r\n * </m3e-nav-menu-item>\r\n * <m3e-nav-menu-item>\r\n * <m3e-icon slot=\"icon\" name=\"send\"></m3e-icon>\r\n * <span slot=\"label\">Outbox</span>\r\n * </m3e-nav-menu-item>\r\n * <m3e-nav-menu-item>\r\n * <m3e-icon slot=\"icon\" name=\"favorite\"></m3e-icon>\r\n * <span slot=\"label\">Favorites</span>\r\n * </m3e-nav-menu-item>\r\n * <m3e-nav-menu-item>\r\n * <m3e-icon slot=\"icon\" name=\"delete\"></m3e-icon>\r\n * <span slot=\"label\">Trash</span>\r\n * </m3e-nav-menu-item>\r\n * </m3e-nav-menu-item-group>\r\n * </m3e-nav-menu>\r\n * ```\r\n *\r\n * @example\r\n * The next example illustrates a multilevel navigation menu.\r\n * ```html\r\n * <m3e-nav-menu>\r\n * <m3e-nav-menu-item open>\r\n * <m3e-icon slot=\"icon\" name=\"rocket_launch\"></m3e-icon>\r\n * <span slot=\"label\">Getting Started</span>\r\n * <m3e-nav-menu-item>\r\n * <m3e-icon slot=\"icon\" name=\"widgets\"></m3e-icon>\r\n * <span slot=\"label\">Overview</span>\r\n * </m3e-nav-menu-item>\r\n * <m3e-nav-menu-item>\r\n * <m3e-icon slot=\"icon\" name=\"package_2\"></m3e-icon>\r\n * <span slot=\"label\">Installation</span>\r\n * </m3e-nav-menu-item>\r\n * </m3e-nav-menu-item>\r\n * <m3e-nav-menu-item>\r\n * <span slot=\"label\">Actions</span>\r\n * <m3e-nav-menu-item><span slot=\"label\">Button</span></m3e-nav-menu-item>\r\n * <m3e-nav-menu-item><span slot=\"label\">Icon</span></m3e-nav-menu-item>\r\n * <m3e-nav-menu-item><span slot=\"label\">Icon Button</span></m3e-nav-menu-item>\r\n * </m3e-nav-menu-item>\r\n * </m3e-nav-menu>\r\n * ```\r\n *\r\n * @tag m3e-nav-menu-item\r\n *\r\n * @slot - Renders the nested child items.\r\n * @slot label - Renders the label of the item.\r\n * @slot icon - Renders the icon of the item.\r\n * @slot badge - Renders the badge of the item.\r\n * @slot selected-icon - Renders the icon of the item when selected.\r\n * @slot toggle-icon - Renders the toggle icon.\r\n *\r\n * @attr disabled - Whether the element is disabled.\r\n * @attr open - Whether the item is expanded.\r\n * @attr selected - Whether the item is selected.\r\n *\r\n * @fires opening - Emitted when the item begins to open.\r\n * @fires opened - Emitted when the item has opened.\r\n * @fires closing - Emitted when the item begins to close.\r\n * @fires closed - Emitted when the item has closed.\r\n * @fires click - Emitted when the element is clicked.\r\n *\r\n * @cssprop --m3e-nav-menu-item-font-size - Font size for the item label.\r\n * @cssprop --m3e-nav-menu-item-font-weight - Font weight for the item label.\r\n * @cssprop --m3e-nav-menu-item-line-height - Line height for the item label.\r\n * @cssprop --m3e-nav-menu-item-tracking - Letter spacing for the item label.\r\n * @cssprop --m3e-nav-menu-item-padding - Inline padding for the item.\r\n * @cssprop --m3e-nav-menu-item-height - Height of the item.\r\n * @cssprop --m3e-nav-menu-item-spacing - Spacing between icon and label.\r\n * @cssprop --m3e-nav-menu-item-shape - Border radius of the item and focus ring.\r\n * @cssprop --m3e-nav-menu-item-icon-size - Size of the icon.\r\n * @cssprop --m3e-nav-menu-item-inset - Indentation for nested items.\r\n * @cssprop --m3e-nav-menu-item-label-color - Text color for the item label.\r\n * @cssprop --m3e-nav-menu-item-selected-label-color - Text color for selected item label.\r\n * @cssprop --m3e-nav-menu-item-selected-container-color - Background color for selected item.\r\n * @cssprop --m3e-nav-menu-item-selected-container-focus-color - Focus color for selected item container.\r\n * @cssprop --m3e-nav-menu-item-selected-container-hover-color - Hover color for selected item container.\r\n * @cssprop --m3e-nav-menu-item-selected-ripple-color - Ripple color for selected item.\r\n * @cssprop --m3e-nav-menu-item-unselected-container-focus-color - Focus color for unselected item container.\r\n * @cssprop --m3e-nav-menu-item-unselected-container-hover-color - Hover color for unselected item container.\r\n * @cssprop --m3e-nav-menu-item-unselected-ripple-color - Ripple color for unselected item.\r\n * @cssprop --m3e-nav-menu-item-open-container-color - Background color for open item with children.\r\n * @cssprop --m3e-nav-menu-item-open-container-focus-color - Focus color for open item container.\r\n * @cssprop --m3e-nav-menu-item-open-container-hover-color - Hover color for open item container.\r\n * @cssprop --m3e-nav-menu-item-open-ripple-color - Ripple color for open item.\r\n * @cssprop --m3e-nav-menu-item-disabled-color - Text color for disabled item.\r\n * @cssprop --m3e-nav-menu-item-disabled-color-opacity - Opacity for disabled item text color.\r\n * @cssprop --m3e-nav-menu-item-badge-font-size - Font size for badge slot.\r\n * @cssprop --m3e-nav-menu-item-badge-font-weight - Font weight for badge slot.\r\n * @cssprop --m3e-nav-menu-item-badge-line-height - Line height for badge slot.\r\n * @cssprop --m3e-nav-menu-item-badge-tracking - Letter spacing for badge slot.\r\n * @cssprop --m3e-nav-menu-divider-margin - Margin for divider elements.\r\n * @cssprop --m3e-nav-menu-item-vertical-inset - Vertical margin for first/last child items.\r\n */\r\n@customElement(\"m3e-nav-menu-item\")\r\nexport class M3eNavMenuItemElement extends Selected(\r\n Disabled(\r\n EventAttribute(AttachInternals(Role(LitElement, \"treeitem\"), true), \"opening\", \"opened\", \"closing\", \"closed\"),\r\n ),\r\n) {\r\n static {\r\n registerStyleSheet(css`\r\n m3e-nav-menu-item > m3e-divider {\r\n margin-block: var(--m3e-nav-menu-divider-margin, 0.25rem);\r\n flex: none;\r\n }\r\n m3e-nav-menu-item > m3e-nav-menu-item:first-of-type {\r\n margin-block-start: var(--m3e-nav-menu-item-vertical-inset, 0.25rem);\r\n }\r\n m3e-nav-menu-item > m3e-nav-menu-item:last-of-type {\r\n margin-block-end: var(--m3e-nav-menu-item-vertical-inset, 0.25rem);\r\n }\r\n `);\r\n }\r\n\r\n /** The styles of the element. */\r\n static override styles: CSSResultGroup = css`\r\n :host {\r\n display: block;\r\n flex: none;\r\n outline: none;\r\n user-select: none;\r\n -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\r\n }\r\n .base {\r\n display: flex;\r\n align-items: center;\r\n position: relative;\r\n padding-inline: var(--m3e-nav-menu-item-padding, 1.5rem);\r\n height: calc(var(--m3e-nav-menu-item-height, 3.5rem) + ${DesignToken.density.calc(-3)});\r\n column-gap: var(--m3e-nav-menu-item-spacing, 0.75rem);\r\n font-size: var(--m3e-nav-menu-item-font-size, ${DesignToken.typescale.standard.label.large.fontSize});\r\n font-weight: var(--m3e-nav-menu-item-font-weight, ${DesignToken.typescale.standard.label.large.fontWeight});\r\n line-height: var(--m3e-nav-menu-item-line-height, ${DesignToken.typescale.standard.label.large.lineHeight});\r\n letter-spacing: var(--m3e-nav-menu-item-tracking, ${DesignToken.typescale.standard.label.large.tracking});\r\n transition: ${unsafeCSS(\r\n `color ${DesignToken.motion.duration.short4} ${DesignToken.motion.easing.standard},\r\n background-color ${DesignToken.motion.duration.short4} ${DesignToken.motion.easing.standard}`,\r\n )};\r\n }\r\n .base,\r\n .focus-ring {\r\n border-radius: var(--m3e-nav-menu-item-shape, ${DesignToken.shape.corner.full});\r\n }\r\n .label {\r\n flex: 1 1 auto;\r\n display: flex;\r\n align-items: center;\r\n position: relative;\r\n overflow: hidden;\r\n vertical-align: middle;\r\n }\r\n .icon,\r\n .toggle {\r\n flex: none;\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n position: relative;\r\n vertical-align: middle;\r\n }\r\n ::slotted([slot=\"badge\"]) {\r\n flex: none;\r\n position: relative;\r\n font-size: var(--m3e-nav-menu-item-badge-font-size, ${DesignToken.typescale.standard.label.large.fontSize});\r\n font-weight: var(--m3e-nav-menu-item-badge-font-weight, ${DesignToken.typescale.standard.label.large.fontWeight});\r\n line-height: var(--m3e-nav-menu-item-badge-line-height, ${DesignToken.typescale.standard.label.large.lineHeight});\r\n letter-spacing: var(--m3e-nav-menu-item-badge-tracking, ${DesignToken.typescale.standard.label.large.tracking});\r\n }\r\n .toggle {\r\n transition: ${unsafeCSS(`transform var(--m3e-collapsible-animation-duration, ${DesignToken.motion.duration.medium1})\r\n ${DesignToken.motion.easing.standard}`)};\r\n }\r\n :host(:not(:state(-with-icon))) .icon {\r\n display: none;\r\n }\r\n .icon {\r\n margin-inline-start: -0.5rem;\r\n }\r\n .toggle {\r\n margin-inline-end: -0.5rem;\r\n }\r\n .group {\r\n padding-inline-start: var(--m3e-nav-menu-item-inset, 1rem);\r\n }\r\n :host([open]) .toggle {\r\n transform: rotate(180deg);\r\n }\r\n :host(:not(:state(-with-items))) .toggle,\r\n :host(:not(:state(-with-items))) .group {\r\n display: none;\r\n }\r\n ::slotted([slot=\"selected-icon\"]),\r\n ::slotted([slot=\"icon\"]),\r\n ::slotted([slot=\"toggle-icon\"]),\r\n .toggle-icon {\r\n vertical-align: middle;\r\n width: 1em;\r\n height: 1em;\r\n font-size: var(--m3e-nav-menu-item-icon-size, 1.5rem);\r\n }\r\n :host(:not(:disabled)) .base {\r\n cursor: pointer;\r\n }\r\n :host(:not(:disabled)) .base {\r\n color: var(--m3e-nav-menu-item-label-color, ${DesignToken.color.onSurfaceVariant});\r\n }\r\n :host(:disabled) .base {\r\n color: color-mix(\r\n in srgb,\r\n var(--m3e-nav-menu-item-disabled-color, ${DesignToken.color.onSurface})\r\n var(--m3e-nav-menu-item-disabled-color-opacity, 38%),\r\n transparent\r\n );\r\n }\r\n :host([selected]:not(:state(-with-items)):not(:disabled)) .base {\r\n color: var(--m3e-nav-menu-item-selected-label-color, ${DesignToken.color.onSecondaryContainer});\r\n background-color: var(--m3e-nav-menu-item-selected-container-color, ${DesignToken.color.secondaryContainer});\r\n --m3e-state-layer-focus-color: var(\r\n --m3e-nav-menu-item-selected-container-focus-color,\r\n ${DesignToken.color.onSecondaryContainer}\r\n );\r\n --m3e-state-layer-hover-color: var(\r\n --m3e-nav-menu-item-selected-container-hover-color,\r\n ${DesignToken.color.onSecondaryContainer}\r\n );\r\n --m3e-ripple-color: var(--m3e-nav-menu-item-selected-ripple-color, ${DesignToken.color.onSecondaryContainer});\r\n }\r\n :host(:not([selected]):not(:state(-with-items)):not(:disabled)) .base {\r\n --m3e-state-layer-focus-color: var(\r\n --m3e-nav-menu-item-unselected-container-focus-color,\r\n ${DesignToken.color.onSurface}\r\n );\r\n --m3e-state-layer-hover-color: var(\r\n --m3e-nav-menu-item-unselected-container-hover-color,\r\n ${DesignToken.color.onSurface}\r\n );\r\n --m3e-ripple-color: var(--m3e-nav-menu-item-unselected-ripple-color, ${DesignToken.color.onSurface});\r\n }\r\n .state-layer {\r\n margin-inline: auto;\r\n }\r\n :host([selected]:state(-with-items):not(:disabled)) .base {\r\n background-color: var(--m3e-nav-menu-item-open-container-color, ${DesignToken.color.surfaceContainerHighest});\r\n --m3e-state-layer-focus-color: var(\r\n --m3e-nav-menu-item-open-container-focus-color,\r\n ${DesignToken.color.onSurface}\r\n );\r\n --m3e-state-layer-hover-color: var(\r\n --m3e-nav-menu-item-open-container-hover-color,\r\n ${DesignToken.color.onSurface}\r\n );\r\n --m3e-ripple-color: var(--m3e-nav-menu-item-open-ripple-color, ${DesignToken.color.onSurface});\r\n }\r\n ::slotted(a[slot=\"label\"]) {\r\n all: unset;\r\n }\r\n @media (prefers-reduced-motion) {\r\n .base,\r\n .toggle,\r\n .state-layer {\r\n transition: none !important;\r\n }\r\n }\r\n @media (forced-colors: active) {\r\n .base,\r\n .state-layer {\r\n transition: none !important;\r\n }\r\n\r\n :host(:disabled) .base {\r\n color: GrayText;\r\n }\r\n :host(:not([selected]):not(:disabled)) .base {\r\n color: ButtonText;\r\n }\r\n :host([selected]:not(:state(-with-items)):not(:disabled)) .base {\r\n forced-color-adjust: none;\r\n color: ButtonFace;\r\n background-color: ButtonText;\r\n }\r\n :host([selected]:state(-with-items):not(:disabled)) .base {\r\n background-color: unset;\r\n color: ButtonText;\r\n }\r\n }\r\n `;\r\n\r\n /** @internal */ @query(\".state-layer\") readonly stateLayer?: M3eStateLayerElement;\r\n /** @internal */ @query(\".focus-ring\") readonly focusRing?: M3eFocusRingElement;\r\n /** @internal */ @query(\".ripple\") readonly ripple?: M3eRippleElement;\r\n /** @private */ @query(\".base\") private readonly _base?: HTMLElement;\r\n\r\n /** @private */ @state() private _hasChildItems = false;\r\n\r\n /** @private */ #items: M3eNavMenuItemElement[] = [];\r\n /** @private */ #menu: M3eNavMenuElement | null = null;\r\n /** @private */ #path = new Array<M3eNavMenuItemElement>();\r\n /** @private */ #link: HTMLAnchorElement | null = null;\r\n\r\n /**\r\n * Whether the item is expanded.\r\n * @default false\r\n */\r\n @property({ type: Boolean, reflect: true }) open = false;\r\n\r\n /** A reference to the nested `HTMLAnchorElement`. */\r\n get link(): HTMLAnchorElement | null {\r\n return this.#link;\r\n }\r\n\r\n /** A reference to the element used to present the label of the item. */\r\n get label(): HTMLElement | null {\r\n return this._base ?? null;\r\n }\r\n\r\n /** Whether the item is visible. */\r\n get visible(): boolean {\r\n return !this.#path.some((x) => !x.open);\r\n }\r\n\r\n /** The full path of the item, starting with the top-most ancestor, including this item. */\r\n get path(): ReadonlyArray<M3eNavMenuItemElement> {\r\n return [...this.#path, this];\r\n }\r\n\r\n /** Whether the item has child items. */\r\n get hasChildItems(): boolean {\r\n return this._hasChildItems;\r\n }\r\n\r\n /** The parenting item. */\r\n get parentItem(): M3eNavMenuItemElement | null {\r\n return this.#path[this.#path.length - 1] ?? null;\r\n }\r\n\r\n /** The items that immediately descend from this item. */\r\n get childItems(): readonly M3eNavMenuItemElement[] {\r\n return this.#items;\r\n }\r\n\r\n /** The one-based level of the item. */\r\n get level(): number {\r\n return this.#path.length + 1;\r\n }\r\n\r\n /**\r\n * Expands this item, and optionally, all descendants.\r\n * @param {boolean} [descendants=false] Whether to expand all descendants.\r\n */\r\n expand(descendants: boolean = false): void {\r\n if (this.hasChildItems) {\r\n this.open = true;\r\n if (descendants) {\r\n this.childItems.forEach((x) => x.expand(true));\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Collapses this item, and optionally, all descendants.\r\n * @param {boolean} [descendants=false] Whether to expand all descendants.\r\n */\r\n collapse(descendants: boolean = false): void {\r\n if (this.hasChildItems) {\r\n this.open = false;\r\n if (descendants) {\r\n this.childItems.forEach((x) => x.collapse(true));\r\n }\r\n }\r\n }\r\n\r\n /** Toggles the expanded state of the item. */\r\n toggle(): void {\r\n if (this.hasChildItems) {\r\n this.open = !this.open;\r\n }\r\n }\r\n\r\n /** @inheritdoc */\r\n override connectedCallback(): void {\r\n super.connectedCallback();\r\n\r\n this.#path.length = 0;\r\n for (\r\n let item = this.parentElement?.closest(\"m3e-nav-menu-item\");\r\n item;\r\n item = item.parentElement?.closest(\"m3e-nav-menu-item\")\r\n ) {\r\n this.#path.push(item);\r\n }\r\n this.#path.reverse();\r\n\r\n this.style.setProperty(\"--_nav-menu-item-level\", `${this.level}`);\r\n this.#menu = this.closest(\"m3e-nav-menu\");\r\n }\r\n\r\n /** @inheritdoc */\r\n override disconnectedCallback(): void {\r\n super.disconnectedCallback();\r\n this.#path.length = 0;\r\n }\r\n\r\n /** @inheritdoc */\r\n protected override update(changedProperties: PropertyValues): void {\r\n super.update(changedProperties);\r\n\r\n if (changedProperties.has(\"selected\")) {\r\n // Remove aria-selected and just use aria-current.\r\n this.ariaSelected = null;\r\n this.ariaCurrent = this.hasChildItems ? null : `${this.selected}`;\r\n for (const icon of this.querySelectorAll(\":scope > m3e-icon[slot]\")) {\r\n icon.toggleAttribute(\"filled\", this.selected);\r\n }\r\n\r\n this.#path.forEach((x) => (x.selected = this.selected));\r\n if (this.selected && !this.hasChildItems) {\r\n this.closest(\"m3e-nav-menu\")?.[selectionManager].notifySelectionChange(this);\r\n }\r\n }\r\n\r\n if (changedProperties.has(\"open\") || changedProperties.has(\"_hasChildItems\")) {\r\n this.ariaExpanded = this._hasChildItems ? `${this.open}` : null;\r\n }\r\n\r\n if ((changedProperties.has(\"_hasChildItems\") && this.disabled) || changedProperties.has(\"disabled\")) {\r\n this.#items.forEach((x) => (x.disabled = this.disabled));\r\n }\r\n }\r\n\r\n /** @inheritdoc */\r\n protected override firstUpdated(_changedProperties: PropertyValues<this>): void {\r\n super.firstUpdated(_changedProperties);\r\n\r\n const base = this._base;\r\n if (base) {\r\n [this.focusRing, this.stateLayer, this.ripple].forEach((x) => x?.attach(base));\r\n }\r\n }\r\n\r\n /** @inheritdoc */\r\n protected override render(): unknown {\r\n return html`<div class=\"base\" @click=\"${this.#handleClick}\">\r\n <m3e-state-layer class=\"state-layer\" ?disabled=\"${this.disabled}\"></m3e-state-layer>\r\n <m3e-focus-ring class=\"focus-ring\" inward ?disabled=\"${this.disabled}\"></m3e-focus-ring>\r\n <m3e-ripple class=\"ripple\" ?disabled=\"${this.disabled}\"></m3e-ripple>\r\n <div class=\"icon\" aria-hidden=\"true\">${this.#renderIcon()}</div>\r\n <div class=\"label\">\r\n <slot name=\"label\" @slotchange=\"${this.#handleSlotChange}\"></slot>\r\n </div>\r\n <slot name=\"badge\"></slot>\r\n <div aria-hidden=\"true\" class=\"toggle\">\r\n <slot name=\"toggle-icon\">\r\n <svg class=\"toggle-icon\" viewBox=\"0 -960 960 960\" fill=\"currentColor\">\r\n <path d=\"M480-360 280-560h400L480-360Z\" />\r\n </svg>\r\n </slot>\r\n </div>\r\n </div>\r\n <m3e-collapsible\r\n class=\"group\"\r\n role=\"group\"\r\n aria-hidden=\"${ifDefined(this._hasChildItems ? undefined : \"true\")}\"\r\n ?open=\"${this._hasChildItems && this.open}\"\r\n @opening=\"${this.#handleCollapsibleEvent}\"\r\n @opened=\"${this.#handleCollapsibleEvent}\"\r\n @closing=\"${this.#handleCollapsibleEvent}\"\r\n @closed=\"${this.#handleCollapsibleEvent}\"\r\n >\r\n <slot @slotchange=\"${this.#handleItemSlotChange}\"></slot>\r\n </m3e-collapsible>`;\r\n }\r\n\r\n /** @private */\r\n #renderIcon(): unknown {\r\n const icon = html`<slot name=\"icon\" @slotchange=\"${this.#handleIconSlotChange}\"></slot>`;\r\n return this.selected && !this.hasChildItems\r\n ? html`<slot name=\"selected-icon\" @slotchange=\"${this.#handleIconSlotChange}\">${icon}</slot>`\r\n : icon;\r\n }\r\n\r\n /** @private */\r\n #handleIconSlotChange(e: Event) {\r\n setCustomState(this, \"-with-icon\", hasAssignedNodes(<HTMLSlotElement>e.target));\r\n }\r\n\r\n /** @private */\r\n #handleSlotChange(e: Event): void {\r\n this.#link =\r\n (<HTMLSlotElement>e.target).assignedElements({ flatten: true }).find((x) => x instanceof HTMLAnchorElement) ??\r\n null;\r\n\r\n this.#link?.setAttribute(\"tabindex\", \"-1\");\r\n }\r\n\r\n /** @private */\r\n #handleItemSlotChange(e: Event): void {\r\n this.#items = (<HTMLSlotElement>e.target)\r\n .assignedElements({ flatten: true })\r\n .filter((x) => x instanceof M3eNavMenuItemElement);\r\n\r\n const hadChildItems = this._hasChildItems;\r\n this._hasChildItems = this.#items.length > 0;\r\n setCustomState(this, \"-with-items\", this._hasChildItems);\r\n\r\n if (hadChildItems || this._hasChildItems) {\r\n this.selected = this.#items.some((x) => x.selected);\r\n }\r\n }\r\n\r\n /** @private */\r\n #handleClick(): void {\r\n if (this.disabled) return;\r\n\r\n this.#menu?.[selectionManager].setActiveItem(this);\r\n if (!this._hasChildItems) {\r\n this.#menu?.[selectionManager].select(this);\r\n this.#path.forEach((x) => (x.selected = this.selected));\r\n this.#link?.click();\r\n\r\n const drawerContainer = this.closest(\"m3e-drawer-container\");\r\n if (drawerContainer) {\r\n const drawer = this.closest(\"[slot='start']\") ?? this.closest(\"[slot='end']\");\r\n if (\r\n drawer &&\r\n (hasCustomState(drawerContainer, `-${drawer.slot}-push`) ||\r\n hasCustomState(drawerContainer, `-${drawer.slot}-over`))\r\n ) {\r\n setTimeout(() => {\r\n drawerContainer.removeAttribute(drawer.slot);\r\n drawerContainer.dispatchEvent(new Event(\"change\", { bubbles: true }));\r\n }, 300);\r\n }\r\n }\r\n } else {\r\n this.toggle();\r\n }\r\n }\r\n\r\n /** @private */\r\n #handleCollapsibleEvent(e: Event): void {\r\n e.stopPropagation();\r\n this.dispatchEvent(new Event(e.type, { bubbles: true }));\r\n }\r\n}\r\n\r\ninterface M3eNavMenuItemElementEventMap extends HTMLElementEventMap {\r\n opening: Event;\r\n opened: Event;\r\n closing: Event;\r\n closed: Event;\r\n}\r\n\r\nexport interface M3eNavMenuItemElement {\r\n addEventListener<K extends keyof M3eNavMenuItemElementEventMap>(\r\n type: K,\r\n listener: (this: M3eNavMenuItemElement, ev: M3eNavMenuItemElementEventMap[K]) => void,\r\n options?: boolean | AddEventListenerOptions,\r\n ): void;\r\n\r\n addEventListener(\r\n type: string,\r\n listener: EventListenerOrEventListenerObject,\r\n options?: boolean | AddEventListenerOptions,\r\n ): void;\r\n\r\n removeEventListener<K extends keyof M3eNavMenuItemElementEventMap>(\r\n type: K,\r\n listener: (this: M3eNavMenuItemElement, ev: M3eNavMenuItemElementEventMap[K]) => void,\r\n options?: boolean | EventListenerOptions,\r\n ): void;\r\n\r\n removeEventListener(\r\n type: string,\r\n listener: EventListenerOrEventListenerObject,\r\n options?: boolean | EventListenerOptions,\r\n ): void;\r\n}\r\n\r\ndeclare global {\r\n interface HTMLElementTagNameMap {\r\n \"m3e-nav-menu-item\": M3eNavMenuItemElement;\r\n }\r\n}\r\n","import { css, CSSResultGroup, html, LitElement } from \"lit\";\r\n\r\nimport {\r\n customElement,\r\n DesignToken,\r\n FocusController,\r\n PressedController,\r\n registerStyleSheet,\r\n Role,\r\n scrollIntoViewIfNeeded,\r\n} from \"@m3e/web/core\";\r\n\r\nimport { SelectionManager, selectionManager } from \"@m3e/web/core/a11y\";\r\nimport { M3eDirectionality } from \"@m3e/web/core/bidi\";\r\n\r\nimport { M3eNavMenuItemElement } from \"./NavMenuItemElement\";\r\n\r\n/**\r\n * A hierarchical menu, typically used on larger devices, that allows a user to switch between views.\r\n *\r\n * @description\r\n * The `m3e-nav-menu` component provides a hierarchical, accessible navigation menu supporting\r\n * nested expandable items, keyboard navigation, and focus management. It is highly customizable\r\n * via slots and CSS custom properties, and is designed for use in sidebars, navigation drawers,\r\n * and complex menu structures.\r\n *\r\n * @example\r\n * The following example illustrates a navigation menu with a top-level group of menu items.\r\n * ```html\r\n * <m3e-nav-menu>\r\n * <m3e-nav-menu-item-group>\r\n * <m3e-heading slot=\"label\" variant=\"label\" size=\"large\">Mail</m3e-heading>\r\n * <m3e-nav-menu-item>\r\n * <m3e-icon slot=\"icon\" name=\"mail\"></m3e-icon>\r\n * <span slot=\"label\">Inbox</span>\r\n * <span slot=\"badge\">24</span>\r\n * </m3e-nav-menu-item>\r\n * <m3e-nav-menu-item>\r\n * <m3e-icon slot=\"icon\" name=\"send\"></m3e-icon>\r\n * <span slot=\"label\">Outbox</span>\r\n * </m3e-nav-menu-item>\r\n * <m3e-nav-menu-item>\r\n * <m3e-icon slot=\"icon\" name=\"favorite\"></m3e-icon>\r\n * <span slot=\"label\">Favorites</span>\r\n * </m3e-nav-menu-item>\r\n * <m3e-nav-menu-item>\r\n * <m3e-icon slot=\"icon\" name=\"delete\"></m3e-icon>\r\n * <span slot=\"label\">Trash</span>\r\n * </m3e-nav-menu-item>\r\n * </m3e-nav-menu-item-group>\r\n * </m3e-nav-menu>\r\n * ```\r\n *\r\n * @example\r\n * The next example illustrates a multilevel navigation menu.\r\n * ```html\r\n * <m3e-nav-menu>\r\n * <m3e-nav-menu-item open>\r\n * <m3e-icon slot=\"icon\" name=\"rocket_launch\"></m3e-icon>\r\n * <span slot=\"label\">Getting Started</span>\r\n * <m3e-nav-menu-item>\r\n * <m3e-icon slot=\"icon\" name=\"widgets\"></m3e-icon>\r\n * <span slot=\"label\">Overview</span>\r\n * </m3e-nav-menu-item>\r\n * <m3e-nav-menu-item>\r\n * <m3e-icon slot=\"icon\" name=\"package_2\"></m3e-icon>\r\n * <span slot=\"label\">Installation</span>\r\n * </m3e-nav-menu-item>\r\n * </m3e-nav-menu-item>\r\n * <m3e-nav-menu-item>\r\n * <span slot=\"label\">Actions</span>\r\n * <m3e-nav-menu-item><span slot=\"label\">Button</span></m3e-nav-menu-item>\r\n * <m3e-nav-menu-item><span slot=\"label\">Icon</span></m3e-nav-menu-item>\r\n * <m3e-nav-menu-item><span slot=\"label\">Icon Button</span></m3e-nav-menu-item>\r\n * </m3e-nav-menu-item>\r\n * </m3e-nav-menu>\r\n * ```\r\n *\r\n * @tag m3e-nav-menu\r\n *\r\n * @slot - Renders the items of the menu.\r\n *\r\n * @cssprop --m3e-nav-menu-padding-top - Top padding for the menu.\r\n * @cssprop --m3e-nav-menu-padding-bottom - Bottom padding for the menu.\r\n * @cssprop --m3e-nav-menu-padding-left - Left padding for the menu.\r\n * @cssprop --m3e-nav-menu-padding-right - Right padding for the menu.\r\n * @cssprop --m3e-nav-menu-divider-margin - Margin for divider elements in the menu.\r\n * @cssprop --m3e-nav-menu-scrollbar-width - Width of the menu scrollbar.\r\n * @cssprop --m3e-nav-menu-scrollbar-color - Color of the menu scrollbar.\r\n */\r\n@customElement(\"m3e-nav-menu\")\r\nexport class M3eNavMenuElement extends Role(LitElement, \"tree\") {\r\n static {\r\n registerStyleSheet(css`\r\n m3e-nav-menu > m3e-divider {\r\n margin-block: var(--m3e-nav-menu-divider-margin, 0.25rem);\r\n flex: none;\r\n }\r\n `);\r\n }\r\n\r\n /** The styles of the element. */\r\n static override styles: CSSResultGroup = css`\r\n :host {\r\n display: block;\r\n outline: none;\r\n overflow-y: auto;\r\n overflow-x: hidden;\r\n min-height: 0;\r\n scrollbar-width: ${DesignToken.scrollbar.width};\r\n scrollbar-color: ${DesignToken.scrollbar.color};\r\n }\r\n .base {\r\n width: 100%;\r\n display: flex;\r\n flex-direction: column;\r\n position: relative;\r\n min-height: inherit;\r\n box-sizing: border-box;\r\n padding-block-start: var(--m3e-nav-menu-padding-top, 0.5rem);\r\n padding-block-end: var(--m3e-nav-menu-padding-bottom, 0.5rem);\r\n padding-inline-start: var(--m3e-nav-menu-padding-left, 0.75rem);\r\n padding-inline-end: var(--m3e-nav-menu-padding-right, 0.75rem);\r\n }\r\n `;\r\n\r\n /** @private */ private static __nextId = 0;\r\n /** @private */ #ignoreFocusVisible = false;\r\n /** @private */ #ignoreFocus = false;\r\n\r\n /** @private */\r\n readonly [selectionManager] = new SelectionManager<M3eNavMenuItemElement>()\r\n .withVerticalOrientation()\r\n .withHomeAndEnd()\r\n .withTypeahead()\r\n .withSkipPredicate((x) => x.disabled || !x.visible)\r\n .disableRovingTabIndex()\r\n .onActiveItemChange(() => {\r\n if (this[selectionManager].activeItem) {\r\n this.#activateItem(this[selectionManager].activeItem);\r\n }\r\n })\r\n .onSelectedItemsChange(() => {\r\n const selected = this.selected;\r\n for (const item of this.items) {\r\n if (item !== selected) {\r\n this.#updateItemFocusVisible(item, false, false);\r\n }\r\n }\r\n\r\n if (selected?.label) {\r\n scrollIntoViewIfNeeded(selected.label, this, { block: \"start\", behavior: \"smooth\" });\r\n }\r\n });\r\n\r\n /** @private */ readonly #keyDownHandler = (e: KeyboardEvent) => this.#handleKeyDown(e);\r\n /** @private */ readonly #keyUpHandler = (e: KeyboardEvent) => this.#handleKeyUp(e);\r\n /** @private */ readonly #pointerDownHandler = (e: Event) => this.#handlePointerDown(e);\r\n\r\n constructor() {\r\n super();\r\n\r\n new PressedController(this, { callback: (pressed) => (this.#ignoreFocus = pressed) });\r\n new FocusController(this, {\r\n callback: () => {\r\n if (!this.#ignoreFocus) {\r\n this.#updateFocusVisible();\r\n }\r\n },\r\n });\r\n }\r\n\r\n /** The selected item of the menu. */\r\n get selected(): M3eNavMenuItemElement | null {\r\n return this[selectionManager].selectedItems[0] ?? null;\r\n }\r\n\r\n /** All the items of the menu. */\r\n get items(): readonly M3eNavMenuItemElement[] {\r\n return this[selectionManager].items;\r\n }\r\n\r\n /**\r\n * Expands all items, and optionally, all descendants.\r\n * @param {boolean} [descendants=false] Whether to expand all descendants.\r\n */\r\n expand(descendants?: boolean): void;\r\n\r\n /**\r\n * Expands the specified items, and optionally, all descendants.\r\n * @param {M3eNavMenuItemElement[]} items The items to expand.\r\n * @param {boolean} [descendants=false] Whether to expand all descendants.\r\n */\r\n expand(items: M3eNavMenuItemElement[], descendants?: boolean): void;\r\n\r\n /** @internal */\r\n expand(itemsOrDescendants?: M3eNavMenuItemElement[] | boolean, maybeDescendants: boolean = false): void {\r\n const items = Array.isArray(itemsOrDescendants) ? itemsOrDescendants : this[selectionManager].items;\r\n const descendants = typeof itemsOrDescendants === \"boolean\" ? itemsOrDescendants : maybeDescendants;\r\n items.forEach((x) => x.expand(descendants));\r\n }\r\n\r\n /**\r\n * Collapses all items, and optionally, all descendants.\r\n * @param {boolean} [descendants=false] Whether to collapse all descendants.\r\n */\r\n collapse(descendants?: boolean): void;\r\n\r\n /**\r\n * Collapses the specified items, and optionally, all descendants.\r\n * @param {M3eNavMenuItemElement[]} items The items to collapse.\r\n * @param {boolean} [descendants=false] Whether to collapse all descendants.\r\n */\r\n collapse(items: M3eNavMenuItemElement[], descendants?: boolean): void;\r\n\r\n /** @internal */\r\n collapse(itemsOrDescendants?: M3eNavMenuItemElement[] | boolean, maybeDescendants: boolean = false): void {\r\n const items = Array.isArray(itemsOrDescendants) ? itemsOrDescendants : this[selectionManager].items;\r\n const descendants = typeof itemsOrDescendants === \"boolean\" ? itemsOrDescendants : maybeDescendants;\r\n\r\n items.forEach((x) => x.collapse(descendants));\r\n const activeItem = this[selectionManager].activeItem;\r\n if (activeItem && !activeItem.visible) {\r\n for (let parent = activeItem.parentItem; parent; parent = parent.parentItem) {\r\n if (parent.visible) {\r\n this[selectionManager].setActiveItem(parent);\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n\r\n /** @inheritdoc */\r\n override connectedCallback(): void {\r\n super.connectedCallback();\r\n\r\n this.setAttribute(\"tabindex\", \"0\");\r\n\r\n this.addEventListener(\"keydown\", this.#keyDownHandler);\r\n this.addEventListener(\"keyup\", this.#keyUpHandler);\r\n this.addEventListener(\"pointerdown\", this.#pointerDownHandler);\r\n }\r\n\r\n /** @inheritdoc */\r\n override disconnectedCallback(): void {\r\n super.disconnectedCallback();\r\n\r\n this.removeEventListener(\"keydown\", this.#keyDownHandler);\r\n this.removeEventListener(\"keyup\", this.#keyUpHandler);\r\n this.removeEventListener(\"pointerdown\", this.#pointerDownHandler);\r\n }\r\n\r\n /** @inheritdoc */\r\n protected override render(): unknown {\r\n return html`<div class=\"base\">\r\n <slot @slotchange=\"${this.#handleSlotChange}\"></slot>\r\n </div>`;\r\n }\r\n\r\n /** @private */\r\n #handleSlotChange(): void {\r\n for (const divider of this.querySelectorAll<HTMLElement>(\"m3e-divider\")) {\r\n divider.ariaHidden = \"true\";\r\n }\r\n const { added } = this[selectionManager].setItems([...this.querySelectorAll(\"m3e-nav-menu-item\")]);\r\n for (const item of added) {\r\n item.id = item.id || `m3e-nav-menu-item-${M3eNavMenuElement.__nextId++}`;\r\n }\r\n if (this[selectionManager].activeItem) {\r\n this.setAttribute(\"aria-activedescendant\", this[selectionManager].activeItem.id);\r\n this.#updateFocusVisible();\r\n } else {\r\n this.removeAttribute(\"aria-activedescendant\");\r\n }\r\n }\r\n\r\n /** @private */\r\n #handleKeyDown(e: KeyboardEvent): void {\r\n this.#ignoreFocusVisible = false;\r\n this.#updateFocusVisible();\r\n\r\n const item = this[selectionManager].activeItem;\r\n if (e.defaultPrevented || !item || item.disabled) return;\r\n\r\n switch (e.key) {\r\n case \"Enter\":\r\n case \" \":\r\n e.preventDefault();\r\n\r\n if (e.key === \" \" && item.ripple && !item.ripple.visible) {\r\n item.ripple.centered = true;\r\n item.ripple.show(0, 0, true);\r\n item.ripple.centered = false;\r\n }\r\n\r\n if (item.hasChildItems) {\r\n requestAnimationFrame(() => item.toggle());\r\n } else if (!item.selected) {\r\n this[selectionManager].select(item);\r\n item.link?.click();\r\n }\r\n break;\r\n\r\n case \"*\":\r\n e.preventDefault();\r\n item.expand(true);\r\n break;\r\n\r\n case \"Left\":\r\n case \"ArrowLeft\":\r\n e.preventDefault();\r\n if (M3eDirectionality.current === \"ltr\") {\r\n if (item.hasChildItems && item.open) {\r\n requestAnimationFrame(() => item.collapse());\r\n } else {\r\n const parent = item.parentItem;\r\n if (parent) {\r\n this[selectionManager].setActiveItem(parent);\r\n }\r\n }\r\n } else if (item.hasChildItems && !item.open) {\r\n item.expand();\r\n }\r\n\r\n break;\r\n\r\n case \"Right\":\r\n case \"ArrowRight\":\r\n e.preventDefault();\r\n if (M3eDirectionality.current === \"rtl\") {\r\n if (item.hasChildItems && item.open) {\r\n requestAnimationFrame(() => item.collapse());\r\n } else {\r\n const parent = item.parentItem;\r\n if (parent) {\r\n this[selectionManager].setActiveItem(parent);\r\n }\r\n }\r\n } else if (item.hasChildItems && !item.open) {\r\n item.expand();\r\n }\r\n break;\r\n\r\n default:\r\n this[selectionManager].onKeyDown(e);\r\n break;\r\n }\r\n }\r\n\r\n /** @private */\r\n #handleKeyUp(e: KeyboardEvent): void {\r\n const item = this[selectionManager].activeItem;\r\n if (!e.defaultPrevented && item && !item.disabled && e.key === \" \") {\r\n item.ripple?.hide();\r\n }\r\n }\r\n\r\n /** @private */\r\n #handlePointerDown(e: Event): void {\r\n if (!e.defaultPrevented && !this.#ignoreFocusVisible) {\r\n this.#ignoreFocusVisible = true;\r\n\r\n const item = e\r\n .composedPath()\r\n .reverse()\r\n .find((x) => x instanceof M3eNavMenuItemElement);\r\n\r\n if (item && !item.disabled) {\r\n this.#updateItemFocusVisible(item, true, false);\r\n }\r\n }\r\n }\r\n\r\n /** @private */\r\n #activateItem(item: M3eNavMenuItemElement): void {\r\n this.setAttribute(\"aria-activedescendant\", item.id);\r\n if (item.label) {\r\n scrollIntoViewIfNeeded(item.label, this, { block: \"nearest\", behavior: \"smooth\" });\r\n }\r\n this.#updateFocusVisible();\r\n }\r\n\r\n /** @private */\r\n #updateFocusVisible(): void {\r\n const focused = this.matches(\":focus\") || this.matches(\":focus-within\");\r\n const focusVisible = !this.#ignoreFocusVisible && this.matches(\":focus-visible\");\r\n this[selectionManager].items.forEach((x) => {\r\n const active = x === this[selectionManager].activeItem;\r\n this.#updateItemFocusVisible(x, active && focused, active && focusVisible);\r\n });\r\n }\r\n\r\n /** @private */\r\n #updateItemFocusVisible(item: M3eNavMenuItemElement, focused: boolean, focusVisible: boolean): void {\r\n if (focused && focusVisible) {\r\n item.stateLayer?.show(\"focused\");\r\n } else {\r\n item.stateLayer?.hide(\"focused\");\r\n }\r\n if (focusVisible) {\r\n item.focusRing?.show();\r\n } else {\r\n item.focusRing?.hide();\r\n }\r\n }\r\n}\r\n\r\ndeclare global {\r\n interface HTMLElementTagNameMap {\r\n \"m3e-nav-menu\": M3eNavMenuElement;\r\n }\r\n}\r\n","import { css, CSSResultGroup, html, LitElement } from \"lit\";\r\n\r\nimport { AttachInternals, customElement, deleteCustomState, Role, setCustomState } from \"@m3e/web/core\";\r\n\r\n/**\r\n * A top-level semantic grouping of items in a navigation menu.\r\n *\r\n * @description\r\n * The `m3e-nav-menu-item-group` is a top-level semantic grouping of items in a navigation menu.\r\n * It encapsulates related items under a shared heading or label, supporting visual hierarchy and accessibility.\r\n *\r\n * @example\r\n * The following example illustrates a navigation menu with a top-level group of menu items.\r\n * ```html\r\n * <m3e-nav-menu>\r\n * <m3e-nav-menu-item-group>\r\n * <m3e-heading slot=\"label\" variant=\"label\" size=\"large\">Mail</m3e-heading>\r\n * <m3e-nav-menu-item>\r\n * <m3e-icon slot=\"icon\" name=\"mail\"></m3e-icon>\r\n * <span slot=\"label\">Inbox</span>\r\n * <span slot=\"badge\">24</span>\r\n * </m3e-nav-menu-item>\r\n * <m3e-nav-menu-item>\r\n * <m3e-icon slot=\"icon\" name=\"send\"></m3e-icon>\r\n * <span slot=\"label\">Outbox</span>\r\n * </m3e-nav-menu-item>\r\n * <m3e-nav-menu-item>\r\n * <m3e-icon slot=\"icon\" name=\"favorite\"></m3e-icon>\r\n * <span slot=\"label\">Favorites</span>\r\n * </m3e-nav-menu-item>\r\n * <m3e-nav-menu-item>\r\n * <m3e-icon slot=\"icon\" name=\"delete\"></m3e-icon>\r\n * <span slot=\"label\">Trash</span>\r\n * </m3e-nav-menu-item>\r\n * </m3e-nav-menu-item-group>\r\n * </m3e-nav-menu>\r\n * ```\r\n *\r\n * @tag m3e-nav-menu-item-group\r\n *\r\n * @slot - Renders the items of the group.\r\n * @slot label - Renders the label of the group.\r\n *\r\n * @cssprop --m3e-nav-menu-item-group-label-inset - Insets the label from the start edge of the group.\r\n * @cssprop --m3e-nav-menu-item-group-label-space - Vertical spacing around the group's label.\r\n */\r\n@customElement(\"m3e-nav-menu-item-group\")\r\nexport class M3eNavMenuItemGroupElement extends AttachInternals(Role(LitElement, \"group\")) {\r\n /** The styles of the element. */\r\n static override styles: CSSResultGroup = css`\r\n :host {\r\n display: contents;\r\n }\r\n :host(:not(:state(-with-label))) .label {\r\n display: none;\r\n }\r\n .label {\r\n margin-inline-start: var(--m3e-nav-menu-item-group-label-inset, 1rem);\r\n margin-block-end: var(--m3e-nav-menu-item-group-label-space, 1rem);\r\n flex: none;\r\n }\r\n :host(:state(-divided)) .label {\r\n margin-block-start: calc(\r\n var(--m3e-nav-menu-item-group-label-space, 1rem) - var(--m3e-nav-menu-divider-margin, 0.25rem)\r\n );\r\n }\r\n :host(:not(:state(-divided))) .label {\r\n margin-block-start: var(--m3e-nav-menu-item-group-label-space, 1rem);\r\n }\r\n `;\r\n\r\n /** @private */ private static __nextId = 0;\r\n /** @private */ #labelId = `m3e-nav-menu-item-group-label-${M3eNavMenuItemGroupElement.__nextId++}`;\r\n /** @private */ #label?: Element;\r\n\r\n /** @inheritdoc */\r\n override connectedCallback(): void {\r\n super.connectedCallback();\r\n setCustomState(this, \"-divided\", this.previousElementSibling?.tagName === \"M3E-DIVIDER\");\r\n }\r\n\r\n /** @inheritdoc */\r\n override disconnectedCallback(): void {\r\n super.disconnectedCallback();\r\n deleteCustomState(this, \"-divided\");\r\n }\r\n\r\n /** @inheritdoc */\r\n protected override render(): unknown {\r\n return html`<div class=\"label\">\r\n <slot name=\"label\" @slotchange=\"${this.#handleLabelSlotChange}\"></slot>\r\n </div>\r\n <slot></slot>`;\r\n }\r\n\r\n /** @private */\r\n #handleLabelSlotChange(e: Event): void {\r\n const label = (e.target as HTMLSlotElement).assignedElements({ flatten: true })[0];\r\n if (label !== this.#label) {\r\n // If the label is changed and its id matched the reversed id,\r\n // clear the id in the event the element is moved elsewhere in the DOM.\r\n\r\n if (this.#label?.id === this.#labelId) {\r\n this.#label.id = \"\";\r\n }\r\n\r\n this.#label = label;\r\n\r\n if (this.#label) {\r\n this.#label.id = this.#label.id || this.#labelId;\r\n this.setAttribute(\"aria-labelledby\", this.#label.id);\r\n } else {\r\n this.removeAttribute(\"aria-labelledby\");\r\n }\r\n }\r\n setCustomState(this, \"-with-label\", this.#label !== undefined);\r\n }\r\n}\r\n\r\ndeclare global {\r\n interface HTMLElementTagNameMap {\r\n \"m3e-nav-menu-item-group\": M3eNavMenuItemGroupElement;\r\n }\r\n}\r\n"],"names":["M3eNavMenuItemElement","M3eNavMenuItemElement_1","Selected","Disabled","EventAttribute","AttachInternals","Role","LitElement","constructor","_hasChildItems","_M3eNavMenuItemElement_items","set","_M3eNavMenuItemElement_menu","_M3eNavMenuItemElement_path","Array","_M3eNavMenuItemElement_link","open","link","__classPrivateFieldGet","label","_base","visible","some","x","path","hasChildItems","parentItem","length","childItems","level","expand","descendants","forEach","collapse","toggle","connectedCallback","item","parentElement","closest","push","reverse","style","setProperty","__classPrivateFieldSet","disconnectedCallback","update","changedProperties","has","ariaSelected","ariaCurrent","selected","icon","querySelectorAll","toggleAttribute","selectionManager","notifySelectionChange","ariaExpanded","disabled","firstUpdated","_changedProperties","base","focusRing","stateLayer","ripple","attach","render","html","_M3eNavMenuItemElement_instances","_M3eNavMenuItemElement_handleClick","_M3eNavMenuItemElement_renderIcon","call","_M3eNavMenuItemElement_handleSlotChange","ifDefined","undefined","_M3eNavMenuItemElement_handleCollapsibleEvent","_M3eNavMenuItemElement_handleItemSlotChange","_M3eNavMenuItemElement_handleIconSlotChange","e","setCustomState","hasAssignedNodes","target","assignedElements","flatten","find","HTMLAnchorElement","setAttribute","filter","hadChildItems","setActiveItem","select","click","drawerContainer","drawer","hasCustomState","slot","setTimeout","removeAttribute","dispatchEvent","Event","bubbles","stopPropagation","type","registerStyleSheet","css","styles","DesignToken","density","calc","typescale","standard","large","fontSize","fontWeight","lineHeight","tracking","unsafeCSS","motion","duration","short4","easing","shape","corner","full","medium1","color","onSurfaceVariant","onSurface","onSecondaryContainer","secondaryContainer","surfaceContainerHighest","__decorate","query","prototype","state","property","Boolean","reflect","customElement","M3eNavMenuElement","M3eNavMenuElement_1","_M3eNavMenuElement_ignoreFocusVisible","_M3eNavMenuElement_ignoreFocus","_b","SelectionManager","withVerticalOrientation","withHomeAndEnd","withTypeahead","withSkipPredicate","disableRovingTabIndex","onActiveItemChange","activeItem","_M3eNavMenuElement_instances","_M3eNavMenuElement_activateItem","onSelectedItemsChange","items","_M3eNavMenuElement_updateItemFocusVisible","scrollIntoViewIfNeeded","block","behavior","_M3eNavMenuElement_keyDownHandler","_M3eNavMenuElement_keyUpHandler","_M3eNavMenuElement_pointerDownHandler","PressedController","callback","pressed","FocusController","_M3eNavMenuElement_updateFocusVisible","selectedItems","itemsOrDescendants","maybeDescendants","isArray","parent","addEventListener","removeEventListener","_M3eNavMenuElement_handleSlotChange","divider","ariaHidden","added","setItems","id","__nextId","defaultPrevented","key","preventDefault","centered","show","requestAnimationFrame","M3eDirectionality","current","onKeyDown","hide","composedPath","focused","matches","focusVisible","active","scrollbar","width","M3eNavMenuItemGroupElement","M3eNavMenuItemGroupElement_1","_M3eNavMenuItemGroupElement_labelId","_M3eNavMenuItemGroupElement_label","previousElementSibling","tagName","deleteCustomState","_M3eNavMenuItemGroupElement_instances","_M3eNavMenuItemGroupElement_handleLabelSlotChange"],"mappings":"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"}
|