@m3e/web 2.1.2 → 2.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (193) hide show
  1. package/README.md +3 -0
  2. package/dist/all.js +2783 -354
  3. package/dist/all.js.map +1 -1
  4. package/dist/all.min.js +77 -41
  5. package/dist/all.min.js.map +1 -1
  6. package/dist/app-bar.js +14 -7
  7. package/dist/app-bar.js.map +1 -1
  8. package/dist/app-bar.min.js +1 -1
  9. package/dist/app-bar.min.js.map +1 -1
  10. package/dist/autocomplete.js +24 -26
  11. package/dist/autocomplete.js.map +1 -1
  12. package/dist/autocomplete.min.js +1 -1
  13. package/dist/autocomplete.min.js.map +1 -1
  14. package/dist/bottom-sheet.js +8 -27
  15. package/dist/bottom-sheet.js.map +1 -1
  16. package/dist/bottom-sheet.min.js +1 -1
  17. package/dist/bottom-sheet.min.js.map +1 -1
  18. package/dist/calendar.js +1082 -0
  19. package/dist/calendar.js.map +1 -0
  20. package/dist/calendar.min.js +43 -0
  21. package/dist/calendar.min.js.map +1 -0
  22. package/dist/card.js +4 -2
  23. package/dist/card.js.map +1 -1
  24. package/dist/card.min.js +1 -1
  25. package/dist/card.min.js.map +1 -1
  26. package/dist/chips.js +2 -6
  27. package/dist/chips.js.map +1 -1
  28. package/dist/chips.min.js +1 -1
  29. package/dist/chips.min.js.map +1 -1
  30. package/dist/core-a11y.js +23 -9
  31. package/dist/core-a11y.js.map +1 -1
  32. package/dist/core-a11y.min.js +4 -4
  33. package/dist/core-a11y.min.js.map +1 -1
  34. package/dist/core-anchoring.js +135 -15
  35. package/dist/core-anchoring.js.map +1 -1
  36. package/dist/core-anchoring.min.js +1 -1
  37. package/dist/core-anchoring.min.js.map +1 -1
  38. package/dist/core.js +101 -1
  39. package/dist/core.js.map +1 -1
  40. package/dist/core.min.js +1 -1
  41. package/dist/core.min.js.map +1 -1
  42. package/dist/css-custom-data.json +962 -462
  43. package/dist/custom-elements.json +16838 -12546
  44. package/dist/datepicker.js +552 -0
  45. package/dist/datepicker.js.map +1 -0
  46. package/dist/datepicker.min.js +7 -0
  47. package/dist/datepicker.min.js.map +1 -0
  48. package/dist/fab-menu.js +1 -1
  49. package/dist/fab-menu.js.map +1 -1
  50. package/dist/fab-menu.min.js +1 -1
  51. package/dist/fab-menu.min.js.map +1 -1
  52. package/dist/form-field.js +2 -6
  53. package/dist/form-field.js.map +1 -1
  54. package/dist/form-field.min.js +3 -3
  55. package/dist/form-field.min.js.map +1 -1
  56. package/dist/html-custom-data.json +546 -180
  57. package/dist/menu.js +3 -7
  58. package/dist/menu.js.map +1 -1
  59. package/dist/menu.min.js +1 -1
  60. package/dist/menu.min.js.map +1 -1
  61. package/dist/nav-menu.js +3 -11
  62. package/dist/nav-menu.js.map +1 -1
  63. package/dist/nav-menu.min.js +1 -1
  64. package/dist/nav-menu.min.js.map +1 -1
  65. package/dist/nav-rail.js +2 -6
  66. package/dist/nav-rail.js.map +1 -1
  67. package/dist/nav-rail.min.js +1 -1
  68. package/dist/nav-rail.min.js.map +1 -1
  69. package/dist/option.js +5 -6
  70. package/dist/option.js.map +1 -1
  71. package/dist/option.min.js +1 -1
  72. package/dist/option.min.js.map +1 -1
  73. package/dist/paginator.js +2 -2
  74. package/dist/paginator.js.map +1 -1
  75. package/dist/paginator.min.js +1 -1
  76. package/dist/paginator.min.js.map +1 -1
  77. package/dist/search.js +805 -0
  78. package/dist/search.js.map +1 -0
  79. package/dist/search.min.js +7 -0
  80. package/dist/search.min.js.map +1 -0
  81. package/dist/select.js +5 -16
  82. package/dist/select.js.map +1 -1
  83. package/dist/select.min.js +1 -1
  84. package/dist/select.min.js.map +1 -1
  85. package/dist/snackbar.js +2 -6
  86. package/dist/snackbar.js.map +1 -1
  87. package/dist/snackbar.min.js +1 -1
  88. package/dist/snackbar.min.js.map +1 -1
  89. package/dist/src/all.d.ts +3 -0
  90. package/dist/src/all.d.ts.map +1 -1
  91. package/dist/src/app-bar/AppBarElement.d.ts +6 -4
  92. package/dist/src/app-bar/AppBarElement.d.ts.map +1 -1
  93. package/dist/src/autocomplete/AutocompleteElement.d.ts +2 -2
  94. package/dist/src/autocomplete/AutocompleteElement.d.ts.map +1 -1
  95. package/dist/src/autocomplete/AutocompleteQueryEventDetail.d.ts +12 -0
  96. package/dist/src/autocomplete/AutocompleteQueryEventDetail.d.ts.map +1 -0
  97. package/dist/src/autocomplete/QueryEventDetail.d.ts +3 -8
  98. package/dist/src/autocomplete/QueryEventDetail.d.ts.map +1 -1
  99. package/dist/src/autocomplete/index.d.ts +1 -0
  100. package/dist/src/autocomplete/index.d.ts.map +1 -1
  101. package/dist/src/bottom-sheet/BottomSheetElement.d.ts.map +1 -1
  102. package/dist/src/calendar/CalendarElement.d.ts +213 -0
  103. package/dist/src/calendar/CalendarElement.d.ts.map +1 -0
  104. package/dist/src/calendar/CalendarView.d.ts +3 -0
  105. package/dist/src/calendar/CalendarView.d.ts.map +1 -0
  106. package/dist/src/calendar/CalendarViewElementBase.d.ts +28 -0
  107. package/dist/src/calendar/CalendarViewElementBase.d.ts.map +1 -0
  108. package/dist/src/calendar/MonthViewElement.d.ts +36 -0
  109. package/dist/src/calendar/MonthViewElement.d.ts.map +1 -0
  110. package/dist/src/calendar/MultiYearViewElement.d.ts +27 -0
  111. package/dist/src/calendar/MultiYearViewElement.d.ts.map +1 -0
  112. package/dist/src/calendar/YearViewElement.d.ts +27 -0
  113. package/dist/src/calendar/YearViewElement.d.ts.map +1 -0
  114. package/dist/src/calendar/index.d.ts +7 -0
  115. package/dist/src/calendar/index.d.ts.map +1 -0
  116. package/dist/src/calendar/utils.d.ts +24 -0
  117. package/dist/src/calendar/utils.d.ts.map +1 -0
  118. package/dist/src/card/CardElement.d.ts.map +1 -1
  119. package/dist/src/chips/InputChipSetElement.d.ts.map +1 -1
  120. package/dist/src/core/a11y/FocusTrapElement.d.ts.map +1 -1
  121. package/dist/src/core/a11y/InteractivityChecker.d.ts.map +1 -1
  122. package/dist/src/core/anchoring/AnchorOptions.d.ts +1 -1
  123. package/dist/src/core/anchoring/AnchorOptions.d.ts.map +1 -1
  124. package/dist/src/core/anchoring/FloatingPanelElement.d.ts +18 -3
  125. package/dist/src/core/anchoring/FloatingPanelElement.d.ts.map +1 -1
  126. package/dist/src/core/anchoring/positionAnchor.d.ts.map +1 -1
  127. package/dist/src/core/shared/controllers/InertController.d.ts +19 -0
  128. package/dist/src/core/shared/controllers/InertController.d.ts.map +1 -0
  129. package/dist/src/core/shared/controllers/index.d.ts +1 -0
  130. package/dist/src/core/shared/controllers/index.d.ts.map +1 -1
  131. package/dist/src/core/shared/converters/dateConverter.d.ts +4 -0
  132. package/dist/src/core/shared/converters/dateConverter.d.ts.map +1 -0
  133. package/dist/src/core/shared/converters/index.d.ts +1 -0
  134. package/dist/src/core/shared/converters/index.d.ts.map +1 -1
  135. package/dist/src/core/shared/utils/index.d.ts +1 -0
  136. package/dist/src/core/shared/utils/index.d.ts.map +1 -1
  137. package/dist/src/core/shared/utils/registerStyleSheet.d.ts +7 -0
  138. package/dist/src/core/shared/utils/registerStyleSheet.d.ts.map +1 -0
  139. package/dist/src/datepicker/DatepickerElement.d.ts +237 -0
  140. package/dist/src/datepicker/DatepickerElement.d.ts.map +1 -0
  141. package/dist/src/datepicker/DatepickerToggleElement.d.ts +21 -0
  142. package/dist/src/datepicker/DatepickerToggleElement.d.ts.map +1 -0
  143. package/dist/src/datepicker/DatepickerVariant.d.ts +3 -0
  144. package/dist/src/datepicker/DatepickerVariant.d.ts.map +1 -0
  145. package/dist/src/datepicker/index.d.ts +4 -0
  146. package/dist/src/datepicker/index.d.ts.map +1 -0
  147. package/dist/src/form-field/FormFieldElement.d.ts.map +1 -1
  148. package/dist/src/menu/MenuElement.d.ts.map +1 -1
  149. package/dist/src/nav-menu/NavMenuElement.d.ts.map +1 -1
  150. package/dist/src/nav-menu/NavMenuItemElement.d.ts.map +1 -1
  151. package/dist/src/nav-rail/NavRailElement.d.ts.map +1 -1
  152. package/dist/src/option/OptionElement.d.ts.map +1 -1
  153. package/dist/src/option/OptionPanelElement.d.ts.map +1 -1
  154. package/dist/src/paginator/PageEventDetail.d.ts +6 -11
  155. package/dist/src/paginator/PageEventDetail.d.ts.map +1 -1
  156. package/dist/src/paginator/PaginatorElement.d.ts +3 -3
  157. package/dist/src/paginator/PaginatorElement.d.ts.map +1 -1
  158. package/dist/src/paginator/PaginatorPageEventDetail.d.ts +12 -0
  159. package/dist/src/paginator/PaginatorPageEventDetail.d.ts.map +1 -0
  160. package/dist/src/paginator/index.d.ts +1 -0
  161. package/dist/src/paginator/index.d.ts.map +1 -1
  162. package/dist/src/search/SearchBarElement.d.ts +92 -0
  163. package/dist/src/search/SearchBarElement.d.ts.map +1 -0
  164. package/dist/src/search/SearchViewElement.d.ts +146 -0
  165. package/dist/src/search/SearchViewElement.d.ts.map +1 -0
  166. package/dist/src/search/SearchViewMode.d.ts +3 -0
  167. package/dist/src/search/SearchViewMode.d.ts.map +1 -0
  168. package/dist/src/search/SearchViewQueryEventDetail.d.ts +12 -0
  169. package/dist/src/search/SearchViewQueryEventDetail.d.ts.map +1 -0
  170. package/dist/src/search/index.d.ts +5 -0
  171. package/dist/src/search/index.d.ts.map +1 -0
  172. package/dist/src/search/styles/SearchBarStyle.d.ts +12 -0
  173. package/dist/src/search/styles/SearchBarStyle.d.ts.map +1 -0
  174. package/dist/src/search/styles/SearchBarToken.d.ts +27 -0
  175. package/dist/src/search/styles/SearchBarToken.d.ts.map +1 -0
  176. package/dist/src/search/styles/SearchViewStyle.d.ts +12 -0
  177. package/dist/src/search/styles/SearchViewStyle.d.ts.map +1 -0
  178. package/dist/src/search/styles/SearchViewToken.d.ts +26 -0
  179. package/dist/src/search/styles/SearchViewToken.d.ts.map +1 -0
  180. package/dist/src/search/styles/index.d.ts +3 -0
  181. package/dist/src/search/styles/index.d.ts.map +1 -0
  182. package/dist/src/select/SelectElement.d.ts.map +1 -1
  183. package/dist/src/snackbar/SnackbarElement.d.ts.map +1 -1
  184. package/dist/src/stepper/StepperElement.d.ts.map +1 -1
  185. package/dist/stepper.js +2 -6
  186. package/dist/stepper.js.map +1 -1
  187. package/dist/stepper.min.js +1 -1
  188. package/dist/stepper.min.js.map +1 -1
  189. package/dist/tooltip.js +1 -1
  190. package/dist/tooltip.js.map +1 -1
  191. package/dist/tooltip.min.js +1 -1
  192. package/dist/tooltip.min.js.map +1 -1
  193. package/package.json +16 -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 Role,\r\n Selected,\r\n setCustomState,\r\n} from \"@m3e/web/core\";\r\n\r\nimport { selectionManager } from \"@m3e/web/core/a11y\";\r\n\r\nimport type { M3eNavMenuElement } from \"./NavMenuElement\";\r\n\r\n/**\r\n * An expandable item, selectable item within a navigation menu.\r\n *\r\n * @description\r\n * The `m3e-nav-menu-item` component represents an expandable, selectable item within a navigation menu.\r\n * It supports nested child items, selection, disabled and indeterminate states, and emits events for\r\n * open/close transitions. The component is highly customizable via slots and CSS custom properties, and\r\n * is designed for accessible, keyboard-navigable menu structures.\r\n *\r\n *\r\n * @example\r\n * The following example illustrates a navigation menu with a top-level group of menu items.\r\n * ```html\r\n * <m3e-nav-menu>\r\n * <m3e-nav-menu-item-group>\r\n * <m3e-heading slot=\"label\" variant=\"label\" size=\"large\">Mail</m3e-heading>\r\n * <m3e-nav-menu-item>\r\n * <m3e-icon slot=\"icon\" name=\"mail\"></m3e-icon>\r\n * <span slot=\"label\">Inbox</span>\r\n * <span slot=\"badge\">24</span>\r\n * </m3e-nav-menu-item>\r\n * <m3e-nav-menu-item>\r\n * <m3e-icon slot=\"icon\" name=\"send\"></m3e-icon>\r\n * <span slot=\"label\">Outbox</span>\r\n * </m3e-nav-menu-item>\r\n * <m3e-nav-menu-item>\r\n * <m3e-icon slot=\"icon\" name=\"favorite\"></m3e-icon>\r\n * <span slot=\"label\">Favorites</span>\r\n * </m3e-nav-menu-item>\r\n * <m3e-nav-menu-item>\r\n * <m3e-icon slot=\"icon\" name=\"delete\"></m3e-icon>\r\n * <span slot=\"label\">Trash</span>\r\n * </m3e-nav-menu-item>\r\n * </m3e-nav-menu-item-group>\r\n * </m3e-nav-menu>\r\n * ```\r\n *\r\n * @example\r\n * The next example illustrates a multilevel navigation menu.\r\n * ```html\r\n * <m3e-nav-menu>\r\n * <m3e-nav-menu-item open>\r\n * <m3e-icon slot=\"icon\" name=\"rocket_launch\"></m3e-icon>\r\n * <span slot=\"label\">Getting Started</span>\r\n * <m3e-nav-menu-item>\r\n * <m3e-icon slot=\"icon\" name=\"widgets\"></m3e-icon>\r\n * <span slot=\"label\">Overview</span>\r\n * </m3e-nav-menu-item>\r\n * <m3e-nav-menu-item>\r\n * <m3e-icon slot=\"icon\" name=\"package_2\"></m3e-icon>\r\n * <span slot=\"label\">Installation</span>\r\n * </m3e-nav-menu-item>\r\n * </m3e-nav-menu-item>\r\n * <m3e-nav-menu-item>\r\n * <span slot=\"label\">Actions</span>\r\n * <m3e-nav-menu-item><span slot=\"label\">Button</span></m3e-nav-menu-item>\r\n * <m3e-nav-menu-item><span slot=\"label\">Icon</span></m3e-nav-menu-item>\r\n * <m3e-nav-menu-item><span slot=\"label\">Icon Button</span></m3e-nav-menu-item>\r\n * </m3e-nav-menu-item>\r\n * </m3e-nav-menu>\r\n * ```\r\n *\r\n * @tag m3e-nav-menu-item\r\n *\r\n * @slot - Renders the nested child items.\r\n * @slot label - Renders the label of the item.\r\n * @slot icon - Renders the icon of the item.\r\n * @slot badge - Renders the badge of the item.\r\n * @slot selected-icon - Renders the icon of the item when selected.\r\n * @slot toggle-icon - Renders the toggle icon.\r\n *\r\n * @attr disabled - Whether the element is disabled.\r\n * @attr indeterminate - Whether the element's selected / checked state is indeterminate.\r\n * @attr open - Whether the item is expanded.\r\n * @attr selected - Whether the item is selected.\r\n *\r\n * @fires opening - Emitted when the item begins to open.\r\n * @fires opened - Emitted when the item has opened.\r\n * @fires closing - Emitted when the item begins to close.\r\n * @fires closed - Emitted when the item has closed.\r\n * @fires click - Emitted when the element is clicked.\r\n *\r\n * @cssprop --m3e-nav-menu-item-font-size - Font size for the item label.\r\n * @cssprop --m3e-nav-menu-item-font-weight - Font weight for the item label.\r\n * @cssprop --m3e-nav-menu-item-line-height - Line height for the item label.\r\n * @cssprop --m3e-nav-menu-item-tracking - Letter spacing for the item label.\r\n * @cssprop --m3e-nav-menu-item-padding - Inline padding for the item.\r\n * @cssprop --m3e-nav-menu-item-height - Height of the item.\r\n * @cssprop --m3e-nav-menu-item-spacing - Spacing between icon and label.\r\n * @cssprop --m3e-nav-menu-item-shape - Border radius of the item and focus ring.\r\n * @cssprop --m3e-nav-menu-item-icon-size - Size of the icon.\r\n * @cssprop --m3e-nav-menu-item-inset - Indentation for nested items.\r\n * @cssprop --m3e-nav-menu-item-label-color - Text color for the item label.\r\n * @cssprop --m3e-nav-menu-item-selected-label-color - Text color for selected item label.\r\n * @cssprop --m3e-nav-menu-item-selected-container-color - Background color for selected item.\r\n * @cssprop --m3e-nav-menu-item-selected-container-focus-color - Focus color for selected item container.\r\n * @cssprop --m3e-nav-menu-item-selected-container-hover-color - Hover color for selected item container.\r\n * @cssprop --m3e-nav-menu-item-selected-ripple-color - Ripple color for selected item.\r\n * @cssprop --m3e-nav-menu-item-unselected-container-focus-color - Focus color for unselected item container.\r\n * @cssprop --m3e-nav-menu-item-unselected-container-hover-color - Hover color for unselected item container.\r\n * @cssprop --m3e-nav-menu-item-unselected-ripple-color - Ripple color for unselected item.\r\n * @cssprop --m3e-nav-menu-item-open-container-color - Background color for open item with children.\r\n * @cssprop --m3e-nav-menu-item-open-container-focus-color - Focus color for open item container.\r\n * @cssprop --m3e-nav-menu-item-open-container-hover-color - Hover color for open item container.\r\n * @cssprop --m3e-nav-menu-item-open-ripple-color - Ripple color for open item.\r\n * @cssprop --m3e-nav-menu-item-disabled-color - Text color for disabled item.\r\n * @cssprop --m3e-nav-menu-item-disabled-color-opacity - Opacity for disabled item text color.\r\n * @cssprop --m3e-nav-menu-item-badge-font-size - Font size for badge slot.\r\n * @cssprop --m3e-nav-menu-item-badge-font-weight - Font weight for badge slot.\r\n * @cssprop --m3e-nav-menu-item-badge-line-height - Line height for badge slot.\r\n * @cssprop --m3e-nav-menu-item-badge-tracking - Letter spacing for badge slot.\r\n * @cssprop --m3e-nav-menu-divider-margin - Margin for divider elements.\r\n * @cssprop --m3e-nav-menu-item-vertical-inset - Vertical margin for first/last child items.\r\n */\r\n@customElement(\"m3e-nav-menu-item\")\r\nexport class M3eNavMenuItemElement extends Selected(\r\n Disabled(\r\n EventAttribute(AttachInternals(Role(LitElement, \"treeitem\"), true), \"opening\", \"opened\", \"closing\", \"closed\"),\r\n ),\r\n) {\r\n static {\r\n if (typeof window !== \"undefined\") {\r\n const lightDomStyle = new CSSStyleSheet();\r\n lightDomStyle.replaceSync(\r\n 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 `.toString(),\r\n );\r\n\r\n document.adoptedStyleSheets = [...document.adoptedStyleSheets, lightDomStyle];\r\n }\r\n }\r\n\r\n /** The styles of the element. */\r\n static override styles: CSSResultGroup = css`\r\n :host {\r\n display: block;\r\n flex: none;\r\n outline: none;\r\n user-select: none;\r\n -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\r\n }\r\n .base {\r\n display: flex;\r\n align-items: center;\r\n position: relative;\r\n padding-inline: var(--m3e-nav-menu-item-padding, 1.5rem);\r\n height: calc(var(--m3e-nav-menu-item-height, 3.5rem) + ${DesignToken.density.calc(-3)});\r\n column-gap: var(--m3e-nav-menu-item-spacing, 0.75rem);\r\n font-size: var(--m3e-nav-menu-item-font-size, ${DesignToken.typescale.standard.label.large.fontSize});\r\n font-weight: var(--m3e-nav-menu-item-font-weight, ${DesignToken.typescale.standard.label.large.fontWeight});\r\n line-height: var(--m3e-nav-menu-item-line-height, ${DesignToken.typescale.standard.label.large.lineHeight});\r\n letter-spacing: var(--m3e-nav-menu-item-tracking, ${DesignToken.typescale.standard.label.large.tracking});\r\n transition: ${unsafeCSS(\r\n `color ${DesignToken.motion.duration.short4} ${DesignToken.motion.easing.standard},\r\n background-color ${DesignToken.motion.duration.short4} ${DesignToken.motion.easing.standard}`,\r\n )};\r\n }\r\n .base,\r\n .focus-ring {\r\n border-radius: var(--m3e-nav-menu-item-shape, ${DesignToken.shape.corner.full});\r\n }\r\n .label {\r\n flex: 1 1 auto;\r\n display: flex;\r\n align-items: center;\r\n position: relative;\r\n overflow: hidden;\r\n vertical-align: middle;\r\n }\r\n .icon,\r\n .toggle {\r\n flex: none;\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n position: relative;\r\n vertical-align: middle;\r\n }\r\n ::slotted([slot=\"badge\"]) {\r\n flex: none;\r\n position: relative;\r\n font-size: var(--m3e-nav-menu-item-badge-font-size, ${DesignToken.typescale.standard.label.large.fontSize});\r\n font-weight: var(--m3e-nav-menu-item-badge-font-weight, ${DesignToken.typescale.standard.label.large.fontWeight});\r\n line-height: var(--m3e-nav-menu-item-badge-line-height, ${DesignToken.typescale.standard.label.large.lineHeight});\r\n letter-spacing: var(--m3e-nav-menu-item-badge-tracking, ${DesignToken.typescale.standard.label.large.tracking});\r\n }\r\n .toggle {\r\n transition: ${unsafeCSS(`transform var(--m3e-collapsible-animation-duration, ${DesignToken.motion.duration.medium1})\r\n ${DesignToken.motion.easing.standard}`)};\r\n }\r\n :host(:not(:state(-with-icon))) .icon {\r\n display: none;\r\n }\r\n .icon {\r\n margin-inline-start: -0.5rem;\r\n }\r\n .toggle {\r\n margin-inline-end: -0.5rem;\r\n }\r\n .group {\r\n padding-inline-start: var(--m3e-nav-menu-item-inset, 1rem);\r\n }\r\n :host([open]) .toggle {\r\n transform: rotate(180deg);\r\n }\r\n :host(:not(:state(-with-items))) .toggle,\r\n :host(:not(:state(-with-items))) .group {\r\n display: none;\r\n }\r\n ::slotted([slot=\"selected-icon\"]),\r\n ::slotted([slot=\"icon\"]),\r\n ::slotted([slot=\"toggle-icon\"]),\r\n .toggle-icon {\r\n vertical-align: middle;\r\n width: 1em;\r\n height: 1em;\r\n font-size: var(--m3e-nav-menu-item-icon-size, 1.5rem);\r\n }\r\n :host(:not(:disabled)) .base {\r\n cursor: pointer;\r\n }\r\n :host(:not(:disabled)) .base {\r\n color: var(--m3e-nav-menu-item-label-color, ${DesignToken.color.onSurfaceVariant});\r\n }\r\n :host(:disabled) .base {\r\n color: color-mix(\r\n in srgb,\r\n var(--m3e-nav-menu-item-disabled-color, ${DesignToken.color.onSurface})\r\n var(--m3e-nav-menu-item-disabled-color-opacity, 38%),\r\n transparent\r\n );\r\n }\r\n :host([selected]:not(:state(-with-items)):not(:disabled)) .base {\r\n color: var(--m3e-nav-menu-item-selected-label-color, ${DesignToken.color.onSecondaryContainer});\r\n background-color: var(--m3e-nav-menu-item-selected-container-color, ${DesignToken.color.secondaryContainer});\r\n --m3e-state-layer-focus-color: var(\r\n --m3e-nav-menu-item-selected-container-focus-color,\r\n ${DesignToken.color.onSecondaryContainer}\r\n );\r\n --m3e-state-layer-hover-color: var(\r\n --m3e-nav-menu-item-selected-container-hover-color,\r\n ${DesignToken.color.onSecondaryContainer}\r\n );\r\n --m3e-ripple-color: var(--m3e-nav-menu-item-selected-ripple-color, ${DesignToken.color.onSecondaryContainer});\r\n }\r\n :host(:not([selected]):not(:state(-with-items)):not(:disabled)) .base {\r\n --m3e-state-layer-focus-color: var(\r\n --m3e-nav-menu-item-unselected-container-focus-color,\r\n ${DesignToken.color.onSurface}\r\n );\r\n --m3e-state-layer-hover-color: var(\r\n --m3e-nav-menu-item-unselected-container-hover-color,\r\n ${DesignToken.color.onSurface}\r\n );\r\n --m3e-ripple-color: var(--m3e-nav-menu-item-unselected-ripple-color, ${DesignToken.color.onSurface});\r\n }\r\n .state-layer {\r\n margin-inline: auto;\r\n }\r\n :host([selected]:state(-with-items):not(:disabled)) .base {\r\n background-color: var(--m3e-nav-menu-item-open-container-color, ${DesignToken.color.surfaceContainerHighest});\r\n --m3e-state-layer-focus-color: var(\r\n --m3e-nav-menu-item-open-container-focus-color,\r\n ${DesignToken.color.onSurface}\r\n );\r\n --m3e-state-layer-hover-color: var(\r\n --m3e-nav-menu-item-open-container-hover-color,\r\n ${DesignToken.color.onSurface}\r\n );\r\n --m3e-ripple-color: var(--m3e-nav-menu-item-open-ripple-color, ${DesignToken.color.onSurface});\r\n }\r\n ::slotted(a[slot=\"label\"]) {\r\n all: unset;\r\n }\r\n @media (prefers-reduced-motion) {\r\n .base,\r\n .toggle,\r\n .state-layer {\r\n transition: none !important;\r\n }\r\n }\r\n @media (forced-colors: active) {\r\n .base,\r\n .state-layer {\r\n transition: none !important;\r\n }\r\n\r\n :host(:disabled) .base {\r\n color: GrayText;\r\n }\r\n :host(:not([selected]):not(:disabled)) .base {\r\n color: ButtonText;\r\n }\r\n :host([selected]:not(:state(-with-items)):not(:disabled)) .base {\r\n forced-color-adjust: none;\r\n color: ButtonFace;\r\n background-color: ButtonText;\r\n }\r\n :host([selected]:state(-with-items):not(:disabled)) .base {\r\n background-color: unset;\r\n color: ButtonText;\r\n }\r\n }\r\n `;\r\n\r\n /** @internal */ @query(\".state-layer\") readonly stateLayer?: M3eStateLayerElement;\r\n /** @internal */ @query(\".focus-ring\") readonly focusRing?: M3eFocusRingElement;\r\n /** @internal */ @query(\".ripple\") readonly ripple?: M3eRippleElement;\r\n /** @private */ @query(\".base\") private readonly _base?: HTMLElement;\r\n\r\n /** @private */ @state() private _hasChildItems = false;\r\n\r\n /** @private */ #items: M3eNavMenuItemElement[] = [];\r\n /** @private */ #menu: M3eNavMenuElement | null = null;\r\n /** @private */ #path = new Array<M3eNavMenuItemElement>();\r\n /** @private */ #link: HTMLAnchorElement | null = null;\r\n\r\n /**\r\n * Whether the item is expanded.\r\n * @default false\r\n */\r\n @property({ type: Boolean, reflect: true }) open = false;\r\n\r\n /** A reference to the nested `HTMLAnchorElement`. */\r\n get link(): HTMLAnchorElement | null {\r\n return this.#link;\r\n }\r\n\r\n /** A reference to the element used to present the label of the item. */\r\n get label(): HTMLElement | null {\r\n return this._base ?? null;\r\n }\r\n\r\n /** Whether the item is visible. */\r\n get visible(): boolean {\r\n return !this.#path.some((x) => !x.open);\r\n }\r\n\r\n /** The full path of the item, starting with the top-most ancestor, including this item. */\r\n get path(): ReadonlyArray<M3eNavMenuItemElement> {\r\n return [...this.#path, this];\r\n }\r\n\r\n /** Whether the item has child items. */\r\n get hasChildItems(): boolean {\r\n return this._hasChildItems;\r\n }\r\n\r\n /** The parenting item. */\r\n get parentItem(): M3eNavMenuItemElement | null {\r\n return this.#path[this.#path.length - 1] ?? null;\r\n }\r\n\r\n /** The items that immediately descend from this item. */\r\n get childItems(): readonly M3eNavMenuItemElement[] {\r\n return this.#items;\r\n }\r\n\r\n /** The one-based level of the item. */\r\n get level(): number {\r\n return this.#path.length + 1;\r\n }\r\n\r\n /**\r\n * Expands this item, and optionally, all descendants.\r\n * @param {boolean} [descendants=false] Whether to expand all descendants.\r\n */\r\n expand(descendants: boolean = false): void {\r\n if (this.hasChildItems) {\r\n this.open = true;\r\n if (descendants) {\r\n this.childItems.forEach((x) => x.expand(true));\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Collapses this item, and optionally, all descendants.\r\n * @param {boolean} [descendants=false] Whether to expand all descendants.\r\n */\r\n collapse(descendants: boolean = false): void {\r\n if (this.hasChildItems) {\r\n this.open = false;\r\n if (descendants) {\r\n this.childItems.forEach((x) => x.collapse(true));\r\n }\r\n }\r\n }\r\n\r\n /** Toggles the expanded state of the item. */\r\n toggle(): void {\r\n if (this.hasChildItems) {\r\n this.open = !this.open;\r\n }\r\n }\r\n\r\n /** @inheritdoc */\r\n override connectedCallback(): void {\r\n super.connectedCallback();\r\n\r\n this.#path.length = 0;\r\n for (\r\n let item = this.parentElement?.closest(\"m3e-nav-menu-item\");\r\n item;\r\n item = item.parentElement?.closest(\"m3e-nav-menu-item\")\r\n ) {\r\n this.#path.push(item);\r\n }\r\n this.#path.reverse();\r\n\r\n this.style.setProperty(\"--_nav-menu-item-level\", `${this.level}`);\r\n this.#menu = this.closest(\"m3e-nav-menu\");\r\n }\r\n\r\n /** @inheritdoc */\r\n override disconnectedCallback(): void {\r\n super.disconnectedCallback();\r\n this.#path.length = 0;\r\n }\r\n\r\n /** @inheritdoc */\r\n protected override update(changedProperties: PropertyValues): void {\r\n super.update(changedProperties);\r\n\r\n if (changedProperties.has(\"selected\")) {\r\n // Remove aria-selected and just use aria-current.\r\n this.ariaSelected = null;\r\n this.ariaCurrent = this.hasChildItems ? null : `${this.selected}`;\r\n for (const icon of this.querySelectorAll(\":scope > m3e-icon[slot]\")) {\r\n icon.toggleAttribute(\"filled\", this.selected);\r\n }\r\n\r\n this.#path.forEach((x) => (x.selected = this.selected));\r\n if (this.selected && !this.hasChildItems) {\r\n this.closest(\"m3e-nav-menu\")?.[selectionManager].notifySelectionChange(this);\r\n }\r\n }\r\n\r\n if (changedProperties.has(\"open\") || changedProperties.has(\"_hasChildItems\")) {\r\n this.ariaExpanded = this._hasChildItems ? `${this.open}` : null;\r\n }\r\n\r\n if ((changedProperties.has(\"_hasChildItems\") && this.disabled) || changedProperties.has(\"disabled\")) {\r\n this.#items.forEach((x) => (x.disabled = this.disabled));\r\n }\r\n }\r\n\r\n /** @inheritdoc */\r\n protected override firstUpdated(_changedProperties: PropertyValues<this>): void {\r\n super.firstUpdated(_changedProperties);\r\n\r\n const base = this._base;\r\n if (base) {\r\n [this.focusRing, this.stateLayer, this.ripple].forEach((x) => x?.attach(base));\r\n }\r\n }\r\n\r\n /** @inheritdoc */\r\n protected override render(): unknown {\r\n return html`<div class=\"base\" @click=\"${this.#handleClick}\">\r\n <m3e-state-layer class=\"state-layer\" ?disabled=\"${this.disabled}\"></m3e-state-layer>\r\n <m3e-focus-ring class=\"focus-ring\" inward ?disabled=\"${this.disabled}\"></m3e-focus-ring>\r\n <m3e-ripple class=\"ripple\" ?disabled=\"${this.disabled}\"></m3e-ripple>\r\n <div class=\"icon\" aria-hidden=\"true\">${this.#renderIcon()}</div>\r\n <div class=\"label\">\r\n <slot name=\"label\" @slotchange=\"${this.#handleSlotChange}\"></slot>\r\n </div>\r\n <slot name=\"badge\"></slot>\r\n <div aria-hidden=\"true\" class=\"toggle\">\r\n <slot name=\"toggle-icon\">\r\n <svg class=\"toggle-icon\" viewBox=\"0 -960 960 960\" fill=\"currentColor\">\r\n <path d=\"M480-360 280-560h400L480-360Z\" />\r\n </svg>\r\n </slot>\r\n </div>\r\n </div>\r\n <m3e-collapsible\r\n class=\"group\"\r\n role=\"group\"\r\n aria-hidden=\"${ifDefined(this._hasChildItems ? undefined : \"true\")}\"\r\n ?open=\"${this._hasChildItems && this.open}\"\r\n @opening=\"${this.#handleCollapsibleEvent}\"\r\n @opened=\"${this.#handleCollapsibleEvent}\"\r\n @closing=\"${this.#handleCollapsibleEvent}\"\r\n @closed=\"${this.#handleCollapsibleEvent}\"\r\n >\r\n <slot @slotchange=\"${this.#handleItemSlotChange}\"></slot>\r\n </m3e-collapsible>`;\r\n }\r\n\r\n /** @private */\r\n #renderIcon(): unknown {\r\n const icon = html`<slot name=\"icon\" @slotchange=\"${this.#handleIconSlotChange}\"></slot>`;\r\n return this.selected && !this.hasChildItems\r\n ? html`<slot name=\"selected-icon\" @slotchange=\"${this.#handleIconSlotChange}\">${icon}</slot>`\r\n : icon;\r\n }\r\n\r\n /** @private */\r\n #handleIconSlotChange(e: Event) {\r\n setCustomState(this, \"-with-icon\", hasAssignedNodes(<HTMLSlotElement>e.target));\r\n }\r\n\r\n /** @private */\r\n #handleSlotChange(e: Event): void {\r\n this.#link =\r\n (<HTMLSlotElement>e.target).assignedElements({ flatten: true }).find((x) => x instanceof HTMLAnchorElement) ??\r\n null;\r\n\r\n this.#link?.setAttribute(\"tabindex\", \"-1\");\r\n }\r\n\r\n /** @private */\r\n #handleItemSlotChange(e: Event): void {\r\n this.#items = (<HTMLSlotElement>e.target)\r\n .assignedElements({ flatten: true })\r\n .filter((x) => x instanceof M3eNavMenuItemElement);\r\n\r\n const hadChildItems = this._hasChildItems;\r\n this._hasChildItems = this.#items.length > 0;\r\n setCustomState(this, \"-with-items\", this._hasChildItems);\r\n\r\n if (hadChildItems || this._hasChildItems) {\r\n this.selected = this.#items.some((x) => x.selected);\r\n }\r\n }\r\n\r\n /** @private */\r\n #handleClick(): void {\r\n if (this.disabled) return;\r\n\r\n this.#menu?.[selectionManager].setActiveItem(this);\r\n if (!this._hasChildItems) {\r\n this.#menu?.[selectionManager].select(this);\r\n this.#path.forEach((x) => (x.selected = this.selected));\r\n this.#link?.click();\r\n\r\n const drawerContainer = this.closest(\"m3e-drawer-container\");\r\n if (drawerContainer) {\r\n const drawer = this.closest(\"[slot='start']\") ?? this.closest(\"[slot='end']\");\r\n if (\r\n drawer &&\r\n (hasCustomState(drawerContainer, `-${drawer.slot}-push`) ||\r\n hasCustomState(drawerContainer, `-${drawer.slot}-over`))\r\n ) {\r\n setTimeout(() => {\r\n drawerContainer.removeAttribute(drawer.slot);\r\n drawerContainer.dispatchEvent(new Event(\"change\", { bubbles: true }));\r\n }, 300);\r\n }\r\n }\r\n } else {\r\n this.toggle();\r\n }\r\n }\r\n\r\n /** @private */\r\n #handleCollapsibleEvent(e: Event): void {\r\n e.stopPropagation();\r\n this.dispatchEvent(new Event(e.type, { bubbles: true }));\r\n }\r\n}\r\n\r\ninterface M3eNavMenuItemElementEventMap extends HTMLElementEventMap {\r\n opening: Event;\r\n opened: Event;\r\n closing: Event;\r\n closed: Event;\r\n}\r\n\r\nexport interface M3eNavMenuItemElement {\r\n addEventListener<K extends keyof M3eNavMenuItemElementEventMap>(\r\n type: K,\r\n listener: (this: M3eNavMenuItemElement, ev: M3eNavMenuItemElementEventMap[K]) => void,\r\n options?: boolean | AddEventListenerOptions,\r\n ): void;\r\n\r\n addEventListener(\r\n type: string,\r\n listener: EventListenerOrEventListenerObject,\r\n options?: boolean | AddEventListenerOptions,\r\n ): void;\r\n\r\n removeEventListener<K extends keyof M3eNavMenuItemElementEventMap>(\r\n type: K,\r\n listener: (this: M3eNavMenuItemElement, ev: M3eNavMenuItemElementEventMap[K]) => void,\r\n options?: boolean | EventListenerOptions,\r\n ): void;\r\n\r\n removeEventListener(\r\n type: string,\r\n listener: EventListenerOrEventListenerObject,\r\n options?: boolean | EventListenerOptions,\r\n ): void;\r\n}\r\n\r\ndeclare global {\r\n interface HTMLElementTagNameMap {\r\n \"m3e-nav-menu-item\": M3eNavMenuItemElement;\r\n }\r\n}\r\n","import { css, CSSResultGroup, html, LitElement } from \"lit\";\r\n\r\nimport {\r\n customElement,\r\n DesignToken,\r\n FocusController,\r\n PressedController,\r\n 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 if (typeof window !== \"undefined\") {\r\n const lightDomStyle = new CSSStyleSheet();\r\n lightDomStyle.replaceSync(\r\n 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 `.toString(),\r\n );\r\n\r\n document.adoptedStyleSheets = [...document.adoptedStyleSheets, lightDomStyle];\r\n }\r\n }\r\n\r\n /** The styles of the element. */\r\n static override styles: CSSResultGroup = css`\r\n :host {\r\n display: block;\r\n outline: none;\r\n overflow-y: auto;\r\n overflow-x: hidden;\r\n min-height: 0;\r\n scrollbar-width: ${DesignToken.scrollbar.width};\r\n scrollbar-color: ${DesignToken.scrollbar.color};\r\n }\r\n .base {\r\n width: 100%;\r\n display: flex;\r\n flex-direction: column;\r\n position: relative;\r\n min-height: inherit;\r\n box-sizing: border-box;\r\n padding-block-start: var(--m3e-nav-menu-padding-top, 0.5rem);\r\n padding-block-end: var(--m3e-nav-menu-padding-bottom, 0.5rem);\r\n padding-inline-start: var(--m3e-nav-menu-padding-left, 0.75rem);\r\n padding-inline-end: var(--m3e-nav-menu-padding-right, 0.75rem);\r\n }\r\n `;\r\n\r\n /** @private */ private static __nextId = 0;\r\n /** @private */ #ignoreFocusVisible = false;\r\n /** @private */ #ignoreFocus = false;\r\n\r\n /** @private */\r\n readonly [selectionManager] = new SelectionManager<M3eNavMenuItemElement>()\r\n .withVerticalOrientation()\r\n .withHomeAndEnd()\r\n .withTypeahead()\r\n .withSkipPredicate((x) => x.disabled || !x.visible)\r\n .disableRovingTabIndex()\r\n .onActiveItemChange(() => {\r\n if (this[selectionManager].activeItem) {\r\n this.#activateItem(this[selectionManager].activeItem);\r\n }\r\n })\r\n .onSelectedItemsChange(() => {\r\n const selected = this.selected;\r\n for (const item of this.items) {\r\n if (item !== selected) {\r\n this.#updateItemFocusVisible(item, false, false);\r\n }\r\n }\r\n\r\n if (selected?.label) {\r\n scrollIntoViewIfNeeded(selected.label, this, { block: \"start\", behavior: \"smooth\" });\r\n }\r\n });\r\n\r\n /** @private */ readonly #keyDownHandler = (e: KeyboardEvent) => this.#handleKeyDown(e);\r\n /** @private */ readonly #keyUpHandler = (e: KeyboardEvent) => this.#handleKeyUp(e);\r\n /** @private */ readonly #pointerDownHandler = (e: Event) => this.#handlePointerDown(e);\r\n\r\n constructor() {\r\n super();\r\n\r\n new PressedController(this, { callback: (pressed) => (this.#ignoreFocus = pressed) });\r\n new FocusController(this, {\r\n callback: () => {\r\n if (!this.#ignoreFocus) {\r\n this.#updateFocusVisible();\r\n }\r\n },\r\n });\r\n }\r\n\r\n /** The selected item of the menu. */\r\n get selected(): M3eNavMenuItemElement | null {\r\n return this[selectionManager].selectedItems[0] ?? null;\r\n }\r\n\r\n /** All the items of the menu. */\r\n get items(): readonly M3eNavMenuItemElement[] {\r\n return this[selectionManager].items;\r\n }\r\n\r\n /**\r\n * Expands the specified items, or all items if no items are provided.\r\n * @param {M3eNavMenuItemElement | undefined} items The items to expand.\r\n */\r\n expand(items?: M3eNavMenuItemElement[]): void {\r\n (items ?? this[selectionManager].items).forEach((x) => x.expand());\r\n }\r\n\r\n /**\r\n * Collapses the specified items, or all items if no items are provided.\r\n * @param {M3eNavMenuItemElement | undefined} items The items to collapse.\r\n */\r\n collapse(items?: M3eNavMenuItemElement[]): void {\r\n (items ?? this[selectionManager].items).forEach((x) => x.collapse());\r\n\r\n const activeItem = this[selectionManager].activeItem;\r\n if (activeItem && !activeItem.visible) {\r\n for (let parent = activeItem.parentItem; parent; parent = parent.parentItem) {\r\n if (parent.visible) {\r\n this[selectionManager].setActiveItem(parent);\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n\r\n /** @inheritdoc */\r\n override connectedCallback(): void {\r\n super.connectedCallback();\r\n\r\n this.setAttribute(\"tabindex\", \"0\");\r\n\r\n this.addEventListener(\"keydown\", this.#keyDownHandler);\r\n this.addEventListener(\"keyup\", this.#keyUpHandler);\r\n this.addEventListener(\"pointerdown\", this.#pointerDownHandler);\r\n }\r\n\r\n /** @inheritdoc */\r\n override disconnectedCallback(): void {\r\n super.disconnectedCallback();\r\n\r\n this.removeEventListener(\"keydown\", this.#keyDownHandler);\r\n this.removeEventListener(\"keyup\", this.#keyUpHandler);\r\n this.removeEventListener(\"pointerdown\", this.#pointerDownHandler);\r\n }\r\n\r\n /** @inheritdoc */\r\n protected override render(): unknown {\r\n return html`<div class=\"base\">\r\n <slot @slotchange=\"${this.#handleSlotChange}\"></slot>\r\n </div>`;\r\n }\r\n\r\n /** @private */\r\n #handleSlotChange(): void {\r\n for (const divider of this.querySelectorAll<HTMLElement>(\"m3e-divider\")) {\r\n divider.ariaHidden = \"true\";\r\n }\r\n const { added } = this[selectionManager].setItems([...this.querySelectorAll(\"m3e-nav-menu-item\")]);\r\n for (const item of added) {\r\n item.id = item.id || `m3e-nav-menu-item-${M3eNavMenuElement.__nextId++}`;\r\n }\r\n if (this[selectionManager].activeItem) {\r\n this.setAttribute(\"aria-activedescendant\", this[selectionManager].activeItem.id);\r\n this.#updateFocusVisible();\r\n } else {\r\n this.removeAttribute(\"aria-activedescendant\");\r\n }\r\n }\r\n\r\n /** @private */\r\n #handleKeyDown(e: KeyboardEvent): void {\r\n this.#ignoreFocusVisible = false;\r\n this.#updateFocusVisible();\r\n\r\n const item = this[selectionManager].activeItem;\r\n if (e.defaultPrevented || !item || item.disabled) return;\r\n\r\n switch (e.key) {\r\n case \"Enter\":\r\n case \" \":\r\n e.preventDefault();\r\n\r\n if (e.key === \" \" && item.ripple && !item.ripple.visible) {\r\n item.ripple.show(0, 0, true);\r\n }\r\n\r\n if (item.hasChildItems) {\r\n requestAnimationFrame(() => item.toggle());\r\n } else if (!item.selected) {\r\n this[selectionManager].select(item);\r\n item.link?.click();\r\n }\r\n break;\r\n\r\n case \"*\":\r\n e.preventDefault();\r\n item.expand(true);\r\n break;\r\n\r\n case \"Left\":\r\n case \"ArrowLeft\":\r\n e.preventDefault();\r\n if (M3eDirectionality.current === \"ltr\") {\r\n if (item.hasChildItems && item.open) {\r\n requestAnimationFrame(() => item.collapse());\r\n } else {\r\n const parent = item.parentItem;\r\n if (parent) {\r\n requestAnimationFrame(() => {\r\n parent.collapse();\r\n this[selectionManager].setActiveItem(parent);\r\n });\r\n }\r\n }\r\n } else if (item.hasChildItems && !item.open) {\r\n item.expand();\r\n }\r\n\r\n break;\r\n\r\n case \"Right\":\r\n case \"ArrowRight\":\r\n e.preventDefault();\r\n if (M3eDirectionality.current === \"rtl\") {\r\n if (item.hasChildItems && item.open) {\r\n requestAnimationFrame(() => item.collapse());\r\n } else {\r\n const parent = item.parentItem;\r\n if (parent) {\r\n requestAnimationFrame(() => {\r\n parent.collapse();\r\n this[selectionManager].setActiveItem(parent);\r\n });\r\n }\r\n }\r\n } else if (item.hasChildItems && !item.open) {\r\n item.expand();\r\n }\r\n break;\r\n\r\n default:\r\n this[selectionManager].onKeyDown(e);\r\n break;\r\n }\r\n }\r\n\r\n /** @private */\r\n #handleKeyUp(e: KeyboardEvent): void {\r\n const item = this[selectionManager].activeItem;\r\n if (!e.defaultPrevented && item && !item.disabled && e.key === \" \") {\r\n item.ripple?.hide();\r\n }\r\n }\r\n\r\n /** @private */\r\n #handlePointerDown(e: Event): void {\r\n if (!e.defaultPrevented && !this.#ignoreFocusVisible) {\r\n this.#ignoreFocusVisible = true;\r\n\r\n const item = e\r\n .composedPath()\r\n .reverse()\r\n .find((x) => x instanceof M3eNavMenuItemElement);\r\n\r\n if (item && !item.disabled) {\r\n this.#updateItemFocusVisible(item, true, false);\r\n }\r\n }\r\n }\r\n\r\n /** @private */\r\n #activateItem(item: M3eNavMenuItemElement): void {\r\n this.setAttribute(\"aria-activedescendant\", item.id);\r\n if (item.label) {\r\n scrollIntoViewIfNeeded(item.label, this, { block: \"nearest\", behavior: \"smooth\" });\r\n }\r\n this.#updateFocusVisible();\r\n }\r\n\r\n /** @private */\r\n #updateFocusVisible(): void {\r\n const focused = this.matches(\":focus\") || this.matches(\":focus-within\");\r\n const focusVisible = !this.#ignoreFocusVisible && this.matches(\":focus-visible\");\r\n this[selectionManager].items.forEach((x) => {\r\n const active = x === this[selectionManager].activeItem;\r\n this.#updateItemFocusVisible(x, active && focused, active && focusVisible);\r\n });\r\n }\r\n\r\n /** @private */\r\n #updateItemFocusVisible(item: M3eNavMenuItemElement, focused: boolean, focusVisible: boolean): void {\r\n if (focused && focusVisible) {\r\n item.stateLayer?.show(\"focused\");\r\n } else {\r\n item.stateLayer?.hide(\"focused\");\r\n }\r\n if (focusVisible) {\r\n item.focusRing?.show();\r\n } else {\r\n item.focusRing?.hide();\r\n }\r\n }\r\n}\r\n\r\ndeclare global {\r\n interface HTMLElementTagNameMap {\r\n \"m3e-nav-menu\": M3eNavMenuElement;\r\n }\r\n}\r\n","import { css, CSSResultGroup, html, LitElement } from \"lit\";\r\n\r\nimport { AttachInternals, customElement, deleteCustomState, Role, setCustomState } from \"@m3e/web/core\";\r\n\r\n/**\r\n * A top-level semantic grouping of items in a navigation menu.\r\n *\r\n * @description\r\n * The `m3e-nav-menu-item-group` is a top-level semantic grouping of items in a navigation menu.\r\n * It encapsulates related items under a shared heading or label, supporting visual hierarchy and accessibility.\r\n *\r\n * @example\r\n * The following example illustrates a navigation menu with a top-level group of menu items.\r\n * ```html\r\n * <m3e-nav-menu>\r\n * <m3e-nav-menu-item-group>\r\n * <m3e-heading slot=\"label\" variant=\"label\" size=\"large\">Mail</m3e-heading>\r\n * <m3e-nav-menu-item>\r\n * <m3e-icon slot=\"icon\" name=\"mail\"></m3e-icon>\r\n * <span slot=\"label\">Inbox</span>\r\n * <span slot=\"badge\">24</span>\r\n * </m3e-nav-menu-item>\r\n * <m3e-nav-menu-item>\r\n * <m3e-icon slot=\"icon\" name=\"send\"></m3e-icon>\r\n * <span slot=\"label\">Outbox</span>\r\n * </m3e-nav-menu-item>\r\n * <m3e-nav-menu-item>\r\n * <m3e-icon slot=\"icon\" name=\"favorite\"></m3e-icon>\r\n * <span slot=\"label\">Favorites</span>\r\n * </m3e-nav-menu-item>\r\n * <m3e-nav-menu-item>\r\n * <m3e-icon slot=\"icon\" name=\"delete\"></m3e-icon>\r\n * <span slot=\"label\">Trash</span>\r\n * </m3e-nav-menu-item>\r\n * </m3e-nav-menu-item-group>\r\n * </m3e-nav-menu>\r\n * ```\r\n *\r\n * @tag m3e-nav-menu-item-group\r\n *\r\n * @slot - Renders the items of the group.\r\n * @slot label - Renders the label of the group.\r\n *\r\n * @cssprop --m3e-nav-menu-item-group-label-inset - Insets the label from the start edge of the group.\r\n * @cssprop --m3e-nav-menu-item-group-label-space - Vertical spacing around the group's label.\r\n */\r\n@customElement(\"m3e-nav-menu-item-group\")\r\nexport class M3eNavMenuItemGroupElement extends AttachInternals(Role(LitElement, \"group\")) {\r\n /** The styles of the element. */\r\n static override styles: CSSResultGroup = css`\r\n :host {\r\n display: contents;\r\n }\r\n :host(:not(:state(-with-label))) .label {\r\n display: none;\r\n }\r\n .label {\r\n margin-inline-start: var(--m3e-nav-menu-item-group-label-inset, 1rem);\r\n margin-block-end: var(--m3e-nav-menu-item-group-label-space, 1rem);\r\n flex: none;\r\n }\r\n :host(:state(-divided)) .label {\r\n margin-block-start: calc(\r\n var(--m3e-nav-menu-item-group-label-space, 1rem) - var(--m3e-nav-menu-divider-margin, 0.25rem)\r\n );\r\n }\r\n :host(:not(:state(-divided))) .label {\r\n margin-block-start: var(--m3e-nav-menu-item-group-label-space, 1rem);\r\n }\r\n `;\r\n\r\n /** @private */ private static __nextId = 0;\r\n /** @private */ #labelId = `m3e-nav-menu-item-group-label-${M3eNavMenuItemGroupElement.__nextId++}`;\r\n /** @private */ #label?: Element;\r\n\r\n /** @inheritdoc */\r\n override connectedCallback(): void {\r\n super.connectedCallback();\r\n setCustomState(this, \"-divided\", this.previousElementSibling?.tagName === \"M3E-DIVIDER\");\r\n }\r\n\r\n /** @inheritdoc */\r\n override disconnectedCallback(): void {\r\n super.disconnectedCallback();\r\n deleteCustomState(this, \"-divided\");\r\n }\r\n\r\n /** @inheritdoc */\r\n protected override render(): unknown {\r\n return html`<div class=\"label\">\r\n <slot name=\"label\" @slotchange=\"${this.#handleLabelSlotChange}\"></slot>\r\n </div>\r\n <slot></slot>`;\r\n }\r\n\r\n /** @private */\r\n #handleLabelSlotChange(e: Event): void {\r\n const label = (e.target as HTMLSlotElement).assignedElements({ flatten: true })[0];\r\n if (label !== this.#label) {\r\n // If the label is changed and its id matched the reversed id,\r\n // clear the id in the event the element is moved elsewhere in the DOM.\r\n\r\n if (this.#label?.id === this.#labelId) {\r\n this.#label.id = \"\";\r\n }\r\n\r\n this.#label = label;\r\n\r\n if (this.#label) {\r\n this.#label.id = this.#label.id || this.#labelId;\r\n this.setAttribute(\"aria-labelledby\", this.#label.id);\r\n } else {\r\n this.removeAttribute(\"aria-labelledby\");\r\n }\r\n }\r\n setCustomState(this, \"-with-label\", this.#label !== undefined);\r\n }\r\n}\r\n\r\ndeclare global {\r\n interface HTMLElementTagNameMap {\r\n \"m3e-nav-menu-item-group\": M3eNavMenuItemGroupElement;\r\n }\r\n}\r\n"],"names":["M3eNavMenuItemElement","M3eNavMenuItemElement_1","Selected","Disabled","EventAttribute","AttachInternals","Role","LitElement","constructor","_hasChildItems","_M3eNavMenuItemElement_items","set","_M3eNavMenuItemElement_menu","_M3eNavMenuItemElement_path","Array","_M3eNavMenuItemElement_link","open","link","__classPrivateFieldGet","label","_base","visible","some","x","path","hasChildItems","parentItem","length","childItems","level","expand","descendants","forEach","collapse","toggle","connectedCallback","item","parentElement","closest","push","reverse","style","setProperty","__classPrivateFieldSet","disconnectedCallback","update","changedProperties","has","ariaSelected","ariaCurrent","selected","icon","querySelectorAll","toggleAttribute","selectionManager","notifySelectionChange","ariaExpanded","disabled","firstUpdated","_changedProperties","base","focusRing","stateLayer","ripple","attach","render","html","_M3eNavMenuItemElement_instances","_M3eNavMenuItemElement_handleClick","_M3eNavMenuItemElement_renderIcon","call","_M3eNavMenuItemElement_handleSlotChange","ifDefined","undefined","_M3eNavMenuItemElement_handleCollapsibleEvent","_M3eNavMenuItemElement_handleItemSlotChange","_M3eNavMenuItemElement_handleIconSlotChange","e","setCustomState","hasAssignedNodes","target","assignedElements","flatten","find","HTMLAnchorElement","setAttribute","filter","hadChildItems","setActiveItem","select","click","drawerContainer","drawer","hasCustomState","slot","setTimeout","removeAttribute","dispatchEvent","Event","bubbles","stopPropagation","type","window","lightDomStyle","CSSStyleSheet","replaceSync","css","toString","document","adoptedStyleSheets","styles","DesignToken","density","calc","typescale","standard","large","fontSize","fontWeight","lineHeight","tracking","unsafeCSS","motion","duration","short4","easing","shape","corner","full","medium1","color","onSurfaceVariant","onSurface","onSecondaryContainer","secondaryContainer","surfaceContainerHighest","__decorate","query","prototype","state","property","Boolean","reflect","customElement","M3eNavMenuElement","M3eNavMenuElement_1","_M3eNavMenuElement_ignoreFocusVisible","_M3eNavMenuElement_ignoreFocus","_b","SelectionManager","withVerticalOrientation","withHomeAndEnd","withTypeahead","withSkipPredicate","disableRovingTabIndex","onActiveItemChange","activeItem","_M3eNavMenuElement_instances","_M3eNavMenuElement_activateItem","onSelectedItemsChange","items","_M3eNavMenuElement_updateItemFocusVisible","scrollIntoViewIfNeeded","block","behavior","_M3eNavMenuElement_keyDownHandler","_M3eNavMenuElement_keyUpHandler","_M3eNavMenuElement_pointerDownHandler","PressedController","callback","pressed","FocusController","_M3eNavMenuElement_updateFocusVisible","selectedItems","parent","addEventListener","removeEventListener","_M3eNavMenuElement_handleSlotChange","divider","ariaHidden","added","setItems","id","__nextId","defaultPrevented","key","preventDefault","show","requestAnimationFrame","M3eDirectionality","current","onKeyDown","hide","composedPath","focused","matches","focusVisible","active","scrollbar","width","M3eNavMenuItemGroupElement","M3eNavMenuItemGroupElement_1","_M3eNavMenuItemGroupElement_labelId","_M3eNavMenuItemGroupElement_label","previousElementSibling","tagName","deleteCustomState","_M3eNavMenuItemGroupElement_instances","_M3eNavMenuItemGroupElement_handleLabelSlotChange"],"mappings":"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"}
1
+ {"version":3,"file":"nav-menu.js","sources":["../../src/nav-menu/NavMenuItemElement.ts","../../src/nav-menu/NavMenuElement.ts","../../src/nav-menu/NavMenuItemGroupElement.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-unsafe-declaration-merging */\r\nimport { css, CSSResultGroup, html, LitElement, PropertyValues, unsafeCSS } from \"lit\";\r\nimport { property, query, state } from \"lit/decorators.js\";\r\nimport { ifDefined } from \"lit/directives/if-defined.js\";\r\n\r\nimport {\r\n AttachInternals,\r\n customElement,\r\n DesignToken,\r\n Disabled,\r\n EventAttribute,\r\n hasAssignedNodes,\r\n hasCustomState,\r\n M3eFocusRingElement,\r\n M3eRippleElement,\r\n M3eStateLayerElement,\r\n registerStyleSheet,\r\n Role,\r\n Selected,\r\n setCustomState,\r\n} from \"@m3e/web/core\";\r\n\r\nimport { selectionManager } from \"@m3e/web/core/a11y\";\r\n\r\nimport type { M3eNavMenuElement } from \"./NavMenuElement\";\r\n\r\n/**\r\n * An expandable item, selectable item within a navigation menu.\r\n *\r\n * @description\r\n * The `m3e-nav-menu-item` component represents an expandable, selectable item within a navigation menu.\r\n * It supports nested child items, selection, disabled and indeterminate states, and emits events for\r\n * open/close transitions. The component is highly customizable via slots and CSS custom properties, and\r\n * is designed for accessible, keyboard-navigable menu structures.\r\n *\r\n *\r\n * @example\r\n * The following example illustrates a navigation menu with a top-level group of menu items.\r\n * ```html\r\n * <m3e-nav-menu>\r\n * <m3e-nav-menu-item-group>\r\n * <m3e-heading slot=\"label\" variant=\"label\" size=\"large\">Mail</m3e-heading>\r\n * <m3e-nav-menu-item>\r\n * <m3e-icon slot=\"icon\" name=\"mail\"></m3e-icon>\r\n * <span slot=\"label\">Inbox</span>\r\n * <span slot=\"badge\">24</span>\r\n * </m3e-nav-menu-item>\r\n * <m3e-nav-menu-item>\r\n * <m3e-icon slot=\"icon\" name=\"send\"></m3e-icon>\r\n * <span slot=\"label\">Outbox</span>\r\n * </m3e-nav-menu-item>\r\n * <m3e-nav-menu-item>\r\n * <m3e-icon slot=\"icon\" name=\"favorite\"></m3e-icon>\r\n * <span slot=\"label\">Favorites</span>\r\n * </m3e-nav-menu-item>\r\n * <m3e-nav-menu-item>\r\n * <m3e-icon slot=\"icon\" name=\"delete\"></m3e-icon>\r\n * <span slot=\"label\">Trash</span>\r\n * </m3e-nav-menu-item>\r\n * </m3e-nav-menu-item-group>\r\n * </m3e-nav-menu>\r\n * ```\r\n *\r\n * @example\r\n * The next example illustrates a multilevel navigation menu.\r\n * ```html\r\n * <m3e-nav-menu>\r\n * <m3e-nav-menu-item open>\r\n * <m3e-icon slot=\"icon\" name=\"rocket_launch\"></m3e-icon>\r\n * <span slot=\"label\">Getting Started</span>\r\n * <m3e-nav-menu-item>\r\n * <m3e-icon slot=\"icon\" name=\"widgets\"></m3e-icon>\r\n * <span slot=\"label\">Overview</span>\r\n * </m3e-nav-menu-item>\r\n * <m3e-nav-menu-item>\r\n * <m3e-icon slot=\"icon\" name=\"package_2\"></m3e-icon>\r\n * <span slot=\"label\">Installation</span>\r\n * </m3e-nav-menu-item>\r\n * </m3e-nav-menu-item>\r\n * <m3e-nav-menu-item>\r\n * <span slot=\"label\">Actions</span>\r\n * <m3e-nav-menu-item><span slot=\"label\">Button</span></m3e-nav-menu-item>\r\n * <m3e-nav-menu-item><span slot=\"label\">Icon</span></m3e-nav-menu-item>\r\n * <m3e-nav-menu-item><span slot=\"label\">Icon Button</span></m3e-nav-menu-item>\r\n * </m3e-nav-menu-item>\r\n * </m3e-nav-menu>\r\n * ```\r\n *\r\n * @tag m3e-nav-menu-item\r\n *\r\n * @slot - Renders the nested child items.\r\n * @slot label - Renders the label of the item.\r\n * @slot icon - Renders the icon of the item.\r\n * @slot badge - Renders the badge of the item.\r\n * @slot selected-icon - Renders the icon of the item when selected.\r\n * @slot toggle-icon - Renders the toggle icon.\r\n *\r\n * @attr disabled - Whether the element is disabled.\r\n * @attr indeterminate - Whether the element's selected / checked state is indeterminate.\r\n * @attr open - Whether the item is expanded.\r\n * @attr selected - Whether the item is selected.\r\n *\r\n * @fires opening - Emitted when the item begins to open.\r\n * @fires opened - Emitted when the item has opened.\r\n * @fires closing - Emitted when the item begins to close.\r\n * @fires closed - Emitted when the item has closed.\r\n * @fires click - Emitted when the element is clicked.\r\n *\r\n * @cssprop --m3e-nav-menu-item-font-size - Font size for the item label.\r\n * @cssprop --m3e-nav-menu-item-font-weight - Font weight for the item label.\r\n * @cssprop --m3e-nav-menu-item-line-height - Line height for the item label.\r\n * @cssprop --m3e-nav-menu-item-tracking - Letter spacing for the item label.\r\n * @cssprop --m3e-nav-menu-item-padding - Inline padding for the item.\r\n * @cssprop --m3e-nav-menu-item-height - Height of the item.\r\n * @cssprop --m3e-nav-menu-item-spacing - Spacing between icon and label.\r\n * @cssprop --m3e-nav-menu-item-shape - Border radius of the item and focus ring.\r\n * @cssprop --m3e-nav-menu-item-icon-size - Size of the icon.\r\n * @cssprop --m3e-nav-menu-item-inset - Indentation for nested items.\r\n * @cssprop --m3e-nav-menu-item-label-color - Text color for the item label.\r\n * @cssprop --m3e-nav-menu-item-selected-label-color - Text color for selected item label.\r\n * @cssprop --m3e-nav-menu-item-selected-container-color - Background color for selected item.\r\n * @cssprop --m3e-nav-menu-item-selected-container-focus-color - Focus color for selected item container.\r\n * @cssprop --m3e-nav-menu-item-selected-container-hover-color - Hover color for selected item container.\r\n * @cssprop --m3e-nav-menu-item-selected-ripple-color - Ripple color for selected item.\r\n * @cssprop --m3e-nav-menu-item-unselected-container-focus-color - Focus color for unselected item container.\r\n * @cssprop --m3e-nav-menu-item-unselected-container-hover-color - Hover color for unselected item container.\r\n * @cssprop --m3e-nav-menu-item-unselected-ripple-color - Ripple color for unselected item.\r\n * @cssprop --m3e-nav-menu-item-open-container-color - Background color for open item with children.\r\n * @cssprop --m3e-nav-menu-item-open-container-focus-color - Focus color for open item container.\r\n * @cssprop --m3e-nav-menu-item-open-container-hover-color - Hover color for open item container.\r\n * @cssprop --m3e-nav-menu-item-open-ripple-color - Ripple color for open item.\r\n * @cssprop --m3e-nav-menu-item-disabled-color - Text color for disabled item.\r\n * @cssprop --m3e-nav-menu-item-disabled-color-opacity - Opacity for disabled item text color.\r\n * @cssprop --m3e-nav-menu-item-badge-font-size - Font size for badge slot.\r\n * @cssprop --m3e-nav-menu-item-badge-font-weight - Font weight for badge slot.\r\n * @cssprop --m3e-nav-menu-item-badge-line-height - Line height for badge slot.\r\n * @cssprop --m3e-nav-menu-item-badge-tracking - Letter spacing for badge slot.\r\n * @cssprop --m3e-nav-menu-divider-margin - Margin for divider elements.\r\n * @cssprop --m3e-nav-menu-item-vertical-inset - Vertical margin for first/last child items.\r\n */\r\n@customElement(\"m3e-nav-menu-item\")\r\nexport class M3eNavMenuItemElement extends Selected(\r\n Disabled(\r\n EventAttribute(AttachInternals(Role(LitElement, \"treeitem\"), true), \"opening\", \"opened\", \"closing\", \"closed\"),\r\n ),\r\n) {\r\n static {\r\n registerStyleSheet(css`\r\n m3e-nav-menu-item > m3e-divider {\r\n margin-block: var(--m3e-nav-menu-divider-margin, 0.25rem);\r\n flex: none;\r\n }\r\n m3e-nav-menu-item > m3e-nav-menu-item:first-of-type {\r\n margin-block-start: var(--m3e-nav-menu-item-vertical-inset, 0.25rem);\r\n }\r\n m3e-nav-menu-item > m3e-nav-menu-item:last-of-type {\r\n margin-block-end: var(--m3e-nav-menu-item-vertical-inset, 0.25rem);\r\n }\r\n `);\r\n }\r\n\r\n /** The styles of the element. */\r\n static override styles: CSSResultGroup = css`\r\n :host {\r\n display: block;\r\n flex: none;\r\n outline: none;\r\n user-select: none;\r\n -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\r\n }\r\n .base {\r\n display: flex;\r\n align-items: center;\r\n position: relative;\r\n padding-inline: var(--m3e-nav-menu-item-padding, 1.5rem);\r\n height: calc(var(--m3e-nav-menu-item-height, 3.5rem) + ${DesignToken.density.calc(-3)});\r\n column-gap: var(--m3e-nav-menu-item-spacing, 0.75rem);\r\n font-size: var(--m3e-nav-menu-item-font-size, ${DesignToken.typescale.standard.label.large.fontSize});\r\n font-weight: var(--m3e-nav-menu-item-font-weight, ${DesignToken.typescale.standard.label.large.fontWeight});\r\n line-height: var(--m3e-nav-menu-item-line-height, ${DesignToken.typescale.standard.label.large.lineHeight});\r\n letter-spacing: var(--m3e-nav-menu-item-tracking, ${DesignToken.typescale.standard.label.large.tracking});\r\n transition: ${unsafeCSS(\r\n `color ${DesignToken.motion.duration.short4} ${DesignToken.motion.easing.standard},\r\n background-color ${DesignToken.motion.duration.short4} ${DesignToken.motion.easing.standard}`,\r\n )};\r\n }\r\n .base,\r\n .focus-ring {\r\n border-radius: var(--m3e-nav-menu-item-shape, ${DesignToken.shape.corner.full});\r\n }\r\n .label {\r\n flex: 1 1 auto;\r\n display: flex;\r\n align-items: center;\r\n position: relative;\r\n overflow: hidden;\r\n vertical-align: middle;\r\n }\r\n .icon,\r\n .toggle {\r\n flex: none;\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n position: relative;\r\n vertical-align: middle;\r\n }\r\n ::slotted([slot=\"badge\"]) {\r\n flex: none;\r\n position: relative;\r\n font-size: var(--m3e-nav-menu-item-badge-font-size, ${DesignToken.typescale.standard.label.large.fontSize});\r\n font-weight: var(--m3e-nav-menu-item-badge-font-weight, ${DesignToken.typescale.standard.label.large.fontWeight});\r\n line-height: var(--m3e-nav-menu-item-badge-line-height, ${DesignToken.typescale.standard.label.large.lineHeight});\r\n letter-spacing: var(--m3e-nav-menu-item-badge-tracking, ${DesignToken.typescale.standard.label.large.tracking});\r\n }\r\n .toggle {\r\n transition: ${unsafeCSS(`transform var(--m3e-collapsible-animation-duration, ${DesignToken.motion.duration.medium1})\r\n ${DesignToken.motion.easing.standard}`)};\r\n }\r\n :host(:not(:state(-with-icon))) .icon {\r\n display: none;\r\n }\r\n .icon {\r\n margin-inline-start: -0.5rem;\r\n }\r\n .toggle {\r\n margin-inline-end: -0.5rem;\r\n }\r\n .group {\r\n padding-inline-start: var(--m3e-nav-menu-item-inset, 1rem);\r\n }\r\n :host([open]) .toggle {\r\n transform: rotate(180deg);\r\n }\r\n :host(:not(:state(-with-items))) .toggle,\r\n :host(:not(:state(-with-items))) .group {\r\n display: none;\r\n }\r\n ::slotted([slot=\"selected-icon\"]),\r\n ::slotted([slot=\"icon\"]),\r\n ::slotted([slot=\"toggle-icon\"]),\r\n .toggle-icon {\r\n vertical-align: middle;\r\n width: 1em;\r\n height: 1em;\r\n font-size: var(--m3e-nav-menu-item-icon-size, 1.5rem);\r\n }\r\n :host(:not(:disabled)) .base {\r\n cursor: pointer;\r\n }\r\n :host(:not(:disabled)) .base {\r\n color: var(--m3e-nav-menu-item-label-color, ${DesignToken.color.onSurfaceVariant});\r\n }\r\n :host(:disabled) .base {\r\n color: color-mix(\r\n in srgb,\r\n var(--m3e-nav-menu-item-disabled-color, ${DesignToken.color.onSurface})\r\n var(--m3e-nav-menu-item-disabled-color-opacity, 38%),\r\n transparent\r\n );\r\n }\r\n :host([selected]:not(:state(-with-items)):not(:disabled)) .base {\r\n color: var(--m3e-nav-menu-item-selected-label-color, ${DesignToken.color.onSecondaryContainer});\r\n background-color: var(--m3e-nav-menu-item-selected-container-color, ${DesignToken.color.secondaryContainer});\r\n --m3e-state-layer-focus-color: var(\r\n --m3e-nav-menu-item-selected-container-focus-color,\r\n ${DesignToken.color.onSecondaryContainer}\r\n );\r\n --m3e-state-layer-hover-color: var(\r\n --m3e-nav-menu-item-selected-container-hover-color,\r\n ${DesignToken.color.onSecondaryContainer}\r\n );\r\n --m3e-ripple-color: var(--m3e-nav-menu-item-selected-ripple-color, ${DesignToken.color.onSecondaryContainer});\r\n }\r\n :host(:not([selected]):not(:state(-with-items)):not(:disabled)) .base {\r\n --m3e-state-layer-focus-color: var(\r\n --m3e-nav-menu-item-unselected-container-focus-color,\r\n ${DesignToken.color.onSurface}\r\n );\r\n --m3e-state-layer-hover-color: var(\r\n --m3e-nav-menu-item-unselected-container-hover-color,\r\n ${DesignToken.color.onSurface}\r\n );\r\n --m3e-ripple-color: var(--m3e-nav-menu-item-unselected-ripple-color, ${DesignToken.color.onSurface});\r\n }\r\n .state-layer {\r\n margin-inline: auto;\r\n }\r\n :host([selected]:state(-with-items):not(:disabled)) .base {\r\n background-color: var(--m3e-nav-menu-item-open-container-color, ${DesignToken.color.surfaceContainerHighest});\r\n --m3e-state-layer-focus-color: var(\r\n --m3e-nav-menu-item-open-container-focus-color,\r\n ${DesignToken.color.onSurface}\r\n );\r\n --m3e-state-layer-hover-color: var(\r\n --m3e-nav-menu-item-open-container-hover-color,\r\n ${DesignToken.color.onSurface}\r\n );\r\n --m3e-ripple-color: var(--m3e-nav-menu-item-open-ripple-color, ${DesignToken.color.onSurface});\r\n }\r\n ::slotted(a[slot=\"label\"]) {\r\n all: unset;\r\n }\r\n @media (prefers-reduced-motion) {\r\n .base,\r\n .toggle,\r\n .state-layer {\r\n transition: none !important;\r\n }\r\n }\r\n @media (forced-colors: active) {\r\n .base,\r\n .state-layer {\r\n transition: none !important;\r\n }\r\n\r\n :host(:disabled) .base {\r\n color: GrayText;\r\n }\r\n :host(:not([selected]):not(:disabled)) .base {\r\n color: ButtonText;\r\n }\r\n :host([selected]:not(:state(-with-items)):not(:disabled)) .base {\r\n forced-color-adjust: none;\r\n color: ButtonFace;\r\n background-color: ButtonText;\r\n }\r\n :host([selected]:state(-with-items):not(:disabled)) .base {\r\n background-color: unset;\r\n color: ButtonText;\r\n }\r\n }\r\n `;\r\n\r\n /** @internal */ @query(\".state-layer\") readonly stateLayer?: M3eStateLayerElement;\r\n /** @internal */ @query(\".focus-ring\") readonly focusRing?: M3eFocusRingElement;\r\n /** @internal */ @query(\".ripple\") readonly ripple?: M3eRippleElement;\r\n /** @private */ @query(\".base\") private readonly _base?: HTMLElement;\r\n\r\n /** @private */ @state() private _hasChildItems = false;\r\n\r\n /** @private */ #items: M3eNavMenuItemElement[] = [];\r\n /** @private */ #menu: M3eNavMenuElement | null = null;\r\n /** @private */ #path = new Array<M3eNavMenuItemElement>();\r\n /** @private */ #link: HTMLAnchorElement | null = null;\r\n\r\n /**\r\n * Whether the item is expanded.\r\n * @default false\r\n */\r\n @property({ type: Boolean, reflect: true }) open = false;\r\n\r\n /** A reference to the nested `HTMLAnchorElement`. */\r\n get link(): HTMLAnchorElement | null {\r\n return this.#link;\r\n }\r\n\r\n /** A reference to the element used to present the label of the item. */\r\n get label(): HTMLElement | null {\r\n return this._base ?? null;\r\n }\r\n\r\n /** Whether the item is visible. */\r\n get visible(): boolean {\r\n return !this.#path.some((x) => !x.open);\r\n }\r\n\r\n /** The full path of the item, starting with the top-most ancestor, including this item. */\r\n get path(): ReadonlyArray<M3eNavMenuItemElement> {\r\n return [...this.#path, this];\r\n }\r\n\r\n /** Whether the item has child items. */\r\n get hasChildItems(): boolean {\r\n return this._hasChildItems;\r\n }\r\n\r\n /** The parenting item. */\r\n get parentItem(): M3eNavMenuItemElement | null {\r\n return this.#path[this.#path.length - 1] ?? null;\r\n }\r\n\r\n /** The items that immediately descend from this item. */\r\n get childItems(): readonly M3eNavMenuItemElement[] {\r\n return this.#items;\r\n }\r\n\r\n /** The one-based level of the item. */\r\n get level(): number {\r\n return this.#path.length + 1;\r\n }\r\n\r\n /**\r\n * Expands this item, and optionally, all descendants.\r\n * @param {boolean} [descendants=false] Whether to expand all descendants.\r\n */\r\n expand(descendants: boolean = false): void {\r\n if (this.hasChildItems) {\r\n this.open = true;\r\n if (descendants) {\r\n this.childItems.forEach((x) => x.expand(true));\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Collapses this item, and optionally, all descendants.\r\n * @param {boolean} [descendants=false] Whether to expand all descendants.\r\n */\r\n collapse(descendants: boolean = false): void {\r\n if (this.hasChildItems) {\r\n this.open = false;\r\n if (descendants) {\r\n this.childItems.forEach((x) => x.collapse(true));\r\n }\r\n }\r\n }\r\n\r\n /** Toggles the expanded state of the item. */\r\n toggle(): void {\r\n if (this.hasChildItems) {\r\n this.open = !this.open;\r\n }\r\n }\r\n\r\n /** @inheritdoc */\r\n override connectedCallback(): void {\r\n super.connectedCallback();\r\n\r\n this.#path.length = 0;\r\n for (\r\n let item = this.parentElement?.closest(\"m3e-nav-menu-item\");\r\n item;\r\n item = item.parentElement?.closest(\"m3e-nav-menu-item\")\r\n ) {\r\n this.#path.push(item);\r\n }\r\n this.#path.reverse();\r\n\r\n this.style.setProperty(\"--_nav-menu-item-level\", `${this.level}`);\r\n this.#menu = this.closest(\"m3e-nav-menu\");\r\n }\r\n\r\n /** @inheritdoc */\r\n override disconnectedCallback(): void {\r\n super.disconnectedCallback();\r\n this.#path.length = 0;\r\n }\r\n\r\n /** @inheritdoc */\r\n protected override update(changedProperties: PropertyValues): void {\r\n super.update(changedProperties);\r\n\r\n if (changedProperties.has(\"selected\")) {\r\n // Remove aria-selected and just use aria-current.\r\n this.ariaSelected = null;\r\n this.ariaCurrent = this.hasChildItems ? null : `${this.selected}`;\r\n for (const icon of this.querySelectorAll(\":scope > m3e-icon[slot]\")) {\r\n icon.toggleAttribute(\"filled\", this.selected);\r\n }\r\n\r\n this.#path.forEach((x) => (x.selected = this.selected));\r\n if (this.selected && !this.hasChildItems) {\r\n this.closest(\"m3e-nav-menu\")?.[selectionManager].notifySelectionChange(this);\r\n }\r\n }\r\n\r\n if (changedProperties.has(\"open\") || changedProperties.has(\"_hasChildItems\")) {\r\n this.ariaExpanded = this._hasChildItems ? `${this.open}` : null;\r\n }\r\n\r\n if ((changedProperties.has(\"_hasChildItems\") && this.disabled) || changedProperties.has(\"disabled\")) {\r\n this.#items.forEach((x) => (x.disabled = this.disabled));\r\n }\r\n }\r\n\r\n /** @inheritdoc */\r\n protected override firstUpdated(_changedProperties: PropertyValues<this>): void {\r\n super.firstUpdated(_changedProperties);\r\n\r\n const base = this._base;\r\n if (base) {\r\n [this.focusRing, this.stateLayer, this.ripple].forEach((x) => x?.attach(base));\r\n }\r\n }\r\n\r\n /** @inheritdoc */\r\n protected override render(): unknown {\r\n return html`<div class=\"base\" @click=\"${this.#handleClick}\">\r\n <m3e-state-layer class=\"state-layer\" ?disabled=\"${this.disabled}\"></m3e-state-layer>\r\n <m3e-focus-ring class=\"focus-ring\" inward ?disabled=\"${this.disabled}\"></m3e-focus-ring>\r\n <m3e-ripple class=\"ripple\" ?disabled=\"${this.disabled}\"></m3e-ripple>\r\n <div class=\"icon\" aria-hidden=\"true\">${this.#renderIcon()}</div>\r\n <div class=\"label\">\r\n <slot name=\"label\" @slotchange=\"${this.#handleSlotChange}\"></slot>\r\n </div>\r\n <slot name=\"badge\"></slot>\r\n <div aria-hidden=\"true\" class=\"toggle\">\r\n <slot name=\"toggle-icon\">\r\n <svg class=\"toggle-icon\" viewBox=\"0 -960 960 960\" fill=\"currentColor\">\r\n <path d=\"M480-360 280-560h400L480-360Z\" />\r\n </svg>\r\n </slot>\r\n </div>\r\n </div>\r\n <m3e-collapsible\r\n class=\"group\"\r\n role=\"group\"\r\n aria-hidden=\"${ifDefined(this._hasChildItems ? undefined : \"true\")}\"\r\n ?open=\"${this._hasChildItems && this.open}\"\r\n @opening=\"${this.#handleCollapsibleEvent}\"\r\n @opened=\"${this.#handleCollapsibleEvent}\"\r\n @closing=\"${this.#handleCollapsibleEvent}\"\r\n @closed=\"${this.#handleCollapsibleEvent}\"\r\n >\r\n <slot @slotchange=\"${this.#handleItemSlotChange}\"></slot>\r\n </m3e-collapsible>`;\r\n }\r\n\r\n /** @private */\r\n #renderIcon(): unknown {\r\n const icon = html`<slot name=\"icon\" @slotchange=\"${this.#handleIconSlotChange}\"></slot>`;\r\n return this.selected && !this.hasChildItems\r\n ? html`<slot name=\"selected-icon\" @slotchange=\"${this.#handleIconSlotChange}\">${icon}</slot>`\r\n : icon;\r\n }\r\n\r\n /** @private */\r\n #handleIconSlotChange(e: Event) {\r\n setCustomState(this, \"-with-icon\", hasAssignedNodes(<HTMLSlotElement>e.target));\r\n }\r\n\r\n /** @private */\r\n #handleSlotChange(e: Event): void {\r\n this.#link =\r\n (<HTMLSlotElement>e.target).assignedElements({ flatten: true }).find((x) => x instanceof HTMLAnchorElement) ??\r\n null;\r\n\r\n this.#link?.setAttribute(\"tabindex\", \"-1\");\r\n }\r\n\r\n /** @private */\r\n #handleItemSlotChange(e: Event): void {\r\n this.#items = (<HTMLSlotElement>e.target)\r\n .assignedElements({ flatten: true })\r\n .filter((x) => x instanceof M3eNavMenuItemElement);\r\n\r\n const hadChildItems = this._hasChildItems;\r\n this._hasChildItems = this.#items.length > 0;\r\n setCustomState(this, \"-with-items\", this._hasChildItems);\r\n\r\n if (hadChildItems || this._hasChildItems) {\r\n this.selected = this.#items.some((x) => x.selected);\r\n }\r\n }\r\n\r\n /** @private */\r\n #handleClick(): void {\r\n if (this.disabled) return;\r\n\r\n this.#menu?.[selectionManager].setActiveItem(this);\r\n if (!this._hasChildItems) {\r\n this.#menu?.[selectionManager].select(this);\r\n this.#path.forEach((x) => (x.selected = this.selected));\r\n this.#link?.click();\r\n\r\n const drawerContainer = this.closest(\"m3e-drawer-container\");\r\n if (drawerContainer) {\r\n const drawer = this.closest(\"[slot='start']\") ?? this.closest(\"[slot='end']\");\r\n if (\r\n drawer &&\r\n (hasCustomState(drawerContainer, `-${drawer.slot}-push`) ||\r\n hasCustomState(drawerContainer, `-${drawer.slot}-over`))\r\n ) {\r\n setTimeout(() => {\r\n drawerContainer.removeAttribute(drawer.slot);\r\n drawerContainer.dispatchEvent(new Event(\"change\", { bubbles: true }));\r\n }, 300);\r\n }\r\n }\r\n } else {\r\n this.toggle();\r\n }\r\n }\r\n\r\n /** @private */\r\n #handleCollapsibleEvent(e: Event): void {\r\n e.stopPropagation();\r\n this.dispatchEvent(new Event(e.type, { bubbles: true }));\r\n }\r\n}\r\n\r\ninterface M3eNavMenuItemElementEventMap extends HTMLElementEventMap {\r\n opening: Event;\r\n opened: Event;\r\n closing: Event;\r\n closed: Event;\r\n}\r\n\r\nexport interface M3eNavMenuItemElement {\r\n addEventListener<K extends keyof M3eNavMenuItemElementEventMap>(\r\n type: K,\r\n listener: (this: M3eNavMenuItemElement, ev: M3eNavMenuItemElementEventMap[K]) => void,\r\n options?: boolean | AddEventListenerOptions,\r\n ): void;\r\n\r\n addEventListener(\r\n type: string,\r\n listener: EventListenerOrEventListenerObject,\r\n options?: boolean | AddEventListenerOptions,\r\n ): void;\r\n\r\n removeEventListener<K extends keyof M3eNavMenuItemElementEventMap>(\r\n type: K,\r\n listener: (this: M3eNavMenuItemElement, ev: M3eNavMenuItemElementEventMap[K]) => void,\r\n options?: boolean | EventListenerOptions,\r\n ): void;\r\n\r\n removeEventListener(\r\n type: string,\r\n listener: EventListenerOrEventListenerObject,\r\n options?: boolean | EventListenerOptions,\r\n ): void;\r\n}\r\n\r\ndeclare global {\r\n interface HTMLElementTagNameMap {\r\n \"m3e-nav-menu-item\": M3eNavMenuItemElement;\r\n }\r\n}\r\n","import { css, CSSResultGroup, html, LitElement } from \"lit\";\r\n\r\nimport {\r\n customElement,\r\n DesignToken,\r\n FocusController,\r\n PressedController,\r\n registerStyleSheet,\r\n Role,\r\n scrollIntoViewIfNeeded,\r\n} from \"@m3e/web/core\";\r\n\r\nimport { SelectionManager, selectionManager } from \"@m3e/web/core/a11y\";\r\nimport { M3eDirectionality } from \"@m3e/web/core/bidi\";\r\n\r\nimport { M3eNavMenuItemElement } from \"./NavMenuItemElement\";\r\n\r\n/**\r\n * A hierarchical menu, typically used on larger devices, that allows a user to switch between views.\r\n *\r\n * @description\r\n * The `m3e-nav-menu` component provides a hierarchical, accessible navigation menu supporting\r\n * nested expandable items, keyboard navigation, and focus management. It is highly customizable\r\n * via slots and CSS custom properties, and is designed for use in sidebars, navigation drawers,\r\n * and complex menu structures.\r\n *\r\n * @example\r\n * The following example illustrates a navigation menu with a top-level group of menu items.\r\n * ```html\r\n * <m3e-nav-menu>\r\n * <m3e-nav-menu-item-group>\r\n * <m3e-heading slot=\"label\" variant=\"label\" size=\"large\">Mail</m3e-heading>\r\n * <m3e-nav-menu-item>\r\n * <m3e-icon slot=\"icon\" name=\"mail\"></m3e-icon>\r\n * <span slot=\"label\">Inbox</span>\r\n * <span slot=\"badge\">24</span>\r\n * </m3e-nav-menu-item>\r\n * <m3e-nav-menu-item>\r\n * <m3e-icon slot=\"icon\" name=\"send\"></m3e-icon>\r\n * <span slot=\"label\">Outbox</span>\r\n * </m3e-nav-menu-item>\r\n * <m3e-nav-menu-item>\r\n * <m3e-icon slot=\"icon\" name=\"favorite\"></m3e-icon>\r\n * <span slot=\"label\">Favorites</span>\r\n * </m3e-nav-menu-item>\r\n * <m3e-nav-menu-item>\r\n * <m3e-icon slot=\"icon\" name=\"delete\"></m3e-icon>\r\n * <span slot=\"label\">Trash</span>\r\n * </m3e-nav-menu-item>\r\n * </m3e-nav-menu-item-group>\r\n * </m3e-nav-menu>\r\n * ```\r\n *\r\n * @example\r\n * The next example illustrates a multilevel navigation menu.\r\n * ```html\r\n * <m3e-nav-menu>\r\n * <m3e-nav-menu-item open>\r\n * <m3e-icon slot=\"icon\" name=\"rocket_launch\"></m3e-icon>\r\n * <span slot=\"label\">Getting Started</span>\r\n * <m3e-nav-menu-item>\r\n * <m3e-icon slot=\"icon\" name=\"widgets\"></m3e-icon>\r\n * <span slot=\"label\">Overview</span>\r\n * </m3e-nav-menu-item>\r\n * <m3e-nav-menu-item>\r\n * <m3e-icon slot=\"icon\" name=\"package_2\"></m3e-icon>\r\n * <span slot=\"label\">Installation</span>\r\n * </m3e-nav-menu-item>\r\n * </m3e-nav-menu-item>\r\n * <m3e-nav-menu-item>\r\n * <span slot=\"label\">Actions</span>\r\n * <m3e-nav-menu-item><span slot=\"label\">Button</span></m3e-nav-menu-item>\r\n * <m3e-nav-menu-item><span slot=\"label\">Icon</span></m3e-nav-menu-item>\r\n * <m3e-nav-menu-item><span slot=\"label\">Icon Button</span></m3e-nav-menu-item>\r\n * </m3e-nav-menu-item>\r\n * </m3e-nav-menu>\r\n * ```\r\n *\r\n * @tag m3e-nav-menu\r\n *\r\n * @slot - Renders the items of the menu.\r\n *\r\n * @cssprop --m3e-nav-menu-padding-top - Top padding for the menu.\r\n * @cssprop --m3e-nav-menu-padding-bottom - Bottom padding for the menu.\r\n * @cssprop --m3e-nav-menu-padding-left - Left padding for the menu.\r\n * @cssprop --m3e-nav-menu-padding-right - Right padding for the menu.\r\n * @cssprop --m3e-nav-menu-divider-margin - Margin for divider elements in the menu.\r\n * @cssprop --m3e-nav-menu-scrollbar-width - Width of the menu scrollbar.\r\n * @cssprop --m3e-nav-menu-scrollbar-color - Color of the menu scrollbar.\r\n */\r\n@customElement(\"m3e-nav-menu\")\r\nexport class M3eNavMenuElement extends Role(LitElement, \"tree\") {\r\n static {\r\n registerStyleSheet(css`\r\n m3e-nav-menu > m3e-divider {\r\n margin-block: var(--m3e-nav-menu-divider-margin, 0.25rem);\r\n flex: none;\r\n }\r\n `);\r\n }\r\n\r\n /** The styles of the element. */\r\n static override styles: CSSResultGroup = css`\r\n :host {\r\n display: block;\r\n outline: none;\r\n overflow-y: auto;\r\n overflow-x: hidden;\r\n min-height: 0;\r\n scrollbar-width: ${DesignToken.scrollbar.width};\r\n scrollbar-color: ${DesignToken.scrollbar.color};\r\n }\r\n .base {\r\n width: 100%;\r\n display: flex;\r\n flex-direction: column;\r\n position: relative;\r\n min-height: inherit;\r\n box-sizing: border-box;\r\n padding-block-start: var(--m3e-nav-menu-padding-top, 0.5rem);\r\n padding-block-end: var(--m3e-nav-menu-padding-bottom, 0.5rem);\r\n padding-inline-start: var(--m3e-nav-menu-padding-left, 0.75rem);\r\n padding-inline-end: var(--m3e-nav-menu-padding-right, 0.75rem);\r\n }\r\n `;\r\n\r\n /** @private */ private static __nextId = 0;\r\n /** @private */ #ignoreFocusVisible = false;\r\n /** @private */ #ignoreFocus = false;\r\n\r\n /** @private */\r\n readonly [selectionManager] = new SelectionManager<M3eNavMenuItemElement>()\r\n .withVerticalOrientation()\r\n .withHomeAndEnd()\r\n .withTypeahead()\r\n .withSkipPredicate((x) => x.disabled || !x.visible)\r\n .disableRovingTabIndex()\r\n .onActiveItemChange(() => {\r\n if (this[selectionManager].activeItem) {\r\n this.#activateItem(this[selectionManager].activeItem);\r\n }\r\n })\r\n .onSelectedItemsChange(() => {\r\n const selected = this.selected;\r\n for (const item of this.items) {\r\n if (item !== selected) {\r\n this.#updateItemFocusVisible(item, false, false);\r\n }\r\n }\r\n\r\n if (selected?.label) {\r\n scrollIntoViewIfNeeded(selected.label, this, { block: \"start\", behavior: \"smooth\" });\r\n }\r\n });\r\n\r\n /** @private */ readonly #keyDownHandler = (e: KeyboardEvent) => this.#handleKeyDown(e);\r\n /** @private */ readonly #keyUpHandler = (e: KeyboardEvent) => this.#handleKeyUp(e);\r\n /** @private */ readonly #pointerDownHandler = (e: Event) => this.#handlePointerDown(e);\r\n\r\n constructor() {\r\n super();\r\n\r\n new PressedController(this, { callback: (pressed) => (this.#ignoreFocus = pressed) });\r\n new FocusController(this, {\r\n callback: () => {\r\n if (!this.#ignoreFocus) {\r\n this.#updateFocusVisible();\r\n }\r\n },\r\n });\r\n }\r\n\r\n /** The selected item of the menu. */\r\n get selected(): M3eNavMenuItemElement | null {\r\n return this[selectionManager].selectedItems[0] ?? null;\r\n }\r\n\r\n /** All the items of the menu. */\r\n get items(): readonly M3eNavMenuItemElement[] {\r\n return this[selectionManager].items;\r\n }\r\n\r\n /**\r\n * Expands the specified items, or all items if no items are provided.\r\n * @param {M3eNavMenuItemElement | undefined} items The items to expand.\r\n */\r\n expand(items?: M3eNavMenuItemElement[]): void {\r\n (items ?? this[selectionManager].items).forEach((x) => x.expand());\r\n }\r\n\r\n /**\r\n * Collapses the specified items, or all items if no items are provided.\r\n * @param {M3eNavMenuItemElement | undefined} items The items to collapse.\r\n */\r\n collapse(items?: M3eNavMenuItemElement[]): void {\r\n (items ?? this[selectionManager].items).forEach((x) => x.collapse());\r\n\r\n const activeItem = this[selectionManager].activeItem;\r\n if (activeItem && !activeItem.visible) {\r\n for (let parent = activeItem.parentItem; parent; parent = parent.parentItem) {\r\n if (parent.visible) {\r\n this[selectionManager].setActiveItem(parent);\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n\r\n /** @inheritdoc */\r\n override connectedCallback(): void {\r\n super.connectedCallback();\r\n\r\n this.setAttribute(\"tabindex\", \"0\");\r\n\r\n this.addEventListener(\"keydown\", this.#keyDownHandler);\r\n this.addEventListener(\"keyup\", this.#keyUpHandler);\r\n this.addEventListener(\"pointerdown\", this.#pointerDownHandler);\r\n }\r\n\r\n /** @inheritdoc */\r\n override disconnectedCallback(): void {\r\n super.disconnectedCallback();\r\n\r\n this.removeEventListener(\"keydown\", this.#keyDownHandler);\r\n this.removeEventListener(\"keyup\", this.#keyUpHandler);\r\n this.removeEventListener(\"pointerdown\", this.#pointerDownHandler);\r\n }\r\n\r\n /** @inheritdoc */\r\n protected override render(): unknown {\r\n return html`<div class=\"base\">\r\n <slot @slotchange=\"${this.#handleSlotChange}\"></slot>\r\n </div>`;\r\n }\r\n\r\n /** @private */\r\n #handleSlotChange(): void {\r\n for (const divider of this.querySelectorAll<HTMLElement>(\"m3e-divider\")) {\r\n divider.ariaHidden = \"true\";\r\n }\r\n const { added } = this[selectionManager].setItems([...this.querySelectorAll(\"m3e-nav-menu-item\")]);\r\n for (const item of added) {\r\n item.id = item.id || `m3e-nav-menu-item-${M3eNavMenuElement.__nextId++}`;\r\n }\r\n if (this[selectionManager].activeItem) {\r\n this.setAttribute(\"aria-activedescendant\", this[selectionManager].activeItem.id);\r\n this.#updateFocusVisible();\r\n } else {\r\n this.removeAttribute(\"aria-activedescendant\");\r\n }\r\n }\r\n\r\n /** @private */\r\n #handleKeyDown(e: KeyboardEvent): void {\r\n this.#ignoreFocusVisible = false;\r\n this.#updateFocusVisible();\r\n\r\n const item = this[selectionManager].activeItem;\r\n if (e.defaultPrevented || !item || item.disabled) return;\r\n\r\n switch (e.key) {\r\n case \"Enter\":\r\n case \" \":\r\n e.preventDefault();\r\n\r\n if (e.key === \" \" && item.ripple && !item.ripple.visible) {\r\n item.ripple.show(0, 0, true);\r\n }\r\n\r\n if (item.hasChildItems) {\r\n requestAnimationFrame(() => item.toggle());\r\n } else if (!item.selected) {\r\n this[selectionManager].select(item);\r\n item.link?.click();\r\n }\r\n break;\r\n\r\n case \"*\":\r\n e.preventDefault();\r\n item.expand(true);\r\n break;\r\n\r\n case \"Left\":\r\n case \"ArrowLeft\":\r\n e.preventDefault();\r\n if (M3eDirectionality.current === \"ltr\") {\r\n if (item.hasChildItems && item.open) {\r\n requestAnimationFrame(() => item.collapse());\r\n } else {\r\n const parent = item.parentItem;\r\n if (parent) {\r\n requestAnimationFrame(() => {\r\n parent.collapse();\r\n this[selectionManager].setActiveItem(parent);\r\n });\r\n }\r\n }\r\n } else if (item.hasChildItems && !item.open) {\r\n item.expand();\r\n }\r\n\r\n break;\r\n\r\n case \"Right\":\r\n case \"ArrowRight\":\r\n e.preventDefault();\r\n if (M3eDirectionality.current === \"rtl\") {\r\n if (item.hasChildItems && item.open) {\r\n requestAnimationFrame(() => item.collapse());\r\n } else {\r\n const parent = item.parentItem;\r\n if (parent) {\r\n requestAnimationFrame(() => {\r\n parent.collapse();\r\n this[selectionManager].setActiveItem(parent);\r\n });\r\n }\r\n }\r\n } else if (item.hasChildItems && !item.open) {\r\n item.expand();\r\n }\r\n break;\r\n\r\n default:\r\n this[selectionManager].onKeyDown(e);\r\n break;\r\n }\r\n }\r\n\r\n /** @private */\r\n #handleKeyUp(e: KeyboardEvent): void {\r\n const item = this[selectionManager].activeItem;\r\n if (!e.defaultPrevented && item && !item.disabled && e.key === \" \") {\r\n item.ripple?.hide();\r\n }\r\n }\r\n\r\n /** @private */\r\n #handlePointerDown(e: Event): void {\r\n if (!e.defaultPrevented && !this.#ignoreFocusVisible) {\r\n this.#ignoreFocusVisible = true;\r\n\r\n const item = e\r\n .composedPath()\r\n .reverse()\r\n .find((x) => x instanceof M3eNavMenuItemElement);\r\n\r\n if (item && !item.disabled) {\r\n this.#updateItemFocusVisible(item, true, false);\r\n }\r\n }\r\n }\r\n\r\n /** @private */\r\n #activateItem(item: M3eNavMenuItemElement): void {\r\n this.setAttribute(\"aria-activedescendant\", item.id);\r\n if (item.label) {\r\n scrollIntoViewIfNeeded(item.label, this, { block: \"nearest\", behavior: \"smooth\" });\r\n }\r\n this.#updateFocusVisible();\r\n }\r\n\r\n /** @private */\r\n #updateFocusVisible(): void {\r\n const focused = this.matches(\":focus\") || this.matches(\":focus-within\");\r\n const focusVisible = !this.#ignoreFocusVisible && this.matches(\":focus-visible\");\r\n this[selectionManager].items.forEach((x) => {\r\n const active = x === this[selectionManager].activeItem;\r\n this.#updateItemFocusVisible(x, active && focused, active && focusVisible);\r\n });\r\n }\r\n\r\n /** @private */\r\n #updateItemFocusVisible(item: M3eNavMenuItemElement, focused: boolean, focusVisible: boolean): void {\r\n if (focused && focusVisible) {\r\n item.stateLayer?.show(\"focused\");\r\n } else {\r\n item.stateLayer?.hide(\"focused\");\r\n }\r\n if (focusVisible) {\r\n item.focusRing?.show();\r\n } else {\r\n item.focusRing?.hide();\r\n }\r\n }\r\n}\r\n\r\ndeclare global {\r\n interface HTMLElementTagNameMap {\r\n \"m3e-nav-menu\": M3eNavMenuElement;\r\n }\r\n}\r\n","import { css, CSSResultGroup, html, LitElement } from \"lit\";\r\n\r\nimport { AttachInternals, customElement, deleteCustomState, Role, setCustomState } from \"@m3e/web/core\";\r\n\r\n/**\r\n * A top-level semantic grouping of items in a navigation menu.\r\n *\r\n * @description\r\n * The `m3e-nav-menu-item-group` is a top-level semantic grouping of items in a navigation menu.\r\n * It encapsulates related items under a shared heading or label, supporting visual hierarchy and accessibility.\r\n *\r\n * @example\r\n * The following example illustrates a navigation menu with a top-level group of menu items.\r\n * ```html\r\n * <m3e-nav-menu>\r\n * <m3e-nav-menu-item-group>\r\n * <m3e-heading slot=\"label\" variant=\"label\" size=\"large\">Mail</m3e-heading>\r\n * <m3e-nav-menu-item>\r\n * <m3e-icon slot=\"icon\" name=\"mail\"></m3e-icon>\r\n * <span slot=\"label\">Inbox</span>\r\n * <span slot=\"badge\">24</span>\r\n * </m3e-nav-menu-item>\r\n * <m3e-nav-menu-item>\r\n * <m3e-icon slot=\"icon\" name=\"send\"></m3e-icon>\r\n * <span slot=\"label\">Outbox</span>\r\n * </m3e-nav-menu-item>\r\n * <m3e-nav-menu-item>\r\n * <m3e-icon slot=\"icon\" name=\"favorite\"></m3e-icon>\r\n * <span slot=\"label\">Favorites</span>\r\n * </m3e-nav-menu-item>\r\n * <m3e-nav-menu-item>\r\n * <m3e-icon slot=\"icon\" name=\"delete\"></m3e-icon>\r\n * <span slot=\"label\">Trash</span>\r\n * </m3e-nav-menu-item>\r\n * </m3e-nav-menu-item-group>\r\n * </m3e-nav-menu>\r\n * ```\r\n *\r\n * @tag m3e-nav-menu-item-group\r\n *\r\n * @slot - Renders the items of the group.\r\n * @slot label - Renders the label of the group.\r\n *\r\n * @cssprop --m3e-nav-menu-item-group-label-inset - Insets the label from the start edge of the group.\r\n * @cssprop --m3e-nav-menu-item-group-label-space - Vertical spacing around the group's label.\r\n */\r\n@customElement(\"m3e-nav-menu-item-group\")\r\nexport class M3eNavMenuItemGroupElement extends AttachInternals(Role(LitElement, \"group\")) {\r\n /** The styles of the element. */\r\n static override styles: CSSResultGroup = css`\r\n :host {\r\n display: contents;\r\n }\r\n :host(:not(:state(-with-label))) .label {\r\n display: none;\r\n }\r\n .label {\r\n margin-inline-start: var(--m3e-nav-menu-item-group-label-inset, 1rem);\r\n margin-block-end: var(--m3e-nav-menu-item-group-label-space, 1rem);\r\n flex: none;\r\n }\r\n :host(:state(-divided)) .label {\r\n margin-block-start: calc(\r\n var(--m3e-nav-menu-item-group-label-space, 1rem) - var(--m3e-nav-menu-divider-margin, 0.25rem)\r\n );\r\n }\r\n :host(:not(:state(-divided))) .label {\r\n margin-block-start: var(--m3e-nav-menu-item-group-label-space, 1rem);\r\n }\r\n `;\r\n\r\n /** @private */ private static __nextId = 0;\r\n /** @private */ #labelId = `m3e-nav-menu-item-group-label-${M3eNavMenuItemGroupElement.__nextId++}`;\r\n /** @private */ #label?: Element;\r\n\r\n /** @inheritdoc */\r\n override connectedCallback(): void {\r\n super.connectedCallback();\r\n setCustomState(this, \"-divided\", this.previousElementSibling?.tagName === \"M3E-DIVIDER\");\r\n }\r\n\r\n /** @inheritdoc */\r\n override disconnectedCallback(): void {\r\n super.disconnectedCallback();\r\n deleteCustomState(this, \"-divided\");\r\n }\r\n\r\n /** @inheritdoc */\r\n protected override render(): unknown {\r\n return html`<div class=\"label\">\r\n <slot name=\"label\" @slotchange=\"${this.#handleLabelSlotChange}\"></slot>\r\n </div>\r\n <slot></slot>`;\r\n }\r\n\r\n /** @private */\r\n #handleLabelSlotChange(e: Event): void {\r\n const label = (e.target as HTMLSlotElement).assignedElements({ flatten: true })[0];\r\n if (label !== this.#label) {\r\n // If the label is changed and its id matched the reversed id,\r\n // clear the id in the event the element is moved elsewhere in the DOM.\r\n\r\n if (this.#label?.id === this.#labelId) {\r\n this.#label.id = \"\";\r\n }\r\n\r\n this.#label = label;\r\n\r\n if (this.#label) {\r\n this.#label.id = this.#label.id || this.#labelId;\r\n this.setAttribute(\"aria-labelledby\", this.#label.id);\r\n } else {\r\n this.removeAttribute(\"aria-labelledby\");\r\n }\r\n }\r\n setCustomState(this, \"-with-label\", this.#label !== undefined);\r\n }\r\n}\r\n\r\ndeclare global {\r\n interface HTMLElementTagNameMap {\r\n \"m3e-nav-menu-item-group\": M3eNavMenuItemGroupElement;\r\n }\r\n}\r\n"],"names":["M3eNavMenuItemElement","M3eNavMenuItemElement_1","Selected","Disabled","EventAttribute","AttachInternals","Role","LitElement","constructor","_hasChildItems","_M3eNavMenuItemElement_items","set","_M3eNavMenuItemElement_menu","_M3eNavMenuItemElement_path","Array","_M3eNavMenuItemElement_link","open","link","__classPrivateFieldGet","label","_base","visible","some","x","path","hasChildItems","parentItem","length","childItems","level","expand","descendants","forEach","collapse","toggle","connectedCallback","item","parentElement","closest","push","reverse","style","setProperty","__classPrivateFieldSet","disconnectedCallback","update","changedProperties","has","ariaSelected","ariaCurrent","selected","icon","querySelectorAll","toggleAttribute","selectionManager","notifySelectionChange","ariaExpanded","disabled","firstUpdated","_changedProperties","base","focusRing","stateLayer","ripple","attach","render","html","_M3eNavMenuItemElement_instances","_M3eNavMenuItemElement_handleClick","_M3eNavMenuItemElement_renderIcon","call","_M3eNavMenuItemElement_handleSlotChange","ifDefined","undefined","_M3eNavMenuItemElement_handleCollapsibleEvent","_M3eNavMenuItemElement_handleItemSlotChange","_M3eNavMenuItemElement_handleIconSlotChange","e","setCustomState","hasAssignedNodes","target","assignedElements","flatten","find","HTMLAnchorElement","setAttribute","filter","hadChildItems","setActiveItem","select","click","drawerContainer","drawer","hasCustomState","slot","setTimeout","removeAttribute","dispatchEvent","Event","bubbles","stopPropagation","type","registerStyleSheet","css","styles","DesignToken","density","calc","typescale","standard","large","fontSize","fontWeight","lineHeight","tracking","unsafeCSS","motion","duration","short4","easing","shape","corner","full","medium1","color","onSurfaceVariant","onSurface","onSecondaryContainer","secondaryContainer","surfaceContainerHighest","__decorate","query","prototype","state","property","Boolean","reflect","customElement","M3eNavMenuElement","M3eNavMenuElement_1","_M3eNavMenuElement_ignoreFocusVisible","_M3eNavMenuElement_ignoreFocus","_b","SelectionManager","withVerticalOrientation","withHomeAndEnd","withTypeahead","withSkipPredicate","disableRovingTabIndex","onActiveItemChange","activeItem","_M3eNavMenuElement_instances","_M3eNavMenuElement_activateItem","onSelectedItemsChange","items","_M3eNavMenuElement_updateItemFocusVisible","scrollIntoViewIfNeeded","block","behavior","_M3eNavMenuElement_keyDownHandler","_M3eNavMenuElement_keyUpHandler","_M3eNavMenuElement_pointerDownHandler","PressedController","callback","pressed","FocusController","_M3eNavMenuElement_updateFocusVisible","selectedItems","parent","addEventListener","removeEventListener","_M3eNavMenuElement_handleSlotChange","divider","ariaHidden","added","setItems","id","__nextId","defaultPrevented","key","preventDefault","show","requestAnimationFrame","M3eDirectionality","current","onKeyDown","hide","composedPath","focused","matches","focusVisible","active","scrollbar","width","M3eNavMenuItemGroupElement","M3eNavMenuItemGroupElement_1","_M3eNavMenuItemGroupElement_labelId","_M3eNavMenuItemGroupElement_label","previousElementSibling","tagName","deleteCustomState","_M3eNavMenuItemGroupElement_instances","_M3eNavMenuItemGroupElement_handleLabelSlotChange"],"mappings":"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"}
@@ -3,5 +3,5 @@
3
3
  * Copyright (c) 2025 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,DesignToken as v,customElement as f,scrollIntoViewIfNeeded as g,PressedController as b,FocusController as y,deleteCustomState as w}from"@m3e/web/core";import{selectionManager as k,SelectionManager as $}from"@m3e/web/core/a11y";import{M3eDirectionality as I}from"@m3e/web/core/bidi";import{query as C,state as S,property as x}from"lit/decorators.js";import{ifDefined as E}from"lit/directives/if-defined.js";var A,_,W,L,M,z,q,R,T,D,P,B;let F=B=class extends(l(r(c(d(h(s,"treeitem"),!0),"opening","opened","closing","closed")))){constructor(){super(...arguments),A.add(this),this._hasChildItems=!1,_.set(this,[]),W.set(this,null),L.set(this,new Array),M.set(this,null),this.open=!1}get link(){return e(this,M,"f")}get label(){return this._base??null}get visible(){return!e(this,L,"f").some(e=>!e.open)}get path(){return[...e(this,L,"f"),this]}get hasChildItems(){return this._hasChildItems}get parentItem(){return e(this,L,"f")[e(this,L,"f").length-1]??null}get childItems(){return e(this,_,"f")}get level(){return e(this,L,"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,L,"f").length=0;for(let t=this.parentElement?.closest("m3e-nav-menu-item");t;t=t.parentElement?.closest("m3e-nav-menu-item"))e(this,L,"f").push(t);e(this,L,"f").reverse(),this.style.setProperty("--_nav-menu-item-level",`${this.level}`),t(this,W,this.closest("m3e-nav-menu"),"f")}disconnectedCallback(){super.disconnectedCallback(),e(this,L,"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,L,"f").forEach(e=>e.selected=this.selected),this.selected&&!this.hasChildItems&&this.closest("m3e-nav-menu")?.[k].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,_,"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,A,"m",D)}"><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,A,"m",z).call(this)}</div><div class="label"><slot name="label" @slotchange="${e(this,A,"m",R)}"></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="${E(this._hasChildItems?void 0:"true")}" ?open="${this._hasChildItems&&this.open}" @opening="${e(this,A,"m",P)}" @opened="${e(this,A,"m",P)}" @closing="${e(this,A,"m",P)}" @closed="${e(this,A,"m",P)}"><slot @slotchange="${e(this,A,"m",T)}"></slot></m3e-collapsible>`}};var H,j,V,U,G,K,N,O,Z,J,Q,X,Y,ee,te;_=new WeakMap,W=new WeakMap,L=new WeakMap,M=new WeakMap,A=new WeakSet,z=function(){const t=a`<slot name="icon" @slotchange="${e(this,A,"m",q)}"></slot>`;return this.selected&&!this.hasChildItems?a`<slot name="selected-icon" @slotchange="${e(this,A,"m",q)}">${t}</slot>`:t},q=function(e){m(this,"-with-icon",u(e.target))},R=function(i){t(this,M,i.target.assignedElements({flatten:!0}).find(e=>e instanceof HTMLAnchorElement)??null,"f"),e(this,M,"f")?.setAttribute("tabindex","-1")},T=function(i){t(this,_,i.target.assignedElements({flatten:!0}).filter(e=>e instanceof B),"f");const s=this._hasChildItems;this._hasChildItems=e(this,_,"f").length>0,m(this,"-with-items",this._hasChildItems),(s||this._hasChildItems)&&(this.selected=e(this,_,"f").some(e=>e.selected))},D=function(){if(!this.disabled)if(e(this,W,"f")?.[k].setActiveItem(this),this._hasChildItems)this.toggle();else{e(this,W,"f")?.[k].select(this),e(this,L,"f").forEach(e=>e.selected=this.selected),e(this,M,"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)}}},P=function(e){e.stopPropagation(),this.dispatchEvent(new Event(e.type,{bubbles:!0}))},(()=>{if("undefined"!=typeof window){const e=new CSSStyleSheet;e.replaceSync(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); }`.toString()),document.adoptedStyleSheets=[...document.adoptedStyleSheets,e]}})(),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(: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, ${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(:state(-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(:state(-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]:state(-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([selected]):not(:disabled)) .base { color: ButtonText; } :host([selected]:not(:state(-with-items)):not(:disabled)) .base { forced-color-adjust: none; color: ButtonFace; background-color: ButtonText; } :host([selected]:state(-with-items):not(:disabled)) .base { background-color: unset; color: ButtonText; } }`,i([C(".state-layer")],F.prototype,"stateLayer",void 0),i([C(".focus-ring")],F.prototype,"focusRing",void 0),i([C(".ripple")],F.prototype,"ripple",void 0),i([C(".base")],F.prototype,"_base",void 0),i([S()],F.prototype,"_hasChildItems",void 0),i([x({type:Boolean,reflect:!0})],F.prototype,"open",void 0),F=B=i([f("m3e-nav-menu-item")],F);let ie=te=class extends(h(s,"tree")){constructor(){super(),H.add(this),j.set(this,!1),V.set(this,!1),this[ee]=(new $).withVerticalOrientation().withHomeAndEnd().withTypeahead().withSkipPredicate(e=>e.disabled||!e.visible).disableRovingTabIndex().onActiveItemChange(()=>{this[k].activeItem&&e(this,H,"m",Q).call(this,this[k].activeItem)}).onSelectedItemsChange(()=>{const t=this.selected;for(const i of this.items)i!==t&&e(this,H,"m",Y).call(this,i,!1,!1);t?.label&&g(t.label,this,{block:"start",behavior:"smooth"})}),U.set(this,t=>e(this,H,"m",O).call(this,t)),G.set(this,t=>e(this,H,"m",Z).call(this,t)),K.set(this,t=>e(this,H,"m",J).call(this,t)),new b(this,{callback:e=>t(this,V,e,"f")}),new y(this,{callback:()=>{e(this,V,"f")||e(this,H,"m",X).call(this)}})}get selected(){return this[k].selectedItems[0]??null}get items(){return this[k].items}expand(e){(e??this[k].items).forEach(e=>e.expand())}collapse(e){(e??this[k].items).forEach(e=>e.collapse());const t=this[k].activeItem;if(t&&!t.visible)for(let e=t.parentItem;e;e=e.parentItem)if(e.visible){this[k].setActiveItem(e);break}}connectedCallback(){super.connectedCallback(),this.setAttribute("tabindex","0"),this.addEventListener("keydown",e(this,U,"f")),this.addEventListener("keyup",e(this,G,"f")),this.addEventListener("pointerdown",e(this,K,"f"))}disconnectedCallback(){super.disconnectedCallback(),this.removeEventListener("keydown",e(this,U,"f")),this.removeEventListener("keyup",e(this,G,"f")),this.removeEventListener("pointerdown",e(this,K,"f"))}render(){return a`<div class="base"><slot @slotchange="${e(this,H,"m",N)}"></slot></div>`}};var se,ae,ne,oe,le;j=new WeakMap,V=new WeakMap,U=new WeakMap,G=new WeakMap,K=new WeakMap,H=new WeakSet,ee=k,N=function(){for(const e of this.querySelectorAll("m3e-divider"))e.ariaHidden="true";const{added:t}=this[k].setItems([...this.querySelectorAll("m3e-nav-menu-item")]);for(const e of t)e.id=e.id||"m3e-nav-menu-item-"+te.__nextId++;this[k].activeItem?(this.setAttribute("aria-activedescendant",this[k].activeItem.id),e(this,H,"m",X).call(this)):this.removeAttribute("aria-activedescendant")},O=function(i){t(this,j,!1,"f"),e(this,H,"m",X).call(this);const s=this[k].activeItem;if(!i.defaultPrevented&&s&&!s.disabled)switch(i.key){case"Enter":case" ":i.preventDefault()," "===i.key&&s.ripple&&!s.ripple.visible&&s.ripple.show(0,0,!0),s.hasChildItems?requestAnimationFrame(()=>s.toggle()):s.selected||(this[k].select(s),s.link?.click());break;case"*":i.preventDefault(),s.expand(!0);break;case"Left":case"ArrowLeft":if(i.preventDefault(),"ltr"===I.current)if(s.hasChildItems&&s.open)requestAnimationFrame(()=>s.collapse());else{const e=s.parentItem;e&&requestAnimationFrame(()=>{e.collapse(),this[k].setActiveItem(e)})}else s.hasChildItems&&!s.open&&s.expand();break;case"Right":case"ArrowRight":if(i.preventDefault(),"rtl"===I.current)if(s.hasChildItems&&s.open)requestAnimationFrame(()=>s.collapse());else{const e=s.parentItem;e&&requestAnimationFrame(()=>{e.collapse(),this[k].setActiveItem(e)})}else s.hasChildItems&&!s.open&&s.expand();break;default:this[k].onKeyDown(i)}},Z=function(e){const t=this[k].activeItem;e.defaultPrevented||!t||t.disabled||" "!==e.key||t.ripple?.hide()},J=function(i){if(!i.defaultPrevented&&!e(this,j,"f")){t(this,j,!0,"f");const s=i.composedPath().reverse().find(e=>e instanceof F);s&&!s.disabled&&e(this,H,"m",Y).call(this,s,!0,!1)}},Q=function(t){this.setAttribute("aria-activedescendant",t.id),t.label&&g(t.label,this,{block:"nearest",behavior:"smooth"}),e(this,H,"m",X).call(this)},X=function(){const t=this.matches(":focus")||this.matches(":focus-within"),i=!e(this,j,"f")&&this.matches(":focus-visible");this[k].items.forEach(s=>{const a=s===this[k].activeItem;e(this,H,"m",Y).call(this,s,a&&t,a&&i)})},Y=function(e,t,i){t&&i?e.stateLayer?.show("focused"):e.stateLayer?.hide("focused"),i?e.focusRing?.show():e.focusRing?.hide()},(()=>{if("undefined"!=typeof window){const e=new CSSStyleSheet;e.replaceSync(n`m3e-nav-menu > m3e-divider { margin-block: var(--m3e-nav-menu-divider-margin, 0.25rem); flex: none; }`.toString()),document.adoptedStyleSheets=[...document.adoptedStyleSheets,e]}})(),ie.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); }`,ie.__nextId=0,ie=te=i([f("m3e-nav-menu")],ie);let re=le=class extends(d(h(s,"group"))){constructor(){super(...arguments),se.add(this),ae.set(this,"m3e-nav-menu-item-group-label-"+le.__nextId++),ne.set(this,void 0)}connectedCallback(){super.connectedCallback(),m(this,"-divided","M3E-DIVIDER"===this.previousElementSibling?.tagName)}disconnectedCallback(){super.disconnectedCallback(),w(this,"-divided")}render(){return a`<div class="label"><slot name="label" @slotchange="${e(this,se,"m",oe)}"></slot></div><slot></slot>`}};ae=new WeakMap,ne=new WeakMap,se=new WeakSet,oe=function(i){const s=i.target.assignedElements({flatten:!0})[0];s!==e(this,ne,"f")&&(e(this,ne,"f")?.id===e(this,ae,"f")&&(e(this,ne,"f").id=""),t(this,ne,s,"f"),e(this,ne,"f")?(e(this,ne,"f").id=e(this,ne,"f").id||e(this,ae,"f"),this.setAttribute("aria-labelledby",e(this,ne,"f").id)):this.removeAttribute("aria-labelledby")),m(this,"-with-label",void 0!==e(this,ne,"f"))},re.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); }`,re.__nextId=0,re=le=i([f("m3e-nav-menu-item-group")],re);export{ie as M3eNavMenuElement,F as M3eNavMenuItemElement,re 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,EventAttribute as c,AttachInternals as h,Role as d,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,deleteCustomState as w}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,q,R,T,D,P,B,F;let H=F=class extends(l(r(c(h(d(s,"treeitem"),!0),"opening","opened","closing","closed")))){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",q).call(this)}</div><div class="label"><slot name="label" @slotchange="${e(this,_,"m",T)}"></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",B)}" @opened="${e(this,_,"m",B)}" @closing="${e(this,_,"m",B)}" @closed="${e(this,_,"m",B)}"><slot @slotchange="${e(this,_,"m",D)}"></slot></m3e-collapsible>`}};var j,V,U,G,K,N,O,Z,J,Q,X,Y,ee,te,ie;W=new WeakMap,L=new WeakMap,M=new WeakMap,z=new WeakMap,_=new WeakSet,q=function(){const t=a`<slot name="icon" @slotchange="${e(this,_,"m",R)}"></slot>`;return this.selected&&!this.hasChildItems?a`<slot name="selected-icon" @slotchange="${e(this,_,"m",R)}">${t}</slot>`:t},R=function(e){m(this,"-with-icon",u(e.target))},T=function(i){t(this,z,i.target.assignedElements({flatten:!0}).find(e=>e instanceof HTMLAnchorElement)??null,"f"),e(this,z,"f")?.setAttribute("tabindex","-1")},D=function(i){t(this,W,i.target.assignedElements({flatten:!0}).filter(e=>e instanceof F),"f");const s=this._hasChildItems;this._hasChildItems=e(this,W,"f").length>0,m(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&&(p(t,`-${e.slot}-push`)||p(t,`-${e.slot}-over`))&&setTimeout(()=>{t.removeAttribute(e.slot),t.dispatchEvent(new Event("change",{bubbles:!0}))},300)}}},B=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); }`),H.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([selected]):not(:disabled)) .base { color: ButtonText; } :host([selected]:not(:state(-with-items)):not(:disabled)) .base { forced-color-adjust: none; color: ButtonFace; background-color: ButtonText; } :host([selected]:state(-with-items):not(:disabled)) .base { background-color: unset; color: ButtonText; } }`,i([x(".state-layer")],H.prototype,"stateLayer",void 0),i([x(".focus-ring")],H.prototype,"focusRing",void 0),i([x(".ripple")],H.prototype,"ripple",void 0),i([x(".base")],H.prototype,"_base",void 0),i([E()],H.prototype,"_hasChildItems",void 0),i([A({type:Boolean,reflect:!0})],H.prototype,"open",void 0),H=F=i([g("m3e-nav-menu-item")],H);let se=ie=class extends(d(s,"tree")){constructor(){super(),j.add(this),V.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,j,"m",X).call(this,this[$].activeItem)}).onSelectedItemsChange(()=>{const t=this.selected;for(const i of this.items)i!==t&&e(this,j,"m",ee).call(this,i,!1,!1);t?.label&&b(t.label,this,{block:"start",behavior:"smooth"})}),G.set(this,t=>e(this,j,"m",Z).call(this,t)),K.set(this,t=>e(this,j,"m",J).call(this,t)),N.set(this,t=>e(this,j,"m",Q).call(this,t)),new y(this,{callback:e=>t(this,U,e,"f")}),new k(this,{callback:()=>{e(this,U,"f")||e(this,j,"m",Y).call(this)}})}get selected(){return this[$].selectedItems[0]??null}get items(){return this[$].items}expand(e){(e??this[$].items).forEach(e=>e.expand())}collapse(e){(e??this[$].items).forEach(e=>e.collapse());const t=this[$].activeItem;if(t&&!t.visible)for(let e=t.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,j,"m",O)}"></slot></div>`}};var ae,ne,oe,le,re;V=new WeakMap,U=new WeakMap,G=new WeakMap,K=new WeakMap,N=new WeakMap,j=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,j,"m",Y).call(this)):this.removeAttribute("aria-activedescendant")},Z=function(i){t(this,V,!1,"f"),e(this,j,"m",Y).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.show(0,0,!0),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&&requestAnimationFrame(()=>{e.collapse(),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&&requestAnimationFrame(()=>{e.collapse(),this[$].setActiveItem(e)})}else s.hasChildItems&&!s.open&&s.expand();break;default:this[$].onKeyDown(i)}},J=function(e){const t=this[$].activeItem;e.defaultPrevented||!t||t.disabled||" "!==e.key||t.ripple?.hide()},Q=function(i){if(!i.defaultPrevented&&!e(this,V,"f")){t(this,V,!0,"f");const s=i.composedPath().reverse().find(e=>e instanceof H);s&&!s.disabled&&e(this,j,"m",ee).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,j,"m",Y).call(this)},Y=function(){const t=this.matches(":focus")||this.matches(":focus-within"),i=!e(this,V,"f")&&this.matches(":focus-visible");this[$].items.forEach(s=>{const a=s===this[$].activeItem;e(this,j,"m",ee).call(this,s,a&&t,a&&i)})},ee=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; }`),se.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); }`,se.__nextId=0,se=ie=i([g("m3e-nav-menu")],se);let ce=re=class extends(h(d(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(),m(this,"-divided","M3E-DIVIDER"===this.previousElementSibling?.tagName)}disconnectedCallback(){super.disconnectedCallback(),w(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")),m(this,"-with-label",void 0!==e(this,oe,"f"))},ce.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); }`,ce.__nextId=0,ce=re=i([g("m3e-nav-menu-item-group")],ce);export{se as M3eNavMenuElement,H as M3eNavMenuItemElement,ce as M3eNavMenuItemGroupElement};
7
7
  //# sourceMappingURL=nav-menu.min.js.map