@m3e/web 2.5.3 → 2.5.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (210) hide show
  1. package/dist/all.js +394 -348
  2. package/dist/all.js.map +1 -1
  3. package/dist/all.min.js +56 -56
  4. package/dist/all.min.js.map +1 -1
  5. package/dist/autocomplete.js +14 -14
  6. package/dist/autocomplete.js.map +1 -1
  7. package/dist/autocomplete.min.js +1 -1
  8. package/dist/autocomplete.min.js.map +1 -1
  9. package/dist/bottom-sheet.js +11 -14
  10. package/dist/bottom-sheet.js.map +1 -1
  11. package/dist/bottom-sheet.min.js +1 -1
  12. package/dist/bottom-sheet.min.js.map +1 -1
  13. package/dist/breadcrumb.js +4 -4
  14. package/dist/breadcrumb.js.map +1 -1
  15. package/dist/breadcrumb.min.js +1 -1
  16. package/dist/breadcrumb.min.js.map +1 -1
  17. package/dist/button-group.js +5 -5
  18. package/dist/button-group.js.map +1 -1
  19. package/dist/button-group.min.js +1 -1
  20. package/dist/button-group.min.js.map +1 -1
  21. package/dist/button.js +15 -15
  22. package/dist/button.js.map +1 -1
  23. package/dist/button.min.js +1 -1
  24. package/dist/button.min.js.map +1 -1
  25. package/dist/checkbox.js +1 -1
  26. package/dist/checkbox.js.map +1 -1
  27. package/dist/checkbox.min.js +1 -1
  28. package/dist/checkbox.min.js.map +1 -1
  29. package/dist/chips.js +11 -11
  30. package/dist/chips.js.map +1 -1
  31. package/dist/chips.min.js +1 -1
  32. package/dist/chips.min.js.map +1 -1
  33. package/dist/core-a11y.js +5 -3
  34. package/dist/core-a11y.js.map +1 -1
  35. package/dist/core-a11y.min.js +4 -4
  36. package/dist/core-a11y.min.js.map +1 -1
  37. package/dist/core-anchoring.js +4 -4
  38. package/dist/core-anchoring.js.map +1 -1
  39. package/dist/core-anchoring.min.js +1 -1
  40. package/dist/core-anchoring.min.js.map +1 -1
  41. package/dist/core.js +78 -64
  42. package/dist/core.js.map +1 -1
  43. package/dist/core.min.js +1 -1
  44. package/dist/core.min.js.map +1 -1
  45. package/dist/css-custom-data.json +200 -185
  46. package/dist/custom-elements.json +1598 -1524
  47. package/dist/datepicker.js +12 -12
  48. package/dist/datepicker.js.map +1 -1
  49. package/dist/datepicker.min.js +1 -1
  50. package/dist/datepicker.min.js.map +1 -1
  51. package/dist/dialog.js +4 -4
  52. package/dist/dialog.js.map +1 -1
  53. package/dist/dialog.min.js +1 -1
  54. package/dist/dialog.min.js.map +1 -1
  55. package/dist/drawer-container.js +14 -14
  56. package/dist/drawer-container.js.map +1 -1
  57. package/dist/drawer-container.min.js +1 -1
  58. package/dist/drawer-container.min.js.map +1 -1
  59. package/dist/expansion-panel.js +4 -4
  60. package/dist/expansion-panel.js.map +1 -1
  61. package/dist/expansion-panel.min.js +1 -1
  62. package/dist/expansion-panel.min.js.map +1 -1
  63. package/dist/fab-menu.js +4 -4
  64. package/dist/fab-menu.js.map +1 -1
  65. package/dist/fab-menu.min.js +1 -1
  66. package/dist/fab-menu.min.js.map +1 -1
  67. package/dist/fab.js +2 -2
  68. package/dist/fab.js.map +1 -1
  69. package/dist/fab.min.js +1 -1
  70. package/dist/fab.min.js.map +1 -1
  71. package/dist/form-field.js +19 -19
  72. package/dist/form-field.js.map +1 -1
  73. package/dist/form-field.min.js +2 -2
  74. package/dist/form-field.min.js.map +1 -1
  75. package/dist/html-custom-data.json +54 -44
  76. package/dist/icon-button.js +15 -15
  77. package/dist/icon-button.js.map +1 -1
  78. package/dist/icon-button.min.js +1 -1
  79. package/dist/icon-button.min.js.map +1 -1
  80. package/dist/icon.js +1 -1
  81. package/dist/icon.js.map +1 -1
  82. package/dist/icon.min.js +1 -1
  83. package/dist/icon.min.js.map +1 -1
  84. package/dist/list.js +16 -16
  85. package/dist/list.js.map +1 -1
  86. package/dist/list.min.js +1 -1
  87. package/dist/list.min.js.map +1 -1
  88. package/dist/menu.js +20 -20
  89. package/dist/menu.js.map +1 -1
  90. package/dist/menu.min.js +1 -1
  91. package/dist/menu.min.js.map +1 -1
  92. package/dist/nav-bar.js +40 -10
  93. package/dist/nav-bar.js.map +1 -1
  94. package/dist/nav-bar.min.js +1 -1
  95. package/dist/nav-bar.min.js.map +1 -1
  96. package/dist/nav-menu.js +10 -10
  97. package/dist/nav-menu.js.map +1 -1
  98. package/dist/nav-menu.min.js +1 -1
  99. package/dist/nav-menu.min.js.map +1 -1
  100. package/dist/nav-rail.js +15 -11
  101. package/dist/nav-rail.js.map +1 -1
  102. package/dist/nav-rail.min.js +1 -1
  103. package/dist/nav-rail.min.js.map +1 -1
  104. package/dist/option.js +13 -13
  105. package/dist/option.js.map +1 -1
  106. package/dist/option.min.js +1 -1
  107. package/dist/option.min.js.map +1 -1
  108. package/dist/paginator.js +2 -2
  109. package/dist/paginator.js.map +1 -1
  110. package/dist/paginator.min.js +2 -2
  111. package/dist/paginator.min.js.map +1 -1
  112. package/dist/radio-group.js +2 -2
  113. package/dist/radio-group.js.map +1 -1
  114. package/dist/radio-group.min.js +1 -1
  115. package/dist/radio-group.min.js.map +1 -1
  116. package/dist/search.js +15 -15
  117. package/dist/search.js.map +1 -1
  118. package/dist/search.min.js +1 -1
  119. package/dist/search.min.js.map +1 -1
  120. package/dist/segmented-button.js +7 -7
  121. package/dist/segmented-button.js.map +1 -1
  122. package/dist/segmented-button.min.js +1 -1
  123. package/dist/segmented-button.min.js.map +1 -1
  124. package/dist/select.js +6 -6
  125. package/dist/select.js.map +1 -1
  126. package/dist/select.min.js +1 -1
  127. package/dist/select.min.js.map +1 -1
  128. package/dist/slider.js +5 -5
  129. package/dist/slider.js.map +1 -1
  130. package/dist/slider.min.js +1 -1
  131. package/dist/slider.min.js.map +1 -1
  132. package/dist/split-pane.js +10 -10
  133. package/dist/split-pane.js.map +1 -1
  134. package/dist/split-pane.min.js +1 -1
  135. package/dist/split-pane.min.js.map +1 -1
  136. package/dist/src/autocomplete/AutocompleteElement.d.ts.map +1 -1
  137. package/dist/src/bottom-sheet/BottomSheetElement.d.ts +1 -1
  138. package/dist/src/bottom-sheet/BottomSheetElement.d.ts.map +1 -1
  139. package/dist/src/button/styles/ButtonSizeStyle.d.ts.map +1 -1
  140. package/dist/src/button/styles/ButtonStyle.d.ts.map +1 -1
  141. package/dist/src/button/styles/ButtonVariantStyle.d.ts.map +1 -1
  142. package/dist/src/button-group/ButtonGroupElement.d.ts.map +1 -1
  143. package/dist/src/checkbox/CheckboxElement.d.ts.map +1 -1
  144. package/dist/src/chips/InputChipElement.d.ts.map +1 -1
  145. package/dist/src/core/a11y/InteractivityChecker.d.ts +2 -1
  146. package/dist/src/core/a11y/InteractivityChecker.d.ts.map +1 -1
  147. package/dist/src/core/anchoring/FloatingPanelElement.d.ts +1 -1
  148. package/dist/src/core/shared/mixins/SuppressInitialAnimation.d.ts +9 -2
  149. package/dist/src/core/shared/mixins/SuppressInitialAnimation.d.ts.map +1 -1
  150. package/dist/src/core/shared/mixins/index.d.ts +0 -1
  151. package/dist/src/core/shared/mixins/index.d.ts.map +1 -1
  152. package/dist/src/core/shared/primitives/CollapsibleElement.d.ts +13 -0
  153. package/dist/src/core/shared/primitives/CollapsibleElement.d.ts.map +1 -1
  154. package/dist/src/core/shared/primitives/CollapsibleOrientation.d.ts +3 -0
  155. package/dist/src/core/shared/primitives/CollapsibleOrientation.d.ts.map +1 -0
  156. package/dist/src/core/shared/primitives/index.d.ts +1 -0
  157. package/dist/src/core/shared/primitives/index.d.ts.map +1 -1
  158. package/dist/src/datepicker/DatepickerElement.d.ts +1 -1
  159. package/dist/src/dialog/DialogElement.d.ts.map +1 -1
  160. package/dist/src/drawer-container/styles/DrawerContainerStyle.d.ts.map +1 -1
  161. package/dist/src/expansion-panel/ExpansionPanelElement.d.ts.map +1 -1
  162. package/dist/src/fab/FabElement.d.ts.map +1 -1
  163. package/dist/src/fab/styles/FabStyle.d.ts.map +1 -1
  164. package/dist/src/fab-menu/FabMenuElement.d.ts +1 -1
  165. package/dist/src/form-field/FormFieldElement.d.ts.map +1 -1
  166. package/dist/src/icon/IconElement.d.ts.map +1 -1
  167. package/dist/src/icon-button/styles/IconButtonSizeStyle.d.ts.map +1 -1
  168. package/dist/src/icon-button/styles/IconButtonStyle.d.ts.map +1 -1
  169. package/dist/src/icon-button/styles/IconButtonVariantStyle.d.ts.map +1 -1
  170. package/dist/src/menu/MenuElement.d.ts +1 -1
  171. package/dist/src/nav-bar/NavItemElement.d.ts +7 -1
  172. package/dist/src/nav-bar/NavItemElement.d.ts.map +1 -1
  173. package/dist/src/nav-menu/NavMenuItemElement.d.ts.map +1 -1
  174. package/dist/src/nav-rail/NavRailElement.d.ts +10 -5
  175. package/dist/src/nav-rail/NavRailElement.d.ts.map +1 -1
  176. package/dist/src/paginator/PaginatorElement.d.ts.map +1 -1
  177. package/dist/src/search/SearchBarElement.d.ts.map +1 -1
  178. package/dist/src/search/SearchViewElement.d.ts.map +1 -1
  179. package/dist/src/search/styles/SearchBarStyle.d.ts.map +1 -1
  180. package/dist/src/split-pane/SplitPaneElement.d.ts.map +1 -1
  181. package/dist/src/stepper/StepperElement.d.ts.map +1 -1
  182. package/dist/src/toolbar/ToolbarElement.d.ts.map +1 -1
  183. package/dist/src/tree/TreeItemElement.d.ts.map +1 -1
  184. package/dist/stepper.js +6 -6
  185. package/dist/stepper.js.map +1 -1
  186. package/dist/stepper.min.js +1 -1
  187. package/dist/stepper.min.js.map +1 -1
  188. package/dist/tabs.js +5 -5
  189. package/dist/tabs.js.map +1 -1
  190. package/dist/tabs.min.js +1 -1
  191. package/dist/tabs.min.js.map +1 -1
  192. package/dist/toc.js +7 -7
  193. package/dist/toc.js.map +1 -1
  194. package/dist/toc.min.js +1 -1
  195. package/dist/toc.min.js.map +1 -1
  196. package/dist/toolbar.js +2 -1
  197. package/dist/toolbar.js.map +1 -1
  198. package/dist/toolbar.min.js +1 -1
  199. package/dist/toolbar.min.js.map +1 -1
  200. package/dist/tooltip.js +3 -3
  201. package/dist/tooltip.js.map +1 -1
  202. package/dist/tooltip.min.js +1 -1
  203. package/dist/tooltip.min.js.map +1 -1
  204. package/dist/tree.js +9 -9
  205. package/dist/tree.js.map +1 -1
  206. package/dist/tree.min.js +1 -1
  207. package/dist/tree.min.js.map +1 -1
  208. package/package.json +1 -1
  209. package/dist/src/core/shared/mixins/EventAttribute.d.ts +0 -11
  210. package/dist/src/core/shared/mixins/EventAttribute.d.ts.map +0 -1
@@ -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 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(:disabled)) .base {\r\n color: LinkText;\r\n }\r\n :host([selected]:not(:state(-with-items)):not(:disabled)) .base,\r\n :host([selected]:state(-with-items):not(:disabled)) .base {\r\n forced-color-adjust: none;\r\n background-color: unset;\r\n color: Highlight;\r\n }\r\n :host([selected]:not(:state(-with-items)):not(:disabled)) .base::after {\r\n content: \"\";\r\n position: absolute;\r\n inset-inline-start: calc(calc(var(--m3e-nav-menu-item-padding, 1.5rem) / 2) - calc(0.375rem / 2));\r\n inset-block-start: 50%;\r\n width: 0.375rem;\r\n height: 0.375rem;\r\n border-radius: 50%;\r\n transform: translateY(-50%);\r\n background-color: currentColor;\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 forcedColorsActive,\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 && !forcedColorsActive()) {\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 focusWithin = this.matches(\":focus-within\");\r\n const focused = focusWithin || this.matches(\":focus\");\r\n const focusVisible =\r\n focused &&\r\n !this.#ignoreFocusVisible &&\r\n (forcedColorsActive() ||\r\n this.matches(\":focus-visible\") ||\r\n (focusWithin && this.querySelector(\"a:focus-visible\") !== null));\r\n\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","forcedColorsActive","composedPath","focusWithin","matches","focused","focusVisible","querySelector","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 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(Disabled(AttachInternals(Role(LitElement, \"treeitem\"), true))) {\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(:is(:state(--with-icon), :--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(:is(:state(--with-items), :--with-items))) .toggle,\r\n :host(:not(:is(:state(--with-items), :--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(:is(:state(--with-items), :--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(:is(:state(--with-items), :--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]:is(:state(--with-items), :--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(:disabled)) .base {\r\n color: LinkText;\r\n }\r\n :host([selected]:not(:is(:state(--with-items), :--with-items)):not(:disabled)) .base,\r\n :host([selected]:is(:state(--with-items), :--with-items):not(:disabled)) .base {\r\n forced-color-adjust: none;\r\n background-color: unset;\r\n color: Highlight;\r\n }\r\n :host([selected]:not(:is(:state(--with-items), :--with-items)):not(:disabled)) .base::after {\r\n content: \"\";\r\n position: absolute;\r\n inset-inline-start: calc(calc(var(--m3e-nav-menu-item-padding, 1.5rem) / 2) - calc(0.375rem / 2));\r\n inset-block-start: 50%;\r\n width: 0.375rem;\r\n height: 0.375rem;\r\n border-radius: 50%;\r\n transform: translateY(-50%);\r\n background-color: currentColor;\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 forcedColorsActive,\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 && !forcedColorsActive()) {\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 focusWithin = this.matches(\":focus-within\");\r\n const focused = focusWithin || this.matches(\":focus\");\r\n const focusVisible =\r\n focused &&\r\n !this.#ignoreFocusVisible &&\r\n (forcedColorsActive() ||\r\n this.matches(\":focus-visible\") ||\r\n (focusWithin && this.querySelector(\"a:focus-visible\") !== null));\r\n\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(:is(:state(--with-label), :--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(:is(:state(--divided), :--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(:is(:state(--divided), :--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","Selected","Disabled","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","M3eNavMenuItemElement_1","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","forcedColorsActive","composedPath","focusWithin","matches","focused","focusVisible","querySelector","active","scrollbar","width","M3eNavMenuItemGroupElement","M3eNavMenuItemGroupElement_1","_M3eNavMenuItemGroupElement_labelId","_M3eNavMenuItemGroupElement_label","previousElementSibling","tagName","deleteCustomState","_M3eNavMenuItemGroupElement_instances","_M3eNavMenuItemGroupElement_handleLabelSlotChange"],"mappings":"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"}
@@ -3,5 +3,5 @@
3
3
  * Copyright (c) 2025–2026 matraic
4
4
  * See LICENSE file in the project root for full license text.
5
5
  */
6
- import{__classPrivateFieldGet as e,__classPrivateFieldSet as t,__decorate as i}from"tslib";import{LitElement as s,html as a,css as n,unsafeCSS as o}from"lit";import{Selected as l,Disabled as r,EventAttribute as c,AttachInternals as d,Role as h,setCustomState as m,hasAssignedNodes as u,hasCustomState as p,registerStyleSheet as v,DesignToken as f,customElement as g,scrollIntoViewIfNeeded as b,PressedController as y,FocusController as k,forcedColorsActive as w,deleteCustomState as $}from"@m3e/web/core";import{selectionManager as I,SelectionManager as C}from"@m3e/web/core/a11y";import{M3eDirectionality as x}from"@m3e/web/core/bidi";import{query as E,state as A,property as S}from"lit/decorators.js";import{ifDefined as _}from"lit/directives/if-defined.js";var W,L,M,z,R,q,D,H,P,T,j,F;let V=F=class extends(l(r(c(d(h(s,"treeitem"),!0),"opening","opened","closing","closed")))){constructor(){super(...arguments),W.add(this),this._hasChildItems=!1,L.set(this,[]),M.set(this,null),z.set(this,new Array),R.set(this,null),this.open=!1}get link(){return e(this,R,"f")}get label(){return this._base??null}get visible(){return!e(this,z,"f").some(e=>!e.open)}get path(){return[...e(this,z,"f"),this]}get hasChildItems(){return this._hasChildItems}get parentItem(){return e(this,z,"f")[e(this,z,"f").length-1]??null}get childItems(){return e(this,L,"f")}get level(){return e(this,z,"f").length+1}expand(e=!1){this.hasChildItems&&(this.open=!0,e&&this.childItems.forEach(e=>e.expand(!0)))}collapse(e=!1){this.hasChildItems&&(this.open=!1,e&&this.childItems.forEach(e=>e.collapse(!0)))}toggle(){this.hasChildItems&&(this.open=!this.open)}connectedCallback(){super.connectedCallback(),e(this,z,"f").length=0;for(let t=this.parentElement?.closest("m3e-nav-menu-item");t;t=t.parentElement?.closest("m3e-nav-menu-item"))e(this,z,"f").push(t);e(this,z,"f").reverse(),this.style.setProperty("--_nav-menu-item-level",`${this.level}`),t(this,M,this.closest("m3e-nav-menu"),"f")}disconnectedCallback(){super.disconnectedCallback(),e(this,z,"f").length=0}update(t){if(super.update(t),t.has("selected")){this.ariaSelected=null,this.ariaCurrent=this.hasChildItems?null:`${this.selected}`;for(const e of this.querySelectorAll(":scope > m3e-icon[slot]"))e.toggleAttribute("filled",this.selected);e(this,z,"f").forEach(e=>e.selected=this.selected),this.selected&&!this.hasChildItems&&this.closest("m3e-nav-menu")?.[I].notifySelectionChange(this)}(t.has("open")||t.has("_hasChildItems"))&&(this.ariaExpanded=this._hasChildItems?`${this.open}`:null),(t.has("_hasChildItems")&&this.disabled||t.has("disabled"))&&e(this,L,"f").forEach(e=>e.disabled=this.disabled)}firstUpdated(e){super.firstUpdated(e);const t=this._base;t&&[this.focusRing,this.stateLayer,this.ripple].forEach(e=>e?.attach(t))}render(){return a`<div class="base" @click="${e(this,W,"m",T)}"><m3e-state-layer class="state-layer" ?disabled="${this.disabled}"></m3e-state-layer><m3e-focus-ring class="focus-ring" inward ?disabled="${this.disabled}"></m3e-focus-ring><m3e-ripple class="ripple" ?disabled="${this.disabled}"></m3e-ripple><div class="icon" aria-hidden="true">${e(this,W,"m",q).call(this)}</div><div class="label"><slot name="label" @slotchange="${e(this,W,"m",H)}"></slot></div><slot name="badge"></slot><div aria-hidden="true" class="toggle"><slot name="toggle-icon"><svg class="toggle-icon" viewBox="0 -960 960 960" fill="currentColor"><path d="M480-360 280-560h400L480-360Z"/></svg></slot></div></div><m3e-collapsible class="group" role="group" aria-hidden="${_(this._hasChildItems?void 0:"true")}" ?open="${this._hasChildItems&&this.open}" @opening="${e(this,W,"m",j)}" @opened="${e(this,W,"m",j)}" @closing="${e(this,W,"m",j)}" @closed="${e(this,W,"m",j)}"><slot @slotchange="${e(this,W,"m",P)}"></slot></m3e-collapsible>`}};var B,U,G,K,N,O,Y,Z,J,Q,X,ee,te,ie,se;L=new WeakMap,M=new WeakMap,z=new WeakMap,R=new WeakMap,W=new WeakSet,q=function(){const t=a`<slot name="icon" @slotchange="${e(this,W,"m",D)}"></slot>`;return this.selected&&!this.hasChildItems?a`<slot name="selected-icon" @slotchange="${e(this,W,"m",D)}">${t}</slot>`:t},D=function(e){m(this,"-with-icon",u(e.target))},H=function(i){t(this,R,i.target.assignedElements({flatten:!0}).find(e=>e instanceof HTMLAnchorElement)??null,"f"),e(this,R,"f")?.setAttribute("tabindex","-1")},P=function(i){t(this,L,i.target.assignedElements({flatten:!0}).filter(e=>e instanceof F),"f");const s=this._hasChildItems;this._hasChildItems=e(this,L,"f").length>0,m(this,"-with-items",this._hasChildItems),(s||this._hasChildItems)&&(this.selected=e(this,L,"f").some(e=>e.selected))},T=function(){if(!this.disabled)if(e(this,M,"f")?.[I].setActiveItem(this),this._hasChildItems)this.toggle();else{e(this,M,"f")?.[I].select(this),e(this,z,"f").forEach(e=>e.selected=this.selected),e(this,R,"f")?.click();const t=this.closest("m3e-drawer-container");if(t){const e=this.closest("[slot='start']")??this.closest("[slot='end']");e&&(p(t,`-${e.slot}-push`)||p(t,`-${e.slot}-over`))&&setTimeout(()=>{t.removeAttribute(e.slot),t.dispatchEvent(new Event("change",{bubbles:!0}))},300)}}},j=function(e){e.stopPropagation(),this.dispatchEvent(new Event(e.type,{bubbles:!0}))},v(n`m3e-nav-menu-item > m3e-divider { margin-block: var(--m3e-nav-menu-divider-margin, 0.25rem); flex: none; } m3e-nav-menu-item > m3e-nav-menu-item:first-of-type { margin-block-start: var(--m3e-nav-menu-item-vertical-inset, 0.25rem); } m3e-nav-menu-item > m3e-nav-menu-item:last-of-type { margin-block-end: var(--m3e-nav-menu-item-vertical-inset, 0.25rem); }`),V.styles=n`:host { display: block; flex: none; outline: none; user-select: none; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); } .base { display: flex; align-items: center; position: relative; padding-inline: var(--m3e-nav-menu-item-padding, 1.5rem); height: calc(var(--m3e-nav-menu-item-height, 3.5rem) + ${f.density.calc(-3)}); column-gap: var(--m3e-nav-menu-item-spacing, 0.75rem); font-size: var(--m3e-nav-menu-item-font-size, ${f.typescale.standard.label.large.fontSize}); font-weight: var(--m3e-nav-menu-item-font-weight, ${f.typescale.standard.label.large.fontWeight}); line-height: var(--m3e-nav-menu-item-line-height, ${f.typescale.standard.label.large.lineHeight}); letter-spacing: var(--m3e-nav-menu-item-tracking, ${f.typescale.standard.label.large.tracking}); transition: ${o(`color ${f.motion.duration.short4} ${f.motion.easing.standard},\n background-color ${f.motion.duration.short4} ${f.motion.easing.standard}`)}; } .base, .focus-ring { border-radius: var(--m3e-nav-menu-item-shape, ${f.shape.corner.full}); } .label { flex: 1 1 auto; display: flex; align-items: center; position: relative; overflow: hidden; vertical-align: middle; } .icon, .toggle { flex: none; display: flex; align-items: center; justify-content: center; position: relative; vertical-align: middle; } ::slotted([slot="badge"]) { flex: none; position: relative; font-size: var(--m3e-nav-menu-item-badge-font-size, ${f.typescale.standard.label.large.fontSize}); font-weight: var(--m3e-nav-menu-item-badge-font-weight, ${f.typescale.standard.label.large.fontWeight}); line-height: var(--m3e-nav-menu-item-badge-line-height, ${f.typescale.standard.label.large.lineHeight}); letter-spacing: var(--m3e-nav-menu-item-badge-tracking, ${f.typescale.standard.label.large.tracking}); } .toggle { transition: ${o(`transform var(--m3e-collapsible-animation-duration, ${f.motion.duration.medium1})\n ${f.motion.easing.standard}`)}; } :host(:not(:state(-with-icon))) .icon { display: none; } .icon { margin-inline-start: -0.5rem; } .toggle { margin-inline-end: -0.5rem; } .group { padding-inline-start: var(--m3e-nav-menu-item-inset, 1rem); } :host([open]) .toggle { transform: rotate(180deg); } :host(:not(:state(-with-items))) .toggle, :host(:not(:state(-with-items))) .group { display: none; } ::slotted([slot="selected-icon"]), ::slotted([slot="icon"]), ::slotted([slot="toggle-icon"]), .toggle-icon { vertical-align: middle; width: 1em; height: 1em; font-size: var(--m3e-nav-menu-item-icon-size, 1.5rem); } :host(:not(:disabled)) .base { cursor: pointer; } :host(:not(:disabled)) .base { color: var(--m3e-nav-menu-item-label-color, ${f.color.onSurfaceVariant}); } :host(:disabled) .base { color: color-mix( in srgb, var(--m3e-nav-menu-item-disabled-color, ${f.color.onSurface}) var(--m3e-nav-menu-item-disabled-color-opacity, 38%), transparent ); } :host([selected]:not(:state(-with-items)):not(:disabled)) .base { color: var(--m3e-nav-menu-item-selected-label-color, ${f.color.onSecondaryContainer}); background-color: var(--m3e-nav-menu-item-selected-container-color, ${f.color.secondaryContainer}); --m3e-state-layer-focus-color: var( --m3e-nav-menu-item-selected-container-focus-color, ${f.color.onSecondaryContainer} ); --m3e-state-layer-hover-color: var( --m3e-nav-menu-item-selected-container-hover-color, ${f.color.onSecondaryContainer} ); --m3e-ripple-color: var(--m3e-nav-menu-item-selected-ripple-color, ${f.color.onSecondaryContainer}); } :host(:not([selected]):not(:state(-with-items)):not(:disabled)) .base { --m3e-state-layer-focus-color: var( --m3e-nav-menu-item-unselected-container-focus-color, ${f.color.onSurface} ); --m3e-state-layer-hover-color: var( --m3e-nav-menu-item-unselected-container-hover-color, ${f.color.onSurface} ); --m3e-ripple-color: var(--m3e-nav-menu-item-unselected-ripple-color, ${f.color.onSurface}); } .state-layer { margin-inline: auto; } :host([selected]:state(-with-items):not(:disabled)) .base { background-color: var(--m3e-nav-menu-item-open-container-color, ${f.color.surfaceContainerHighest}); --m3e-state-layer-focus-color: var( --m3e-nav-menu-item-open-container-focus-color, ${f.color.onSurface} ); --m3e-state-layer-hover-color: var( --m3e-nav-menu-item-open-container-hover-color, ${f.color.onSurface} ); --m3e-ripple-color: var(--m3e-nav-menu-item-open-ripple-color, ${f.color.onSurface}); } ::slotted(a[slot="label"]) { all: unset; } @media (prefers-reduced-motion) { .base, .toggle, .state-layer { transition: none !important; } } @media (forced-colors: active) { .base, .state-layer { transition: none !important; } :host(:disabled) .base { color: GrayText; } :host(:not(:disabled)) .base { color: LinkText; } :host([selected]:not(:state(-with-items)):not(:disabled)) .base, :host([selected]:state(-with-items):not(:disabled)) .base { forced-color-adjust: none; background-color: unset; color: Highlight; } :host([selected]:not(:state(-with-items)):not(:disabled)) .base::after { content: ""; position: absolute; inset-inline-start: calc(calc(var(--m3e-nav-menu-item-padding, 1.5rem) / 2) - calc(0.375rem / 2)); inset-block-start: 50%; width: 0.375rem; height: 0.375rem; border-radius: 50%; transform: translateY(-50%); background-color: currentColor; } }`,i([E(".state-layer")],V.prototype,"stateLayer",void 0),i([E(".focus-ring")],V.prototype,"focusRing",void 0),i([E(".ripple")],V.prototype,"ripple",void 0),i([E(".base")],V.prototype,"_base",void 0),i([A()],V.prototype,"_hasChildItems",void 0),i([S({type:Boolean,reflect:!0})],V.prototype,"open",void 0),V=F=i([g("m3e-nav-menu-item")],V);let ae=se=class extends(h(s,"tree")){constructor(){super(),B.add(this),U.set(this,!1),G.set(this,!1),this[ie]=(new C).withVerticalOrientation().withHomeAndEnd().withTypeahead().withSkipPredicate(e=>e.disabled||!e.visible).disableRovingTabIndex().onActiveItemChange(()=>{this[I].activeItem&&e(this,B,"m",X).call(this,this[I].activeItem)}).onSelectedItemsChange(()=>{const t=this.selected;for(const i of this.items)i!==t&&e(this,B,"m",te).call(this,i,!1,!1);t?.label&&b(t.label,this,{block:"start",behavior:"smooth"})}),K.set(this,t=>e(this,B,"m",Z).call(this,t)),N.set(this,t=>e(this,B,"m",J).call(this,t)),O.set(this,t=>e(this,B,"m",Q).call(this,t)),new y(this,{callback:e=>t(this,G,e,"f")}),new k(this,{callback:()=>{e(this,G,"f")||e(this,B,"m",ee).call(this)}})}get selected(){return this[I].selectedItems[0]??null}get items(){return this[I].items}expand(e,t=!1){const i=Array.isArray(e)?e:this[I].items,s="boolean"==typeof e?e:t;i.forEach(e=>e.expand(s))}collapse(e,t=!1){const i=Array.isArray(e)?e:this[I].items,s="boolean"==typeof e?e:t;i.forEach(e=>e.collapse(s));const a=this[I].activeItem;if(a&&!a.visible)for(let e=a.parentItem;e;e=e.parentItem)if(e.visible){this[I].setActiveItem(e);break}}connectedCallback(){super.connectedCallback(),this.setAttribute("tabindex","0"),this.addEventListener("keydown",e(this,K,"f")),this.addEventListener("keyup",e(this,N,"f")),this.addEventListener("pointerdown",e(this,O,"f"))}disconnectedCallback(){super.disconnectedCallback(),this.removeEventListener("keydown",e(this,K,"f")),this.removeEventListener("keyup",e(this,N,"f")),this.removeEventListener("pointerdown",e(this,O,"f"))}render(){return a`<div class="base"><slot @slotchange="${e(this,B,"m",Y)}"></slot></div>`}};var ne,oe,le,re,ce;U=new WeakMap,G=new WeakMap,K=new WeakMap,N=new WeakMap,O=new WeakMap,B=new WeakSet,ie=I,Y=function(){for(const e of this.querySelectorAll("m3e-divider"))e.ariaHidden="true";const{added:t}=this[I].setItems([...this.querySelectorAll("m3e-nav-menu-item")]);for(const e of t)e.id=e.id||"m3e-nav-menu-item-"+se.__nextId++;this[I].activeItem?(this.setAttribute("aria-activedescendant",this[I].activeItem.id),e(this,B,"m",ee).call(this)):this.removeAttribute("aria-activedescendant")},Z=function(i){t(this,U,!1,"f"),e(this,B,"m",ee).call(this);const s=this[I].activeItem;if(!i.defaultPrevented&&s&&!s.disabled)switch(i.key){case"Enter":case" ":i.preventDefault()," "===i.key&&s.ripple&&!s.ripple.visible&&(s.ripple.centered=!0,s.ripple.show(0,0,!0),s.ripple.centered=!1),s.hasChildItems?requestAnimationFrame(()=>s.toggle()):s.selected||(this[I].select(s),s.link?.click());break;case"*":i.preventDefault(),s.expand(!0);break;case"Left":case"ArrowLeft":if(i.preventDefault(),"ltr"===x.current)if(s.hasChildItems&&s.open)requestAnimationFrame(()=>s.collapse());else{const e=s.parentItem;e&&this[I].setActiveItem(e)}else s.hasChildItems&&!s.open&&s.expand();break;case"Right":case"ArrowRight":if(i.preventDefault(),"rtl"===x.current)if(s.hasChildItems&&s.open)requestAnimationFrame(()=>s.collapse());else{const e=s.parentItem;e&&this[I].setActiveItem(e)}else s.hasChildItems&&!s.open&&s.expand();break;default:this[I].onKeyDown(i)}},J=function(e){const t=this[I].activeItem;e.defaultPrevented||!t||t.disabled||" "!==e.key||t.ripple?.hide()},Q=function(i){if(!i.defaultPrevented&&!e(this,U,"f")&&!w()){t(this,U,!0,"f");const s=i.composedPath().reverse().find(e=>e instanceof V);s&&!s.disabled&&e(this,B,"m",te).call(this,s,!0,!1)}},X=function(t){this.setAttribute("aria-activedescendant",t.id),t.label&&b(t.label,this,{block:"nearest",behavior:"smooth"}),e(this,B,"m",ee).call(this)},ee=function(){const t=this.matches(":focus-within"),i=t||this.matches(":focus"),s=i&&!e(this,U,"f")&&(w()||this.matches(":focus-visible")||t&&null!==this.querySelector("a:focus-visible"));this[I].items.forEach(t=>{const a=t===this[I].activeItem;e(this,B,"m",te).call(this,t,a&&i,a&&s)})},te=function(e,t,i){t&&i?e.stateLayer?.show("focused"):e.stateLayer?.hide("focused"),i?e.focusRing?.show():e.focusRing?.hide()},v(n`m3e-nav-menu > m3e-divider { margin-block: var(--m3e-nav-menu-divider-margin, 0.25rem); flex: none; }`),ae.styles=n`:host { display: block; outline: none; overflow-y: auto; overflow-x: hidden; min-height: 0; scrollbar-width: ${f.scrollbar.width}; scrollbar-color: ${f.scrollbar.color}; } .base { width: 100%; display: flex; flex-direction: column; position: relative; min-height: inherit; box-sizing: border-box; padding-block-start: var(--m3e-nav-menu-padding-top, 0.5rem); padding-block-end: var(--m3e-nav-menu-padding-bottom, 0.5rem); padding-inline-start: var(--m3e-nav-menu-padding-left, 0.75rem); padding-inline-end: var(--m3e-nav-menu-padding-right, 0.75rem); }`,ae.__nextId=0,ae=se=i([g("m3e-nav-menu")],ae);let de=ce=class extends(d(h(s,"group"))){constructor(){super(...arguments),ne.add(this),oe.set(this,"m3e-nav-menu-item-group-label-"+ce.__nextId++),le.set(this,void 0)}connectedCallback(){super.connectedCallback(),m(this,"-divided","M3E-DIVIDER"===this.previousElementSibling?.tagName)}disconnectedCallback(){super.disconnectedCallback(),$(this,"-divided")}render(){return a`<div class="label"><slot name="label" @slotchange="${e(this,ne,"m",re)}"></slot></div><slot></slot>`}};oe=new WeakMap,le=new WeakMap,ne=new WeakSet,re=function(i){const s=i.target.assignedElements({flatten:!0})[0];s!==e(this,le,"f")&&(e(this,le,"f")?.id===e(this,oe,"f")&&(e(this,le,"f").id=""),t(this,le,s,"f"),e(this,le,"f")?(e(this,le,"f").id=e(this,le,"f").id||e(this,oe,"f"),this.setAttribute("aria-labelledby",e(this,le,"f").id)):this.removeAttribute("aria-labelledby")),m(this,"-with-label",void 0!==e(this,le,"f"))},de.styles=n`:host { display: contents; } :host(:not(:state(-with-label))) .label { display: none; } .label { margin-inline-start: var(--m3e-nav-menu-item-group-label-inset, 1rem); margin-block-end: var(--m3e-nav-menu-item-group-label-space, 1rem); flex: none; } :host(:state(-divided)) .label { margin-block-start: calc( var(--m3e-nav-menu-item-group-label-space, 1rem) - var(--m3e-nav-menu-divider-margin, 0.25rem) ); } :host(:not(:state(-divided))) .label { margin-block-start: var(--m3e-nav-menu-item-group-label-space, 1rem); }`,de.__nextId=0,de=ce=i([g("m3e-nav-menu-item-group")],de);export{ae as M3eNavMenuElement,V as M3eNavMenuItemElement,de as M3eNavMenuItemGroupElement};
6
+ import{__classPrivateFieldGet as e,__classPrivateFieldSet as t,__decorate as i}from"tslib";import{LitElement as s,html as a,css as n,unsafeCSS as o}from"lit";import{Selected as l,Disabled as r,AttachInternals as c,Role as h,setCustomState as d,hasAssignedNodes as m,hasCustomState as u,registerStyleSheet as p,DesignToken as v,customElement as f,scrollIntoViewIfNeeded as b,PressedController as g,FocusController as y,forcedColorsActive as w,deleteCustomState as k}from"@m3e/web/core";import{selectionManager as $,SelectionManager as I}from"@m3e/web/core/a11y";import{M3eDirectionality as C}from"@m3e/web/core/bidi";import{query as x,state as E,property as A}from"lit/decorators.js";import{ifDefined as S}from"lit/directives/if-defined.js";var _,W,L,M,z,R,q,D,H,P,T,j;let F=j=class extends(l(r(c(h(s,"treeitem"),!0)))){constructor(){super(...arguments),_.add(this),this._hasChildItems=!1,W.set(this,[]),L.set(this,null),M.set(this,new Array),z.set(this,null),this.open=!1}get link(){return e(this,z,"f")}get label(){return this._base??null}get visible(){return!e(this,M,"f").some(e=>!e.open)}get path(){return[...e(this,M,"f"),this]}get hasChildItems(){return this._hasChildItems}get parentItem(){return e(this,M,"f")[e(this,M,"f").length-1]??null}get childItems(){return e(this,W,"f")}get level(){return e(this,M,"f").length+1}expand(e=!1){this.hasChildItems&&(this.open=!0,e&&this.childItems.forEach(e=>e.expand(!0)))}collapse(e=!1){this.hasChildItems&&(this.open=!1,e&&this.childItems.forEach(e=>e.collapse(!0)))}toggle(){this.hasChildItems&&(this.open=!this.open)}connectedCallback(){super.connectedCallback(),e(this,M,"f").length=0;for(let t=this.parentElement?.closest("m3e-nav-menu-item");t;t=t.parentElement?.closest("m3e-nav-menu-item"))e(this,M,"f").push(t);e(this,M,"f").reverse(),this.style.setProperty("--_nav-menu-item-level",`${this.level}`),t(this,L,this.closest("m3e-nav-menu"),"f")}disconnectedCallback(){super.disconnectedCallback(),e(this,M,"f").length=0}update(t){if(super.update(t),t.has("selected")){this.ariaSelected=null,this.ariaCurrent=this.hasChildItems?null:`${this.selected}`;for(const e of this.querySelectorAll(":scope > m3e-icon[slot]"))e.toggleAttribute("filled",this.selected);e(this,M,"f").forEach(e=>e.selected=this.selected),this.selected&&!this.hasChildItems&&this.closest("m3e-nav-menu")?.[$].notifySelectionChange(this)}(t.has("open")||t.has("_hasChildItems"))&&(this.ariaExpanded=this._hasChildItems?`${this.open}`:null),(t.has("_hasChildItems")&&this.disabled||t.has("disabled"))&&e(this,W,"f").forEach(e=>e.disabled=this.disabled)}firstUpdated(e){super.firstUpdated(e);const t=this._base;t&&[this.focusRing,this.stateLayer,this.ripple].forEach(e=>e?.attach(t))}render(){return a`<div class="base" @click="${e(this,_,"m",P)}"><m3e-state-layer class="state-layer" ?disabled="${this.disabled}"></m3e-state-layer><m3e-focus-ring class="focus-ring" inward ?disabled="${this.disabled}"></m3e-focus-ring><m3e-ripple class="ripple" ?disabled="${this.disabled}"></m3e-ripple><div class="icon" aria-hidden="true">${e(this,_,"m",R).call(this)}</div><div class="label"><slot name="label" @slotchange="${e(this,_,"m",D)}"></slot></div><slot name="badge"></slot><div aria-hidden="true" class="toggle"><slot name="toggle-icon"><svg class="toggle-icon" viewBox="0 -960 960 960" fill="currentColor"><path d="M480-360 280-560h400L480-360Z"/></svg></slot></div></div><m3e-collapsible class="group" role="group" aria-hidden="${S(this._hasChildItems?void 0:"true")}" ?open="${this._hasChildItems&&this.open}" @opening="${e(this,_,"m",T)}" @opened="${e(this,_,"m",T)}" @closing="${e(this,_,"m",T)}" @closed="${e(this,_,"m",T)}"><slot @slotchange="${e(this,_,"m",H)}"></slot></m3e-collapsible>`}};var V,B,U,G,K,N,O,Y,Z,J,Q,X,ee,te,ie;W=new WeakMap,L=new WeakMap,M=new WeakMap,z=new WeakMap,_=new WeakSet,R=function(){const t=a`<slot name="icon" @slotchange="${e(this,_,"m",q)}"></slot>`;return this.selected&&!this.hasChildItems?a`<slot name="selected-icon" @slotchange="${e(this,_,"m",q)}">${t}</slot>`:t},q=function(e){d(this,"--with-icon",m(e.target))},D=function(i){t(this,z,i.target.assignedElements({flatten:!0}).find(e=>e instanceof HTMLAnchorElement)??null,"f"),e(this,z,"f")?.setAttribute("tabindex","-1")},H=function(i){t(this,W,i.target.assignedElements({flatten:!0}).filter(e=>e instanceof j),"f");const s=this._hasChildItems;this._hasChildItems=e(this,W,"f").length>0,d(this,"--with-items",this._hasChildItems),(s||this._hasChildItems)&&(this.selected=e(this,W,"f").some(e=>e.selected))},P=function(){if(!this.disabled)if(e(this,L,"f")?.[$].setActiveItem(this),this._hasChildItems)this.toggle();else{e(this,L,"f")?.[$].select(this),e(this,M,"f").forEach(e=>e.selected=this.selected),e(this,z,"f")?.click();const t=this.closest("m3e-drawer-container");if(t){const e=this.closest("[slot='start']")??this.closest("[slot='end']");e&&(u(t,`--${e.slot}-push`)||u(t,`--${e.slot}-over`))&&setTimeout(()=>{t.removeAttribute(e.slot),t.dispatchEvent(new Event("change",{bubbles:!0}))},300)}}},T=function(e){e.stopPropagation(),this.dispatchEvent(new Event(e.type,{bubbles:!0}))},p(n`m3e-nav-menu-item > m3e-divider { margin-block: var(--m3e-nav-menu-divider-margin, 0.25rem); flex: none; } m3e-nav-menu-item > m3e-nav-menu-item:first-of-type { margin-block-start: var(--m3e-nav-menu-item-vertical-inset, 0.25rem); } m3e-nav-menu-item > m3e-nav-menu-item:last-of-type { margin-block-end: var(--m3e-nav-menu-item-vertical-inset, 0.25rem); }`),F.styles=n`:host { display: block; flex: none; outline: none; user-select: none; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); } .base { display: flex; align-items: center; position: relative; padding-inline: var(--m3e-nav-menu-item-padding, 1.5rem); height: calc(var(--m3e-nav-menu-item-height, 3.5rem) + ${v.density.calc(-3)}); column-gap: var(--m3e-nav-menu-item-spacing, 0.75rem); font-size: var(--m3e-nav-menu-item-font-size, ${v.typescale.standard.label.large.fontSize}); font-weight: var(--m3e-nav-menu-item-font-weight, ${v.typescale.standard.label.large.fontWeight}); line-height: var(--m3e-nav-menu-item-line-height, ${v.typescale.standard.label.large.lineHeight}); letter-spacing: var(--m3e-nav-menu-item-tracking, ${v.typescale.standard.label.large.tracking}); transition: ${o(`color ${v.motion.duration.short4} ${v.motion.easing.standard},\n background-color ${v.motion.duration.short4} ${v.motion.easing.standard}`)}; } .base, .focus-ring { border-radius: var(--m3e-nav-menu-item-shape, ${v.shape.corner.full}); } .label { flex: 1 1 auto; display: flex; align-items: center; position: relative; overflow: hidden; vertical-align: middle; } .icon, .toggle { flex: none; display: flex; align-items: center; justify-content: center; position: relative; vertical-align: middle; } ::slotted([slot="badge"]) { flex: none; position: relative; font-size: var(--m3e-nav-menu-item-badge-font-size, ${v.typescale.standard.label.large.fontSize}); font-weight: var(--m3e-nav-menu-item-badge-font-weight, ${v.typescale.standard.label.large.fontWeight}); line-height: var(--m3e-nav-menu-item-badge-line-height, ${v.typescale.standard.label.large.lineHeight}); letter-spacing: var(--m3e-nav-menu-item-badge-tracking, ${v.typescale.standard.label.large.tracking}); } .toggle { transition: ${o(`transform var(--m3e-collapsible-animation-duration, ${v.motion.duration.medium1})\n ${v.motion.easing.standard}`)}; } :host(:not(:is(:state(--with-icon), :--with-icon))) .icon { display: none; } .icon { margin-inline-start: -0.5rem; } .toggle { margin-inline-end: -0.5rem; } .group { padding-inline-start: var(--m3e-nav-menu-item-inset, 1rem); } :host([open]) .toggle { transform: rotate(180deg); } :host(:not(:is(:state(--with-items), :--with-items))) .toggle, :host(:not(:is(:state(--with-items), :--with-items))) .group { display: none; } ::slotted([slot="selected-icon"]), ::slotted([slot="icon"]), ::slotted([slot="toggle-icon"]), .toggle-icon { vertical-align: middle; width: 1em; height: 1em; font-size: var(--m3e-nav-menu-item-icon-size, 1.5rem); } :host(:not(:disabled)) .base { cursor: pointer; } :host(:not(:disabled)) .base { color: var(--m3e-nav-menu-item-label-color, ${v.color.onSurfaceVariant}); } :host(:disabled) .base { color: color-mix( in srgb, var(--m3e-nav-menu-item-disabled-color, ${v.color.onSurface}) var(--m3e-nav-menu-item-disabled-color-opacity, 38%), transparent ); } :host([selected]:not(:is(:state(--with-items), :--with-items)):not(:disabled)) .base { color: var(--m3e-nav-menu-item-selected-label-color, ${v.color.onSecondaryContainer}); background-color: var(--m3e-nav-menu-item-selected-container-color, ${v.color.secondaryContainer}); --m3e-state-layer-focus-color: var( --m3e-nav-menu-item-selected-container-focus-color, ${v.color.onSecondaryContainer} ); --m3e-state-layer-hover-color: var( --m3e-nav-menu-item-selected-container-hover-color, ${v.color.onSecondaryContainer} ); --m3e-ripple-color: var(--m3e-nav-menu-item-selected-ripple-color, ${v.color.onSecondaryContainer}); } :host(:not([selected]):not(:is(:state(--with-items), :--with-items)):not(:disabled)) .base { --m3e-state-layer-focus-color: var( --m3e-nav-menu-item-unselected-container-focus-color, ${v.color.onSurface} ); --m3e-state-layer-hover-color: var( --m3e-nav-menu-item-unselected-container-hover-color, ${v.color.onSurface} ); --m3e-ripple-color: var(--m3e-nav-menu-item-unselected-ripple-color, ${v.color.onSurface}); } .state-layer { margin-inline: auto; } :host([selected]:is(:state(--with-items), :--with-items):not(:disabled)) .base { background-color: var(--m3e-nav-menu-item-open-container-color, ${v.color.surfaceContainerHighest}); --m3e-state-layer-focus-color: var( --m3e-nav-menu-item-open-container-focus-color, ${v.color.onSurface} ); --m3e-state-layer-hover-color: var( --m3e-nav-menu-item-open-container-hover-color, ${v.color.onSurface} ); --m3e-ripple-color: var(--m3e-nav-menu-item-open-ripple-color, ${v.color.onSurface}); } ::slotted(a[slot="label"]) { all: unset; } @media (prefers-reduced-motion) { .base, .toggle, .state-layer { transition: none !important; } } @media (forced-colors: active) { .base, .state-layer { transition: none !important; } :host(:disabled) .base { color: GrayText; } :host(:not(:disabled)) .base { color: LinkText; } :host([selected]:not(:is(:state(--with-items), :--with-items)):not(:disabled)) .base, :host([selected]:is(:state(--with-items), :--with-items):not(:disabled)) .base { forced-color-adjust: none; background-color: unset; color: Highlight; } :host([selected]:not(:is(:state(--with-items), :--with-items)):not(:disabled)) .base::after { content: ""; position: absolute; inset-inline-start: calc(calc(var(--m3e-nav-menu-item-padding, 1.5rem) / 2) - calc(0.375rem / 2)); inset-block-start: 50%; width: 0.375rem; height: 0.375rem; border-radius: 50%; transform: translateY(-50%); background-color: currentColor; } }`,i([x(".state-layer")],F.prototype,"stateLayer",void 0),i([x(".focus-ring")],F.prototype,"focusRing",void 0),i([x(".ripple")],F.prototype,"ripple",void 0),i([x(".base")],F.prototype,"_base",void 0),i([E()],F.prototype,"_hasChildItems",void 0),i([A({type:Boolean,reflect:!0})],F.prototype,"open",void 0),F=j=i([f("m3e-nav-menu-item")],F);let se=ie=class extends(h(s,"tree")){constructor(){super(),V.add(this),B.set(this,!1),U.set(this,!1),this[te]=(new I).withVerticalOrientation().withHomeAndEnd().withTypeahead().withSkipPredicate(e=>e.disabled||!e.visible).disableRovingTabIndex().onActiveItemChange(()=>{this[$].activeItem&&e(this,V,"m",Q).call(this,this[$].activeItem)}).onSelectedItemsChange(()=>{const t=this.selected;for(const i of this.items)i!==t&&e(this,V,"m",ee).call(this,i,!1,!1);t?.label&&b(t.label,this,{block:"start",behavior:"smooth"})}),G.set(this,t=>e(this,V,"m",Y).call(this,t)),K.set(this,t=>e(this,V,"m",Z).call(this,t)),N.set(this,t=>e(this,V,"m",J).call(this,t)),new g(this,{callback:e=>t(this,U,e,"f")}),new y(this,{callback:()=>{e(this,U,"f")||e(this,V,"m",X).call(this)}})}get selected(){return this[$].selectedItems[0]??null}get items(){return this[$].items}expand(e,t=!1){const i=Array.isArray(e)?e:this[$].items,s="boolean"==typeof e?e:t;i.forEach(e=>e.expand(s))}collapse(e,t=!1){const i=Array.isArray(e)?e:this[$].items,s="boolean"==typeof e?e:t;i.forEach(e=>e.collapse(s));const a=this[$].activeItem;if(a&&!a.visible)for(let e=a.parentItem;e;e=e.parentItem)if(e.visible){this[$].setActiveItem(e);break}}connectedCallback(){super.connectedCallback(),this.setAttribute("tabindex","0"),this.addEventListener("keydown",e(this,G,"f")),this.addEventListener("keyup",e(this,K,"f")),this.addEventListener("pointerdown",e(this,N,"f"))}disconnectedCallback(){super.disconnectedCallback(),this.removeEventListener("keydown",e(this,G,"f")),this.removeEventListener("keyup",e(this,K,"f")),this.removeEventListener("pointerdown",e(this,N,"f"))}render(){return a`<div class="base"><slot @slotchange="${e(this,V,"m",O)}"></slot></div>`}};var ae,ne,oe,le,re;B=new WeakMap,U=new WeakMap,G=new WeakMap,K=new WeakMap,N=new WeakMap,V=new WeakSet,te=$,O=function(){for(const e of this.querySelectorAll("m3e-divider"))e.ariaHidden="true";const{added:t}=this[$].setItems([...this.querySelectorAll("m3e-nav-menu-item")]);for(const e of t)e.id=e.id||"m3e-nav-menu-item-"+ie.__nextId++;this[$].activeItem?(this.setAttribute("aria-activedescendant",this[$].activeItem.id),e(this,V,"m",X).call(this)):this.removeAttribute("aria-activedescendant")},Y=function(i){t(this,B,!1,"f"),e(this,V,"m",X).call(this);const s=this[$].activeItem;if(!i.defaultPrevented&&s&&!s.disabled)switch(i.key){case"Enter":case" ":i.preventDefault()," "===i.key&&s.ripple&&!s.ripple.visible&&(s.ripple.centered=!0,s.ripple.show(0,0,!0),s.ripple.centered=!1),s.hasChildItems?requestAnimationFrame(()=>s.toggle()):s.selected||(this[$].select(s),s.link?.click());break;case"*":i.preventDefault(),s.expand(!0);break;case"Left":case"ArrowLeft":if(i.preventDefault(),"ltr"===C.current)if(s.hasChildItems&&s.open)requestAnimationFrame(()=>s.collapse());else{const e=s.parentItem;e&&this[$].setActiveItem(e)}else s.hasChildItems&&!s.open&&s.expand();break;case"Right":case"ArrowRight":if(i.preventDefault(),"rtl"===C.current)if(s.hasChildItems&&s.open)requestAnimationFrame(()=>s.collapse());else{const e=s.parentItem;e&&this[$].setActiveItem(e)}else s.hasChildItems&&!s.open&&s.expand();break;default:this[$].onKeyDown(i)}},Z=function(e){const t=this[$].activeItem;e.defaultPrevented||!t||t.disabled||" "!==e.key||t.ripple?.hide()},J=function(i){if(!i.defaultPrevented&&!e(this,B,"f")&&!w()){t(this,B,!0,"f");const s=i.composedPath().reverse().find(e=>e instanceof F);s&&!s.disabled&&e(this,V,"m",ee).call(this,s,!0,!1)}},Q=function(t){this.setAttribute("aria-activedescendant",t.id),t.label&&b(t.label,this,{block:"nearest",behavior:"smooth"}),e(this,V,"m",X).call(this)},X=function(){const t=this.matches(":focus-within"),i=t||this.matches(":focus"),s=i&&!e(this,B,"f")&&(w()||this.matches(":focus-visible")||t&&null!==this.querySelector("a:focus-visible"));this[$].items.forEach(t=>{const a=t===this[$].activeItem;e(this,V,"m",ee).call(this,t,a&&i,a&&s)})},ee=function(e,t,i){t&&i?e.stateLayer?.show("focused"):e.stateLayer?.hide("focused"),i?e.focusRing?.show():e.focusRing?.hide()},p(n`m3e-nav-menu > m3e-divider { margin-block: var(--m3e-nav-menu-divider-margin, 0.25rem); flex: none; }`),se.styles=n`:host { display: block; outline: none; overflow-y: auto; overflow-x: hidden; min-height: 0; scrollbar-width: ${v.scrollbar.width}; scrollbar-color: ${v.scrollbar.color}; } .base { width: 100%; display: flex; flex-direction: column; position: relative; min-height: inherit; box-sizing: border-box; padding-block-start: var(--m3e-nav-menu-padding-top, 0.5rem); padding-block-end: var(--m3e-nav-menu-padding-bottom, 0.5rem); padding-inline-start: var(--m3e-nav-menu-padding-left, 0.75rem); padding-inline-end: var(--m3e-nav-menu-padding-right, 0.75rem); }`,se.__nextId=0,se=ie=i([f("m3e-nav-menu")],se);let ce=re=class extends(c(h(s,"group"))){constructor(){super(...arguments),ae.add(this),ne.set(this,"m3e-nav-menu-item-group-label-"+re.__nextId++),oe.set(this,void 0)}connectedCallback(){super.connectedCallback(),d(this,"--divided","M3E-DIVIDER"===this.previousElementSibling?.tagName)}disconnectedCallback(){super.disconnectedCallback(),k(this,"--divided")}render(){return a`<div class="label"><slot name="label" @slotchange="${e(this,ae,"m",le)}"></slot></div><slot></slot>`}};ne=new WeakMap,oe=new WeakMap,ae=new WeakSet,le=function(i){const s=i.target.assignedElements({flatten:!0})[0];s!==e(this,oe,"f")&&(e(this,oe,"f")?.id===e(this,ne,"f")&&(e(this,oe,"f").id=""),t(this,oe,s,"f"),e(this,oe,"f")?(e(this,oe,"f").id=e(this,oe,"f").id||e(this,ne,"f"),this.setAttribute("aria-labelledby",e(this,oe,"f").id)):this.removeAttribute("aria-labelledby")),d(this,"--with-label",void 0!==e(this,oe,"f"))},ce.styles=n`:host { display: contents; } :host(:not(:is(:state(--with-label), :--with-label))) .label { display: none; } .label { margin-inline-start: var(--m3e-nav-menu-item-group-label-inset, 1rem); margin-block-end: var(--m3e-nav-menu-item-group-label-space, 1rem); flex: none; } :host(:is(:state(--divided), :--divided)) .label { margin-block-start: calc( var(--m3e-nav-menu-item-group-label-space, 1rem) - var(--m3e-nav-menu-divider-margin, 0.25rem) ); } :host(:not(:is(:state(--divided), :--divided))) .label { margin-block-start: var(--m3e-nav-menu-item-group-label-space, 1rem); }`,ce.__nextId=0,ce=re=i([f("m3e-nav-menu-item-group")],ce);export{se as M3eNavMenuElement,F as M3eNavMenuItemElement,ce as M3eNavMenuItemGroupElement};
7
7
  //# sourceMappingURL=nav-menu.min.js.map