@m3e/web 2.3.1 → 2.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +1 -1
- package/README.md +1 -0
- package/dist/all.js +940 -42
- package/dist/all.js.map +1 -1
- package/dist/all.min.js +44 -44
- package/dist/all.min.js.map +1 -1
- package/dist/app-bar.js +1 -1
- package/dist/app-bar.min.js +1 -1
- package/dist/autocomplete.js +1 -1
- package/dist/autocomplete.min.js +1 -1
- package/dist/avatar.js +1 -1
- package/dist/avatar.min.js +1 -1
- package/dist/badge.js +1 -1
- package/dist/badge.min.js +1 -1
- package/dist/bottom-sheet.js +1 -1
- package/dist/bottom-sheet.min.js +1 -1
- package/dist/button-group.js +1 -1
- package/dist/button-group.min.js +1 -1
- package/dist/button.js +1 -1
- package/dist/button.min.js +1 -1
- package/dist/calendar.js +1 -1
- package/dist/calendar.min.js +1 -1
- package/dist/card.js +1 -1
- package/dist/card.min.js +1 -1
- package/dist/checkbox.js +1 -1
- package/dist/checkbox.min.js +1 -1
- package/dist/chips.js +1 -1
- package/dist/chips.min.js +1 -1
- package/dist/core-a11y.js +5 -3
- package/dist/core-a11y.js.map +1 -1
- package/dist/core-a11y.min.js +6 -6
- package/dist/core-a11y.min.js.map +1 -1
- package/dist/core-anchoring.js +1 -1
- package/dist/core-anchoring.min.js +1 -1
- package/dist/core-bidi.js +1 -1
- package/dist/core-bidi.min.js +1 -1
- package/dist/core-layout.js +1 -1
- package/dist/core-layout.min.js +1 -1
- package/dist/core-platform.js +1 -1
- package/dist/core-platform.min.js +1 -1
- package/dist/core.js +6 -6
- package/dist/core.js.map +1 -1
- package/dist/core.min.js +2 -2
- package/dist/core.min.js.map +1 -1
- package/dist/css-custom-data.json +290 -180
- package/dist/custom-elements.json +22418 -21145
- package/dist/datepicker.js +1 -1
- package/dist/datepicker.min.js +1 -1
- package/dist/dialog.js +1 -1
- package/dist/dialog.min.js +1 -1
- package/dist/divider.js +1 -1
- package/dist/divider.min.js +1 -1
- package/dist/drawer-container.js +1 -1
- package/dist/drawer-container.min.js +1 -1
- package/dist/expansion-panel.js +1 -1
- package/dist/expansion-panel.min.js +1 -1
- package/dist/fab-menu.js +1 -1
- package/dist/fab-menu.min.js +1 -1
- package/dist/fab.js +1 -1
- package/dist/fab.min.js +1 -1
- package/dist/form-field.js +1 -1
- package/dist/form-field.min.js +1 -1
- package/dist/heading.js +1 -1
- package/dist/heading.min.js +1 -1
- package/dist/html-custom-data.json +172 -133
- package/dist/icon-button.js +1 -1
- package/dist/icon-button.min.js +1 -1
- package/dist/icon.js +146 -6
- package/dist/icon.js.map +1 -1
- package/dist/icon.min.js +2 -2
- package/dist/icon.min.js.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.min.js +1 -1
- package/dist/list.js +2 -2
- package/dist/list.js.map +1 -1
- package/dist/list.min.js +2 -2
- package/dist/list.min.js.map +1 -1
- package/dist/loading-indicator.js +1 -1
- package/dist/loading-indicator.min.js +1 -1
- package/dist/menu.js +1 -1
- package/dist/menu.min.js +1 -1
- package/dist/nav-bar.js +1 -1
- package/dist/nav-bar.min.js +1 -1
- package/dist/nav-menu.js +19 -27
- package/dist/nav-menu.js.map +1 -1
- package/dist/nav-menu.min.js +2 -2
- package/dist/nav-menu.min.js.map +1 -1
- package/dist/nav-rail.js +1 -1
- package/dist/nav-rail.min.js +1 -1
- package/dist/option.js +1 -1
- package/dist/option.min.js +1 -1
- package/dist/paginator.js +1 -1
- package/dist/paginator.min.js +1 -1
- package/dist/progress-indicator.js +1 -1
- package/dist/progress-indicator.min.js +1 -1
- package/dist/radio-group.js +1 -1
- package/dist/radio-group.min.js +1 -1
- package/dist/search.js +1 -1
- package/dist/search.min.js +1 -1
- package/dist/segmented-button.js +1 -1
- package/dist/segmented-button.min.js +1 -1
- package/dist/select.js +1 -1
- package/dist/select.min.js +1 -1
- package/dist/shape.js +1 -1
- package/dist/shape.min.js +1 -1
- package/dist/skeleton.js +48 -4
- package/dist/skeleton.js.map +1 -1
- package/dist/skeleton.min.js +2 -2
- package/dist/skeleton.min.js.map +1 -1
- package/dist/slide-group.js +1 -1
- package/dist/slide-group.min.js +1 -1
- package/dist/slider.js +1 -1
- package/dist/slider.min.js +1 -1
- package/dist/snackbar.js +1 -1
- package/dist/snackbar.min.js +1 -1
- package/dist/split-button.js +1 -1
- package/dist/split-button.min.js +1 -1
- package/dist/split-pane.js +1 -1
- package/dist/split-pane.min.js +1 -1
- package/dist/src/all.d.ts +1 -0
- package/dist/src/all.d.ts.map +1 -1
- package/dist/src/core/a11y/list-key/ListKeyManager.d.ts.map +1 -1
- package/dist/src/core/shared/primitives/ElevationElement.d.ts +1 -1
- package/dist/src/core/shared/primitives/FocusRingElement.d.ts +1 -1
- package/dist/src/core/shared/primitives/PseudoCheckboxElement.d.ts.map +1 -1
- package/dist/src/core/shared/primitives/PseudoRadioElement.d.ts.map +1 -1
- package/dist/src/core/shared/primitives/RippleElement.d.ts +1 -1
- package/dist/src/icon/IconElement.d.ts +7 -1
- package/dist/src/icon/IconElement.d.ts.map +1 -1
- package/dist/src/icon/IconRegistry.d.ts +54 -0
- package/dist/src/icon/IconRegistry.d.ts.map +1 -0
- package/dist/src/icon/IconWeight.d.ts +3 -0
- package/dist/src/icon/IconWeight.d.ts.map +1 -0
- package/dist/src/icon/index.d.ts +1 -0
- package/dist/src/icon/index.d.ts.map +1 -1
- package/dist/src/icon/registerIcon.d.ts +14 -0
- package/dist/src/icon/registerIcon.d.ts.map +1 -0
- package/dist/src/list/ListItemElement.d.ts.map +1 -1
- package/dist/src/nav-menu/NavMenuElement.d.ts +18 -6
- package/dist/src/nav-menu/NavMenuElement.d.ts.map +1 -1
- package/dist/src/nav-menu/NavMenuItemElement.d.ts +3 -5
- package/dist/src/nav-menu/NavMenuItemElement.d.ts.map +1 -1
- package/dist/src/skeleton/SkeletonElement.d.ts.map +1 -1
- package/dist/src/tree/TreeElement.d.ts +150 -0
- package/dist/src/tree/TreeElement.d.ts.map +1 -0
- package/dist/src/tree/TreeItemElement.d.ts +131 -0
- package/dist/src/tree/TreeItemElement.d.ts.map +1 -0
- package/dist/src/tree/index.d.ts +3 -0
- package/dist/src/tree/index.d.ts.map +1 -0
- package/dist/stepper.js +1 -1
- package/dist/stepper.min.js +1 -1
- package/dist/switch.js +1 -1
- package/dist/switch.min.js +1 -1
- package/dist/tabs.js +1 -1
- package/dist/tabs.min.js +1 -1
- package/dist/textarea-autosize.js +1 -1
- package/dist/textarea-autosize.min.js +1 -1
- package/dist/theme.js +1 -1
- package/dist/theme.min.js +1 -1
- package/dist/toc.js +1 -1
- package/dist/toc.min.js +1 -1
- package/dist/toolbar.js +1 -1
- package/dist/toolbar.min.js +1 -1
- package/dist/tooltip.js +1 -1
- package/dist/tooltip.min.js +1 -1
- package/dist/tree.js +737 -0
- package/dist/tree.js.map +1 -0
- package/dist/tree.min.js +7 -0
- package/dist/tree.min.js.map +1 -0
- package/package.json +7 -2
package/dist/tree.js.map
ADDED
|
@@ -0,0 +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._hasChildItems && this.open}\"\r\n @opening=\"${this.#handleCollapsibleEvent}\"\r\n @opened=\"${this.#handleCollapsibleEvent}\"\r\n @closing=\"${this.#handleCollapsibleEvent}\"\r\n @closed=\"${this.#handleCollapsibleEvent}\"\r\n >\r\n <slot @slotchange=\"${this.#handleItemSlotChange}\"></slot>\r\n </m3e-collapsible>`;\r\n }\r\n\r\n /** @private */\r\n #renderIcon(): unknown {\r\n const icon = html`<slot name=\"icon\" @slotchange=\"${this.#handleIconSlotChange}\"></slot>`;\r\n return this.selected && !this.hasChildItems\r\n ? html`<slot name=\"selected-icon\" @slotchange=\"${this.#handleIconSlotChange}\">${icon}</slot>`\r\n : icon;\r\n }\r\n\r\n /** @private */\r\n #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 console.log(this._multi);\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","console","log","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":";;;;;;;;;;;;;;;AAyBA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAiDG;AAEI,IAAMA,kBAAkB,GAAAC,oBAAA,GAAxB,MAAMD,kBAAmB,SAAQE,QAAQ,CAC9CC,QAAQ,CACNC,cAAc,CAACC,eAAe,CAACC,IAAI,CAACC,UAAU,EAAE,UAAU,CAAC,EAAE,IAAI,CAAC,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,CAAC,CAC9G,CACF,CAAA;AAJMC,EAAAA,WAAAA,GAAA;;;AAsKL;IAAiC,IAAA,CAAAC,cAAc,GAAG,KAAK;AACvD;IAAiC,IAAA,CAAAC,MAAM,GAAG,KAAK;AAC/C;IACSC,0CAAA,CAAAC,GAAA,CAAA,IAAA,EAA0B,IAAIC,kBAAkB,CAAC,IAAI,EAAE;AAC9DC,MAAAA,MAAM,EAAE,IAAI;AACZC,MAAAA,WAAW,EAAE,IAAI;AACjBC,MAAAA,MAAM,EAAE;QACNC,eAAe,EAAE,CAAC,OAAO;OAC1B;AACDC,MAAAA,QAAQ,EAAEA,MAAMC,uBAAA,IAAI,EAAAC,6BAAA,EAAA,GAAA,EAAAC,oCAAA,CAAkB,CAAAC,IAAA,CAAtB,IAAI;AACrB,KAAA,CAAC,CAAA;AAEF;AAAgBC,IAAAA,yBAAA,CAAAX,GAAA,CAAA,IAAA,EAA+B,EAAE,CAAA;AACjD;AAAgBY,IAAAA,wBAAA,CAAAZ,GAAA,CAAA,IAAA,EAA+B,IAAI,CAAA;AACnD;IAAgBa,wBAAA,CAAAb,GAAA,CAAA,IAAA,EAAQ,IAAIc,KAAK,EAAsB,CAAA;AACvD;AAAgBC,IAAAA,wBAAA,CAAAf,GAAA,CAAA,IAAA,EAAkC,IAAI,CAAA;AAEtD;;;AAGG;IACyC,IAAA,CAAAgB,IAAI,GAAG,KAAK;AAExD;;;AAGG;IACyC,IAAA,CAAAC,aAAa,GAAG,KAAK;AA8SnE,EAAA;AA5SE;EACA,IAAIC,IAAIA,GAAA;AACN,IAAA,OAAOX,sBAAA,CAAA,IAAI,EAAAQ,wBAAA,EAAA,GAAA,CAAM;AACnB,EAAA;AAEA;EACA,IAAII,KAAKA,GAAA;AACP,IAAA,OAAO,IAAI,CAACC,KAAK,IAAI,IAAI;AAC3B,EAAA;AAEA;EACA,IAAIC,OAAOA,GAAA;AACT,IAAA,OAAO,CAACd,sBAAA,CAAA,IAAI,EAAAM,wBAAA,EAAA,GAAA,CAAM,CAACS,IAAI,CAAEC,CAAC,IAAK,CAACA,CAAC,CAACP,IAAI,CAAC;AACzC,EAAA;AAEA;EACA,IAAIQ,IAAIA,GAAA;AACN,IAAA,OAAO,CAAC,GAAGjB,sBAAA,CAAA,IAAI,gCAAM,EAAE,IAAI,CAAC;AAC9B,EAAA;AAEA;EACA,IAAIkB,aAAaA,GAAA;IACf,OAAO,IAAI,CAAC5B,cAAc;AAC5B,EAAA;AAEA;EACA,IAAI6B,UAAUA,GAAA;IACZ,OAAOnB,sBAAA,CAAA,IAAI,EAAAM,wBAAA,EAAA,GAAA,CAAM,CAACN,uBAAA,IAAI,EAAAM,wBAAA,EAAA,GAAA,CAAM,CAACc,MAAM,GAAG,CAAC,CAAC,IAAI,IAAI;AAClD,EAAA;AAEA;EACA,IAAIC,UAAUA,GAAA;AACZ,IAAA,OAAOrB,sBAAA,CAAA,IAAI,EAAAI,yBAAA,EAAA,GAAA,CAAO;AACpB,EAAA;AAEA;EACA,IAAIkB,KAAKA,GAAA;IACP,OAAOtB,uBAAA,IAAI,EAAAM,wBAAA,EAAA,GAAA,CAAM,CAACc,MAAM,GAAG,CAAC;AAC9B,EAAA;AAEA;;;AAGG;AACHG,EAAAA,MAAMA,CAACC,cAAuB,KAAK,EAAA;IACjC,IAAI,IAAI,CAACN,aAAa,EAAE;MACtB,IAAI,CAACT,IAAI,GAAG,IAAI;AAChB,MAAA,IAAIe,WAAW,EAAE;AACf,QAAA,IAAI,CAACH,UAAU,CAACI,OAAO,CAAET,CAAC,IAAKA,CAAC,CAACO,MAAM,CAAC,IAAI,CAAC,CAAC;AAChD,MAAA;AACF,IAAA;AACF,EAAA;AAEA;;;AAGG;AACHG,EAAAA,QAAQA,CAACF,cAAuB,KAAK,EAAA;IACnC,IAAI,IAAI,CAACN,aAAa,EAAE;MACtB,IAAI,CAACT,IAAI,GAAG,KAAK;AACjB,MAAA,IAAIe,WAAW,EAAE;AACf,QAAA,IAAI,CAACH,UAAU,CAACI,OAAO,CAAET,CAAC,IAAKA,CAAC,CAACU,QAAQ,CAAC,IAAI,CAAC,CAAC;AAClD,MAAA;AACF,IAAA;AACF,EAAA;AAEA;AACAC,EAAAA,MAAMA,GAAA;IACJ,IAAI,IAAI,CAACT,aAAa,EAAE;AACtB,MAAA,IAAI,CAACT,IAAI,GAAG,CAAC,IAAI,CAACA,IAAI;AACxB,IAAA;AACF,EAAA;AAEA;AACSmB,EAAAA,iBAAiBA,GAAA;IACxB,KAAK,CAACA,iBAAiB,EAAE;IAEzB5B,sBAAA,CAAA,IAAI,EAAAM,wBAAA,EAAA,GAAA,CAAM,CAACc,MAAM,GAAG,CAAC;IACrB,KACE,IAAIS,IAAI,GAAG,IAAI,CAACC,aAAa,EAAEC,OAAO,CAAC,eAAe,CAAC,EACvDF,IAAI,EACJA,IAAI,GAAGA,IAAI,CAACC,aAAa,EAAEC,OAAO,CAAC,eAAe,CAAC,EACnD;MACA/B,sBAAA,CAAA,IAAI,EAAAM,wBAAA,EAAA,GAAA,CAAM,CAAC0B,IAAI,CAACH,IAAI,CAAC;AACvB,IAAA;IACA7B,sBAAA,CAAA,IAAI,EAAAM,wBAAA,EAAA,GAAA,CAAM,CAAC2B,OAAO,EAAE;AAEpB,IAAA,IAAI,CAACC,KAAK,CAACC,WAAW,CAAC,oBAAoB,EAAE,CAAA,EAAG,IAAI,CAACb,KAAK,GAAG,CAAC,EAAE,CAAC;AACjEc,IAAAA,sBAAA,CAAA,IAAI,4BAAS,IAAI,CAACL,OAAO,CAAC,UAAU,CAAC,EAAA,GAAA,CAAA;IACrC,IAAI/B,sBAAA,CAAA,IAAI,EAAAK,wBAAA,EAAA,GAAA,CAAM,EAAE;AACdL,MAAAA,sBAAA,CAAA,IAAI,kDAAwB,CAACqC,OAAO,CAACrC,sBAAA,CAAA,IAAI,EAAAK,wBAAA,EAAA,GAAA,CAAM,CAAC;AAChDL,MAAAA,sBAAA,CAAA,IAAI,EAAAC,6BAAA,EAAA,GAAA,EAAAC,oCAAA,CAAkB,CAAAC,IAAA,CAAtB,IAAI,CAAoB;AAC1B,IAAA;AACF,EAAA;AAEA;AACSmC,EAAAA,oBAAoBA,GAAA;IAC3B,KAAK,CAACA,oBAAoB,EAAE;IAC5BtC,sBAAA,CAAA,IAAI,EAAAM,wBAAA,EAAA,GAAA,CAAM,CAACc,MAAM,GAAG,CAAC;IAErB,IAAIpB,sBAAA,CAAA,IAAI,EAAAK,wBAAA,EAAA,GAAA,CAAM,EAAE;AACdL,MAAAA,sBAAA,CAAA,IAAI,kDAAwB,CAACuC,SAAS,CAACvC,sBAAA,CAAA,IAAI,EAAAK,wBAAA,EAAA,GAAA,CAAM,CAAC;AACpD,IAAA;AACF,EAAA;AAEA;EACmBmC,MAAMA,CAACC,iBAAiC,EAAA;AACzD,IAAA,KAAK,CAACD,MAAM,CAACC,iBAAiB,CAAC;IAE/B,IACEA,iBAAiB,CAACC,GAAG,CAAC,UAAU,CAAC,IACjCD,iBAAiB,CAACC,GAAG,CAAC,eAAe,CAAC,IACtCD,iBAAiB,CAACC,GAAG,CAAC,QAAQ,CAAC,EAC/B;MACA,IAAI1C,uBAAA,IAAI,EAAAK,wBAAA,EAAA,GAAA,CAAM,EAAEsC,KAAK,EAAE;QACrB,IAAI,CAACC,YAAY,GAAG,IAAI;AACxB,QAAA,IAAI,CAACC,WAAW,GAAG,IAAI,CAACnC,aAAa,GAAG,OAAO,GAAG,CAAA,EAAG,IAAI,CAACoC,QAAQ,CAAA,CAAE;AACtE,MAAA,CAAC,MAAM;AACL,QAAA,IAAI,CAACF,YAAY,GAAG,GAAG,IAAI,CAACE,QAAQ,CAAA,CAAE;AACxC,MAAA;AACF,IAAA;AAEA,IAAA,IAAIL,iBAAiB,CAACC,GAAG,CAAC,UAAU,CAAC,EAAE;MACrC,KAAK,MAAMK,IAAI,IAAI,IAAI,CAACC,gBAAgB,CACtC,kFAAkF,CACnF,EAAE;QACDD,IAAI,CAACE,eAAe,CAAC,QAAQ,EAAE,IAAI,CAACH,QAAQ,CAAC;AAC/C,MAAA;AACF,IAAA;AAEA,IAAA,IAAIL,iBAAiB,CAACC,GAAG,CAAC,MAAM,CAAC,IAAID,iBAAiB,CAACC,GAAG,CAAC,gBAAgB,CAAC,EAAE;AAC5E,MAAA,IAAI,CAACQ,YAAY,GAAG,IAAI,CAAC5D,cAAc,GAAG,CAAA,EAAG,IAAI,CAACmB,IAAI,CAAA,CAAE,GAAG,IAAI;AACjE,IAAA;AAEA,IAAA,IAAKgC,iBAAiB,CAACC,GAAG,CAAC,gBAAgB,CAAC,IAAI,IAAI,CAACS,QAAQ,IAAKV,iBAAiB,CAACC,GAAG,CAAC,UAAU,CAAC,EAAE;AACnG1C,MAAAA,sBAAA,CAAA,IAAI,iCAAO,CAACyB,OAAO,CAAET,CAAC,IAAMA,CAAC,CAACmC,QAAQ,GAAG,IAAI,CAACA,QAAS,CAAC;AAC1D,IAAA;AACF,EAAA;AAEA;EACmBC,YAAYA,CAACC,kBAAwC,EAAA;AACtE,IAAA,KAAK,CAACD,YAAY,CAACC,kBAAkB,CAAC;AAEtC,IAAA,MAAMC,IAAI,GAAG,IAAI,CAACzC,KAAK;AACvB,IAAA,IAAIyC,IAAI,EAAE;MACR,CAAC,IAAI,CAACC,SAAS,EAAE,IAAI,CAACC,UAAU,EAAE,IAAI,CAACC,MAAM,CAAC,CAAChC,OAAO,CAAET,CAAC,IAAKA,CAAC,EAAE0C,MAAM,CAACJ,IAAI,CAAC,CAAC;AAChF,IAAA;AACF,EAAA;AAEA;AACmBK,EAAAA,MAAMA,GAAA;AACvB,IAAA,OAAOC,IAAI,CAAA,0BAAA,EAA6B5D,sBAAA,CAAA,IAAI,EAAAC,6BAAA,EAAA,GAAA,EAAA4D,+BAAA,CAAa,CAAA,kDAAA,EACH,IAAI,CAACV,QAAQ,4EACR,IAAI,CAACA,QAAQ,CAAA,yDAAA,EAC5B,IAAI,CAACA,QAAQ,6TAQNnD,sBAAA,CAAA,IAAI,EAAAC,6BAAA,EAAA,GAAA,EAAA6D,kDAAA,CAAgC,kBAEjF,IAAI,CAACvE,MAAM,GACTqE,IAAI,CAAA,gDAAA,EAEU,IAAI,CAACd,QAAQ,CAAA,kBAAA,EACP,IAAI,CAACpC,aAAa,CAAA,aAAA,EACvB,IAAI,CAACyC,QAAQ,aAChBnD,sBAAA,CAAA,IAAI,EAAAC,6BAAA,EAAA,GAAA,EAAA8D,uCAAA,CAAqB,0BAEd,GACvBC,OAAO,wCAC4BhE,sBAAA,CAAA,IAAI,EAAAC,6BAAA,EAAA,GAAA,EAAAgE,8BAAA,CAAY,CAAA9D,IAAA,CAAhB,IAAI,CAAc,CAAA,yDAAA,EAErBH,sBAAA,CAAA,IAAI,EAAAC,6BAAA,EAAA,GAAA,EAAAiE,oCAAA,CAAkB,CAAA,8EAAA,EAM3CC,SAAS,CAAC,IAAI,CAAC7E,cAAc,GAAG8E,SAAS,GAAG,MAAM,CAAC,CAAA,SAAA,EACzD,IAAI,CAAC9E,cAAc,IAAI,IAAI,CAACmB,IAAI,eAC7BT,sBAAA,CAAA,IAAI,EAAAC,6BAAA,EAAA,GAAA,EAAAoE,0CAAA,CAAwB,cAC7BrE,sBAAA,CAAA,IAAI,EAAAC,6BAAA,EAAA,GAAA,EAAAoE,0CAAA,CAAwB,CAAA,YAAA,EAC3BrE,sBAAA,CAAA,IAAI,EAAAC,6BAAA,EAAA,GAAA,EAAAoE,0CAAA,CAAwB,CAAA,WAAA,EAC7BrE,sBAAA,CAAA,IAAI,EAAAC,6BAAA,EAAA,GAAA,EAAAoE,0CAAA,CAAwB,CAAA,qBAAA,EAElBrE,sBAAA,CAAA,IAAI,EAAAC,6BAAA,EAAA,GAAA,EAAAqE,wCAAA,CAAsB,CAAA,2BAAA,CAC9B;AACvB,EAAA;;;;;;;;;AAIE,EAAA,MAAMvB,IAAI,GAAGa,IAAI,CAAA,+BAAA,EAAkC5D,sBAAA,CAAA,IAAI,EAAAC,6BAAA,EAAA,GAAA,EAAAsE,wCAAA,CAAsB,CAAA,SAAA,CAAW;EACxF,OAAO,IAAI,CAACzB,QAAQ,IAAI,CAAC,IAAI,CAAC5B,aAAa,GACvC0C,IAAI,CAAA,wCAAA,EAA2C5D,uBAAA,IAAI,EAAAC,6BAAA,EAAA,GAAA,EAAAsE,wCAAA,CAAsB,CAAA,EAAA,EAAKxB,IAAI,CAAA,OAAA,CAAS,GAC3FA,IAAI;AACV,CAAC;iHAG+ByB,CAAQ,EAAA;EACtCC,cAAc,CAAC,IAAI,EAAE,wBAAwB,EAAEC,gBAAgB,CAAkBF,CAAC,CAAC7E,MAAM,CAAC,CAAC;AAC7F,CAAC;6FAGqB6E,CAAQ,EAAA;EAC5BC,cAAc,CAAC,IAAI,EAAE,YAAY,EAAEC,gBAAgB,CAAkBF,CAAC,CAAC7E,MAAM,CAAC,CAAC;AACjF,CAAC;qFAGiB6E,CAAQ,EAAA;EACxBpC,sBAAA,CAAA,IAAI,EAAA5B,wBAAA,EACgBgE,CAAC,CAAC7E,MAAO,CAACgF,gBAAgB,CAAC;AAAEC,IAAAA,OAAO,EAAE;GAAM,CAAC,CAACC,IAAI,CAAE7D,CAAC,IAAKA,CAAC,YAAY8D,iBAAiB,CAAC,IAC3G,IAAI,MAAA;AAEN9E,EAAAA,sBAAA,CAAA,IAAI,gCAAM,EAAE+E,YAAY,CAAC,UAAU,EAAE,IAAI,CAAC;AAC5C,CAAC;6FAGqBP,CAAQ,EAAA;EAC5BpC,sBAAA,CAAA,IAAI,EAAAhC,yBAAA,EAA4BoE,CAAC,CAAC7E,MAAO,CACtCgF,gBAAgB,CAAC;AAAEC,IAAAA,OAAO,EAAE;GAAM,CAAC,CACnCI,MAAM,CAAEhE,CAAC,IAAKA,CAAC,YAAYlC,oBAAkB,CAAC,EAAA,GAAA,CAAA;AAEjD,EAAA,MAAMmG,aAAa,GAAG,IAAI,CAAC3F,cAAc;AACzC,EAAA,IAAI,CAACA,cAAc,GAAGU,sBAAA,CAAA,IAAI,iCAAO,CAACoB,MAAM,GAAG,CAAC;EAC5CqD,cAAc,CAAC,IAAI,EAAE,aAAa,EAAE,IAAI,CAACnF,cAAc,CAAC;AAExD,EAAA,IAAI2F,aAAa,IAAI,IAAI,CAAC3F,cAAc,EAAE;AACxC,IAAA,IAAI,IAAI,CAACC,MAAM,IAAIS,sBAAA,CAAA,IAAI,EAAAK,wBAAA,EAAA,GAAA,CAAM,EAAE6E,OAAO,EAAE;MACtC,IAAIC,WAAW,GAAG,KAAK;AACrBC,QAAAA,aAAa,GAAG,KAAK;MAEvB,KAAK,MAAMC,KAAK,IAAI,IAAI,CAACrC,gBAAgB,CAAC,eAAe,CAAC,EAAE;AAC1DmC,QAAAA,WAAW,GAAGA,WAAW,IAAIE,KAAK,CAACvC,QAAQ;AAC3CsC,QAAAA,aAAa,GAAGA,aAAa,IAAI,CAACC,KAAK,CAACvC,QAAQ;QAChD,IAAIqC,WAAW,IAAIC,aAAa,EAAE;AAChC,UAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA,IAAIA,aAAa,EAAE;AACjBpF,QAAAA,sBAAA,CAAA,IAAI,EAAAK,wBAAA,EAAA,GAAA,CAAM,GAAGiF,gBAAgB,CAAC,CAACC,QAAQ,CAAC,IAAI,CAAC;QAC7C,IAAI,CAAC7E,aAAa,GAAGyE,WAAW;AAClC,MAAA,CAAC,MAAM;AACLnF,QAAAA,sBAAA,CAAA,IAAI,EAAAK,wBAAA,EAAA,GAAA,CAAM,GAAGiF,gBAAgB,CAAC,CAACE,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC;QAClD,IAAI,CAAC9E,aAAa,GAAG,KAAK;AAC5B,MAAA;AACF,IAAA;AACF,EAAA;AACF,CAAC;;AAIC,EAAA,IAAI,CAACnB,MAAM,GAAGS,sBAAA,CAAA,IAAI,gCAAM,EAAE2C,KAAK,KAAK,IAAI;AACxC8C,EAAAA,OAAO,CAACC,GAAG,CAAC,IAAI,CAACnG,MAAM,CAAC;EACxBkF,cAAc,CAAC,IAAI,EAAE,QAAQ,EAAE,IAAI,CAAClF,MAAM,CAAC;AAC7C,CAAC;;EAIC,IAAI,IAAI,CAAC4D,QAAQ,EAAE;AAEnBnD,EAAAA,sBAAA,CAAA,IAAI,EAAAK,wBAAA,EAAA,GAAA,CAAM,GAAGiF,gBAAgB,CAAC,CAACK,aAAa,CAAC,IAAI,CAAC;AAClD,EAAA,IAAI,CAAC,IAAI,CAACrG,cAAc,EAAE;IACxB,IAAI,IAAI,CAACC,MAAM,EAAE;MACf,IAAI,IAAI,CAACuD,QAAQ,EAAE;QACjB9C,sBAAA,CAAA,IAAI,EAAAK,wBAAA,EAAA,GAAA,CAAM,EAAEkF,QAAQ,CAAC,IAAI,CAAC;AAC5B,MAAA,CAAC,MAAM;QACLvF,sBAAA,CAAA,IAAI,EAAAK,wBAAA,EAAA,GAAA,CAAM,EAAEmF,MAAM,CAAC,IAAI,CAAC;AAC1B,MAAA;AACF,IAAA,CAAC,MAAM;MACLxF,sBAAA,CAAA,IAAI,EAAAK,wBAAA,EAAA,GAAA,CAAM,EAAEmF,MAAM,CAAC,IAAI,CAAC;AAC1B,IAAA;IACAxF,sBAAA,CAAA,IAAI,EAAAQ,wBAAA,EAAA,GAAA,CAAM,EAAEoF,KAAK,EAAE;AACrB,EAAA,CAAC,MAAM;AACL,IAAA,IAAI,CAAC,IAAI,CAACrG,MAAM,EAAE;MAChBS,sBAAA,CAAA,IAAI,EAAAK,wBAAA,EAAA,GAAA,CAAM,EAAEmF,MAAM,CAAC,IAAI,CAAC;AAC1B,IAAA;IACA,IAAI,CAAC7D,MAAM,EAAE;AACf,EAAA;AACF,CAAC;2FAGoB6C,CAAQ,EAAA;EAC3BA,CAAC,CAACqB,eAAe,EAAE;AAEnB,EAAA,IAAI,CAAC,IAAI,CAAC/C,QAAQ,EAAE;IAClB9C,sBAAA,CAAA,IAAI,EAAAK,wBAAA,EAAA,GAAA,CAAM,EAAEmF,MAAM,CAAC,IAAI,CAAC;AAC1B,EAAA,CAAC,MAAM;IACLxF,sBAAA,CAAA,IAAI,EAAAK,wBAAA,EAAA,GAAA,CAAM,EAAEkF,QAAQ,CAAC,IAAI,CAAC;AAC5B,EAAA;AACF,CAAC;iGAGuBf,CAAQ,EAAA;EAC9BA,CAAC,CAACqB,eAAe,EAAE;EACnB,IAAI,CAACC,aAAa,CAAC,IAAIC,KAAK,CAACvB,CAAC,CAACwB,IAAI,EAAE;AAAEC,IAAAA,OAAO,EAAE;AAAI,GAAE,CAAC,CAAC;AAC1D,CAAC;AAzeD;AACgBpH,kBAAA,CAAAqH,MAAM,GAAmBC,GAAG,CAAA,wOAAA,EAYWC,WAAW,CAACC,OAAO,CAACC,IAAI,CAAC,EAAE,CAAC,CAAA,iGAAA,EAEnCF,WAAW,CAACG,SAAS,CAACC,QAAQ,CAAC5F,KAAK,CAAC6F,KAAK,CAACC,QAAQ,oDAC/CN,WAAW,CAACG,SAAS,CAACC,QAAQ,CAAC5F,KAAK,CAAC6F,KAAK,CAACE,UAAU,CAAA,iDAAA,EACrDP,WAAW,CAACG,SAAS,CAACC,QAAQ,CAAC5F,KAAK,CAAC6F,KAAK,CAACG,UAAU,CAAA,iDAAA,EACrDR,WAAW,CAACG,SAAS,CAACC,QAAQ,CAAC5F,KAAK,CAAC6F,KAAK,CAACI,QAAQ,CAAA,eAAA,EACrFC,SAAS,CACrB,CAAA,MAAA,EAASV,WAAW,CAACW,MAAM,CAACC,QAAQ,CAACC,MAAM,IAAIb,WAAW,CAACW,MAAM,CAACG,MAAM,CAACV,QAAQ,CAAA;AAC9D,yBAAA,EAAAJ,WAAW,CAACW,MAAM,CAACC,QAAQ,CAACC,MAAM,CAAA,CAAA,EAAIb,WAAW,CAACW,MAAM,CAACG,MAAM,CAACV,QAAQ,CAAA,CAAE,CAC9F,CAAA,mEAAA,EAI2CJ,WAAW,CAACe,KAAK,CAACC,MAAM,CAACC,IAAI,CAAA,++BAAA,EAoD3DP,SAAS,CAAC,CAAA,oDAAA,EAAuDV,WAAW,CAACW,MAAM,CAACC,QAAQ,CAACM,OAAO,CAAA;AAC9G,QAAA,EAAAlB,WAAW,CAACW,MAAM,CAACG,MAAM,CAACV,QAAQ,CAAA,CAAE,CAAC,CAAA,sSAAA,EAUCJ,WAAW,CAACmB,KAAK,CAACC,gBAAgB,CAAA,6FAAA,EAKpCpB,WAAW,CAACmB,KAAK,CAACE,SAAS,CAAA,+JAAA,EAMhBrB,WAAW,CAACmB,KAAK,CAACG,oBAAoB,CAAA,mEAAA,EACvBtB,WAAW,CAACmB,KAAK,CAACI,kBAAkB,CAAA,uFAAA,EAGlGvB,WAAW,CAACmB,KAAK,CAACG,oBAAoB,CAAA,wFAAA,EAItCtB,WAAW,CAACmB,KAAK,CAACG,oBAAoB,CAAA,mEAAA,EAEuBtB,WAAW,CAACmB,KAAK,CAACG,oBAAoB,CAAA,0IAAA,EAKnGtB,WAAW,CAACmB,KAAK,CAACE,SAAS,CAAA,0FAAA,EAI3BrB,WAAW,CAACmB,KAAK,CAACE,SAAS,wEAEoCrB,WAAW,CAACmB,KAAK,CAACE,SAAS,CAAA,+iBAAA,CAxH5E;AA2J2BG,UAAA,CAAA,CAA/BC,KAAK,CAAC,cAAc,CAAC,CAA4C,EAAAhJ,kBAAA,CAAAiJ,SAAA,EAAA,YAAA,EAAA,MAAA,CAAA;AACnCF,UAAA,CAAA,CAA9BC,KAAK,CAAC,aAAa,CAAC,CAA0C,EAAAhJ,kBAAA,CAAAiJ,SAAA,EAAA,WAAA,EAAA,MAAA,CAAA;AACpCF,UAAA,CAAA,CAA1BC,KAAK,CAAC,SAAS,CAAC,CAAoC,EAAAhJ,kBAAA,CAAAiJ,SAAA,EAAA,QAAA,EAAA,MAAA,CAAA;AACrBF,UAAA,CAAA,CAAhCC,KAAK,CAAC,OAAO,CAAC,CAAsC,EAAAhJ,kBAAA,CAAAiJ,SAAA,EAAA,OAAA,EAAA,MAAA,CAAA;AAEpCF,UAAA,CAAA,CAAhBG,KAAK,EAAE,CAAgC,EAAAlJ,kBAAA,CAAAiJ,SAAA,EAAA,gBAAA,EAAA,MAAA,CAAA;AACvBF,UAAA,CAAA,CAAhBG,KAAK,EAAE,CAAwB,EAAAlJ,kBAAA,CAAAiJ,SAAA,EAAA,QAAA,EAAA,MAAA,CAAA;AAoBJF,UAAA,CAAA,CAA3CI,QAAQ,CAAC;AAAEhC,EAAAA,IAAI,EAAEiC,OAAO;AAAEC,EAAAA,OAAO,EAAE;AAAI,CAAE,CAAC,CAAc,EAAArJ,kBAAA,CAAAiJ,SAAA,EAAA,MAAA,EAAA,MAAA,CAAA;AAMbF,UAAA,CAAA,CAA3CI,QAAQ,CAAC;AAAEhC,EAAAA,IAAI,EAAEiC,OAAO;AAAEC,EAAAA,OAAO,EAAE;AAAI,CAAE,CAAC,CAAuB,EAAArJ,kBAAA,CAAAiJ,SAAA,EAAA,eAAA,EAAA,MAAA,CAAA;AAjMvDjJ,kBAAkB,GAAAC,oBAAA,GAAA8I,UAAA,CAAA,CAD9BO,aAAa,CAAC,eAAe,CAAC,CAClB,EAAAtJ,kBAAkB,CA+e9B;;;;ACziBD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA0EG;AAEI,IAAMuJ,cAAc,GAAAC,gBAAA,GAApB,MAAMD,cAAe,SAAQjJ,IAAI,CAACC,UAAU,EAAE,MAAM,CAAC,CAAA;AAqD1DC,EAAAA,WAAAA,GAAA;AACE,IAAA,KAAK,EAAE;;AAtBT;AAAgBiJ,IAAAA,kCAAA,CAAA7I,GAAA,CAAA,IAAA,EAAsB,KAAK,CAAA;AAC3C;AAAgB8I,IAAAA,2BAAA,CAAA9I,GAAA,CAAA,IAAA,EAAe,KAAK,CAAA;AAEpC;IACS,IAAA,CAAA+I,EAAA,CAAkB,GAAG,IAAIC,gBAAgB,EAAsB,CACrEC,uBAAuB,EAAE,CACzBC,cAAc,EAAE,CAChBC,iBAAiB,EAAE,CACnBC,aAAa,EAAE,CACfC,iBAAiB,CAAE9H,CAAC,IAAKA,CAAC,CAACmC,QAAQ,IAAI,CAACnC,CAAC,CAACF,OAAO,CAAC,CAClDiI,qBAAqB,EAAE,CACvBC,kBAAkB,CAAC,MAAK;AACvB,MAAA,IAAI,IAAI,CAAC1D,gBAAgB,CAAC,CAAC2D,UAAU,EAAE;QACrCjJ,sBAAA,CAAA,IAAI,EAAAkJ,yBAAA,EAAA,GAAA,EAAAC,4BAAA,CAAc,CAAAhJ,IAAA,CAAlB,IAAI,EAAe,IAAI,CAACmF,gBAAgB,CAAC,CAAC2D,UAAU,CAAC;AACvD,MAAA;AACF,IAAA,CAAC,CAAC;AAEJ;IAAyBG,8BAAA,CAAA3J,GAAA,CAAA,IAAA,EAAmB+E,CAAgB,IAAKxE,sBAAA,CAAA,IAAI,gEAAe,CAAAG,IAAA,CAAnB,IAAI,EAAgBqE,CAAC,CAAC,CAAA;AACvF;IAAyB6E,4BAAA,CAAA5J,GAAA,CAAA,IAAA,EAAgB,MAAMO,sBAAA,CAAA,IAAI,EAAAkJ,yBAAA,EAAA,GAAA,EAAAI,2BAAA,CAAa,CAAAnJ,IAAA,CAAjB,IAAI,CAAe,CAAA;AAClE;IAAyBoJ,kCAAA,CAAA9J,GAAA,CAAA,IAAA,EAAuB+E,CAAQ,IAAKxE,sBAAA,CAAA,IAAI,oEAAmB,CAAAG,IAAA,CAAvB,IAAI,EAAoBqE,CAAC,CAAC,CAAA;AAevF;;;AAGG;IACyC,IAAA,CAAA7B,KAAK,GAAG,KAAK;AAEzD;;;AAGG;IACyC,IAAA,CAAAuC,OAAO,GAAG,KAAK;IApBzD,IAAIsE,iBAAiB,CAAC,IAAI,EAAE;MAAEzJ,QAAQ,EAAG0J,OAAO,IAAMrH,uBAAA,IAAI,EAAAmG,2BAAA,EAAgBkB,OAAO,EAAA,GAAA;AAAC,KAAE,CAAC;IACrF,IAAIC,eAAe,CAAC,IAAI,EAAE;MACxB3J,QAAQ,EAAEA,MAAK;QACb,IAAI,CAACC,sBAAA,CAAA,IAAI,EAAAuI,2BAAA,EAAA,GAAA,CAAa,EAAE;AACtBvI,UAAAA,sBAAA,CAAA,IAAI,EAAAkJ,yBAAA,EAAA,GAAA,EAAAS,kCAAA,CAAoB,CAAAxJ,IAAA,CAAxB,IAAI,CAAsB;AAC5B,QAAA;AACF,MAAA;AACD,KAAA,CAAC;AACJ,EAAA;AAcA;EACA,IAAI2C,QAAQA,GAAA;AACV,IAAA,OAAO,IAAI,CAACwC,gBAAgB,CAAC,CAACsE,aAAa;AAC7C,EAAA;AAEA;EACA,IAAIC,KAAKA,GAAA;AACP,IAAA,OAAO,IAAI,CAACvE,gBAAgB,CAAC,CAACuE,KAAK;AACrC,EAAA;AAeA;AACAtI,EAAAA,MAAMA,CAACuI,kBAAmD,EAAEC,gBAAA,GAA4B,KAAK,EAAA;AAC3F,IAAA,MAAMF,KAAK,GAAGtJ,KAAK,CAACyJ,OAAO,CAACF,kBAAkB,CAAC,GAAGA,kBAAkB,GAAG,IAAI,CAACxE,gBAAgB,CAAC,CAACuE,KAAK;IACnG,MAAMrI,WAAW,GAAG,OAAOsI,kBAAkB,KAAK,SAAS,GAAGA,kBAAkB,GAAGC,gBAAgB;IACnGF,KAAK,CAACpI,OAAO,CAAET,CAAC,IAAKA,CAAC,CAACO,MAAM,CAACC,WAAW,CAAC,CAAC;AAC7C,EAAA;AAeA;AACAE,EAAAA,QAAQA,CAACoI,kBAAmD,EAAEC,gBAAA,GAA4B,KAAK,EAAA;AAC7F,IAAA,MAAMF,KAAK,GAAGtJ,KAAK,CAACyJ,OAAO,CAACF,kBAAkB,CAAC,GAAGA,kBAAkB,GAAG,IAAI,CAACxE,gBAAgB,CAAC,CAACuE,KAAK;IACnG,MAAMrI,WAAW,GAAG,OAAOsI,kBAAkB,KAAK,SAAS,GAAGA,kBAAkB,GAAGC,gBAAgB;IAEnGF,KAAK,CAACpI,OAAO,CAAET,CAAC,IAAKA,CAAC,CAACU,QAAQ,CAACF,WAAW,CAAC,CAAC;AAC7C,IAAA,MAAMyH,UAAU,GAAG,IAAI,CAAC3D,gBAAgB,CAAC,CAAC2D,UAAU;AACpD,IAAA,IAAIA,UAAU,IAAI,CAACA,UAAU,CAACnI,OAAO,EAAE;AACrC,MAAA,KAAK,IAAImJ,MAAM,GAAGhB,UAAU,CAAC9H,UAAU,EAAE8I,MAAM,EAAEA,MAAM,GAAGA,MAAM,CAAC9I,UAAU,EAAE;QAC3E,IAAI8I,MAAM,CAACnJ,OAAO,EAAE;AAClB,UAAA,IAAI,CAACwE,gBAAgB,CAAC,CAACK,aAAa,CAACsE,MAAM,CAAC;AAC5C,UAAA;AACF,QAAA;AACF,MAAA;AACF,IAAA;AACF,EAAA;AAEA;;;;AAIG;AACHzE,EAAAA,MAAMA,CAAC3D,IAAwB,EAAEqI,QAAA,GAAoB,KAAK,EAAA;IACxD,IAAI,CAAC5E,gBAAgB,CAAC,CAACE,MAAM,CAAC3D,IAAI,EAAEqI,QAAQ,CAAC;IAC7CrI,IAAI,CAACnB,aAAa,GAAG,KAAK;AAC1B,IAAA,IAAI,IAAI,CAACiC,KAAK,IAAI,IAAI,CAACuC,OAAO,EAAE;MAC9B,IAAIrD,IAAI,CAACX,aAAa,EAAE;AACtBW,QAAAA,IAAI,CAACR,UAAU,CAACI,OAAO,CAAET,CAAC,IAAK,IAAI,CAACwE,MAAM,CAACxE,CAAC,CAAC,CAAC;AAChD,MAAA;AAEAhB,MAAAA,sBAAA,CAAA,IAAI,EAAAkJ,yBAAA,EAAA,GAAA,EAAAiB,uCAAA,CAAyB,CAAAhK,IAAA,CAA7B,IAAI,EAA0B0B,IAAI,CAAC;AACrC,IAAA;AACA,IAAA,IAAIqI,QAAQ,EAAE;AACZlK,MAAAA,sBAAA,CAAA,IAAI,EAAAkJ,yBAAA,EAAA,GAAA,EAAAC,4BAAA,CAAc,CAAAhJ,IAAA,CAAlB,IAAI,EAAe0B,IAAI,CAAC;AAC1B,IAAA;AACA,IAAA,IAAI,CAACiE,aAAa,CAAC,IAAIC,KAAK,CAAC,QAAQ,EAAE;AAAEE,MAAAA,OAAO,EAAE;AAAI,KAAE,CAAC,CAAC;AAC5D,EAAA;AAEA;;;AAGG;EACHV,QAAQA,CAAC1D,IAAwB,EAAA;AAC/B,IAAA,IAAI,CAACyD,gBAAgB,CAAC,CAACC,QAAQ,CAAC1D,IAAI,CAAC;IACrCA,IAAI,CAACnB,aAAa,GAAG,KAAK;AAC1B,IAAA,IAAI,IAAI,CAACiC,KAAK,IAAI,IAAI,CAACuC,OAAO,EAAE;MAC9B,IAAIrD,IAAI,CAACX,aAAa,EAAE;AACtBW,QAAAA,IAAI,CAACR,UAAU,CAACI,OAAO,CAAET,CAAC,IAAK,IAAI,CAACuE,QAAQ,CAACvE,CAAC,CAAC,CAAC;AAClD,MAAA;AAEAhB,MAAAA,sBAAA,CAAA,IAAI,EAAAkJ,yBAAA,EAAA,GAAA,EAAAiB,uCAAA,CAAyB,CAAAhK,IAAA,CAA7B,IAAI,EAA0B0B,IAAI,CAAC;AACrC,IAAA;AACA,IAAA,IAAI,CAACiE,aAAa,CAAC,IAAIC,KAAK,CAAC,QAAQ,EAAE;AAAEE,MAAAA,OAAO,EAAE;AAAI,KAAE,CAAC,CAAC;AAC5D,EAAA;AAEA;AACSrE,EAAAA,iBAAiBA,GAAA;IACxB,KAAK,CAACA,iBAAiB,EAAE;AAEzB,IAAA,IAAI,CAACmD,YAAY,CAAC,UAAU,EAAE,GAAG,CAAC;AAElC,IAAA,IAAI,CAACqF,gBAAgB,CAAC,SAAS,EAAEpK,sBAAA,CAAA,IAAI,EAAAoJ,8BAAA,EAAA,GAAA,CAAgB,CAAC;AACtD,IAAA,IAAI,CAACgB,gBAAgB,CAAC,OAAO,EAAEpK,sBAAA,CAAA,IAAI,EAAAqJ,4BAAA,EAAA,GAAA,CAAc,CAAC;AAClD,IAAA,IAAI,CAACe,gBAAgB,CAAC,aAAa,EAAEpK,sBAAA,CAAA,IAAI,EAAAuJ,kCAAA,EAAA,GAAA,CAAoB,CAAC;AAChE,EAAA;AAEA;AACSjH,EAAAA,oBAAoBA,GAAA;IAC3B,KAAK,CAACA,oBAAoB,EAAE;AAE5B,IAAA,IAAI,CAAC+H,mBAAmB,CAAC,SAAS,EAAErK,sBAAA,CAAA,IAAI,EAAAoJ,8BAAA,EAAA,GAAA,CAAgB,CAAC;AACzD,IAAA,IAAI,CAACiB,mBAAmB,CAAC,OAAO,EAAErK,sBAAA,CAAA,IAAI,EAAAqJ,4BAAA,EAAA,GAAA,CAAc,CAAC;AACrD,IAAA,IAAI,CAACgB,mBAAmB,CAAC,aAAa,EAAErK,sBAAA,CAAA,IAAI,EAAAuJ,kCAAA,EAAA,GAAA,CAAoB,CAAC;AACnE,EAAA;AAEA;EACmBe,UAAUA,CAACjH,kBAAwC,EAAA;AACpE,IAAA,KAAK,CAACiH,UAAU,CAACjH,kBAAkB,CAAC;AAEpC,IAAA,IAAIA,kBAAkB,CAACX,GAAG,CAAC,OAAO,CAAC,EAAE;MACnC,IAAI,CAAC4C,gBAAgB,CAAC,CAAC3C,KAAK,GAAG,IAAI,CAACA,KAAK;MACzC,IAAI,IAAI,CAACA,KAAK,EAAE;AACd,QAAA,IAAI,CAACoC,YAAY,CAAC,sBAAsB,EAAE,MAAM,CAAC;AACnD,MAAA,CAAC,MAAM;AACL,QAAA,IAAI,CAACwF,eAAe,CAAC,sBAAsB,CAAC;AAC9C,MAAA;AACF,IAAA;AACF,EAAA;AAEA;AACmB5G,EAAAA,MAAMA,GAAA;AACvB,IAAA,OAAOC,IAAI,CAAA,qCAAA,EACY5D,sBAAA,CAAA,IAAI,EAAAkJ,yBAAA,EAAA,GAAA,EAAAsB,gCAAA,CAAkB,CAAA,eAAA,CACtC;AACT,EAAA;;;;;;;;KAnLUlF,gBAAgB;;EAuLxB,MAAM;AAAEmF,IAAAA;AAAK,GAAE,GAAG,IAAI,CAACnF,gBAAgB,CAAC,CAACoF,QAAQ,CAAC,CAAC,GAAG,IAAI,CAAC1H,gBAAgB,CAAC,eAAe,CAAC,CAAC,CAAC;AAC9F,EAAA,KAAK,MAAMnB,IAAI,IAAI4I,KAAK,EAAE;AACxB5I,IAAAA,IAAI,CAAC8I,EAAE,GAAG9I,IAAI,CAAC8I,EAAE,IAAI,CAAA,cAAA,EAAiBtC,gBAAc,CAACuC,QAAQ,EAAE,CAAA,CAAE;AACnE,EAAA;AACA,EAAA,IAAI,IAAI,CAACtF,gBAAgB,CAAC,CAAC2D,UAAU,EAAE;AACrC,IAAA,IAAI,CAAClE,YAAY,CAAC,uBAAuB,EAAE,IAAI,CAACO,gBAAgB,CAAC,CAAC2D,UAAU,CAAC0B,EAAE,CAAC;AAChF3K,IAAAA,sBAAA,CAAA,IAAI,EAAAkJ,yBAAA,EAAA,GAAA,EAAAS,kCAAA,CAAoB,CAAAxJ,IAAA,CAAxB,IAAI,CAAsB;AAC5B,EAAA,CAAC,MAAM;AACL,IAAA,IAAI,CAACoK,eAAe,CAAC,uBAAuB,CAAC;AAC/C,EAAA;AACF,CAAC;uEAGc/F,CAAgB,EAAA;EAC7BpC,sBAAA,CAAA,IAAI,EAAAkG,kCAAA,EAAuB,KAAK,EAAA,GAAA,CAAA;AAChCtI,EAAAA,sBAAA,CAAA,IAAI,EAAAkJ,yBAAA,EAAA,GAAA,EAAAS,kCAAA,CAAoB,CAAAxJ,IAAA,CAAxB,IAAI,CAAsB;AAE1B,EAAA,MAAM0B,IAAI,GAAG,IAAI,CAACyD,gBAAgB,CAAC,CAAC2D,UAAU;EAC9C,IAAIzE,CAAC,CAACqG,gBAAgB,IAAI,CAAChJ,IAAI,IAAIA,IAAI,CAACsB,QAAQ,EAAE;EAElD,QAAQqB,CAAC,CAACsG,GAAG;AACX,IAAA,KAAK,OAAO;AACV,MAAA,IAAI,CAAC,IAAI,CAACnI,KAAK,EAAE;AACf,QAAA,IAAI,CAACd,IAAI,CAACiB,QAAQ,EAAE;AAClB,UAAA,IAAI,CAAC0C,MAAM,CAAC3D,IAAI,CAAC;AACjBA,UAAAA,IAAI,CAAClB,IAAI,EAAEiF,KAAK,EAAE;AACpB,QAAA;AACF,MAAA,CAAC,MAAM;QACL,IAAI/D,IAAI,CAAC4B,MAAM,IAAI,CAAC5B,IAAI,CAAC4B,MAAM,CAAC3C,OAAO,EAAE;AACvCe,UAAAA,IAAI,CAAC4B,MAAM,CAACsH,QAAQ,GAAG,IAAI;UAC3BlJ,IAAI,CAAC4B,MAAM,CAACuH,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC;AAC5BnJ,UAAAA,IAAI,CAAC4B,MAAM,CAACsH,QAAQ,GAAG,KAAK;AAC9B,QAAA;AACAlJ,QAAAA,IAAI,CAAClB,IAAI,EAAEiF,KAAK,EAAE;AACpB,MAAA;AACA,MAAA;AAEF,IAAA,KAAK,GAAG;MACNpB,CAAC,CAACyG,cAAc,EAAE;MAElB,IAAI,IAAI,CAACtI,KAAK,EAAE;QACd,IAAId,IAAI,CAACiB,QAAQ,EAAE;AACjB,UAAA,IAAI,CAACyC,QAAQ,CAAC1D,IAAI,CAAC;AACrB,QAAA,CAAC,MAAM;AACL,UAAA,IAAI,CAAC2D,MAAM,CAAC3D,IAAI,CAAC;AACnB,QAAA;AACF,MAAA,CAAC,MAAM;QACL,IAAIA,IAAI,CAAC4B,MAAM,IAAI,CAAC5B,IAAI,CAAC4B,MAAM,CAAC3C,OAAO,EAAE;AACvCe,UAAAA,IAAI,CAAC4B,MAAM,CAACsH,QAAQ,GAAG,IAAI;UAC3BlJ,IAAI,CAAC4B,MAAM,CAACuH,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC;AAC5BnJ,UAAAA,IAAI,CAAC4B,MAAM,CAACsH,QAAQ,GAAG,KAAK;AAC9B,QAAA;AACA,QAAA,IAAI,CAACvF,MAAM,CAAC3D,IAAI,CAAC;AACjBA,QAAAA,IAAI,CAAClB,IAAI,EAAEiF,KAAK,EAAE;AACpB,MAAA;AAEA,MAAA;AAEF,IAAA,KAAK,GAAG;MACNpB,CAAC,CAACyG,cAAc,EAAE;AAClBpJ,MAAAA,IAAI,CAACN,MAAM,CAAC,IAAI,CAAC;AACjB,MAAA;AAEF,IAAA,KAAK,MAAM;AACX,IAAA,KAAK,WAAW;MACdiD,CAAC,CAACyG,cAAc,EAAE;AAClB,MAAA,IAAIC,iBAAiB,CAACC,OAAO,KAAK,KAAK,EAAE;AACvC,QAAA,IAAItJ,IAAI,CAACX,aAAa,IAAIW,IAAI,CAACpB,IAAI,EAAE;AACnC2K,UAAAA,qBAAqB,CAAC,MAAMvJ,IAAI,CAACH,QAAQ,EAAE,CAAC;AAC9C,QAAA,CAAC,MAAM;AACL,UAAA,MAAMuI,MAAM,GAAGpI,IAAI,CAACV,UAAU;AAC9B,UAAA,IAAI8I,MAAM,EAAE;AACV,YAAA,IAAI,CAAC3E,gBAAgB,CAAC,CAACK,aAAa,CAACsE,MAAM,CAAC;AAC9C,UAAA;AACF,QAAA;MACF,CAAC,MAAM,IAAIpI,IAAI,CAACX,aAAa,IAAI,CAACW,IAAI,CAACpB,IAAI,EAAE;QAC3CoB,IAAI,CAACN,MAAM,EAAE;AACf,MAAA;AAEA,MAAA;AAEF,IAAA,KAAK,OAAO;AACZ,IAAA,KAAK,YAAY;MACfiD,CAAC,CAACyG,cAAc,EAAE;AAClB,MAAA,IAAIC,iBAAiB,CAACC,OAAO,KAAK,KAAK,EAAE;AACvC,QAAA,IAAItJ,IAAI,CAACX,aAAa,IAAIW,IAAI,CAACpB,IAAI,EAAE;AACnC2K,UAAAA,qBAAqB,CAAC,MAAMvJ,IAAI,CAACH,QAAQ,EAAE,CAAC;AAC9C,QAAA,CAAC,MAAM;AACL,UAAA,MAAMuI,MAAM,GAAGpI,IAAI,CAACV,UAAU;AAC9B,UAAA,IAAI8I,MAAM,EAAE;AACV,YAAA,IAAI,CAAC3E,gBAAgB,CAAC,CAACK,aAAa,CAACsE,MAAM,CAAC;AAC9C,UAAA;AACF,QAAA;MACF,CAAC,MAAM,IAAIpI,IAAI,CAACX,aAAa,IAAI,CAACW,IAAI,CAACpB,IAAI,EAAE;QAC3CoB,IAAI,CAACN,MAAM,EAAE;AACf,MAAA;AACA,MAAA;AAEF,IAAA;AACE,MAAA,IAAI,CAAC+D,gBAAgB,CAAC,CAAC+F,SAAS,CAAC7G,CAAC,CAAC;AACnC,MAAA;AACJ;AACF,CAAC;;AAIC,EAAA,MAAM3C,IAAI,GAAG,IAAI,CAACyD,gBAAgB,CAAC,CAAC2D,UAAU;AAC9C,EAAA,IAAIpH,IAAI,IAAI,CAACA,IAAI,CAACsB,QAAQ,IAAItB,IAAI,CAAC4B,MAAM,EAAE3C,OAAO,EAAE;AAClDe,IAAAA,IAAI,CAAC4B,MAAM,CAAC6H,IAAI,EAAE;AACpB,EAAA;AACF,CAAC;+EAGkB9G,CAAQ,EAAA;AACzB,EAAA,IAAI,CAACA,CAAC,CAACqG,gBAAgB,IAAI,CAAC7K,sBAAA,CAAA,IAAI,EAAAsI,kCAAA,EAAA,GAAA,CAAoB,EAAE;IACpDlG,sBAAA,CAAA,IAAI,EAAAkG,kCAAA,EAAuB,IAAI,EAAA,GAAA,CAAA;AAE/B,IAAA,MAAMzG,IAAI,GAAG2C,CAAC,CACX+G,YAAY,EAAE,CACdtJ,OAAO,EAAE,CACT4C,IAAI,CAAE7D,CAAC,IAAKA,CAAC,YAAYnC,kBAAkB,CAAC;AAE/C,IAAA,IAAIgD,IAAI,IAAI,CAACA,IAAI,CAACsB,QAAQ,EAAE;AAC1BnD,MAAAA,sBAAA,CAAA,IAAI,EAAAkJ,yBAAA,EAAA,GAAA,EAAAsC,sCAAA,CAAwB,CAAArL,IAAA,CAA5B,IAAI,EAAyB0B,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC;AACjD,IAAA;AACF,EAAA;AACF,CAAC;qEAGaA,IAAwB,EAAA;EACpC,IAAI,CAACkD,YAAY,CAAC,uBAAuB,EAAElD,IAAI,CAAC8I,EAAE,CAAC;EACnD,IAAI9I,IAAI,CAACjB,KAAK,EAAE;AACd6K,IAAAA,sBAAsB,CAAC5J,IAAI,CAACjB,KAAK,EAAE,IAAI,EAAE;AAAE8K,MAAAA,KAAK,EAAE,SAAS;AAAEC,MAAAA,QAAQ,EAAE;AAAQ,KAAE,CAAC;AACpF,EAAA;AACA3L,EAAAA,sBAAA,CAAA,IAAI,EAAAkJ,yBAAA,EAAA,GAAA,EAAAS,kCAAA,CAAoB,CAAAxJ,IAAA,CAAxB,IAAI,CAAsB;AAC5B,CAAC;;AAIC,EAAA,MAAMyL,OAAO,GAAG,IAAI,CAACC,OAAO,CAAC,QAAQ,CAAC,IAAI,IAAI,CAACA,OAAO,CAAC,eAAe,CAAC;AACvE,EAAA,MAAMC,YAAY,GAAG,CAAC9L,sBAAA,CAAA,IAAI,EAAAsI,kCAAA,EAAA,GAAA,CAAoB,IAAI,IAAI,CAACuD,OAAO,CAAC,gBAAgB,CAAC;EAChF,IAAI,CAACvG,gBAAgB,CAAC,CAACuE,KAAK,CAACpI,OAAO,CAAET,CAAC,IAAI;IACzC,MAAM+K,MAAM,GAAG/K,CAAC,KAAK,IAAI,CAACsE,gBAAgB,CAAC,CAAC2D,UAAU;IACtDjJ,sBAAA,CAAA,IAAI,EAAAkJ,yBAAA,EAAA,GAAA,EAAAsC,sCAAA,CAAwB,CAAArL,IAAA,CAA5B,IAAI,EAAyBa,CAAC,EAAE+K,MAAM,IAAIH,OAAO,EAAEG,MAAM,IAAID,YAAY,CAAC;AAC5E,EAAA,CAAC,CAAC;AACJ,CAAC;yFAGuBjK,IAAwB,EAAE+J,OAAgB,EAAEE,YAAqB,EAAA;EACvF,IAAIF,OAAO,IAAIE,YAAY,EAAE;AAC3BjK,IAAAA,IAAI,CAAC2B,UAAU,EAAEwH,IAAI,CAAC,SAAS,CAAC;AAClC,EAAA,CAAC,MAAM;AACLnJ,IAAAA,IAAI,CAAC2B,UAAU,EAAE8H,IAAI,CAAC,SAAS,CAAC;AAClC,EAAA;AACA,EAAA,IAAIQ,YAAY,EAAE;AAChBjK,IAAAA,IAAI,CAAC0B,SAAS,EAAEyH,IAAI,EAAE;AACxB,EAAA,CAAC,MAAM;AACLnJ,IAAAA,IAAI,CAAC0B,SAAS,EAAE+H,IAAI,EAAE;AACxB,EAAA;AACF,CAAC;2FAGwBzJ,IAAwB,EAAA;AAC/C,EAAA,KAAK,IAAIoI,MAAM,GAAGpI,IAAI,CAACV,UAAU,EAAE8I,MAAM,EAAEA,MAAM,GAAGA,MAAM,CAAC9I,UAAU,EAAE;IACrE,IAAI6K,WAAW,GAAG,KAAK;AACrBC,MAAAA,aAAa,GAAG,KAAK;IAEvB,KAAK,MAAM5G,KAAK,IAAI4E,MAAM,CAACjH,gBAAgB,CAAC,eAAe,CAAC,EAAE;AAC5DgJ,MAAAA,WAAW,GAAGA,WAAW,IAAI3G,KAAK,CAACvC,QAAQ;AAC3CmJ,MAAAA,aAAa,GAAGA,aAAa,IAAI,CAAC5G,KAAK,CAACvC,QAAQ;MAChD,IAAIkJ,WAAW,IAAIC,aAAa,EAAE;AAChC,QAAA;AACF,MAAA;AACF,IAAA;AACA,IAAA,IAAIA,aAAa,EAAE;AACjB,MAAA,IAAI,CAAC3G,gBAAgB,CAAC,CAACC,QAAQ,CAAC0E,MAAM,CAAC;MACvCA,MAAM,CAACvJ,aAAa,GAAGsL,WAAW;AACpC,IAAA,CAAC,MAAM;MACL,IAAI,CAAC1G,gBAAgB,CAAC,CAACE,MAAM,CAACyE,MAAM,EAAE,KAAK,CAAC;MAC5CA,MAAM,CAACvJ,aAAa,GAAG,KAAK;AAC9B,IAAA;AACF,EAAA;AACF,CAAC;AAhZD,CAAA,MAAA;AACE;AACAwL,EAAAA,kBAAkB,CAAC/F,GAAG,CAAA,EAClBW,SAAS,CAAC,CAAA;;QAEV,CAAC,EACJ,CAAC;AACJ,CAAC,GAAA;AAED;AACgBsB,cAAA,CAAAlC,MAAM,GAAmBC,GAAG,CAAA,6GAAA,EAOrBC,WAAW,CAAC+F,SAAS,CAACC,KAAK,sBAC3BhG,WAAW,CAAC+F,SAAS,CAAC5E,KAAK,CAAA,kIAAA,CAR5B;AAoBtB;AAA+Ba,cAAA,CAAAwC,QAAQ,GAAG,CAAC;AAuCChD,UAAA,CAAA,CAA3CI,QAAQ,CAAC;AAAEhC,EAAAA,IAAI,EAAEiC,OAAO;AAAEC,EAAAA,OAAO,EAAE;AAAI,CAAE,CAAC,CAAe,EAAAE,cAAA,CAAAN,SAAA,EAAA,OAAA,EAAA,MAAA,CAAA;AAMdF,UAAA,CAAA,CAA3CI,QAAQ,CAAC;AAAEhC,EAAAA,IAAI,EAAEiC,OAAO;AAAEC,EAAAA,OAAO,EAAE;AAAI,CAAE,CAAC,CAAiB,EAAAE,cAAA,CAAAN,SAAA,EAAA,SAAA,EAAA,MAAA,CAAA;AA5EjDM,cAAc,GAAAC,gBAAA,GAAAT,UAAA,CAAA,CAD1BO,aAAa,CAAC,UAAU,CAAC,CACb,EAAAC,cAAc,CAkZ1B;;;;"}
|
package/dist/tree.min.js
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license MIT
|
|
3
|
+
* Copyright (c) 2025–2026 matraic
|
|
4
|
+
* See LICENSE file in the project root for full license text.
|
|
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._hasChildItems&&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,console.log(this._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};
|
|
7
|
+
//# sourceMappingURL=tree.min.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tree.min.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._hasChildItems && this.open}\"\r\n @opening=\"${this.#handleCollapsibleEvent}\"\r\n @opened=\"${this.#handleCollapsibleEvent}\"\r\n @closing=\"${this.#handleCollapsibleEvent}\"\r\n @closed=\"${this.#handleCollapsibleEvent}\"\r\n >\r\n <slot @slotchange=\"${this.#handleItemSlotChange}\"></slot>\r\n </m3e-collapsible>`;\r\n }\r\n\r\n /** @private */\r\n #renderIcon(): unknown {\r\n const icon = html`<slot name=\"icon\" @slotchange=\"${this.#handleIconSlotChange}\"></slot>`;\r\n return this.selected && !this.hasChildItems\r\n ? html`<slot name=\"selected-icon\" @slotchange=\"${this.#handleIconSlotChange}\">${icon}</slot>`\r\n : icon;\r\n }\r\n\r\n /** @private */\r\n #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 console.log(this._multi);\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","this","_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","super","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","console","log","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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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@m3e/web",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.4.0",
|
|
4
4
|
"description": "Platform-native Web Components for M3E",
|
|
5
5
|
"author": "matraic <matraic@yahoo.com>",
|
|
6
6
|
"license": "MIT",
|
|
@@ -61,7 +61,8 @@
|
|
|
61
61
|
"theme",
|
|
62
62
|
"toc",
|
|
63
63
|
"toolbar",
|
|
64
|
-
"tooltip"
|
|
64
|
+
"tooltip",
|
|
65
|
+
"tree"
|
|
65
66
|
],
|
|
66
67
|
"type": "module",
|
|
67
68
|
"exports": {
|
|
@@ -289,6 +290,10 @@
|
|
|
289
290
|
"types": "./dist/src/tooltip/index.d.ts",
|
|
290
291
|
"default": "./dist/tooltip.js"
|
|
291
292
|
},
|
|
293
|
+
"./tree": {
|
|
294
|
+
"types": "./dist/src/tree/index.d.ts",
|
|
295
|
+
"default": "./dist/tree.js"
|
|
296
|
+
},
|
|
292
297
|
"./all": {
|
|
293
298
|
"types": "./dist/src/all.d.ts",
|
|
294
299
|
"default": "./dist/all.js"
|