@m3e/web 2.5.0 → 2.5.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/all.js +35 -19
- package/dist/all.js.map +1 -1
- package/dist/all.min.js +41 -41
- package/dist/all.min.js.map +1 -1
- package/dist/breadcrumb.js +1 -0
- package/dist/breadcrumb.js.map +1 -1
- package/dist/breadcrumb.min.js.map +1 -1
- package/dist/button.js +1 -1
- package/dist/button.js.map +1 -1
- package/dist/button.min.js +1 -1
- package/dist/button.min.js.map +1 -1
- package/dist/calendar.js +6 -2
- package/dist/calendar.js.map +1 -1
- package/dist/calendar.min.js +1 -1
- package/dist/calendar.min.js.map +1 -1
- package/dist/content-pane.js +2 -2
- package/dist/content-pane.js.map +1 -1
- package/dist/content-pane.min.js +1 -1
- package/dist/content-pane.min.js.map +1 -1
- package/dist/core.js +2 -0
- package/dist/core.js.map +1 -1
- package/dist/core.min.js.map +1 -1
- package/dist/css-custom-data.json +237 -237
- package/dist/custom-elements.json +2671 -2631
- package/dist/html-custom-data.json +175 -175
- package/dist/icon-button.js +1 -1
- package/dist/icon-button.js.map +1 -1
- package/dist/icon-button.min.js +1 -1
- package/dist/icon-button.min.js.map +1 -1
- package/dist/nav-bar.js +7 -4
- package/dist/nav-bar.js.map +1 -1
- package/dist/nav-bar.min.js +1 -1
- package/dist/nav-bar.min.js.map +1 -1
- package/dist/nav-menu.js +6 -5
- package/dist/nav-menu.js.map +1 -1
- package/dist/nav-menu.min.js +1 -1
- package/dist/nav-menu.min.js.map +1 -1
- package/dist/search.js +2 -2
- package/dist/search.js.map +1 -1
- package/dist/search.min.js +1 -1
- package/dist/search.min.js.map +1 -1
- package/dist/slider.js +2 -0
- package/dist/slider.js.map +1 -1
- package/dist/slider.min.js.map +1 -1
- package/dist/split-pane.js +3 -3
- package/dist/split-pane.js.map +1 -1
- package/dist/split-pane.min.js +1 -1
- package/dist/split-pane.min.js.map +1 -1
- package/dist/src/breadcrumb/BreadcrumbItemElement.d.ts +1 -0
- package/dist/src/breadcrumb/BreadcrumbItemElement.d.ts.map +1 -1
- package/dist/src/button/styles/ButtonStyle.d.ts.map +1 -1
- package/dist/src/calendar/MonthViewElement.d.ts.map +1 -1
- package/dist/src/content-pane/ContentPaneElement.d.ts.map +1 -1
- package/dist/src/core/shared/primitives/SlideElement.d.ts +2 -0
- package/dist/src/core/shared/primitives/SlideElement.d.ts.map +1 -1
- package/dist/src/icon-button/styles/IconButtonStyle.d.ts.map +1 -1
- package/dist/src/nav-bar/NavItemElement.d.ts.map +1 -1
- package/dist/src/nav-menu/NavMenuElement.d.ts.map +1 -1
- package/dist/src/nav-menu/NavMenuItemElement.d.ts.map +1 -1
- package/dist/src/slider/SliderElement.d.ts +2 -0
- package/dist/src/slider/SliderElement.d.ts.map +1 -1
- package/dist/src/split-pane/SplitPaneElement.d.ts.map +1 -1
- package/dist/src/theme/ThemeElement.d.ts +2 -0
- package/dist/src/theme/ThemeElement.d.ts.map +1 -1
- package/dist/src/tree/TreeElement.d.ts.map +1 -1
- package/dist/theme.js +2 -0
- package/dist/theme.js.map +1 -1
- package/dist/theme.min.js.map +1 -1
- package/dist/tree.js +5 -4
- package/dist/tree.js.map +1 -1
- package/dist/tree.min.js +1 -1
- package/dist/tree.min.js.map +1 -1
- package/package.json +1 -1
package/dist/tree.js
CHANGED
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
import { __classPrivateFieldGet, __classPrivateFieldSet, __decorate } from 'tslib';
|
|
7
7
|
import { LitElement, nothing, html, unsafeCSS, css } from 'lit';
|
|
8
8
|
import { query, state, property } from 'lit/decorators.js';
|
|
9
|
-
import { Selected, Disabled, EventAttribute, AttachInternals, Role, MutationController, setCustomState, hasAssignedNodes, DesignToken, customElement, PressedController, FocusController, scrollIntoViewIfNeeded, registerStyleSheet } from '@m3e/web/core';
|
|
9
|
+
import { Selected, Disabled, EventAttribute, AttachInternals, Role, MutationController, setCustomState, hasAssignedNodes, DesignToken, customElement, PressedController, FocusController, forcedColorsActive, scrollIntoViewIfNeeded, registerStyleSheet } from '@m3e/web/core';
|
|
10
10
|
import { selectionManager, SelectionManager } from '@m3e/web/core/a11y';
|
|
11
11
|
import { M3eDirectionality } from '@m3e/web/core/bidi';
|
|
12
12
|
import { ifDefined } from 'lit/directives/if-defined.js';
|
|
@@ -654,7 +654,7 @@ _M3eTreeElement_handleKeyUp = function _M3eTreeElement_handleKeyUp() {
|
|
|
654
654
|
}
|
|
655
655
|
};
|
|
656
656
|
_M3eTreeElement_handlePointerDown = function _M3eTreeElement_handlePointerDown(e) {
|
|
657
|
-
if (!e.defaultPrevented && !__classPrivateFieldGet(this, _M3eTreeElement_ignoreFocusVisible, "f")) {
|
|
657
|
+
if (!e.defaultPrevented && !__classPrivateFieldGet(this, _M3eTreeElement_ignoreFocusVisible, "f") && !forcedColorsActive()) {
|
|
658
658
|
__classPrivateFieldSet(this, _M3eTreeElement_ignoreFocusVisible, true, "f");
|
|
659
659
|
const item = e.composedPath().reverse().find(x => x instanceof M3eTreeItemElement);
|
|
660
660
|
if (item && !item.disabled) {
|
|
@@ -673,8 +673,9 @@ _M3eTreeElement_activateItem = function _M3eTreeElement_activateItem(item) {
|
|
|
673
673
|
__classPrivateFieldGet(this, _M3eTreeElement_instances, "m", _M3eTreeElement_updateFocusVisible).call(this);
|
|
674
674
|
};
|
|
675
675
|
_M3eTreeElement_updateFocusVisible = function _M3eTreeElement_updateFocusVisible() {
|
|
676
|
-
const
|
|
677
|
-
const
|
|
676
|
+
const focusWithin = this.matches(":focus-within");
|
|
677
|
+
const focused = focusWithin || this.matches(":focus");
|
|
678
|
+
const focusVisible = focused && !__classPrivateFieldGet(this, _M3eTreeElement_ignoreFocusVisible, "f") && (forcedColorsActive() || this.matches(":focus-visible") || focusWithin && this.querySelector("a:focus-visible") !== null);
|
|
678
679
|
this[selectionManager].items.forEach(x => {
|
|
679
680
|
const active = x === this[selectionManager].activeItem;
|
|
680
681
|
__classPrivateFieldGet(this, _M3eTreeElement_instances, "m", _M3eTreeElement_updateItemFocusVisible).call(this, x, active && focused, active && focusVisible);
|
package/dist/tree.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tree.js","sources":["../../src/tree/TreeItemElement.ts","../../src/tree/TreeElement.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-unsafe-declaration-merging */\r\nimport { css, CSSResultGroup, html, LitElement, nothing, 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 M3eFocusRingElement,\r\n M3eRippleElement,\r\n M3eStateLayerElement,\r\n MutationController,\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 { M3eTreeElement } from \"./TreeElement\";\r\n\r\n/**\r\n * An expandable item in a tree.\r\n *\r\n * @description\r\n * The `m3e-tree-item` component represents a single item within an `m3e-tree`.\r\n * It supports nested child items, expand/collapse behavior, selection,\r\n * disabled state, and interaction styling. Items may contain a child group\r\n * that hosts additional `m3e-tree-item` elements.\r\n *\r\n * @tag m3e-tree-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 selected-icon - Renders the icon of the item when selected.\r\n * @slot toggle-icon - Renders the toggle icon.\r\n * @slot open-toggle-icon - Renders the toggle icon when selected.\r\n *\r\n * @attr disabled - Whether the element is disabled.\r\n * @attr indeterminate - Whether the element's 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-tree-item-font-size - Font size for the item label.\r\n * @cssprop --m3e-tree-item-font-weight - Font weight for the item label.\r\n * @cssprop --m3e-tree-item-line-height - Line height for the item label.\r\n * @cssprop --m3e-tree-item-tracking - Letter spacing for the item label.\r\n * @cssprop --m3e-tree-item-padding - Inline padding for the item.\r\n * @cssprop --m3e-tree-item-height - Height of the item.\r\n * @cssprop --m3e-tree-item-shape - Border radius of the item and focus ring.\r\n * @cssprop --m3e-tree-item-icon-size - Size of the icon.\r\n * @cssprop --m3e-tree-item-inset - Indentation for nested items.\r\n * @cssprop --m3e-tree-item-label-color - Text color for the item label.\r\n * @cssprop --m3e-tree-item-selected-label-color - Text color for selected item label.\r\n * @cssprop --m3e-tree-item-selected-container-color - Background color for selected item.\r\n * @cssprop --m3e-tree-item-selected-container-focus-color - Focus color for selected item container.\r\n * @cssprop --m3e-tree-item-selected-container-hover-color - Hover color for selected item container.\r\n * @cssprop --m3e-tree-item-selected-ripple-color - Ripple color for selected item.\r\n * @cssprop --m3e-tree-item-unselected-container-focus-color - Focus color for unselected item container.\r\n * @cssprop --m3e-tree-item-unselected-container-hover-color - Hover color for unselected item container.\r\n * @cssprop --m3e-tree-item-unselected-ripple-color - Ripple color for unselected item.\r\n * @cssprop --m3e-tree-item-disabled-color - Text color for disabled item.\r\n * @cssprop --m3e-tree-item-disabled-color-opacity - Opacity for disabled item text color.\r\n */\r\n@customElement(\"m3e-tree-item\")\r\nexport class M3eTreeItemElement extends Selected(\r\n Disabled(\r\n EventAttribute(AttachInternals(Role(LitElement, \"treeitem\"), true), \"opening\", \"opened\", \"closing\", \"closed\"),\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 height: calc(var(--m3e-tree-item-height, 3rem) + ${DesignToken.density.calc(-3)});\r\n padding-inline: var(--m3e-tree-item-padding, 1rem);\r\n font-size: var(--m3e-tree-item-font-size, ${DesignToken.typescale.standard.label.large.fontSize});\r\n font-weight: var(--m3e-tree-item-font-weight, ${DesignToken.typescale.standard.label.large.fontWeight});\r\n line-height: var(--m3e-tree-item-line-height, ${DesignToken.typescale.standard.label.large.lineHeight});\r\n letter-spacing: var(--m3e-tree-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-tree-item-shape, ${DesignToken.shape.corner.none});\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 .checkbox {\r\n flex: none;\r\n margin-inline-end: 0.5rem;\r\n }\r\n .icon,\r\n .toggle {\r\n flex: none;\r\n align-items: center;\r\n justify-content: center;\r\n position: relative;\r\n vertical-align: middle;\r\n margin-inline-end: 0.5rem;\r\n }\r\n .toggle {\r\n display: var(--_tree-item-toggle-display, none);\r\n }\r\n :host(:not(:state(-with-icon))) .icon {\r\n display: none;\r\n }\r\n .inset {\r\n margin-inline-start: calc(var(--m3e-tree-item-inset, 2rem) * var(--_tree-item-level, 0));\r\n }\r\n :host([open]) .toggle-icon {\r\n transform: rotate(90deg);\r\n }\r\n :host(:not(:state(-with-items))) .toggle {\r\n visibility: hidden;\r\n }\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 ::slotted([slot=\"open-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-tree-item-icon-size, 1.5rem);\r\n }\r\n .toggle-icon {\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(:state(-with-open-toggle-icon)[open]) slot[name=\"toggle-icon\"],\r\n :host(:state(-with-open-toggle-icon):not([open])) slot[name=\"open-toggle-icon\"] {\r\n display: none;\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-tree-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-tree-item-disabled-color, ${DesignToken.color.onSurface})\r\n var(--m3e-tree-item-disabled-color-opacity, 38%),\r\n transparent\r\n );\r\n }\r\n :host([selected]:not(:disabled)) .base {\r\n color: var(--m3e-tree-item-selected-label-color, ${DesignToken.color.onSecondaryContainer});\r\n background-color: var(--m3e-tree-item-selected-container-color, ${DesignToken.color.secondaryContainer});\r\n --m3e-state-layer-focus-color: var(\r\n --m3e-tree-item-selected-container-focus-color,\r\n ${DesignToken.color.onSecondaryContainer}\r\n );\r\n --m3e-state-layer-hover-color: var(\r\n --m3e-tree-item-selected-container-hover-color,\r\n ${DesignToken.color.onSecondaryContainer}\r\n );\r\n --m3e-ripple-color: var(--m3e-tree-item-selected-ripple-color, ${DesignToken.color.onSecondaryContainer});\r\n }\r\n :host(:not([selected]):not(:disabled)) .base {\r\n --m3e-state-layer-focus-color: var(\r\n --m3e-tree-item-unselected-container-focus-color,\r\n ${DesignToken.color.onSurface}\r\n );\r\n --m3e-state-layer-hover-color: var(\r\n --m3e-tree-item-unselected-container-hover-color,\r\n ${DesignToken.color.onSurface}\r\n );\r\n --m3e-ripple-color: var(--m3e-tree-item-unselected-ripple-color, ${DesignToken.color.onSurface});\r\n }\r\n .state-layer {\r\n margin-inline: auto;\r\n }\r\n ::slotted(a[slot=\"label\"]) {\r\n all: unset;\r\n }\r\n @media (prefers-reduced-motion) {\r\n .base,\r\n .toggle,\r\n .state-layer {\r\n transition: none !important;\r\n }\r\n }\r\n @media (forced-colors: active) {\r\n .base,\r\n .state-layer {\r\n transition: none !important;\r\n }\r\n\r\n :host(:disabled) .base {\r\n color: GrayText;\r\n }\r\n :host(:not(:disabled)) .base {\r\n color: CanvasText;\r\n background-color: Canvas;\r\n }\r\n :host([selected]:not(:state(-multi)):not(:disabled)) slot[name=\"icon\"],\r\n :host([selected]:not(:state(-multi)):not(:disabled)) slot[name=\"label\"] {\r\n color: Highlight;\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 /** @private */ @state() private _multi = false;\r\n /** @private */\r\n readonly #treeMutationController = new MutationController(this, {\r\n target: null,\r\n skipInitial: true,\r\n config: {\r\n attributeFilter: [\"multi\"],\r\n },\r\n callback: () => this.#handleTreeChange(),\r\n });\r\n\r\n /** @private */ #items: M3eTreeItemElement[] = [];\r\n /** @private */ #tree: M3eTreeElement | null = null;\r\n /** @private */ #path = new Array<M3eTreeItemElement>();\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 /**\r\n * A value indicating whether the element's selected / checked state is indeterminate.\r\n * @default false\r\n */\r\n @property({ type: Boolean, reflect: true }) indeterminate = 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<M3eTreeItemElement> {\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(): M3eTreeItemElement | 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 M3eTreeItemElement[] {\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 collapse 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-tree-item\");\r\n item;\r\n item = item.parentElement?.closest(\"m3e-tree-item\")\r\n ) {\r\n this.#path.push(item);\r\n }\r\n this.#path.reverse();\r\n\r\n this.style.setProperty(\"--_tree-item-level\", `${this.level - 1}`);\r\n this.#tree = this.closest(\"m3e-tree\");\r\n if (this.#tree) {\r\n this.#treeMutationController.observe(this.#tree);\r\n this.#handleTreeChange();\r\n }\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 if (this.#tree) {\r\n this.#treeMutationController.unobserve(this.#tree);\r\n }\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 (\r\n changedProperties.has(\"selected\") ||\r\n changedProperties.has(\"indeterminate\") ||\r\n changedProperties.has(\"_multi\")\r\n ) {\r\n if (this.#tree?.multi) {\r\n this.ariaSelected = null;\r\n this.ariaChecked = this.indeterminate ? \"mixed\" : `${this.selected}`;\r\n } else {\r\n this.ariaSelected = `${this.selected}`;\r\n }\r\n }\r\n\r\n if (changedProperties.has(\"selected\")) {\r\n for (const icon of this.querySelectorAll(\r\n \":scope > m3e-icon[slot]:not([slot='toggle-icon']):not([slot='open-toggle-icon'])\",\r\n )) {\r\n icon.toggleAttribute(\"filled\", this.selected);\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 aria-hidden=\"true\" class=\"inset\"></div>\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=\"M504-480 320-664l56-56 240 240-240 240-56-56 184-184Z\" />\r\n </svg>\r\n </slot>\r\n <slot name=\"open-toggle-icon\" @slotchange=\"${this.#handleOpenToggleIconSlotChange}\"></slot>\r\n </div>\r\n ${this._multi\r\n ? html`<m3e-pseudo-checkbox\r\n class=\"checkbox\"\r\n ?checked=\"${this.selected}\"\r\n ?indeterminate=\"${this.indeterminate}\"\r\n ?disabled=\"${this.disabled}\"\r\n @click=\"${this.#handleCheckboxClick}\"\r\n >\r\n </m3e-pseudo-checkbox>`\r\n : nothing}\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 </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.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 #handleOpenToggleIconSlotChange(e: Event): void {\r\n setCustomState(this, \"-with-open-toggle-icon\", hasAssignedNodes(<HTMLSlotElement>e.target));\r\n }\r\n\r\n /** @private */\r\n #handleIconSlotChange(e: Event): void {\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 M3eTreeItemElement);\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 if (this._multi && this.#tree?.cascade) {\r\n let anySelected = false,\r\n anyDeselected = false;\r\n\r\n for (const child of this.querySelectorAll(\"m3e-tree-item\")) {\r\n anySelected = anySelected || child.selected;\r\n anyDeselected = anyDeselected || !child.selected;\r\n if (anySelected && anyDeselected) {\r\n break;\r\n }\r\n }\r\n if (anyDeselected) {\r\n this.#tree?.[selectionManager].deselect(this);\r\n this.indeterminate = anySelected;\r\n } else {\r\n this.#tree?.[selectionManager].select(this, false);\r\n this.indeterminate = false;\r\n }\r\n }\r\n }\r\n }\r\n\r\n /** @private */\r\n #handleTreeChange(): void {\r\n this._multi = this.#tree?.multi === true;\r\n setCustomState(this, \"-multi\", this._multi);\r\n }\r\n\r\n /** @private */\r\n #handleClick(): void {\r\n if (this.disabled) return;\r\n\r\n this.#tree?.[selectionManager].setActiveItem(this);\r\n if (!this._hasChildItems) {\r\n if (this._multi) {\r\n if (this.selected) {\r\n this.#tree?.deselect(this);\r\n } else {\r\n this.#tree?.select(this);\r\n }\r\n } else {\r\n this.#tree?.select(this);\r\n }\r\n this.#link?.click();\r\n } else {\r\n if (!this._multi) {\r\n this.#tree?.select(this);\r\n }\r\n this.toggle();\r\n }\r\n }\r\n\r\n /** @private */\r\n #handleCheckboxClick(e: Event): void {\r\n e.stopPropagation();\r\n\r\n if (!this.selected) {\r\n this.#tree?.select(this);\r\n } else {\r\n this.#tree?.deselect(this);\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 M3eTreeItemElementEventMap 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 M3eTreeItemElement {\r\n addEventListener<K extends keyof M3eTreeItemElementEventMap>(\r\n type: K,\r\n listener: (this: M3eTreeItemElement, ev: M3eTreeItemElementEventMap[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 M3eTreeItemElementEventMap>(\r\n type: K,\r\n listener: (this: M3eTreeItemElement, ev: M3eTreeItemElementEventMap[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-tree-item\": M3eTreeItemElement;\r\n }\r\n}\r\n","import { css, CSSResultGroup, html, LitElement, PropertyValues, unsafeCSS } from \"lit\";\r\nimport { property } from \"lit/decorators.js\";\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 { M3eTreeItemElement } from \"./TreeItemElement\";\r\n\r\n/**\r\n * Presents hierarchical data in a tree structure.\r\n *\r\n * @description\r\n * The `m3e-tree` component presents hierarchical data in a structure that users can\r\n * navigate, with nested levels that open and collapse as needed.\r\n *\r\n * @example\r\n * The following example illustrates a simple tree with nested child items.\r\n * ```html\r\n * <m3e-tree>\r\n * <m3e-tree-item open>\r\n * <span slot=\"label\">Getting Started</span>\r\n * <m3e-tree-item>\r\n * <span slot=\"label\">Overview</span>\r\n * </m3e-tree-item>\r\n * <m3e-tree-item>\r\n * <span slot=\"label\">Installation</span>\r\n * </m3e-tree-item>\r\n * </m3e-tree-item>\r\n * <m3e-tree-item>\r\n * <span slot=\"label\">Components</span>\r\n * <m3e-tree-item>\r\n * <span slot=\"label\">Button</span>\r\n * </m3e-tree-item>\r\n * <m3e-tree-item>\r\n * <span slot=\"label\">Card</span>\r\n * </m3e-tree-item>\r\n * </m3e-tree-item>\r\n * </m3e-tree>\r\n * ```\r\n *\r\n * @example\r\n * The next example demonstrates multi-selection with cascading selection state.\r\n * ```html\r\n * <m3e-tree multi cascade>\r\n * <m3e-tree-item>\r\n * <span slot=\"label\">Fruits</span>\r\n * <m3e-tree-item>\r\n * <span slot=\"label\">Apples</span>\r\n * </m3e-tree-item>\r\n * <m3e-tree-item>\r\n * <span slot=\"label\">Oranges</span>\r\n * </m3e-tree-item>\r\n * <m3e-tree-item>\r\n * <span slot=\"label\">Bananas</span>\r\n * </m3e-tree-item>\r\n * </m3e-tree-item>\r\n * <m3e-tree-item>\r\n * <span slot=\"label\">Vegetables</span>\r\n * <m3e-tree-item>\r\n * <span slot=\"label\">Carrots</span>\r\n * </m3e-tree-item>\r\n * <m3e-tree-item>\r\n * <span slot=\"label\">Broccoli</span>\r\n * </m3e-tree-item>\r\n * <m3e-tree-item>\r\n * <span slot=\"label\">Spinach</span>\r\n * </m3e-tree-item>\r\n * </m3e-tree-item>\r\n * </m3e-tree>\r\n * ```\r\n *\r\n * @tag m3e-tree\r\n *\r\n * @slot - Renders the items of the tree.\r\n *\r\n * @attr multi - Whether multiple items can be selected.\r\n * @attr cascade -Whether multiple item selection cascades to child items.\r\n *\r\n * @fires change - Emitted when the selected state changes.\r\n *\r\n * @cssprop --m3e-tree-scrollbar-width - Width of the tree scrollbar.\r\n * @cssprop --m3e-tree-scrollbar-color - Color of the tree scrollbar.\r\n */\r\n@customElement(\"m3e-tree\")\r\nexport class M3eTreeElement extends Role(LitElement, \"tree\") {\r\n static {\r\n // NOTE: unsafeCSS used here due to linting error with use of '>'.\r\n registerStyleSheet(css`\r\n ${unsafeCSS(`m3e-tree:has(> m3e-tree-item:state(-with-items)) {\r\n --_tree-item-toggle-display: flex;\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 }\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<M3eTreeItemElement>()\r\n .withVerticalOrientation()\r\n .withHomeAndEnd()\r\n .withPageUpAndDown()\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\r\n /** @private */ readonly #keyDownHandler = (e: KeyboardEvent) => this.#handleKeyDown(e);\r\n /** @private */ readonly #keyUpHandler = () => this.#handleKeyUp();\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 /**\r\n * Whether multiple items can be selected.\r\n * @default false\r\n */\r\n @property({ type: Boolean, reflect: true }) multi = false;\r\n\r\n /**\r\n * Whether multiple item selection cascades to child items.\r\n * @default false\r\n */\r\n @property({ type: Boolean, reflect: true }) cascade = false;\r\n\r\n /** The selected items of the tree. */\r\n get selected(): readonly M3eTreeItemElement[] {\r\n return this[selectionManager].selectedItems;\r\n }\r\n\r\n /** All the items of the tree. */\r\n get items(): readonly M3eTreeItemElement[] {\r\n return this[selectionManager].items;\r\n }\r\n\r\n /**\r\n * Expands all items, and optionally, all descendants.\r\n * @param {boolean} [descendants=false] Whether to expand all descendants.\r\n */\r\n expand(descendants?: boolean): void;\r\n\r\n /**\r\n * Expands the specified items, and optionally, all descendants.\r\n * @param {M3eTreeItemElement[]} items The items to expand.\r\n * @param {boolean} [descendants=false] Whether to expand all descendants.\r\n */\r\n expand(items: M3eTreeItemElement[], descendants?: boolean): void;\r\n\r\n /** @internal */\r\n expand(itemsOrDescendants?: M3eTreeItemElement[] | boolean, maybeDescendants: boolean = false): void {\r\n const items = Array.isArray(itemsOrDescendants) ? itemsOrDescendants : this[selectionManager].items;\r\n const descendants = typeof itemsOrDescendants === \"boolean\" ? itemsOrDescendants : maybeDescendants;\r\n items.forEach((x) => x.expand(descendants));\r\n }\r\n\r\n /**\r\n * Collapses all items, and optionally, all descendants.\r\n * @param {boolean} [descendants=false] Whether to collapse all descendants.\r\n */\r\n collapse(descendants?: boolean): void;\r\n\r\n /**\r\n * Collapses the specified items, and optionally, all descendants.\r\n * @param {M3eTreeItemElement[]} items The items to collapse.\r\n * @param {boolean} [descendants=false] Whether to collapse all descendants.\r\n */\r\n collapse(items: M3eTreeItemElement[], descendants?: boolean): void;\r\n\r\n /** @internal */\r\n collapse(itemsOrDescendants?: M3eTreeItemElement[] | boolean, maybeDescendants: boolean = false): void {\r\n const items = Array.isArray(itemsOrDescendants) ? itemsOrDescendants : this[selectionManager].items;\r\n const descendants = typeof itemsOrDescendants === \"boolean\" ? itemsOrDescendants : maybeDescendants;\r\n\r\n items.forEach((x) => x.collapse(descendants));\r\n const activeItem = this[selectionManager].activeItem;\r\n if (activeItem && !activeItem.visible) {\r\n for (let parent = activeItem.parentItem; parent; parent = parent.parentItem) {\r\n if (parent.visible) {\r\n this[selectionManager].setActiveItem(parent);\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Selects the specified item.\r\n * @param {M3eTreeItemElement} item The item to select.\r\n * @param {boolean} [activate=false] A value indicating whether to activate the item.\r\n */\r\n select(item: M3eTreeItemElement, activate: boolean = false): void {\r\n this[selectionManager].select(item, activate);\r\n item.indeterminate = false;\r\n if (this.multi && this.cascade) {\r\n if (item.hasChildItems) {\r\n item.childItems.forEach((x) => this.select(x));\r\n }\r\n\r\n this.#cascadeAncestorSelected(item);\r\n }\r\n if (activate) {\r\n this.#activateItem(item);\r\n }\r\n this.dispatchEvent(new Event(\"change\", { bubbles: true }));\r\n }\r\n\r\n /**\r\n * Deselects the specified item.\r\n * @param {M3eTreeItemElement} item The item to deselect.\r\n */\r\n deselect(item: M3eTreeItemElement): void {\r\n this[selectionManager].deselect(item);\r\n item.indeterminate = false;\r\n if (this.multi && this.cascade) {\r\n if (item.hasChildItems) {\r\n item.childItems.forEach((x) => this.deselect(x));\r\n }\r\n\r\n this.#cascadeAncestorSelected(item);\r\n }\r\n this.dispatchEvent(new Event(\"change\", { bubbles: true }));\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 willUpdate(_changedProperties: PropertyValues<this>): void {\r\n super.willUpdate(_changedProperties);\r\n\r\n if (_changedProperties.has(\"multi\")) {\r\n this[selectionManager].multi = this.multi;\r\n if (this.multi) {\r\n this.setAttribute(\"aria-multiselectable\", \"true\");\r\n } else {\r\n this.removeAttribute(\"aria-multiselectable\");\r\n }\r\n }\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 const { added } = this[selectionManager].setItems([...this.querySelectorAll(\"m3e-tree-item\")]);\r\n for (const item of added) {\r\n item.id = item.id || `m3e-tree-item-${M3eTreeElement.__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 if (!this.multi) {\r\n if (!item.selected) {\r\n this.select(item);\r\n item.link?.click();\r\n }\r\n } else {\r\n if (item.ripple && !item.ripple.visible) {\r\n item.ripple.centered = true;\r\n item.ripple.show(0, 0, true);\r\n item.ripple.centered = false;\r\n }\r\n item.link?.click();\r\n }\r\n break;\r\n\r\n case \" \":\r\n e.preventDefault();\r\n\r\n if (this.multi) {\r\n if (item.selected) {\r\n this.deselect(item);\r\n } else {\r\n this.select(item);\r\n }\r\n } else {\r\n if (item.ripple && !item.ripple.visible) {\r\n item.ripple.centered = true;\r\n item.ripple.show(0, 0, true);\r\n item.ripple.centered = false;\r\n }\r\n this.select(item);\r\n item.link?.click();\r\n }\r\n\r\n break;\r\n\r\n case \"*\":\r\n e.preventDefault();\r\n item.expand(true);\r\n break;\r\n\r\n case \"Left\":\r\n case \"ArrowLeft\":\r\n e.preventDefault();\r\n if (M3eDirectionality.current === \"ltr\") {\r\n if (item.hasChildItems && item.open) {\r\n requestAnimationFrame(() => item.collapse());\r\n } else {\r\n const parent = item.parentItem;\r\n if (parent) {\r\n this[selectionManager].setActiveItem(parent);\r\n }\r\n }\r\n } else if (item.hasChildItems && !item.open) {\r\n item.expand();\r\n }\r\n\r\n break;\r\n\r\n case \"Right\":\r\n case \"ArrowRight\":\r\n e.preventDefault();\r\n if (M3eDirectionality.current === \"rtl\") {\r\n if (item.hasChildItems && item.open) {\r\n requestAnimationFrame(() => item.collapse());\r\n } else {\r\n const parent = item.parentItem;\r\n if (parent) {\r\n this[selectionManager].setActiveItem(parent);\r\n }\r\n }\r\n } else if (item.hasChildItems && !item.open) {\r\n item.expand();\r\n }\r\n break;\r\n\r\n default:\r\n this[selectionManager].onKeyDown(e);\r\n break;\r\n }\r\n }\r\n\r\n /** @private */\r\n #handleKeyUp(): void {\r\n const item = this[selectionManager].activeItem;\r\n if (item && !item.disabled && item.ripple?.visible) {\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 M3eTreeItemElement);\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: M3eTreeItemElement): 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: M3eTreeItemElement, 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 /** @private */\r\n #cascadeAncestorSelected(item: M3eTreeItemElement): void {\r\n for (let parent = item.parentItem; parent; parent = parent.parentItem) {\r\n let hasSelected = false,\r\n hasDeselected = false;\r\n\r\n for (const child of parent.querySelectorAll(\"m3e-tree-item\")) {\r\n hasSelected = hasSelected || child.selected;\r\n hasDeselected = hasDeselected || !child.selected;\r\n if (hasSelected && hasDeselected) {\r\n break;\r\n }\r\n }\r\n if (hasDeselected) {\r\n this[selectionManager].deselect(parent);\r\n parent.indeterminate = hasSelected;\r\n } else {\r\n this[selectionManager].select(parent, false);\r\n parent.indeterminate = false;\r\n }\r\n }\r\n }\r\n}\r\n\r\ndeclare global {\r\n interface HTMLElementTagNameMap {\r\n \"m3e-tree\": M3eTreeElement;\r\n }\r\n}\r\n"],"names":["M3eTreeItemElement","M3eTreeItemElement_1","Selected","Disabled","EventAttribute","AttachInternals","Role","LitElement","constructor","_hasChildItems","_multi","_M3eTreeItemElement_treeMutationController","set","MutationController","target","skipInitial","config","attributeFilter","callback","__classPrivateFieldGet","_M3eTreeItemElement_instances","_M3eTreeItemElement_handleTreeChange","call","_M3eTreeItemElement_items","_M3eTreeItemElement_tree","_M3eTreeItemElement_path","Array","_M3eTreeItemElement_link","open","indeterminate","link","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","observe","disconnectedCallback","unobserve","update","changedProperties","has","multi","ariaSelected","ariaChecked","selected","icon","querySelectorAll","toggleAttribute","ariaExpanded","disabled","firstUpdated","_changedProperties","base","focusRing","stateLayer","ripple","attach","render","html","_M3eTreeItemElement_handleClick","_M3eTreeItemElement_handleOpenToggleIconSlotChange","_M3eTreeItemElement_handleCheckboxClick","nothing","_M3eTreeItemElement_renderIcon","_M3eTreeItemElement_handleSlotChange","ifDefined","undefined","_M3eTreeItemElement_handleCollapsibleEvent","_M3eTreeItemElement_handleItemSlotChange","_M3eTreeItemElement_handleIconSlotChange","e","setCustomState","hasAssignedNodes","assignedElements","flatten","find","HTMLAnchorElement","setAttribute","filter","hadChildItems","cascade","anySelected","anyDeselected","child","selectionManager","deselect","select","setActiveItem","click","stopPropagation","dispatchEvent","Event","type","bubbles","styles","css","DesignToken","density","calc","typescale","standard","large","fontSize","fontWeight","lineHeight","tracking","unsafeCSS","motion","duration","short4","easing","shape","corner","none","medium1","color","onSurfaceVariant","onSurface","onSecondaryContainer","secondaryContainer","__decorate","query","prototype","state","property","Boolean","reflect","customElement","M3eTreeElement","M3eTreeElement_1","_M3eTreeElement_ignoreFocusVisible","_M3eTreeElement_ignoreFocus","_b","SelectionManager","withVerticalOrientation","withHomeAndEnd","withPageUpAndDown","withTypeahead","withSkipPredicate","disableRovingTabIndex","onActiveItemChange","activeItem","_M3eTreeElement_instances","_M3eTreeElement_activateItem","_M3eTreeElement_keyDownHandler","_M3eTreeElement_keyUpHandler","_M3eTreeElement_handleKeyUp","_M3eTreeElement_pointerDownHandler","PressedController","pressed","FocusController","_M3eTreeElement_updateFocusVisible","selectedItems","items","itemsOrDescendants","maybeDescendants","isArray","parent","activate","_M3eTreeElement_cascadeAncestorSelected","addEventListener","removeEventListener","willUpdate","removeAttribute","_M3eTreeElement_handleSlotChange","added","setItems","id","__nextId","defaultPrevented","key","centered","show","preventDefault","M3eDirectionality","current","requestAnimationFrame","onKeyDown","hide","composedPath","_M3eTreeElement_updateItemFocusVisible","scrollIntoViewIfNeeded","block","behavior","focused","matches","focusVisible","active","hasSelected","hasDeselected","registerStyleSheet","scrollbar","width"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"tree.js","sources":["../../src/tree/TreeItemElement.ts","../../src/tree/TreeElement.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-unsafe-declaration-merging */\r\nimport { css, CSSResultGroup, html, LitElement, nothing, 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 M3eFocusRingElement,\r\n M3eRippleElement,\r\n M3eStateLayerElement,\r\n MutationController,\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 { M3eTreeElement } from \"./TreeElement\";\r\n\r\n/**\r\n * An expandable item in a tree.\r\n *\r\n * @description\r\n * The `m3e-tree-item` component represents a single item within an `m3e-tree`.\r\n * It supports nested child items, expand/collapse behavior, selection,\r\n * disabled state, and interaction styling. Items may contain a child group\r\n * that hosts additional `m3e-tree-item` elements.\r\n *\r\n * @tag m3e-tree-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 selected-icon - Renders the icon of the item when selected.\r\n * @slot toggle-icon - Renders the toggle icon.\r\n * @slot open-toggle-icon - Renders the toggle icon when selected.\r\n *\r\n * @attr disabled - Whether the element is disabled.\r\n * @attr indeterminate - Whether the element's 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-tree-item-font-size - Font size for the item label.\r\n * @cssprop --m3e-tree-item-font-weight - Font weight for the item label.\r\n * @cssprop --m3e-tree-item-line-height - Line height for the item label.\r\n * @cssprop --m3e-tree-item-tracking - Letter spacing for the item label.\r\n * @cssprop --m3e-tree-item-padding - Inline padding for the item.\r\n * @cssprop --m3e-tree-item-height - Height of the item.\r\n * @cssprop --m3e-tree-item-shape - Border radius of the item and focus ring.\r\n * @cssprop --m3e-tree-item-icon-size - Size of the icon.\r\n * @cssprop --m3e-tree-item-inset - Indentation for nested items.\r\n * @cssprop --m3e-tree-item-label-color - Text color for the item label.\r\n * @cssprop --m3e-tree-item-selected-label-color - Text color for selected item label.\r\n * @cssprop --m3e-tree-item-selected-container-color - Background color for selected item.\r\n * @cssprop --m3e-tree-item-selected-container-focus-color - Focus color for selected item container.\r\n * @cssprop --m3e-tree-item-selected-container-hover-color - Hover color for selected item container.\r\n * @cssprop --m3e-tree-item-selected-ripple-color - Ripple color for selected item.\r\n * @cssprop --m3e-tree-item-unselected-container-focus-color - Focus color for unselected item container.\r\n * @cssprop --m3e-tree-item-unselected-container-hover-color - Hover color for unselected item container.\r\n * @cssprop --m3e-tree-item-unselected-ripple-color - Ripple color for unselected item.\r\n * @cssprop --m3e-tree-item-disabled-color - Text color for disabled item.\r\n * @cssprop --m3e-tree-item-disabled-color-opacity - Opacity for disabled item text color.\r\n */\r\n@customElement(\"m3e-tree-item\")\r\nexport class M3eTreeItemElement extends Selected(\r\n Disabled(\r\n EventAttribute(AttachInternals(Role(LitElement, \"treeitem\"), true), \"opening\", \"opened\", \"closing\", \"closed\"),\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 height: calc(var(--m3e-tree-item-height, 3rem) + ${DesignToken.density.calc(-3)});\r\n padding-inline: var(--m3e-tree-item-padding, 1rem);\r\n font-size: var(--m3e-tree-item-font-size, ${DesignToken.typescale.standard.label.large.fontSize});\r\n font-weight: var(--m3e-tree-item-font-weight, ${DesignToken.typescale.standard.label.large.fontWeight});\r\n line-height: var(--m3e-tree-item-line-height, ${DesignToken.typescale.standard.label.large.lineHeight});\r\n letter-spacing: var(--m3e-tree-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-tree-item-shape, ${DesignToken.shape.corner.none});\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 .checkbox {\r\n flex: none;\r\n margin-inline-end: 0.5rem;\r\n }\r\n .icon,\r\n .toggle {\r\n flex: none;\r\n align-items: center;\r\n justify-content: center;\r\n position: relative;\r\n vertical-align: middle;\r\n margin-inline-end: 0.5rem;\r\n }\r\n .toggle {\r\n display: var(--_tree-item-toggle-display, none);\r\n }\r\n :host(:not(:state(-with-icon))) .icon {\r\n display: none;\r\n }\r\n .inset {\r\n margin-inline-start: calc(var(--m3e-tree-item-inset, 2rem) * var(--_tree-item-level, 0));\r\n }\r\n :host([open]) .toggle-icon {\r\n transform: rotate(90deg);\r\n }\r\n :host(:not(:state(-with-items))) .toggle {\r\n visibility: hidden;\r\n }\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 ::slotted([slot=\"open-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-tree-item-icon-size, 1.5rem);\r\n }\r\n .toggle-icon {\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(:state(-with-open-toggle-icon)[open]) slot[name=\"toggle-icon\"],\r\n :host(:state(-with-open-toggle-icon):not([open])) slot[name=\"open-toggle-icon\"] {\r\n display: none;\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-tree-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-tree-item-disabled-color, ${DesignToken.color.onSurface})\r\n var(--m3e-tree-item-disabled-color-opacity, 38%),\r\n transparent\r\n );\r\n }\r\n :host([selected]:not(:disabled)) .base {\r\n color: var(--m3e-tree-item-selected-label-color, ${DesignToken.color.onSecondaryContainer});\r\n background-color: var(--m3e-tree-item-selected-container-color, ${DesignToken.color.secondaryContainer});\r\n --m3e-state-layer-focus-color: var(\r\n --m3e-tree-item-selected-container-focus-color,\r\n ${DesignToken.color.onSecondaryContainer}\r\n );\r\n --m3e-state-layer-hover-color: var(\r\n --m3e-tree-item-selected-container-hover-color,\r\n ${DesignToken.color.onSecondaryContainer}\r\n );\r\n --m3e-ripple-color: var(--m3e-tree-item-selected-ripple-color, ${DesignToken.color.onSecondaryContainer});\r\n }\r\n :host(:not([selected]):not(:disabled)) .base {\r\n --m3e-state-layer-focus-color: var(\r\n --m3e-tree-item-unselected-container-focus-color,\r\n ${DesignToken.color.onSurface}\r\n );\r\n --m3e-state-layer-hover-color: var(\r\n --m3e-tree-item-unselected-container-hover-color,\r\n ${DesignToken.color.onSurface}\r\n );\r\n --m3e-ripple-color: var(--m3e-tree-item-unselected-ripple-color, ${DesignToken.color.onSurface});\r\n }\r\n .state-layer {\r\n margin-inline: auto;\r\n }\r\n ::slotted(a[slot=\"label\"]) {\r\n all: unset;\r\n }\r\n @media (prefers-reduced-motion) {\r\n .base,\r\n .toggle,\r\n .state-layer {\r\n transition: none !important;\r\n }\r\n }\r\n @media (forced-colors: active) {\r\n .base,\r\n .state-layer {\r\n transition: none !important;\r\n }\r\n\r\n :host(:disabled) .base {\r\n color: GrayText;\r\n }\r\n :host(:not(:disabled)) .base {\r\n color: CanvasText;\r\n background-color: Canvas;\r\n }\r\n :host([selected]:not(:state(-multi)):not(:disabled)) slot[name=\"icon\"],\r\n :host([selected]:not(:state(-multi)):not(:disabled)) slot[name=\"label\"] {\r\n color: Highlight;\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 /** @private */ @state() private _multi = false;\r\n /** @private */\r\n readonly #treeMutationController = new MutationController(this, {\r\n target: null,\r\n skipInitial: true,\r\n config: {\r\n attributeFilter: [\"multi\"],\r\n },\r\n callback: () => this.#handleTreeChange(),\r\n });\r\n\r\n /** @private */ #items: M3eTreeItemElement[] = [];\r\n /** @private */ #tree: M3eTreeElement | null = null;\r\n /** @private */ #path = new Array<M3eTreeItemElement>();\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 /**\r\n * A value indicating whether the element's selected / checked state is indeterminate.\r\n * @default false\r\n */\r\n @property({ type: Boolean, reflect: true }) indeterminate = 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<M3eTreeItemElement> {\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(): M3eTreeItemElement | 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 M3eTreeItemElement[] {\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 collapse 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-tree-item\");\r\n item;\r\n item = item.parentElement?.closest(\"m3e-tree-item\")\r\n ) {\r\n this.#path.push(item);\r\n }\r\n this.#path.reverse();\r\n\r\n this.style.setProperty(\"--_tree-item-level\", `${this.level - 1}`);\r\n this.#tree = this.closest(\"m3e-tree\");\r\n if (this.#tree) {\r\n this.#treeMutationController.observe(this.#tree);\r\n this.#handleTreeChange();\r\n }\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 if (this.#tree) {\r\n this.#treeMutationController.unobserve(this.#tree);\r\n }\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 (\r\n changedProperties.has(\"selected\") ||\r\n changedProperties.has(\"indeterminate\") ||\r\n changedProperties.has(\"_multi\")\r\n ) {\r\n if (this.#tree?.multi) {\r\n this.ariaSelected = null;\r\n this.ariaChecked = this.indeterminate ? \"mixed\" : `${this.selected}`;\r\n } else {\r\n this.ariaSelected = `${this.selected}`;\r\n }\r\n }\r\n\r\n if (changedProperties.has(\"selected\")) {\r\n for (const icon of this.querySelectorAll(\r\n \":scope > m3e-icon[slot]:not([slot='toggle-icon']):not([slot='open-toggle-icon'])\",\r\n )) {\r\n icon.toggleAttribute(\"filled\", this.selected);\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 aria-hidden=\"true\" class=\"inset\"></div>\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=\"M504-480 320-664l56-56 240 240-240 240-56-56 184-184Z\" />\r\n </svg>\r\n </slot>\r\n <slot name=\"open-toggle-icon\" @slotchange=\"${this.#handleOpenToggleIconSlotChange}\"></slot>\r\n </div>\r\n ${this._multi\r\n ? html`<m3e-pseudo-checkbox\r\n class=\"checkbox\"\r\n ?checked=\"${this.selected}\"\r\n ?indeterminate=\"${this.indeterminate}\"\r\n ?disabled=\"${this.disabled}\"\r\n @click=\"${this.#handleCheckboxClick}\"\r\n >\r\n </m3e-pseudo-checkbox>`\r\n : nothing}\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 </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.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 #handleOpenToggleIconSlotChange(e: Event): void {\r\n setCustomState(this, \"-with-open-toggle-icon\", hasAssignedNodes(<HTMLSlotElement>e.target));\r\n }\r\n\r\n /** @private */\r\n #handleIconSlotChange(e: Event): void {\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 M3eTreeItemElement);\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 if (this._multi && this.#tree?.cascade) {\r\n let anySelected = false,\r\n anyDeselected = false;\r\n\r\n for (const child of this.querySelectorAll(\"m3e-tree-item\")) {\r\n anySelected = anySelected || child.selected;\r\n anyDeselected = anyDeselected || !child.selected;\r\n if (anySelected && anyDeselected) {\r\n break;\r\n }\r\n }\r\n if (anyDeselected) {\r\n this.#tree?.[selectionManager].deselect(this);\r\n this.indeterminate = anySelected;\r\n } else {\r\n this.#tree?.[selectionManager].select(this, false);\r\n this.indeterminate = false;\r\n }\r\n }\r\n }\r\n }\r\n\r\n /** @private */\r\n #handleTreeChange(): void {\r\n this._multi = this.#tree?.multi === true;\r\n setCustomState(this, \"-multi\", this._multi);\r\n }\r\n\r\n /** @private */\r\n #handleClick(): void {\r\n if (this.disabled) return;\r\n\r\n this.#tree?.[selectionManager].setActiveItem(this);\r\n if (!this._hasChildItems) {\r\n if (this._multi) {\r\n if (this.selected) {\r\n this.#tree?.deselect(this);\r\n } else {\r\n this.#tree?.select(this);\r\n }\r\n } else {\r\n this.#tree?.select(this);\r\n }\r\n this.#link?.click();\r\n } else {\r\n if (!this._multi) {\r\n this.#tree?.select(this);\r\n }\r\n this.toggle();\r\n }\r\n }\r\n\r\n /** @private */\r\n #handleCheckboxClick(e: Event): void {\r\n e.stopPropagation();\r\n\r\n if (!this.selected) {\r\n this.#tree?.select(this);\r\n } else {\r\n this.#tree?.deselect(this);\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 M3eTreeItemElementEventMap 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 M3eTreeItemElement {\r\n addEventListener<K extends keyof M3eTreeItemElementEventMap>(\r\n type: K,\r\n listener: (this: M3eTreeItemElement, ev: M3eTreeItemElementEventMap[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 M3eTreeItemElementEventMap>(\r\n type: K,\r\n listener: (this: M3eTreeItemElement, ev: M3eTreeItemElementEventMap[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-tree-item\": M3eTreeItemElement;\r\n }\r\n}\r\n","import { css, CSSResultGroup, html, LitElement, PropertyValues, unsafeCSS } from \"lit\";\r\nimport { property } from \"lit/decorators.js\";\r\n\r\nimport {\r\n customElement,\r\n DesignToken,\r\n FocusController,\r\n forcedColorsActive,\r\n PressedController,\r\n registerStyleSheet,\r\n Role,\r\n scrollIntoViewIfNeeded,\r\n} from \"@m3e/web/core\";\r\n\r\nimport { SelectionManager, selectionManager } from \"@m3e/web/core/a11y\";\r\nimport { M3eDirectionality } from \"@m3e/web/core/bidi\";\r\n\r\nimport { M3eTreeItemElement } from \"./TreeItemElement\";\r\n\r\n/**\r\n * Presents hierarchical data in a tree structure.\r\n *\r\n * @description\r\n * The `m3e-tree` component presents hierarchical data in a structure that users can\r\n * navigate, with nested levels that open and collapse as needed.\r\n *\r\n * @example\r\n * The following example illustrates a simple tree with nested child items.\r\n * ```html\r\n * <m3e-tree>\r\n * <m3e-tree-item open>\r\n * <span slot=\"label\">Getting Started</span>\r\n * <m3e-tree-item>\r\n * <span slot=\"label\">Overview</span>\r\n * </m3e-tree-item>\r\n * <m3e-tree-item>\r\n * <span slot=\"label\">Installation</span>\r\n * </m3e-tree-item>\r\n * </m3e-tree-item>\r\n * <m3e-tree-item>\r\n * <span slot=\"label\">Components</span>\r\n * <m3e-tree-item>\r\n * <span slot=\"label\">Button</span>\r\n * </m3e-tree-item>\r\n * <m3e-tree-item>\r\n * <span slot=\"label\">Card</span>\r\n * </m3e-tree-item>\r\n * </m3e-tree-item>\r\n * </m3e-tree>\r\n * ```\r\n *\r\n * @example\r\n * The next example demonstrates multi-selection with cascading selection state.\r\n * ```html\r\n * <m3e-tree multi cascade>\r\n * <m3e-tree-item>\r\n * <span slot=\"label\">Fruits</span>\r\n * <m3e-tree-item>\r\n * <span slot=\"label\">Apples</span>\r\n * </m3e-tree-item>\r\n * <m3e-tree-item>\r\n * <span slot=\"label\">Oranges</span>\r\n * </m3e-tree-item>\r\n * <m3e-tree-item>\r\n * <span slot=\"label\">Bananas</span>\r\n * </m3e-tree-item>\r\n * </m3e-tree-item>\r\n * <m3e-tree-item>\r\n * <span slot=\"label\">Vegetables</span>\r\n * <m3e-tree-item>\r\n * <span slot=\"label\">Carrots</span>\r\n * </m3e-tree-item>\r\n * <m3e-tree-item>\r\n * <span slot=\"label\">Broccoli</span>\r\n * </m3e-tree-item>\r\n * <m3e-tree-item>\r\n * <span slot=\"label\">Spinach</span>\r\n * </m3e-tree-item>\r\n * </m3e-tree-item>\r\n * </m3e-tree>\r\n * ```\r\n *\r\n * @tag m3e-tree\r\n *\r\n * @slot - Renders the items of the tree.\r\n *\r\n * @attr multi - Whether multiple items can be selected.\r\n * @attr cascade -Whether multiple item selection cascades to child items.\r\n *\r\n * @fires change - Emitted when the selected state changes.\r\n *\r\n * @cssprop --m3e-tree-scrollbar-width - Width of the tree scrollbar.\r\n * @cssprop --m3e-tree-scrollbar-color - Color of the tree scrollbar.\r\n */\r\n@customElement(\"m3e-tree\")\r\nexport class M3eTreeElement extends Role(LitElement, \"tree\") {\r\n static {\r\n // NOTE: unsafeCSS used here due to linting error with use of '>'.\r\n registerStyleSheet(css`\r\n ${unsafeCSS(`m3e-tree:has(> m3e-tree-item:state(-with-items)) {\r\n --_tree-item-toggle-display: flex;\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 }\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<M3eTreeItemElement>()\r\n .withVerticalOrientation()\r\n .withHomeAndEnd()\r\n .withPageUpAndDown()\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\r\n /** @private */ readonly #keyDownHandler = (e: KeyboardEvent) => this.#handleKeyDown(e);\r\n /** @private */ readonly #keyUpHandler = () => this.#handleKeyUp();\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 /**\r\n * Whether multiple items can be selected.\r\n * @default false\r\n */\r\n @property({ type: Boolean, reflect: true }) multi = false;\r\n\r\n /**\r\n * Whether multiple item selection cascades to child items.\r\n * @default false\r\n */\r\n @property({ type: Boolean, reflect: true }) cascade = false;\r\n\r\n /** The selected items of the tree. */\r\n get selected(): readonly M3eTreeItemElement[] {\r\n return this[selectionManager].selectedItems;\r\n }\r\n\r\n /** All the items of the tree. */\r\n get items(): readonly M3eTreeItemElement[] {\r\n return this[selectionManager].items;\r\n }\r\n\r\n /**\r\n * Expands all items, and optionally, all descendants.\r\n * @param {boolean} [descendants=false] Whether to expand all descendants.\r\n */\r\n expand(descendants?: boolean): void;\r\n\r\n /**\r\n * Expands the specified items, and optionally, all descendants.\r\n * @param {M3eTreeItemElement[]} items The items to expand.\r\n * @param {boolean} [descendants=false] Whether to expand all descendants.\r\n */\r\n expand(items: M3eTreeItemElement[], descendants?: boolean): void;\r\n\r\n /** @internal */\r\n expand(itemsOrDescendants?: M3eTreeItemElement[] | boolean, maybeDescendants: boolean = false): void {\r\n const items = Array.isArray(itemsOrDescendants) ? itemsOrDescendants : this[selectionManager].items;\r\n const descendants = typeof itemsOrDescendants === \"boolean\" ? itemsOrDescendants : maybeDescendants;\r\n items.forEach((x) => x.expand(descendants));\r\n }\r\n\r\n /**\r\n * Collapses all items, and optionally, all descendants.\r\n * @param {boolean} [descendants=false] Whether to collapse all descendants.\r\n */\r\n collapse(descendants?: boolean): void;\r\n\r\n /**\r\n * Collapses the specified items, and optionally, all descendants.\r\n * @param {M3eTreeItemElement[]} items The items to collapse.\r\n * @param {boolean} [descendants=false] Whether to collapse all descendants.\r\n */\r\n collapse(items: M3eTreeItemElement[], descendants?: boolean): void;\r\n\r\n /** @internal */\r\n collapse(itemsOrDescendants?: M3eTreeItemElement[] | boolean, maybeDescendants: boolean = false): void {\r\n const items = Array.isArray(itemsOrDescendants) ? itemsOrDescendants : this[selectionManager].items;\r\n const descendants = typeof itemsOrDescendants === \"boolean\" ? itemsOrDescendants : maybeDescendants;\r\n\r\n items.forEach((x) => x.collapse(descendants));\r\n const activeItem = this[selectionManager].activeItem;\r\n if (activeItem && !activeItem.visible) {\r\n for (let parent = activeItem.parentItem; parent; parent = parent.parentItem) {\r\n if (parent.visible) {\r\n this[selectionManager].setActiveItem(parent);\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Selects the specified item.\r\n * @param {M3eTreeItemElement} item The item to select.\r\n * @param {boolean} [activate=false] A value indicating whether to activate the item.\r\n */\r\n select(item: M3eTreeItemElement, activate: boolean = false): void {\r\n this[selectionManager].select(item, activate);\r\n item.indeterminate = false;\r\n if (this.multi && this.cascade) {\r\n if (item.hasChildItems) {\r\n item.childItems.forEach((x) => this.select(x));\r\n }\r\n\r\n this.#cascadeAncestorSelected(item);\r\n }\r\n if (activate) {\r\n this.#activateItem(item);\r\n }\r\n this.dispatchEvent(new Event(\"change\", { bubbles: true }));\r\n }\r\n\r\n /**\r\n * Deselects the specified item.\r\n * @param {M3eTreeItemElement} item The item to deselect.\r\n */\r\n deselect(item: M3eTreeItemElement): void {\r\n this[selectionManager].deselect(item);\r\n item.indeterminate = false;\r\n if (this.multi && this.cascade) {\r\n if (item.hasChildItems) {\r\n item.childItems.forEach((x) => this.deselect(x));\r\n }\r\n\r\n this.#cascadeAncestorSelected(item);\r\n }\r\n this.dispatchEvent(new Event(\"change\", { bubbles: true }));\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 willUpdate(_changedProperties: PropertyValues<this>): void {\r\n super.willUpdate(_changedProperties);\r\n\r\n if (_changedProperties.has(\"multi\")) {\r\n this[selectionManager].multi = this.multi;\r\n if (this.multi) {\r\n this.setAttribute(\"aria-multiselectable\", \"true\");\r\n } else {\r\n this.removeAttribute(\"aria-multiselectable\");\r\n }\r\n }\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 const { added } = this[selectionManager].setItems([...this.querySelectorAll(\"m3e-tree-item\")]);\r\n for (const item of added) {\r\n item.id = item.id || `m3e-tree-item-${M3eTreeElement.__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 if (!this.multi) {\r\n if (!item.selected) {\r\n this.select(item);\r\n item.link?.click();\r\n }\r\n } else {\r\n if (item.ripple && !item.ripple.visible) {\r\n item.ripple.centered = true;\r\n item.ripple.show(0, 0, true);\r\n item.ripple.centered = false;\r\n }\r\n item.link?.click();\r\n }\r\n break;\r\n\r\n case \" \":\r\n e.preventDefault();\r\n\r\n if (this.multi) {\r\n if (item.selected) {\r\n this.deselect(item);\r\n } else {\r\n this.select(item);\r\n }\r\n } else {\r\n if (item.ripple && !item.ripple.visible) {\r\n item.ripple.centered = true;\r\n item.ripple.show(0, 0, true);\r\n item.ripple.centered = false;\r\n }\r\n this.select(item);\r\n item.link?.click();\r\n }\r\n\r\n break;\r\n\r\n case \"*\":\r\n e.preventDefault();\r\n item.expand(true);\r\n break;\r\n\r\n case \"Left\":\r\n case \"ArrowLeft\":\r\n e.preventDefault();\r\n if (M3eDirectionality.current === \"ltr\") {\r\n if (item.hasChildItems && item.open) {\r\n requestAnimationFrame(() => item.collapse());\r\n } else {\r\n const parent = item.parentItem;\r\n if (parent) {\r\n this[selectionManager].setActiveItem(parent);\r\n }\r\n }\r\n } else if (item.hasChildItems && !item.open) {\r\n item.expand();\r\n }\r\n\r\n break;\r\n\r\n case \"Right\":\r\n case \"ArrowRight\":\r\n e.preventDefault();\r\n if (M3eDirectionality.current === \"rtl\") {\r\n if (item.hasChildItems && item.open) {\r\n requestAnimationFrame(() => item.collapse());\r\n } else {\r\n const parent = item.parentItem;\r\n if (parent) {\r\n this[selectionManager].setActiveItem(parent);\r\n }\r\n }\r\n } else if (item.hasChildItems && !item.open) {\r\n item.expand();\r\n }\r\n break;\r\n\r\n default:\r\n this[selectionManager].onKeyDown(e);\r\n break;\r\n }\r\n }\r\n\r\n /** @private */\r\n #handleKeyUp(): void {\r\n const item = this[selectionManager].activeItem;\r\n if (item && !item.disabled && item.ripple?.visible) {\r\n item.ripple.hide();\r\n }\r\n }\r\n\r\n /** @private */\r\n #handlePointerDown(e: Event): void {\r\n if (!e.defaultPrevented && !this.#ignoreFocusVisible && !forcedColorsActive()) {\r\n this.#ignoreFocusVisible = true;\r\n\r\n const item = e\r\n .composedPath()\r\n .reverse()\r\n .find((x) => x instanceof M3eTreeItemElement);\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: M3eTreeItemElement): void {\r\n this.setAttribute(\"aria-activedescendant\", item.id);\r\n if (item.label) {\r\n scrollIntoViewIfNeeded(item.label, this, { block: \"nearest\", behavior: \"smooth\" });\r\n }\r\n this.#updateFocusVisible();\r\n }\r\n\r\n /** @private */\r\n #updateFocusVisible(): void {\r\n const focusWithin = this.matches(\":focus-within\");\r\n const focused = focusWithin || this.matches(\":focus\");\r\n const focusVisible =\r\n focused &&\r\n !this.#ignoreFocusVisible &&\r\n (forcedColorsActive() ||\r\n this.matches(\":focus-visible\") ||\r\n (focusWithin && this.querySelector(\"a:focus-visible\") !== null));\r\n\r\n this[selectionManager].items.forEach((x) => {\r\n const active = x === this[selectionManager].activeItem;\r\n this.#updateItemFocusVisible(x, active && focused, active && focusVisible);\r\n });\r\n }\r\n\r\n /** @private */\r\n #updateItemFocusVisible(item: M3eTreeItemElement, 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 /** @private */\r\n #cascadeAncestorSelected(item: M3eTreeItemElement): void {\r\n for (let parent = item.parentItem; parent; parent = parent.parentItem) {\r\n let hasSelected = false,\r\n hasDeselected = false;\r\n\r\n for (const child of parent.querySelectorAll(\"m3e-tree-item\")) {\r\n hasSelected = hasSelected || child.selected;\r\n hasDeselected = hasDeselected || !child.selected;\r\n if (hasSelected && hasDeselected) {\r\n break;\r\n }\r\n }\r\n if (hasDeselected) {\r\n this[selectionManager].deselect(parent);\r\n parent.indeterminate = hasSelected;\r\n } else {\r\n this[selectionManager].select(parent, false);\r\n parent.indeterminate = false;\r\n }\r\n }\r\n }\r\n}\r\n\r\ndeclare global {\r\n interface HTMLElementTagNameMap {\r\n \"m3e-tree\": M3eTreeElement;\r\n }\r\n}\r\n"],"names":["M3eTreeItemElement","M3eTreeItemElement_1","Selected","Disabled","EventAttribute","AttachInternals","Role","LitElement","constructor","_hasChildItems","_multi","_M3eTreeItemElement_treeMutationController","set","MutationController","target","skipInitial","config","attributeFilter","callback","__classPrivateFieldGet","_M3eTreeItemElement_instances","_M3eTreeItemElement_handleTreeChange","call","_M3eTreeItemElement_items","_M3eTreeItemElement_tree","_M3eTreeItemElement_path","Array","_M3eTreeItemElement_link","open","indeterminate","link","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","observe","disconnectedCallback","unobserve","update","changedProperties","has","multi","ariaSelected","ariaChecked","selected","icon","querySelectorAll","toggleAttribute","ariaExpanded","disabled","firstUpdated","_changedProperties","base","focusRing","stateLayer","ripple","attach","render","html","_M3eTreeItemElement_handleClick","_M3eTreeItemElement_handleOpenToggleIconSlotChange","_M3eTreeItemElement_handleCheckboxClick","nothing","_M3eTreeItemElement_renderIcon","_M3eTreeItemElement_handleSlotChange","ifDefined","undefined","_M3eTreeItemElement_handleCollapsibleEvent","_M3eTreeItemElement_handleItemSlotChange","_M3eTreeItemElement_handleIconSlotChange","e","setCustomState","hasAssignedNodes","assignedElements","flatten","find","HTMLAnchorElement","setAttribute","filter","hadChildItems","cascade","anySelected","anyDeselected","child","selectionManager","deselect","select","setActiveItem","click","stopPropagation","dispatchEvent","Event","type","bubbles","styles","css","DesignToken","density","calc","typescale","standard","large","fontSize","fontWeight","lineHeight","tracking","unsafeCSS","motion","duration","short4","easing","shape","corner","none","medium1","color","onSurfaceVariant","onSurface","onSecondaryContainer","secondaryContainer","__decorate","query","prototype","state","property","Boolean","reflect","customElement","M3eTreeElement","M3eTreeElement_1","_M3eTreeElement_ignoreFocusVisible","_M3eTreeElement_ignoreFocus","_b","SelectionManager","withVerticalOrientation","withHomeAndEnd","withPageUpAndDown","withTypeahead","withSkipPredicate","disableRovingTabIndex","onActiveItemChange","activeItem","_M3eTreeElement_instances","_M3eTreeElement_activateItem","_M3eTreeElement_keyDownHandler","_M3eTreeElement_keyUpHandler","_M3eTreeElement_handleKeyUp","_M3eTreeElement_pointerDownHandler","PressedController","pressed","FocusController","_M3eTreeElement_updateFocusVisible","selectedItems","items","itemsOrDescendants","maybeDescendants","isArray","parent","activate","_M3eTreeElement_cascadeAncestorSelected","addEventListener","removeEventListener","willUpdate","removeAttribute","_M3eTreeElement_handleSlotChange","added","setItems","id","__nextId","defaultPrevented","key","centered","show","preventDefault","M3eDirectionality","current","requestAnimationFrame","onKeyDown","hide","forcedColorsActive","composedPath","_M3eTreeElement_updateItemFocusVisible","scrollIntoViewIfNeeded","block","behavior","focusWithin","matches","focused","focusVisible","querySelector","active","hasSelected","hasDeselected","registerStyleSheet","scrollbar","width"],"mappings":"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"}
|
package/dist/tree.min.js
CHANGED
|
@@ -3,5 +3,5 @@
|
|
|
3
3
|
* Copyright (c) 2025–2026 matraic
|
|
4
4
|
* See LICENSE file in the project root for full license text.
|
|
5
5
|
*/
|
|
6
|
-
import{__classPrivateFieldGet as e,__classPrivateFieldSet as t,__decorate as i}from"tslib";import{LitElement as s,nothing as l,html as o,unsafeCSS as a,css as n}from"lit";import{query as r,state as h,property as c}from"lit/decorators.js";import{Selected as d,Disabled as m,EventAttribute as p,AttachInternals as f,Role as u,MutationController as g,setCustomState as b,hasAssignedNodes as v,DesignToken as y,customElement as w,PressedController as k,FocusController as I,scrollIntoViewIfNeeded as $,registerStyleSheet as C}from"@m3e/web/core";import{selectionManager as x,SelectionManager as _}from"@m3e/web/core/a11y";import{M3eDirectionality as A}from"@m3e/web/core/bidi";import{ifDefined as E}from"lit/directives/if-defined.js";var S,L,W,M,P,R,q,z,D,B,T,U,H,j,F,V;let G=V=class extends(d(m(p(f(u(s,"treeitem"),!0),"opening","opened","closing","closed")))){constructor(){super(...arguments),S.add(this),this._hasChildItems=!1,this._multi=!1,L.set(this,new g(this,{target:null,skipInitial:!0,config:{attributeFilter:["multi"]},callback:()=>e(this,S,"m",U).call(this)})),W.set(this,[]),M.set(this,null),P.set(this,new Array),R.set(this,null),this.open=!1,this.indeterminate=!1}get link(){return e(this,R,"f")}get label(){return this._base??null}get visible(){return!e(this,P,"f").some(e=>!e.open)}get path(){return[...e(this,P,"f"),this]}get hasChildItems(){return this._hasChildItems}get parentItem(){return e(this,P,"f")[e(this,P,"f").length-1]??null}get childItems(){return e(this,W,"f")}get level(){return e(this,P,"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,P,"f").length=0;for(let t=this.parentElement?.closest("m3e-tree-item");t;t=t.parentElement?.closest("m3e-tree-item"))e(this,P,"f").push(t);e(this,P,"f").reverse(),this.style.setProperty("--_tree-item-level",""+(this.level-1)),t(this,M,this.closest("m3e-tree"),"f"),e(this,M,"f")&&(e(this,L,"f").observe(e(this,M,"f")),e(this,S,"m",U).call(this))}disconnectedCallback(){super.disconnectedCallback(),e(this,P,"f").length=0,e(this,M,"f")&&e(this,L,"f").unobserve(e(this,M,"f"))}update(t){if(super.update(t),(t.has("selected")||t.has("indeterminate")||t.has("_multi"))&&(e(this,M,"f")?.multi?(this.ariaSelected=null,this.ariaChecked=this.indeterminate?"mixed":`${this.selected}`):this.ariaSelected=`${this.selected}`),t.has("selected"))for(const e of this.querySelectorAll(":scope > m3e-icon[slot]:not([slot='toggle-icon']):not([slot='open-toggle-icon'])"))e.toggleAttribute("filled",this.selected);(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 o`<div class="base" @click="${e(this,S,"m",H)}"><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 aria-hidden="true" class="inset"></div><div aria-hidden="true" class="toggle"><slot name="toggle-icon"><svg class="toggle-icon" viewBox="0 -960 960 960" fill="currentColor"><path d="M504-480 320-664l56-56 240 240-240 240-56-56 184-184Z"/></svg></slot><slot name="open-toggle-icon" @slotchange="${e(this,S,"m",z)}"></slot></div>${this._multi?o`<m3e-pseudo-checkbox class="checkbox" ?checked="${this.selected}" ?indeterminate="${this.indeterminate}" ?disabled="${this.disabled}" @click="${e(this,S,"m",j)}"></m3e-pseudo-checkbox>`:l}<div class="icon" aria-hidden="true">${e(this,S,"m",q).call(this)}</div><div class="label"><slot name="label" @slotchange="${e(this,S,"m",B)}"></slot></div></div><m3e-collapsible class="group" role="group" aria-hidden="${E(this._hasChildItems?void 0:"true")}" ?open="${this.open}" @opening="${e(this,S,"m",F)}" @opened="${e(this,S,"m",F)}" @closing="${e(this,S,"m",F)}" @closed="${e(this,S,"m",F)}"><slot @slotchange="${e(this,S,"m",T)}"></slot></m3e-collapsible>`}};var K,O,Z,J,N,Q,X,Y,ee,te,ie,se,le,oe,ae,ne;L=new WeakMap,W=new WeakMap,M=new WeakMap,P=new WeakMap,R=new WeakMap,S=new WeakSet,q=function(){const t=o`<slot name="icon" @slotchange="${e(this,S,"m",D)}"></slot>`;return this.selected&&!this.hasChildItems?o`<slot name="selected-icon" @slotchange="${e(this,S,"m",D)}">${t}</slot>`:t},z=function(e){b(this,"-with-open-toggle-icon",v(e.target))},D=function(e){b(this,"-with-icon",v(e.target))},B=function(i){t(this,R,i.target.assignedElements({flatten:!0}).find(e=>e instanceof HTMLAnchorElement)??null,"f"),e(this,R,"f")?.setAttribute("tabindex","-1")},T=function(i){t(this,W,i.target.assignedElements({flatten:!0}).filter(e=>e instanceof V),"f");const s=this._hasChildItems;if(this._hasChildItems=e(this,W,"f").length>0,b(this,"-with-items",this._hasChildItems),(s||this._hasChildItems)&&this._multi&&e(this,M,"f")?.cascade){let t=!1,i=!1;for(const e of this.querySelectorAll("m3e-tree-item"))if(t=t||e.selected,i=i||!e.selected,t&&i)break;i?(e(this,M,"f")?.[x].deselect(this),this.indeterminate=t):(e(this,M,"f")?.[x].select(this,!1),this.indeterminate=!1)}},U=function(){this._multi=!0===e(this,M,"f")?.multi,b(this,"-multi",this._multi)},H=function(){this.disabled||(e(this,M,"f")?.[x].setActiveItem(this),this._hasChildItems?(this._multi||e(this,M,"f")?.select(this),this.toggle()):(this._multi&&this.selected?e(this,M,"f")?.deselect(this):e(this,M,"f")?.select(this),e(this,R,"f")?.click()))},j=function(t){t.stopPropagation(),this.selected?e(this,M,"f")?.deselect(this):e(this,M,"f")?.select(this)},F=function(e){e.stopPropagation(),this.dispatchEvent(new Event(e.type,{bubbles:!0}))},G.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; height: calc(var(--m3e-tree-item-height, 3rem) + ${y.density.calc(-3)}); padding-inline: var(--m3e-tree-item-padding, 1rem); font-size: var(--m3e-tree-item-font-size, ${y.typescale.standard.label.large.fontSize}); font-weight: var(--m3e-tree-item-font-weight, ${y.typescale.standard.label.large.fontWeight}); line-height: var(--m3e-tree-item-line-height, ${y.typescale.standard.label.large.lineHeight}); letter-spacing: var(--m3e-tree-item-tracking, ${y.typescale.standard.label.large.tracking}); transition: ${a(`color ${y.motion.duration.short4} ${y.motion.easing.standard},\n background-color ${y.motion.duration.short4} ${y.motion.easing.standard}`)}; } .base, .focus-ring { border-radius: var(--m3e-tree-item-shape, ${y.shape.corner.none}); } .label { flex: 1 1 auto; display: flex; align-items: center; position: relative; overflow: hidden; vertical-align: middle; } .checkbox { flex: none; margin-inline-end: 0.5rem; } .icon, .toggle { flex: none; align-items: center; justify-content: center; position: relative; vertical-align: middle; margin-inline-end: 0.5rem; } .toggle { display: var(--_tree-item-toggle-display, none); } :host(:not(:state(-with-icon))) .icon { display: none; } .inset { margin-inline-start: calc(var(--m3e-tree-item-inset, 2rem) * var(--_tree-item-level, 0)); } :host([open]) .toggle-icon { transform: rotate(90deg); } :host(:not(:state(-with-items))) .toggle { visibility: hidden; } :host(:not(:state(-with-items))) .group { display: none; } ::slotted([slot="selected-icon"]), ::slotted([slot="icon"]), ::slotted([slot="toggle-icon"]), ::slotted([slot="open-toggle-icon"]), .toggle-icon { vertical-align: middle; width: 1em; height: 1em; font-size: var(--m3e-tree-item-icon-size, 1.5rem); } .toggle-icon { transition: ${a(`transform var(--m3e-collapsible-animation-duration, ${y.motion.duration.medium1})\n ${y.motion.easing.standard}`)}; } :host(:state(-with-open-toggle-icon)[open]) slot[name="toggle-icon"], :host(:state(-with-open-toggle-icon):not([open])) slot[name="open-toggle-icon"] { display: none; } :host(:not(:disabled)) .base { cursor: pointer; } :host(:not(:disabled)) .base { color: var(--m3e-tree-item-label-color, ${y.color.onSurfaceVariant}); } :host(:disabled) .base { color: color-mix( in srgb, var(--m3e-tree-item-disabled-color, ${y.color.onSurface}) var(--m3e-tree-item-disabled-color-opacity, 38%), transparent ); } :host([selected]:not(:disabled)) .base { color: var(--m3e-tree-item-selected-label-color, ${y.color.onSecondaryContainer}); background-color: var(--m3e-tree-item-selected-container-color, ${y.color.secondaryContainer}); --m3e-state-layer-focus-color: var( --m3e-tree-item-selected-container-focus-color, ${y.color.onSecondaryContainer} ); --m3e-state-layer-hover-color: var( --m3e-tree-item-selected-container-hover-color, ${y.color.onSecondaryContainer} ); --m3e-ripple-color: var(--m3e-tree-item-selected-ripple-color, ${y.color.onSecondaryContainer}); } :host(:not([selected]):not(:disabled)) .base { --m3e-state-layer-focus-color: var( --m3e-tree-item-unselected-container-focus-color, ${y.color.onSurface} ); --m3e-state-layer-hover-color: var( --m3e-tree-item-unselected-container-hover-color, ${y.color.onSurface} ); --m3e-ripple-color: var(--m3e-tree-item-unselected-ripple-color, ${y.color.onSurface}); } .state-layer { margin-inline: auto; } ::slotted(a[slot="label"]) { all: unset; } @media (prefers-reduced-motion) { .base, .toggle, .state-layer { transition: none !important; } } @media (forced-colors: active) { .base, .state-layer { transition: none !important; } :host(:disabled) .base { color: GrayText; } :host(:not(:disabled)) .base { color: CanvasText; background-color: Canvas; } :host([selected]:not(:state(-multi)):not(:disabled)) slot[name="icon"], :host([selected]:not(:state(-multi)):not(:disabled)) slot[name="label"] { color: Highlight; } }`,i([r(".state-layer")],G.prototype,"stateLayer",void 0),i([r(".focus-ring")],G.prototype,"focusRing",void 0),i([r(".ripple")],G.prototype,"ripple",void 0),i([r(".base")],G.prototype,"_base",void 0),i([h()],G.prototype,"_hasChildItems",void 0),i([h()],G.prototype,"_multi",void 0),i([c({type:Boolean,reflect:!0})],G.prototype,"open",void 0),i([c({type:Boolean,reflect:!0})],G.prototype,"indeterminate",void 0),G=V=i([w("m3e-tree-item")],G);let re=ne=class extends(u(s,"tree")){constructor(){super(),K.add(this),O.set(this,!1),Z.set(this,!1),this[ae]=(new _).withVerticalOrientation().withHomeAndEnd().withPageUpAndDown().withTypeahead().withSkipPredicate(e=>e.disabled||!e.visible).disableRovingTabIndex().onActiveItemChange(()=>{this[x].activeItem&&e(this,K,"m",ie).call(this,this[x].activeItem)}),J.set(this,t=>e(this,K,"m",Y).call(this,t)),N.set(this,()=>e(this,K,"m",ee).call(this)),Q.set(this,t=>e(this,K,"m",te).call(this,t)),this.multi=!1,this.cascade=!1,new k(this,{callback:e=>t(this,Z,e,"f")}),new I(this,{callback:()=>{e(this,Z,"f")||e(this,K,"m",se).call(this)}})}get selected(){return this[x].selectedItems}get items(){return this[x].items}expand(e,t=!1){const i=Array.isArray(e)?e:this[x].items,s="boolean"==typeof e?e:t;i.forEach(e=>e.expand(s))}collapse(e,t=!1){const i=Array.isArray(e)?e:this[x].items,s="boolean"==typeof e?e:t;i.forEach(e=>e.collapse(s));const l=this[x].activeItem;if(l&&!l.visible)for(let e=l.parentItem;e;e=e.parentItem)if(e.visible){this[x].setActiveItem(e);break}}select(t,i=!1){this[x].select(t,i),t.indeterminate=!1,this.multi&&this.cascade&&(t.hasChildItems&&t.childItems.forEach(e=>this.select(e)),e(this,K,"m",oe).call(this,t)),i&&e(this,K,"m",ie).call(this,t),this.dispatchEvent(new Event("change",{bubbles:!0}))}deselect(t){this[x].deselect(t),t.indeterminate=!1,this.multi&&this.cascade&&(t.hasChildItems&&t.childItems.forEach(e=>this.deselect(e)),e(this,K,"m",oe).call(this,t)),this.dispatchEvent(new Event("change",{bubbles:!0}))}connectedCallback(){super.connectedCallback(),this.setAttribute("tabindex","0"),this.addEventListener("keydown",e(this,J,"f")),this.addEventListener("keyup",e(this,N,"f")),this.addEventListener("pointerdown",e(this,Q,"f"))}disconnectedCallback(){super.disconnectedCallback(),this.removeEventListener("keydown",e(this,J,"f")),this.removeEventListener("keyup",e(this,N,"f")),this.removeEventListener("pointerdown",e(this,Q,"f"))}willUpdate(e){super.willUpdate(e),e.has("multi")&&(this[x].multi=this.multi,this.multi?this.setAttribute("aria-multiselectable","true"):this.removeAttribute("aria-multiselectable"))}render(){return o`<div class="base"><slot @slotchange="${e(this,K,"m",X)}"></slot></div>`}};O=new WeakMap,Z=new WeakMap,J=new WeakMap,N=new WeakMap,Q=new WeakMap,K=new WeakSet,ae=x,X=function(){const{added:t}=this[x].setItems([...this.querySelectorAll("m3e-tree-item")]);for(const e of t)e.id=e.id||"m3e-tree-item-"+ne.__nextId++;this[x].activeItem?(this.setAttribute("aria-activedescendant",this[x].activeItem.id),e(this,K,"m",se).call(this)):this.removeAttribute("aria-activedescendant")},Y=function(i){t(this,O,!1,"f"),e(this,K,"m",se).call(this);const s=this[x].activeItem;if(!i.defaultPrevented&&s&&!s.disabled)switch(i.key){case"Enter":this.multi?(s.ripple&&!s.ripple.visible&&(s.ripple.centered=!0,s.ripple.show(0,0,!0),s.ripple.centered=!1),s.link?.click()):s.selected||(this.select(s),s.link?.click());break;case" ":i.preventDefault(),this.multi?s.selected?this.deselect(s):this.select(s):(s.ripple&&!s.ripple.visible&&(s.ripple.centered=!0,s.ripple.show(0,0,!0),s.ripple.centered=!1),this.select(s),s.link?.click());break;case"*":i.preventDefault(),s.expand(!0);break;case"Left":case"ArrowLeft":if(i.preventDefault(),"ltr"===A.current)if(s.hasChildItems&&s.open)requestAnimationFrame(()=>s.collapse());else{const e=s.parentItem;e&&this[x].setActiveItem(e)}else s.hasChildItems&&!s.open&&s.expand();break;case"Right":case"ArrowRight":if(i.preventDefault(),"rtl"===A.current)if(s.hasChildItems&&s.open)requestAnimationFrame(()=>s.collapse());else{const e=s.parentItem;e&&this[x].setActiveItem(e)}else s.hasChildItems&&!s.open&&s.expand();break;default:this[x].onKeyDown(i)}},ee=function(){const e=this[x].activeItem;e&&!e.disabled&&e.ripple?.visible&&e.ripple.hide()},te=function(i){if(!i.defaultPrevented&&!e(this,O,"f")){t(this,O,!0,"f");const s=i.composedPath().reverse().find(e=>e instanceof G);s&&!s.disabled&&e(this,K,"m",le).call(this,s,!0,!1)}},ie=function(t){this.setAttribute("aria-activedescendant",t.id),t.label&&$(t.label,this,{block:"nearest",behavior:"smooth"}),e(this,K,"m",se).call(this)},se=function(){const t=this.matches(":focus")||this.matches(":focus-within"),i=!e(this,O,"f")&&this.matches(":focus-visible");this[x].items.forEach(s=>{const l=s===this[x].activeItem;e(this,K,"m",le).call(this,s,l&&t,l&&i)})},le=function(e,t,i){t&&i?e.stateLayer?.show("focused"):e.stateLayer?.hide("focused"),i?e.focusRing?.show():e.focusRing?.hide()},oe=function(e){for(let t=e.parentItem;t;t=t.parentItem){let e=!1,i=!1;for(const s of t.querySelectorAll("m3e-tree-item"))if(e=e||s.selected,i=i||!s.selected,e&&i)break;i?(this[x].deselect(t),t.indeterminate=e):(this[x].select(t,!1),t.indeterminate=!1)}},C(n`${a("m3e-tree:has(> m3e-tree-item:state(-with-items)) {\n --_tree-item-toggle-display: flex;\n }")}`),re.styles=n`:host { display: block; outline: none; overflow-y: auto; overflow-x: hidden; min-height: 0; scrollbar-width: ${y.scrollbar.width}; scrollbar-color: ${y.scrollbar.color}; } .base { width: 100%; display: flex; flex-direction: column; position: relative; min-height: inherit; box-sizing: border-box; }`,re.__nextId=0,i([c({type:Boolean,reflect:!0})],re.prototype,"multi",void 0),i([c({type:Boolean,reflect:!0})],re.prototype,"cascade",void 0),re=ne=i([w("m3e-tree")],re);export{re as M3eTreeElement,G as M3eTreeItemElement};
|
|
6
|
+
import{__classPrivateFieldGet as e,__classPrivateFieldSet as t,__decorate as i}from"tslib";import{LitElement as s,nothing as l,html as o,unsafeCSS as a,css as n}from"lit";import{query as r,state as h,property as c}from"lit/decorators.js";import{Selected as d,Disabled as m,EventAttribute as p,AttachInternals as f,Role as u,MutationController as g,setCustomState as b,hasAssignedNodes as v,DesignToken as y,customElement as w,PressedController as k,FocusController as I,forcedColorsActive as $,scrollIntoViewIfNeeded as C,registerStyleSheet as x}from"@m3e/web/core";import{selectionManager as _,SelectionManager as A}from"@m3e/web/core/a11y";import{M3eDirectionality as E}from"@m3e/web/core/bidi";import{ifDefined as S}from"lit/directives/if-defined.js";var L,W,M,P,q,R,z,D,B,T,U,H,j,F,V,G;let K=G=class extends(d(m(p(f(u(s,"treeitem"),!0),"opening","opened","closing","closed")))){constructor(){super(...arguments),L.add(this),this._hasChildItems=!1,this._multi=!1,W.set(this,new g(this,{target:null,skipInitial:!0,config:{attributeFilter:["multi"]},callback:()=>e(this,L,"m",H).call(this)})),M.set(this,[]),P.set(this,null),q.set(this,new Array),R.set(this,null),this.open=!1,this.indeterminate=!1}get link(){return e(this,R,"f")}get label(){return this._base??null}get visible(){return!e(this,q,"f").some(e=>!e.open)}get path(){return[...e(this,q,"f"),this]}get hasChildItems(){return this._hasChildItems}get parentItem(){return e(this,q,"f")[e(this,q,"f").length-1]??null}get childItems(){return e(this,M,"f")}get level(){return e(this,q,"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,q,"f").length=0;for(let t=this.parentElement?.closest("m3e-tree-item");t;t=t.parentElement?.closest("m3e-tree-item"))e(this,q,"f").push(t);e(this,q,"f").reverse(),this.style.setProperty("--_tree-item-level",""+(this.level-1)),t(this,P,this.closest("m3e-tree"),"f"),e(this,P,"f")&&(e(this,W,"f").observe(e(this,P,"f")),e(this,L,"m",H).call(this))}disconnectedCallback(){super.disconnectedCallback(),e(this,q,"f").length=0,e(this,P,"f")&&e(this,W,"f").unobserve(e(this,P,"f"))}update(t){if(super.update(t),(t.has("selected")||t.has("indeterminate")||t.has("_multi"))&&(e(this,P,"f")?.multi?(this.ariaSelected=null,this.ariaChecked=this.indeterminate?"mixed":`${this.selected}`):this.ariaSelected=`${this.selected}`),t.has("selected"))for(const e of this.querySelectorAll(":scope > m3e-icon[slot]:not([slot='toggle-icon']):not([slot='open-toggle-icon'])"))e.toggleAttribute("filled",this.selected);(t.has("open")||t.has("_hasChildItems"))&&(this.ariaExpanded=this._hasChildItems?`${this.open}`:null),(t.has("_hasChildItems")&&this.disabled||t.has("disabled"))&&e(this,M,"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 o`<div class="base" @click="${e(this,L,"m",j)}"><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 aria-hidden="true" class="inset"></div><div aria-hidden="true" class="toggle"><slot name="toggle-icon"><svg class="toggle-icon" viewBox="0 -960 960 960" fill="currentColor"><path d="M504-480 320-664l56-56 240 240-240 240-56-56 184-184Z"/></svg></slot><slot name="open-toggle-icon" @slotchange="${e(this,L,"m",D)}"></slot></div>${this._multi?o`<m3e-pseudo-checkbox class="checkbox" ?checked="${this.selected}" ?indeterminate="${this.indeterminate}" ?disabled="${this.disabled}" @click="${e(this,L,"m",F)}"></m3e-pseudo-checkbox>`:l}<div class="icon" aria-hidden="true">${e(this,L,"m",z).call(this)}</div><div class="label"><slot name="label" @slotchange="${e(this,L,"m",T)}"></slot></div></div><m3e-collapsible class="group" role="group" aria-hidden="${S(this._hasChildItems?void 0:"true")}" ?open="${this.open}" @opening="${e(this,L,"m",V)}" @opened="${e(this,L,"m",V)}" @closing="${e(this,L,"m",V)}" @closed="${e(this,L,"m",V)}"><slot @slotchange="${e(this,L,"m",U)}"></slot></m3e-collapsible>`}};var O,Z,J,N,Q,X,Y,ee,te,ie,se,le,oe,ae,ne,re;W=new WeakMap,M=new WeakMap,P=new WeakMap,q=new WeakMap,R=new WeakMap,L=new WeakSet,z=function(){const t=o`<slot name="icon" @slotchange="${e(this,L,"m",B)}"></slot>`;return this.selected&&!this.hasChildItems?o`<slot name="selected-icon" @slotchange="${e(this,L,"m",B)}">${t}</slot>`:t},D=function(e){b(this,"-with-open-toggle-icon",v(e.target))},B=function(e){b(this,"-with-icon",v(e.target))},T=function(i){t(this,R,i.target.assignedElements({flatten:!0}).find(e=>e instanceof HTMLAnchorElement)??null,"f"),e(this,R,"f")?.setAttribute("tabindex","-1")},U=function(i){t(this,M,i.target.assignedElements({flatten:!0}).filter(e=>e instanceof G),"f");const s=this._hasChildItems;if(this._hasChildItems=e(this,M,"f").length>0,b(this,"-with-items",this._hasChildItems),(s||this._hasChildItems)&&this._multi&&e(this,P,"f")?.cascade){let t=!1,i=!1;for(const e of this.querySelectorAll("m3e-tree-item"))if(t=t||e.selected,i=i||!e.selected,t&&i)break;i?(e(this,P,"f")?.[_].deselect(this),this.indeterminate=t):(e(this,P,"f")?.[_].select(this,!1),this.indeterminate=!1)}},H=function(){this._multi=!0===e(this,P,"f")?.multi,b(this,"-multi",this._multi)},j=function(){this.disabled||(e(this,P,"f")?.[_].setActiveItem(this),this._hasChildItems?(this._multi||e(this,P,"f")?.select(this),this.toggle()):(this._multi&&this.selected?e(this,P,"f")?.deselect(this):e(this,P,"f")?.select(this),e(this,R,"f")?.click()))},F=function(t){t.stopPropagation(),this.selected?e(this,P,"f")?.deselect(this):e(this,P,"f")?.select(this)},V=function(e){e.stopPropagation(),this.dispatchEvent(new Event(e.type,{bubbles:!0}))},K.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; height: calc(var(--m3e-tree-item-height, 3rem) + ${y.density.calc(-3)}); padding-inline: var(--m3e-tree-item-padding, 1rem); font-size: var(--m3e-tree-item-font-size, ${y.typescale.standard.label.large.fontSize}); font-weight: var(--m3e-tree-item-font-weight, ${y.typescale.standard.label.large.fontWeight}); line-height: var(--m3e-tree-item-line-height, ${y.typescale.standard.label.large.lineHeight}); letter-spacing: var(--m3e-tree-item-tracking, ${y.typescale.standard.label.large.tracking}); transition: ${a(`color ${y.motion.duration.short4} ${y.motion.easing.standard},\n background-color ${y.motion.duration.short4} ${y.motion.easing.standard}`)}; } .base, .focus-ring { border-radius: var(--m3e-tree-item-shape, ${y.shape.corner.none}); } .label { flex: 1 1 auto; display: flex; align-items: center; position: relative; overflow: hidden; vertical-align: middle; } .checkbox { flex: none; margin-inline-end: 0.5rem; } .icon, .toggle { flex: none; align-items: center; justify-content: center; position: relative; vertical-align: middle; margin-inline-end: 0.5rem; } .toggle { display: var(--_tree-item-toggle-display, none); } :host(:not(:state(-with-icon))) .icon { display: none; } .inset { margin-inline-start: calc(var(--m3e-tree-item-inset, 2rem) * var(--_tree-item-level, 0)); } :host([open]) .toggle-icon { transform: rotate(90deg); } :host(:not(:state(-with-items))) .toggle { visibility: hidden; } :host(:not(:state(-with-items))) .group { display: none; } ::slotted([slot="selected-icon"]), ::slotted([slot="icon"]), ::slotted([slot="toggle-icon"]), ::slotted([slot="open-toggle-icon"]), .toggle-icon { vertical-align: middle; width: 1em; height: 1em; font-size: var(--m3e-tree-item-icon-size, 1.5rem); } .toggle-icon { transition: ${a(`transform var(--m3e-collapsible-animation-duration, ${y.motion.duration.medium1})\n ${y.motion.easing.standard}`)}; } :host(:state(-with-open-toggle-icon)[open]) slot[name="toggle-icon"], :host(:state(-with-open-toggle-icon):not([open])) slot[name="open-toggle-icon"] { display: none; } :host(:not(:disabled)) .base { cursor: pointer; } :host(:not(:disabled)) .base { color: var(--m3e-tree-item-label-color, ${y.color.onSurfaceVariant}); } :host(:disabled) .base { color: color-mix( in srgb, var(--m3e-tree-item-disabled-color, ${y.color.onSurface}) var(--m3e-tree-item-disabled-color-opacity, 38%), transparent ); } :host([selected]:not(:disabled)) .base { color: var(--m3e-tree-item-selected-label-color, ${y.color.onSecondaryContainer}); background-color: var(--m3e-tree-item-selected-container-color, ${y.color.secondaryContainer}); --m3e-state-layer-focus-color: var( --m3e-tree-item-selected-container-focus-color, ${y.color.onSecondaryContainer} ); --m3e-state-layer-hover-color: var( --m3e-tree-item-selected-container-hover-color, ${y.color.onSecondaryContainer} ); --m3e-ripple-color: var(--m3e-tree-item-selected-ripple-color, ${y.color.onSecondaryContainer}); } :host(:not([selected]):not(:disabled)) .base { --m3e-state-layer-focus-color: var( --m3e-tree-item-unselected-container-focus-color, ${y.color.onSurface} ); --m3e-state-layer-hover-color: var( --m3e-tree-item-unselected-container-hover-color, ${y.color.onSurface} ); --m3e-ripple-color: var(--m3e-tree-item-unselected-ripple-color, ${y.color.onSurface}); } .state-layer { margin-inline: auto; } ::slotted(a[slot="label"]) { all: unset; } @media (prefers-reduced-motion) { .base, .toggle, .state-layer { transition: none !important; } } @media (forced-colors: active) { .base, .state-layer { transition: none !important; } :host(:disabled) .base { color: GrayText; } :host(:not(:disabled)) .base { color: CanvasText; background-color: Canvas; } :host([selected]:not(:state(-multi)):not(:disabled)) slot[name="icon"], :host([selected]:not(:state(-multi)):not(:disabled)) slot[name="label"] { color: Highlight; } }`,i([r(".state-layer")],K.prototype,"stateLayer",void 0),i([r(".focus-ring")],K.prototype,"focusRing",void 0),i([r(".ripple")],K.prototype,"ripple",void 0),i([r(".base")],K.prototype,"_base",void 0),i([h()],K.prototype,"_hasChildItems",void 0),i([h()],K.prototype,"_multi",void 0),i([c({type:Boolean,reflect:!0})],K.prototype,"open",void 0),i([c({type:Boolean,reflect:!0})],K.prototype,"indeterminate",void 0),K=G=i([w("m3e-tree-item")],K);let he=re=class extends(u(s,"tree")){constructor(){super(),O.add(this),Z.set(this,!1),J.set(this,!1),this[ne]=(new A).withVerticalOrientation().withHomeAndEnd().withPageUpAndDown().withTypeahead().withSkipPredicate(e=>e.disabled||!e.visible).disableRovingTabIndex().onActiveItemChange(()=>{this[_].activeItem&&e(this,O,"m",se).call(this,this[_].activeItem)}),N.set(this,t=>e(this,O,"m",ee).call(this,t)),Q.set(this,()=>e(this,O,"m",te).call(this)),X.set(this,t=>e(this,O,"m",ie).call(this,t)),this.multi=!1,this.cascade=!1,new k(this,{callback:e=>t(this,J,e,"f")}),new I(this,{callback:()=>{e(this,J,"f")||e(this,O,"m",le).call(this)}})}get selected(){return this[_].selectedItems}get items(){return this[_].items}expand(e,t=!1){const i=Array.isArray(e)?e:this[_].items,s="boolean"==typeof e?e:t;i.forEach(e=>e.expand(s))}collapse(e,t=!1){const i=Array.isArray(e)?e:this[_].items,s="boolean"==typeof e?e:t;i.forEach(e=>e.collapse(s));const l=this[_].activeItem;if(l&&!l.visible)for(let e=l.parentItem;e;e=e.parentItem)if(e.visible){this[_].setActiveItem(e);break}}select(t,i=!1){this[_].select(t,i),t.indeterminate=!1,this.multi&&this.cascade&&(t.hasChildItems&&t.childItems.forEach(e=>this.select(e)),e(this,O,"m",ae).call(this,t)),i&&e(this,O,"m",se).call(this,t),this.dispatchEvent(new Event("change",{bubbles:!0}))}deselect(t){this[_].deselect(t),t.indeterminate=!1,this.multi&&this.cascade&&(t.hasChildItems&&t.childItems.forEach(e=>this.deselect(e)),e(this,O,"m",ae).call(this,t)),this.dispatchEvent(new Event("change",{bubbles:!0}))}connectedCallback(){super.connectedCallback(),this.setAttribute("tabindex","0"),this.addEventListener("keydown",e(this,N,"f")),this.addEventListener("keyup",e(this,Q,"f")),this.addEventListener("pointerdown",e(this,X,"f"))}disconnectedCallback(){super.disconnectedCallback(),this.removeEventListener("keydown",e(this,N,"f")),this.removeEventListener("keyup",e(this,Q,"f")),this.removeEventListener("pointerdown",e(this,X,"f"))}willUpdate(e){super.willUpdate(e),e.has("multi")&&(this[_].multi=this.multi,this.multi?this.setAttribute("aria-multiselectable","true"):this.removeAttribute("aria-multiselectable"))}render(){return o`<div class="base"><slot @slotchange="${e(this,O,"m",Y)}"></slot></div>`}};Z=new WeakMap,J=new WeakMap,N=new WeakMap,Q=new WeakMap,X=new WeakMap,O=new WeakSet,ne=_,Y=function(){const{added:t}=this[_].setItems([...this.querySelectorAll("m3e-tree-item")]);for(const e of t)e.id=e.id||"m3e-tree-item-"+re.__nextId++;this[_].activeItem?(this.setAttribute("aria-activedescendant",this[_].activeItem.id),e(this,O,"m",le).call(this)):this.removeAttribute("aria-activedescendant")},ee=function(i){t(this,Z,!1,"f"),e(this,O,"m",le).call(this);const s=this[_].activeItem;if(!i.defaultPrevented&&s&&!s.disabled)switch(i.key){case"Enter":this.multi?(s.ripple&&!s.ripple.visible&&(s.ripple.centered=!0,s.ripple.show(0,0,!0),s.ripple.centered=!1),s.link?.click()):s.selected||(this.select(s),s.link?.click());break;case" ":i.preventDefault(),this.multi?s.selected?this.deselect(s):this.select(s):(s.ripple&&!s.ripple.visible&&(s.ripple.centered=!0,s.ripple.show(0,0,!0),s.ripple.centered=!1),this.select(s),s.link?.click());break;case"*":i.preventDefault(),s.expand(!0);break;case"Left":case"ArrowLeft":if(i.preventDefault(),"ltr"===E.current)if(s.hasChildItems&&s.open)requestAnimationFrame(()=>s.collapse());else{const e=s.parentItem;e&&this[_].setActiveItem(e)}else s.hasChildItems&&!s.open&&s.expand();break;case"Right":case"ArrowRight":if(i.preventDefault(),"rtl"===E.current)if(s.hasChildItems&&s.open)requestAnimationFrame(()=>s.collapse());else{const e=s.parentItem;e&&this[_].setActiveItem(e)}else s.hasChildItems&&!s.open&&s.expand();break;default:this[_].onKeyDown(i)}},te=function(){const e=this[_].activeItem;e&&!e.disabled&&e.ripple?.visible&&e.ripple.hide()},ie=function(i){if(!i.defaultPrevented&&!e(this,Z,"f")&&!$()){t(this,Z,!0,"f");const s=i.composedPath().reverse().find(e=>e instanceof K);s&&!s.disabled&&e(this,O,"m",oe).call(this,s,!0,!1)}},se=function(t){this.setAttribute("aria-activedescendant",t.id),t.label&&C(t.label,this,{block:"nearest",behavior:"smooth"}),e(this,O,"m",le).call(this)},le=function(){const t=this.matches(":focus-within"),i=t||this.matches(":focus"),s=i&&!e(this,Z,"f")&&($()||this.matches(":focus-visible")||t&&null!==this.querySelector("a:focus-visible"));this[_].items.forEach(t=>{const l=t===this[_].activeItem;e(this,O,"m",oe).call(this,t,l&&i,l&&s)})},oe=function(e,t,i){t&&i?e.stateLayer?.show("focused"):e.stateLayer?.hide("focused"),i?e.focusRing?.show():e.focusRing?.hide()},ae=function(e){for(let t=e.parentItem;t;t=t.parentItem){let e=!1,i=!1;for(const s of t.querySelectorAll("m3e-tree-item"))if(e=e||s.selected,i=i||!s.selected,e&&i)break;i?(this[_].deselect(t),t.indeterminate=e):(this[_].select(t,!1),t.indeterminate=!1)}},x(n`${a("m3e-tree:has(> m3e-tree-item:state(-with-items)) {\n --_tree-item-toggle-display: flex;\n }")}`),he.styles=n`:host { display: block; outline: none; overflow-y: auto; overflow-x: hidden; min-height: 0; scrollbar-width: ${y.scrollbar.width}; scrollbar-color: ${y.scrollbar.color}; } .base { width: 100%; display: flex; flex-direction: column; position: relative; min-height: inherit; box-sizing: border-box; }`,he.__nextId=0,i([c({type:Boolean,reflect:!0})],he.prototype,"multi",void 0),i([c({type:Boolean,reflect:!0})],he.prototype,"cascade",void 0),he=re=i([w("m3e-tree")],he);export{he as M3eTreeElement,K as M3eTreeItemElement};
|
|
7
7
|
//# sourceMappingURL=tree.min.js.map
|