@cas-smartdesign/tree 4.0.5 → 4.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/docs/3_lazy_loading.js +1 -1
- package/dist/docs/doc.css +1 -1
- package/dist/docs/doc.mjs +78 -81
- package/dist/tree-with-externals.js +34 -52
- package/dist/tree-with-externals.js.map +4 -4
- package/dist/tree.mjs +206 -208
- package/dist/tree.mjs.map +1 -1
- package/npm-third-party-licenses.json +52 -47
- package/package.json +10 -10
package/dist/tree.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tree.mjs","sources":["../src/constants.ts","../src/node.ts","../src/checkbox-node.ts","../src/radio-button-node.ts","../src/tree-node.ts","../src/loading-indicator.ts","../src/utils.ts","../src/tree.ts"],"sourcesContent":["export const NODE_MARGIN_LEFT = 16;\nexport const NODE_HEIGHT = 35;\n","import { NodeType, NodeSelectionState } from \"./types\";\nimport { CheckboxNode } from \"./checkbox-node\";\nimport { RadioButtonNode } from \"./radio-button-node\";\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ntype NodeGetter = (path: string[]) => Node;\n\ninterface IParent {\n nodes: Node[];\n childCount: number;\n expanded: boolean;\n childrenType: NodeType;\n}\n\nabstract class Node implements IParent {\n public type: NodeType;\n public depth = 0;\n public selectionState: NodeSelectionState = \"unchecked\";\n public childCount: number;\n public expanded = false;\n public childrenType: NodeType;\n public parentSelectionAllowed = false;\n public lastLoadingChild = false;\n public loading = false;\n public disabled = false;\n public nodeGetter: NodeGetter;\n public getSiblings: () => Node[];\n\n private parent: string[] = [];\n\n constructor(\n public id: string,\n public text: string,\n public path: string[],\n public nodes: Node[],\n ) {\n if (path) {\n this.depth = path.length - 1;\n this.parent = path.slice(0, -1);\n } else {\n this.path = [id];\n }\n this.childCount = nodes ? nodes.length : 0;\n }\n\n public abstract toggle(): void;\n\n // updates this node, its parent and children recursively\n public abstract updateBranch(): void;\n\n // updates the selection state of this node according to the state of its children\n public abstract updateSelectionStateByChildren(): void;\n\n public updateSelectionStateOfChildren(): void {\n this.nodes.forEach((child) => {\n if (this.selectionState === \"checked\") {\n if (child.childrenType === \"radio\" || isRadioButtonNode(child)) {\n return;\n }\n child.selectionState = \"checked\";\n } else if (this.selectionState === \"unchecked\") {\n child.selectionState = \"unchecked\";\n }\n child.updateSelectionStateOfChildren();\n });\n }\n\n public updateParent(): Node {\n const parent = this.parentNode;\n\n if (parent) {\n if (!this.parentSelectionAllowed || this.selectionState !== \"unchecked\" || parent.disabled) {\n parent.updateSelectionStateByChildren();\n parent.updateParent();\n }\n }\n return parent;\n }\n\n public get parentNode(): Node | null {\n return this.parent.length ? this.nodeGetter(this.parent) : null;\n }\n\n public check(): void {\n if (this.selectionState !== \"checked\") {\n this.selectionState = \"checked\";\n this.updateBranch();\n }\n }\n\n public uncheck(): void {\n if (this.selectionState !== \"unchecked\") {\n this.selectionState = \"unchecked\";\n this.updateBranch();\n }\n }\n\n public hasRadioButtonDescendant(): boolean {\n if (this.childrenType === \"radio\") {\n return true;\n }\n\n for (const child of this.nodes) {\n const hasRadioButtonChildren = child.hasRadioButtonDescendant();\n if (hasRadioButtonChildren) {\n return true;\n }\n }\n }\n}\n\nconst isCheckboxNode = (node: Node): node is CheckboxNode => {\n return node?.type === \"checkbox\";\n};\n\nconst isRadioButtonNode = (node: Node): node is RadioButtonNode => {\n return node?.type === \"radio\";\n};\n\nexport { Node, isCheckboxNode, isRadioButtonNode };\nexport type { NodeGetter, IParent };\n","import { Node, isCheckboxNode } from \"./node\";\n\nclass CheckboxNode extends Node {\n constructor(id: string, text: string, path: string[], nodes: Node[]) {\n super(id, text, path, nodes);\n this.type = \"checkbox\";\n }\n\n public toggle(): void {\n if (this.selectionState === \"checked\") {\n this.selectionState = \"unchecked\";\n } else {\n this.selectionState = \"checked\";\n }\n this.updateBranch();\n }\n\n public updateBranch(): void {\n if (!this.parentSelectionAllowed || this.selectionState === \"unchecked\") {\n this.updateSelectionStateOfChildren();\n this.updateSelectionStateByChildren();\n }\n this.updateParent();\n }\n\n public updateSelectionStateByChildren(): void {\n if (this.nodes.length === 0) {\n return;\n }\n const checkStatus = this.nodes.map((child) => {\n return child.selectionState === \"checked\" || child.selectionState === \"indeterminate\";\n });\n const some = checkStatus.some(Boolean);\n if (this.parentSelectionAllowed) {\n this.selectionState = some ? \"checked\" : \"unchecked\";\n } else {\n const every = checkStatus.every(Boolean);\n const anyIndeterminate = this.nodes\n .map((child) => child.selectionState)\n .some((state) => state === \"indeterminate\");\n if (this.childrenType === \"radio\") {\n this.selectionState = some ? \"checked\" : \"unchecked\";\n } else if (anyIndeterminate) {\n this.selectionState = \"indeterminate\";\n } else if (every) {\n this.selectionState = \"checked\";\n } else if (some) {\n this.selectionState = \"indeterminate\";\n } else {\n this.selectionState = \"unchecked\";\n }\n }\n }\n\n private getFlattenedSubtree(nodes: Node[]): Node[] {\n return nodes.reduce<Node[]>((ack, curr) => {\n return ack.concat(\n isCheckboxNode(curr) && curr.childCount > 0 && curr.expanded\n ? [curr, ...this.getFlattenedSubtree(curr.nodes)]\n : curr,\n );\n }, []);\n }\n}\n\nexport { CheckboxNode };\n","import { Node } from \"./node\";\n\ntype RadioButtonNodeSelectionState = \"unchecked\" | \"checked\";\n\nclass RadioButtonNode extends Node {\n constructor(id: string, text: string, path: string[], nodes: Node[]) {\n super(id, text, path, nodes);\n this.type = \"radio\";\n }\n\n public toggle(): void {\n if (this.selectionState === \"checked\") {\n this.selectionState = \"unchecked\";\n } else {\n this.selectionState = \"checked\";\n this.clearSiblings();\n }\n this.updateBranch();\n }\n\n public check(): void {\n if (this.selectionState !== \"checked\") {\n this.selectionState = \"checked\";\n this.clearSiblings();\n this.updateBranch();\n }\n }\n\n public updateBranch(): void {\n if (this.selectionState === \"unchecked\") {\n this.updateSelectionStateOfChildren();\n }\n this.updateParent();\n }\n\n public updateParent(): Node {\n const parent = super.updateParent();\n if (parent instanceof RadioButtonNode) {\n parent.clearSiblings();\n }\n return parent;\n }\n\n public updateSelectionStateByChildren(): void {\n if (this.nodes.length === 0) {\n return;\n }\n const some = this.nodes.map((child) => child.selectionState === \"checked\").some(Boolean);\n if (some) {\n this.selectionState = \"checked\";\n } else {\n this.selectionState = \"unchecked\";\n }\n }\n\n private clearSiblings(): void {\n const siblings = this.getSiblings();\n siblings.forEach((sibling) => {\n sibling.uncheck();\n });\n }\n}\n\nexport { RadioButtonNode };\nexport type { RadioButtonNodeSelectionState };\n","import { LitElement, css, html, unsafeCSS } from \"lit\";\nimport { property } from \"lit/decorators/property.js\";\nimport type { IExpansion, ISelection, NodeType } from \"./types\";\nimport { SDCheckbox } from \"@cas-smartdesign/checkbox\";\nimport { RadioButton } from \"@cas-smartdesign/radio-button-group\";\nimport { NODE_MARGIN_LEFT } from \"./constants\";\nimport { Node } from \"./node\";\nimport type { NodeSelectionState } from \"./types\";\nimport { CheckboxNode } from \"./checkbox-node\";\nimport { RadioButtonNode } from \"./radio-button-node\";\nimport style from \"./scss/node.scss?inline\";\n\ndeclare global {\n interface HTMLElementTagNameMap {\n [TreeNode.ID]: TreeNode;\n }\n}\n\nexport interface CustomEventMap extends HTMLElementEventMap {\n selection: CustomEvent<ISelection>;\n expansion: CustomEvent<IExpansion>;\n}\n\nexport default interface TreeNode {\n addEventListener<K extends keyof CustomEventMap>(\n event: K,\n listener: ((this: this, ev: CustomEventMap[K]) => unknown) | null,\n options?: AddEventListenerOptions | boolean,\n ): void;\n addEventListener(\n type: string,\n callback: EventListenerOrEventListenerObject | null,\n options?: AddEventListenerOptions | boolean,\n ): void;\n removeEventListener<K extends keyof CustomEventMap>(\n type: K,\n listener: (this: this, ev: CustomEventMap[K]) => unknown,\n options?: boolean | EventListenerOptions,\n ): void;\n removeEventListener(\n type: string,\n listener: EventListenerOrEventListenerObject,\n options?: boolean | EventListenerOptions,\n ): void;\n dispatchEvent<EventType extends CustomEventMap[keyof CustomEventMap]>(event: EventType): boolean;\n}\n\nexport default class TreeNode extends LitElement {\n public static readonly ID = \"sd-tree-node\";\n @property({ type: String, reflect: true, attribute: true })\n public text = \"\";\n @property({ type: Boolean, reflect: true, attribute: true })\n public expanded = false;\n @property({ type: String, reflect: true, attribute: \"node-id\" })\n public nodeId: string;\n @property({ type: Number, reflect: true, attribute: \"child-count\" })\n public childCount = 0;\n @property({ type: Boolean, reflect: true, attribute: true })\n public focused = false;\n @property({ type: Boolean, reflect: true, attribute: true })\n public readonly = false;\n @property({ type: Number })\n public depth = 0;\n @property({ type: Array, attribute: false })\n public path: string[] = [];\n @property({ type: String, reflect: true, attribute: true })\n public type: NodeType = \"checkbox\";\n @property({ type: String, reflect: true, attribute: \"selection-state\" })\n public selectionState: NodeSelectionState = \"unchecked\";\n @property({ type: Boolean, reflect: true, attribute: true })\n public disabled = false;\n @property({ type: Boolean, reflect: true, attribute: true })\n public loading = false;\n\n static get styles() {\n return [\n css`\n ${unsafeCSS(style)}\n `,\n ];\n }\n\n public static ensureDefined = () => {\n RadioButton.ensureDefined();\n SDCheckbox.ensureDefined();\n if (!customElements.get(TreeNode.ID)) {\n customElements.define(TreeNode.ID, TreeNode);\n }\n };\n\n public render() {\n const hasChildren = this.childCount > 0 || this.children.length > 0;\n return html`\n <li class=\"node\" style=\"margin-left: ${this.depth * NODE_MARGIN_LEFT}px\">\n ${hasChildren\n ? html` <div class=\"expander ${this.expanded ? \"less\" : \"more\"}\" @click=\"${this.toggle}\"></div> `\n : html` <div class=\"placeholder\"></div> `}\n ${!this.readonly\n ? html`\n ${this.type === \"checkbox\"\n ? html`\n <sd-checkbox\n class=\"input\"\n tabIndex=\"-1\"\n label=\"${this.text}\"\n ?checked=\"${this.selectionState === \"checked\"}\"\n ?focused=\"${this.focused}\"\n ?disabled=\"${this.disabled}\"\n .indeterminate=\"${this.selectionState === \"indeterminate\"}\"\n @value-change=\"${this.onSelectionChange}\"\n oneline\n ></sd-checkbox>\n `\n : html`\n <sd-radio-button\n class=\"input\"\n tabIndex=\"-1\"\n label=\"${this.text}\"\n ?checked=\"${this.selectionState === \"checked\"}\"\n ?focused=\"${this.focused}\"\n ?disabled=\"${this.disabled}\"\n oneline=\"\"\n @click=\"${this.onSelectionChange}\"\n ></sd-radio-button>\n `}\n `\n : html` <div class=\"label\">${this.text}</div> `}\n ${hasChildren && this.expanded\n ? html`\n <ul>\n <slot></slot>\n </ul>\n `\n : \"\"}\n </li>\n `;\n }\n\n public toggle(): void {\n if (!this.loading) {\n this.expanded = !this.expanded;\n this.dispatchExpansionEvent();\n }\n }\n\n public expand(): void {\n if (!this.loading) {\n const hasChanged = !this.expanded;\n this.expanded = true;\n if (hasChanged) {\n this.dispatchExpansionEvent();\n }\n }\n }\n\n public collapse(): void {\n if (!this.loading) {\n const hasChanged = this.expanded;\n this.expanded = false;\n if (hasChanged) {\n this.dispatchExpansionEvent();\n }\n }\n }\n\n public getState(parentPath?: string[]): Node {\n const path = Array.isArray(parentPath) ? [...parentPath, this.nodeId] : [this.nodeId];\n const children = [...(this.children as HTMLCollectionOf<TreeNode>)].map((child) => child.getState(path));\n let node: Node;\n if (this.type === \"checkbox\") {\n node = new CheckboxNode(this.nodeId, this.text, path, children);\n } else {\n node = new RadioButtonNode(this.nodeId, this.text, path, children);\n }\n node.selectionState = this.selectionState;\n node.childrenType = children[0]?.type;\n node.expanded = this.expanded;\n node.disabled = this.disabled;\n return node;\n }\n\n private dispatchExpansionEvent(): void {\n this.dispatchEvent(\n new CustomEvent<IExpansion>(\"expansion\", {\n detail: { path: this.path, expanded: this.expanded },\n bubbles: true,\n composed: true,\n }),\n );\n }\n\n private onSelectionChange = (): void => {\n if (!this.readonly) {\n if (this.type == \"checkbox\") {\n const checkbox = this.shadowRoot.querySelector(\".input\") as SDCheckbox;\n this.selectionState = checkbox.checked\n ? \"checked\"\n : checkbox.indeterminate\n ? \"indeterminate\"\n : \"unchecked\";\n } else {\n const radioButton = this.shadowRoot.querySelector(\".input\") as RadioButton;\n this.selectionState = radioButton.checked ? \"checked\" : \"unchecked\";\n }\n this.updateComplete.then(() => {\n this.dispatchEvent(\n new CustomEvent<ISelection>(\"selection\", {\n detail: {\n path: this.path,\n checked: this.selectionState === \"checked\",\n indeterminate: this.selectionState === \"indeterminate\",\n },\n bubbles: true,\n composed: true,\n }),\n );\n });\n }\n };\n}\n","import { LitElement, TemplateResult, html, unsafeCSS, css } from \"lit\";\nimport { property } from \"lit/decorators/property.js\";\nimport { NODE_MARGIN_LEFT } from \"./constants\";\n\ndeclare global {\n interface HTMLElementTagNameMap {\n [LoadingIndicator.ID]: LoadingIndicator;\n }\n}\n\nimport style from \"./scss/loading-indicator.scss?inline\";\n\nexport default class LoadingIndicator extends LitElement {\n public static readonly ID = \"sd-tree-loading-indicator\";\n @property({ type: Boolean, reflect: true, attribute: true })\n public readonly = false;\n @property({ type: Number })\n public depth = 0;\n\n static get styles() {\n return [\n css`\n ${unsafeCSS(style)}\n `,\n ];\n }\n\n public static ensureDefined = () => {\n if (!customElements.get(LoadingIndicator.ID)) {\n customElements.define(LoadingIndicator.ID, LoadingIndicator);\n }\n };\n\n public render(): TemplateResult {\n return html`\n <li class=\"root\" style=\"margin-left: ${this.depth * NODE_MARGIN_LEFT}px;\">\n <div class=\"text\">\n <slot>Loading...</slot>\n </div>\n </li>\n `;\n }\n}\n","import { ScrollToAlignment, ILoadingNode } from \"./types\";\nimport { Node } from \"./node\";\n\nexport const flattenNodes = (arr: Node[], d = 1, depth = 0): Node[] => {\n return d > 0\n ? arr.reduce<Node[]>(\n (acc, val) =>\n acc.concat(\n val.childCount > 0 && val.expanded ? [val, ...flattenNodes(val.nodes, d - 1, depth + 1)] : val,\n ),\n [],\n )\n : arr.slice();\n};\n\nexport const findNodeByPath = (nodes: Node[], path: string[], depth = 0): Node => {\n if (!path) {\n return null;\n }\n const currentId = path[depth];\n const matchingNode = nodes.find((node) => node.id === currentId);\n if (path.length - 1 === depth) {\n return matchingNode;\n }\n if (matchingNode?.nodes.length > 0) {\n return findNodeByPath(matchingNode.nodes, path, depth + 1);\n } else {\n return null;\n }\n};\n\nexport const getOffsetForIndexAndAlignment = (\n index: number,\n alignment: ScrollToAlignment,\n scrollOffset: number,\n itemHeight: number,\n height: number,\n itemCount: number,\n): number => {\n const lastItemOffset = Math.max(0, itemCount * itemHeight);\n const maxOffset = Math.min(lastItemOffset, index * itemHeight);\n const minOffset = Math.max(0, index * itemHeight - height + itemHeight);\n\n switch (alignment) {\n case \"start\":\n return maxOffset;\n case \"end\":\n return minOffset;\n case \"center\": {\n const middleOffset = Math.round(minOffset + (maxOffset - minOffset) / 2);\n if (middleOffset < Math.ceil(height / 2)) {\n return 0;\n } else if (middleOffset > lastItemOffset + Math.floor(height / 2)) {\n return lastItemOffset;\n } else {\n return middleOffset;\n }\n }\n case \"auto\":\n default:\n if (scrollOffset >= minOffset && scrollOffset <= maxOffset) {\n return scrollOffset;\n } else if (scrollOffset < minOffset) {\n return minOffset;\n } else {\n return maxOffset;\n }\n }\n};\n\nexport const isNode = (node: Node | ILoadingNode): node is Node => {\n return node && typeof node !== \"string\";\n};\n\nexport const findNode = (nodes: (Node | ILoadingNode)[], path: string[]): Node => {\n const node = nodes.find((node) => isNode(node) && JSON.stringify(node.path) === JSON.stringify(path));\n if (isNode(node)) {\n return node;\n }\n return null;\n};\n\nexport const findNodeIndex = (nodes: (string | ILoadingNode)[], path: string[]): number => {\n return nodes.findIndex((node) => typeof node === \"string\" && node === JSON.stringify(path));\n};\n\nexport const isFlattenedNode = (node: string | ILoadingNode): node is string => {\n return typeof node === \"string\";\n};\n","import { LitElement, html, unsafeCSS, PropertyValues, css, render, TemplateResult } from \"lit\";\nimport { property } from \"lit/decorators/property.js\";\nimport TreeNode from \"./tree-node\";\nimport LoadingIndicator from \"./loading-indicator\";\nimport { IDataRequest, ScrollToAlignment, IExpansion, ISelection, ILoadingNode } from \"./types\";\nimport { getOffsetForIndexAndAlignment, flattenNodes, isFlattenedNode, findNodeIndex } from \"./utils\";\nimport { NODE_HEIGHT } from \"./constants\";\nimport { Node } from \"./node\";\nimport style from \"./scss/tree.scss?inline\";\n\ndeclare global {\n interface HTMLElementTagNameMap {\n [Tree.ID]: Tree;\n }\n}\n\nexport interface CustomEventMap extends HTMLElementEventMap {\n \"data-request\": CustomEvent<IDataRequest>;\n selection: CustomEvent<ISelection>;\n expansion: CustomEvent<IExpansion>;\n}\n\ninterface Tree {\n addEventListener<K extends keyof CustomEventMap>(\n event: K,\n listener: ((this: this, ev: CustomEventMap[K]) => unknown) | null,\n options?: AddEventListenerOptions | boolean,\n ): void;\n addEventListener(\n type: string,\n callback: EventListenerOrEventListenerObject | null,\n options?: AddEventListenerOptions | boolean,\n ): void;\n removeEventListener<K extends keyof CustomEventMap>(\n type: K,\n listener: (this: this, ev: CustomEventMap[K]) => unknown,\n options?: boolean | EventListenerOptions,\n ): void;\n removeEventListener(\n type: string,\n listener: EventListenerOrEventListenerObject,\n options?: boolean | EventListenerOptions,\n ): void;\n dispatchEvent<EventType extends CustomEventMap[keyof CustomEventMap]>(event: EventType): boolean;\n}\n\nclass Tree extends LitElement {\n public static readonly ID = \"sd-tree\";\n public static ensureDefined = (): void => {\n TreeNode.ensureDefined();\n LoadingIndicator.ensureDefined();\n if (!customElements.get(Tree.ID)) {\n customElements.define(Tree.ID, Tree);\n }\n };\n public pageSize = 50;\n @property({ type: String })\n public loadingText = \"Loading...\";\n @property({ type: Boolean, reflect: true, attribute: \"parent-selection-allowed\" })\n public parentSelectionAllowed = false;\n @property({ type: Boolean, reflect: true, attribute: true })\n public readonly = false;\n private _resizeObserver: ResizeObserver;\n private _lastKnownHeight = 0;\n private _lastKnownScrollTop = 0;\n private _lastRenderedScrollTop = 0;\n private _visibleItemsNum = 0;\n\n private _firstVisibleIndex = 0;\n private _lastVisibleIndex = 0;\n private _firstRenderedIndex = 0;\n private _lastRenderedIndex = 0;\n\n private _focusIndex = -1;\n // contains the id of the loaded nodes and placeholders for nodes\n // which are currently loading\n private _flattenedNodes: (string | ILoadingNode)[] = [];\n private _rootItemsLoading = false;\n private _rootNodeCount = 0;\n private _loadedRootNodeCount = 0;\n // it's the sum of the loaded and the unloaded nodes at\n // any level in the tree\n private _allNodeCount = 0;\n\n private _nodeStates: Map<string, Node> = new Map();\n private _reusePreviousRenderData: boolean;\n\n @property({ type: Number })\n public get rootNodeCount(): number {\n return this._rootNodeCount;\n }\n\n public set rootNodeCount(count: number) {\n if (count === 0) {\n this._allNodeCount = 0;\n } else if (count > 0) {\n this._allNodeCount += count - this.rootNodeCount;\n }\n this._rootNodeCount = count;\n this.requestUpdate();\n }\n\n @property({ type: Number, attribute: \"focus-index\", reflect: true })\n public get focusIndex(): number {\n return this._focusIndex;\n }\n\n public set focusIndex(index: number) {\n if (index >= -1 && index < this._allNodeCount) {\n const oldValue = this._focusIndex;\n this._focusIndex = index;\n if (index <= this._firstVisibleIndex || this._lastVisibleIndex <= index) {\n this.scrollToNode(index);\n }\n if (oldValue != index) {\n this.requestUpdate(\"focusIndex\", oldValue);\n }\n }\n }\n\n constructor() {\n super();\n this._resizeObserver = new ResizeObserver(() => {\n if (this._lastKnownHeight !== this.offsetHeight) {\n this._lastKnownHeight = this.offsetHeight;\n this.requestUpdate();\n }\n });\n }\n\n public setNodes(nodes: Node[]) {\n this.stopLoadingIndicator();\n this.setLastLoadingChildren(nodes, this.rootNodeCount, nodes.length);\n nodes.forEach((node, ind) => {\n const siblings = [...nodes];\n siblings.splice(ind, 1);\n this.updateNodeMap(node, siblings);\n });\n this.updateCount(nodes);\n this._loadedRootNodeCount = nodes.length;\n this._flattenedNodes = flattenNodes(nodes, Infinity).map(this.getFlattenedNodeId);\n this.requestUpdate();\n }\n\n public addNodes(nodes: Node[], parentPath?: string[]): void {\n this.stopLoadingIndicator(parentPath);\n nodes.forEach((node, ind) => {\n const siblings = [...nodes];\n siblings.splice(ind, 1);\n this.updateNodeMap(node, siblings);\n });\n const parentNode = this.nodeGetter(parentPath);\n if (parentNode) {\n if (parentNode.expanded) {\n this._allNodeCount += nodes.length + this.getNodeCount(nodes);\n }\n } else {\n this._loadedRootNodeCount += nodes.length;\n }\n this.updateFlattenedNodes(nodes, parentPath);\n this.requestUpdate();\n }\n\n public connectedCallback(): void {\n super.connectedCallback();\n this._resizeObserver.observe(this);\n }\n\n public disconnectedCallback(): void {\n super.disconnectedCallback();\n this._resizeObserver.disconnect();\n }\n\n static get styles() {\n return [\n css`\n ${unsafeCSS(style)}\n `,\n ];\n }\n\n public firstUpdated(changedProperties: PropertyValues): void {\n super.firstUpdated(changedProperties);\n this.addEventListener(\"scroll\", this.onScroll);\n this.addEventListener(\"keydown\", this.handleKeyDown);\n this.addEventListener(\"expansion\", this.handleNodeExpansion);\n this.addEventListener(\"selection\", this.handleNodeSelection);\n this.addEventListener(\"focus\", () => {\n if (this.focusIndex == -1) {\n this.focusIndex = this.normalizeIndex(0);\n }\n });\n if (this._nodeStates.size === 0) {\n if (this.children.length > 0) {\n this.syncState();\n } else {\n this.requestData();\n }\n }\n }\n\n public updated(changedProperties: PropertyValues): void {\n super.updated(changedProperties);\n this.updateNodes();\n if (changedProperties.has(\"parentSelectionAllowed\")) {\n this.updateParentSelectionAllowed();\n }\n }\n\n public render(): TemplateResult {\n this.updateRenderData();\n return html`\n <div class=\"root\" style=\"height: ${this._allNodeCount * NODE_HEIGHT}px\">\n <ul>\n <slot></slot>\n </ul>\n </div>\n `;\n }\n\n public scrollToNode(index: number, alignment: ScrollToAlignment = \"auto\"): void {\n this.scrollTop = getOffsetForIndexAndAlignment(\n this.normalizeIndex(index),\n alignment,\n this.scrollTop,\n NODE_HEIGHT,\n this.height,\n this._allNodeCount,\n );\n }\n\n private updateNodeMap(node: Node, siblings: Node[]): void {\n if (node) {\n node.nodeGetter = this.nodeGetter;\n node.getSiblings = (): Node[] => {\n return siblings;\n };\n this._nodeStates.set(JSON.stringify(node.path), node);\n node.nodes.forEach((child, ind) => {\n const siblings = [...node.nodes];\n siblings.splice(ind, 1);\n this.updateNodeMap(child, siblings);\n });\n }\n }\n\n private updateParentSelectionAllowed(): void {\n this._nodeStates.forEach((node) => {\n node.parentSelectionAllowed = this.parentSelectionAllowed;\n });\n }\n\n private updateNodes(): void {\n const nodesToRender = this._flattenedNodes.slice(this._firstRenderedIndex, this._lastRenderedIndex + 1);\n render(\n html`\n ${nodesToRender.map((node, ind) => {\n const virtualIndex = ind + this._firstRenderedIndex;\n const top = this.getTopPosition(virtualIndex);\n if (!isFlattenedNode(node)) {\n return html`\n <sd-tree-loading-indicator .depth=\"${node.depth}\" style=\"transform: translateY(${top}px)\"\n >${this.loadingText}</sd-tree-loading-indicator\n >\n `;\n }\n const data = this._nodeStates.get(node);\n const isFocused = virtualIndex === this.focusIndex;\n let isDisabled = data.disabled;\n if (!this.parentSelectionAllowed) {\n // when parent selection is not allowed and a node has radio button descendant\n // and such a node is selected then we wouldn't know which radio button descendant\n // should be selected that is why this node should be 'disabled'\n isDisabled = isDisabled || data.hasRadioButtonDescendant();\n }\n return html`\n <sd-tree-node\n text=\"${data.text}\"\n selection-state=\"${data.selectionState}\"\n .nodeId=\"${data.id}\"\n .depth=\"${data.depth}\"\n style=\"transform: translateY(${top}px);\"\n .path=\"${data.path}\"\n ?focused=\"${isFocused}\"\n ?readonly=\"${this.readonly}\"\n type=\"${data.type}\"\n ?expanded=\"${data.expanded}\"\n child-count=\"${data.childCount}\"\n ?disabled=\"${isDisabled}\"\n .loading=\"${data.loading}\"\n ></sd-tree-node>\n `;\n })}\n `,\n this,\n );\n }\n\n private getTopPosition(index: number): number {\n return index * NODE_HEIGHT;\n }\n\n private updateRenderData(): void {\n if (this._reusePreviousRenderData) {\n return;\n }\n this._lastRenderedScrollTop = this.scrollTop;\n this._visibleItemsNum = Math.min(Math.ceil(this.height / NODE_HEIGHT), this._allNodeCount);\n if (this._visibleItemsNum > 0) {\n this._firstVisibleIndex = this.normalizeIndex(Math.floor(this._lastRenderedScrollTop / NODE_HEIGHT));\n this._lastVisibleIndex = this.normalizeIndex(this._firstVisibleIndex + this._visibleItemsNum);\n\n this._firstRenderedIndex = this.normalizeIndex(this._firstVisibleIndex - 2);\n this._lastRenderedIndex = this.normalizeIndex(this._lastVisibleIndex + 2);\n\n for (const node of this._flattenedNodes.slice(this._firstRenderedIndex, this._lastRenderedIndex + 1)) {\n const data = isFlattenedNode(node) && this._nodeStates.get(node);\n if (data) {\n if (data.lastLoadingChild) {\n const parentNode = data.parentNode;\n if (parentNode) {\n if (this.needsFurtherData(parentNode)) {\n this.requestData(parentNode);\n break;\n }\n } else if (this._loadedRootNodeCount < this.rootNodeCount && !this._rootItemsLoading) {\n this.requestData();\n break;\n }\n } else if (this.needsFurtherData(data)) {\n this.requestData(data);\n break;\n }\n }\n }\n } else {\n this._firstVisibleIndex = 0;\n this._lastVisibleIndex = 0;\n this._firstRenderedIndex = 0;\n this._lastRenderedIndex = 0;\n }\n }\n\n private needsFurtherData(node: Node): boolean {\n return (\n node.expanded &&\n node.childCount > node.nodes.length &&\n this.nodeIndex(node.id) + node.nodes.length < this._lastRenderedIndex\n );\n }\n\n private nodeIndex(id: string): number {\n return this._flattenedNodes.findIndex((flatNode) => flatNode === id);\n }\n\n private normalizeIndex(index: number): number {\n return Math.max(0, Math.min(index, this._allNodeCount - 1));\n }\n\n private get height(): number {\n return this.offsetHeight;\n }\n\n private requestData(node?: Node): void {\n if (!node?.loading) {\n const path = node?.path;\n this.startLoadingIndicator(path);\n this.dispatchEvent(\n new CustomEvent<IDataRequest>(\"data-request\", {\n detail: { path },\n }),\n );\n }\n }\n\n private onScroll = (): void => {\n this._lastKnownScrollTop = this.scrollTop;\n const delta = this._lastRenderedScrollTop - this._lastKnownScrollTop;\n if (Math.abs(delta) >= NODE_HEIGHT) {\n this._lastRenderedScrollTop = this._lastKnownScrollTop;\n this.requestUpdate();\n }\n };\n\n private handleNodeExpansion = (event: CustomEvent<IExpansion>): void => {\n const { path, expanded } = event.detail;\n this.updateAfterExpansion(path, expanded);\n };\n\n private updateAfterExpansion(path: string[], expanded: boolean): void {\n const node = this._nodeStates.get(JSON.stringify(path));\n if (node) {\n node.expanded = expanded;\n const flattenedNodeIndex = findNodeIndex(this._flattenedNodes, path);\n const focusedNode = this._flattenedNodes[this.focusIndex];\n if (expanded) {\n const numberOfNodesAdded = this.addSubtree(node, flattenedNodeIndex + 1);\n const hasUnloadedChildren = node.childCount > node.nodes.length;\n const hasVisibleUnloadedChildren = flattenedNodeIndex + node.nodes.length < this._lastRenderedIndex;\n if (hasUnloadedChildren && hasVisibleUnloadedChildren) {\n this.requestData(node);\n }\n this._allNodeCount += numberOfNodesAdded;\n } else {\n const numberOfNodesRemoved = this.removeSubtree(flattenedNodeIndex);\n this._allNodeCount -= numberOfNodesRemoved;\n }\n if (focusedNode) {\n const newIndex = this._flattenedNodes.findIndex((flatNode) => flatNode == focusedNode);\n if (newIndex !== this.focusIndex) {\n this._focusIndex = newIndex;\n }\n }\n }\n this.requestUpdate();\n }\n\n private addSubtree(rootNode: Node, firstIndex: number): number {\n const flattenedSubtree = this.getFlattenedSubtree(rootNode.nodes);\n this._flattenedNodes.splice(firstIndex, 0, ...flattenedSubtree);\n return flattenedSubtree.length;\n }\n\n private getFlattenedSubtree(nodes: Node[]): string[] {\n return nodes.reduce<string[]>((ack, curr) => {\n return ack.concat(\n curr && curr.childCount > 0 && curr.expanded\n ? [JSON.stringify(curr.path), ...this.getFlattenedSubtree(curr.nodes)]\n : JSON.stringify(curr.path),\n );\n }, []);\n }\n\n private removeSubtree(rootNodeIndex: number): number {\n const nextNonDescendantIndex = this.getNextNonDescendantIndex(rootNodeIndex);\n let numberOfNodesToRemove = 0;\n if (nextNonDescendantIndex !== -1) {\n numberOfNodesToRemove = nextNonDescendantIndex - rootNodeIndex - 1;\n this._flattenedNodes.splice(rootNodeIndex + 1, numberOfNodesToRemove);\n } else {\n numberOfNodesToRemove = this._flattenedNodes.length - rootNodeIndex - 1;\n this._flattenedNodes.splice(rootNodeIndex + 1);\n }\n return numberOfNodesToRemove;\n }\n\n // Returns the index of the node which is the next node\n // in this._flattenedNodes after the descendants of the given node.\n // This is used for removing the descendans of a node from this._flattenedNodes\n // after collapsing it.\n private getNextNonDescendantIndex(index: number): number {\n const nodePath = this._flattenedNodes[index];\n const node = isFlattenedNode(nodePath) && this._nodeStates.get(nodePath);\n if (node) {\n for (let i = index + 1; i < this._flattenedNodes.length; i++) {\n const flatNodePath = this._flattenedNodes[i];\n const flatNode = isFlattenedNode(flatNodePath) && this._nodeStates.get(flatNodePath);\n if (flatNode && flatNode.path.length <= node.path.length) {\n return i;\n }\n }\n }\n return -1;\n }\n\n private handleKeyDown = (event: KeyboardEvent): void => {\n let shouldPrevent = true;\n switch (event.key) {\n case \"ArrowDown\": {\n this.focusIndex = this.normalizeIndex(this.focusIndex + 1);\n break;\n }\n case \"ArrowUp\": {\n this.focusIndex = this.normalizeIndex(this.focusIndex - 1);\n break;\n }\n case \"ArrowRight\": {\n const focusedNode = this.focusedNode;\n if (focusedNode) {\n if (focusedNode.childCount > 0 && !focusedNode.expanded) {\n const focusedNodeElement = this.querySelector(`[node-id='${focusedNode.id}']`) as TreeNode;\n if (focusedNodeElement) {\n focusedNodeElement.expand();\n }\n } else {\n this.focusIndex = this.normalizeIndex(this.focusIndex + 1);\n }\n }\n break;\n }\n case \"ArrowLeft\": {\n const focusedNode = this.focusedNode;\n if (focusedNode) {\n if (focusedNode.childCount > 0 && focusedNode.expanded) {\n const focusedNodeElement = this.querySelector(`[node-id='${focusedNode.id}']`) as TreeNode;\n if (focusedNodeElement) {\n focusedNodeElement.collapse();\n }\n } else {\n this.focusIndex = this.normalizeIndex(this.focusIndex - 1);\n }\n }\n break;\n }\n case \"Enter\": {\n const focusedNode = this.focusedNode;\n if (focusedNode) {\n this.toggleSelection(focusedNode.path);\n this.updateComplete.then(() => {\n this.dispatchEvent(\n new CustomEvent<ISelection>(\"selection\", {\n detail: {\n path: focusedNode.path,\n checked: focusedNode.selectionState === \"checked\",\n indeterminate: focusedNode.selectionState === \"indeterminate\",\n },\n bubbles: true,\n composed: true,\n }),\n );\n });\n }\n break;\n }\n default: {\n shouldPrevent = false;\n break;\n }\n }\n if (shouldPrevent) {\n event.preventDefault();\n event.stopPropagation();\n }\n };\n\n private handleNodeSelection = (event: CustomEvent<ISelection>): void => {\n if (event.target == this) {\n return;\n }\n this._reusePreviousRenderData = true;\n const { path } = event.detail;\n // focus index should be updated before focusing, otherwise automatic focus index setting may cause unexpected scrolling\n this.focusIndex = findNodeIndex(this._flattenedNodes, path);\n // when the selection is triggered by a click on a checkbox\n // the :active pseudo class is kept on the checkbox\n // even after scrolling and rerendering it with different data\n // to prevent this focusing the tree is needed\n this.focus();\n this.toggleSelection(path);\n this.updateComplete.then(() => {\n // Fixes 262528.\n // The render data may not be up-to-date due to the delta change detection in the scroll handler.\n // If we use another render data directly after the selection, then template fragments can change\n // without noticing the most recent value, causing the nodes to show invalid data on the UI.\n this._reusePreviousRenderData = false;\n });\n };\n\n private get focusedNode(): Node | undefined {\n const flattenedNode = this._flattenedNodes[this.focusIndex];\n return isFlattenedNode(flattenedNode) && this._nodeStates.get(flattenedNode);\n }\n\n private toggleSelection(path: string[]): void {\n const node = this.nodeGetter(path);\n node.toggle();\n this.requestUpdate();\n }\n\n private updateFlattenedNodes(subtree: Node[], parentPath: string[]): void {\n if (parentPath) {\n const parentIndex = findNodeIndex(this._flattenedNodes, parentPath);\n const parentId = this._flattenedNodes[parentIndex];\n if (isFlattenedNode(parentId)) {\n const parentNode = this._nodeStates.get(parentId);\n if (parentNode) {\n const startIndex = parentIndex + parentNode.nodes.length + 1;\n const parentDepth = parentNode.depth;\n const flattenedSubtree = flattenNodes(subtree, Infinity, parentDepth + 1).map(\n this.getFlattenedNodeId,\n );\n if (parentNode.expanded) {\n this._flattenedNodes.splice(startIndex, 0, ...flattenedSubtree);\n }\n parentNode.nodes = [...parentNode.nodes, ...subtree];\n parentNode.loading = false;\n this.updateLastLoadingChild(parentNode.nodes, flattenedSubtree);\n }\n }\n } else {\n const flattenedSubtree = flattenNodes(subtree, Infinity).map(this.getFlattenedNodeId);\n this.updateLastLoadingChild(this._flattenedNodes, flattenedSubtree);\n this._flattenedNodes = [...this._flattenedNodes, ...flattenedSubtree];\n }\n }\n\n private getFlattenedNodeId = (node: Node): string => {\n return JSON.stringify(node.path);\n };\n\n private updateLastLoadingChild(previousNodes: (string | ILoadingNode)[], newNodes: string[]): void {\n const previousLastNodeId = previousNodes[previousNodes.length - 1];\n const previousLastNode = isFlattenedNode(previousLastNodeId) && this._nodeStates.get(previousLastNodeId);\n const newLastNodeId = newNodes[newNodes.length - 1];\n const newLastNode = isFlattenedNode(newLastNodeId) && this._nodeStates.get(newLastNodeId);\n if (previousLastNode) {\n previousLastNode.lastLoadingChild = false;\n }\n if (newLastNode) {\n const parent = newLastNode.parentNode;\n const hasUnloadedSiblings =\n (parent && parent.childCount > parent.nodes.length) ||\n (!parent && this.rootNodeCount > this._loadedRootNodeCount);\n if (hasUnloadedSiblings) {\n newLastNode.lastLoadingChild = true;\n }\n }\n }\n\n private setLastLoadingChildren(nodes: Node[], count: number, loadedCount: number): void {\n if (loadedCount < count) {\n const lastNode = nodes[nodes.length - 1];\n if (lastNode) {\n lastNode.lastLoadingChild = true;\n }\n }\n nodes.forEach((node) => {\n this.setLastLoadingChildren(node.nodes, node.childCount, node.nodes.length);\n });\n }\n\n private startLoadingIndicator(loadingParentPath: string[]): void {\n if (loadingParentPath) {\n const node = this._nodeStates.get(JSON.stringify(loadingParentPath));\n if (node) {\n const flatNodeIndex = findNodeIndex(this._flattenedNodes, loadingParentPath);\n node.loading = true;\n this.addPlaceholders(flatNodeIndex, node);\n }\n } else {\n this._rootItemsLoading = true;\n this._flattenedNodes = [\n ...this._flattenedNodes,\n ...new Array(this.rootNodeCount - this._loadedRootNodeCount).fill({ depth: 0 }),\n ];\n }\n this.updateNodes();\n }\n\n private addPlaceholders(index: number, node: Node): void {\n const firstIndex = index + node.nodes.length + 1;\n const numOfPlaceholders = node.childCount - node.nodes.length;\n this._flattenedNodes.splice(\n firstIndex,\n 0,\n ...new Array(numOfPlaceholders).fill({\n depth: node.depth + 1,\n }),\n );\n }\n\n private stopLoadingIndicator(loadingParentPath?: string[]): void {\n if (loadingParentPath) {\n const node = this._nodeStates.get(JSON.stringify(loadingParentPath));\n if (node) {\n node.loading = false;\n if (node.expanded) {\n const flatNodeIndex = findNodeIndex(this._flattenedNodes, loadingParentPath);\n this.removePlaceHolders(flatNodeIndex, node);\n }\n }\n } else {\n this._rootItemsLoading = false;\n const firstLoaderIndex = this._flattenedNodes.findIndex((node) => !isFlattenedNode(node));\n this._flattenedNodes.splice(firstLoaderIndex);\n }\n }\n\n private removePlaceHolders(index: number, node: Node): void {\n const firstIndex = index + node.nodes.length + 1;\n const numOfPlaceholders = node.childCount - node.nodes.length;\n this._flattenedNodes.splice(firstIndex, numOfPlaceholders);\n }\n\n // this method is used to synchronize this.nodes property\n // to the declaratively created nodes\n private syncState(): void {\n const rootNodes = [...(this.children as HTMLCollectionOf<TreeNode>)];\n const state = rootNodes.map((node) => node.getState());\n this.addNodes(state);\n this.rootNodeCount = state.length;\n this.innerHTML = \"\";\n }\n\n private updateCount(nodes: Node[]): void {\n this._allNodeCount = nodes.length + this.getNodeCount(nodes);\n }\n\n private getNodeCount(nodes: Node[]): number {\n let n = 0;\n nodes.forEach((node) => {\n if (node.expanded) {\n n += node.childCount + this.getNodeCount(node.nodes);\n }\n });\n return n;\n }\n\n private nodeGetter = (path: string[]): Node | null => {\n return path ? this._nodeStates.get(JSON.stringify(path)) : null;\n };\n}\n\nTree.ensureDefined();\n\nexport { Tree };\nexport * from \"./node\";\nexport * from \"./checkbox-node\";\nexport * from \"./radio-button-node\";\nexport * from \"./types\";\nexport * from \"./utils\";\n"],"names":["NODE_MARGIN_LEFT","NODE_HEIGHT","Node","id","text","path","nodes","child","isRadioButtonNode","parent","isCheckboxNode","node","CheckboxNode","checkStatus","some","every","anyIndeterminate","state","ack","curr","RadioButtonNode","sibling","_TreeNode","_a","LitElement","checkbox","radioButton","css","unsafeCSS","style","hasChildren","html","hasChanged","parentPath","children","RadioButton","SDCheckbox","__decorateClass","property","TreeNode","_LoadingIndicator","LoadingIndicator","flattenNodes","arr","d","depth","acc","val","findNodeByPath","currentId","matchingNode","getOffsetForIndexAndAlignment","index","alignment","scrollOffset","itemHeight","height","itemCount","lastItemOffset","maxOffset","minOffset","middleOffset","isNode","findNode","findNodeIndex","isFlattenedNode","_Tree","delta","event","expanded","shouldPrevent","focusedNode","focusedNodeElement","count","oldValue","ind","siblings","parentNode","changedProperties","nodesToRender","render","virtualIndex","top","data","isFocused","isDisabled","flatNode","flattenedNodeIndex","numberOfNodesAdded","hasUnloadedChildren","hasVisibleUnloadedChildren","numberOfNodesRemoved","newIndex","rootNode","firstIndex","flattenedSubtree","rootNodeIndex","nextNonDescendantIndex","numberOfNodesToRemove","nodePath","flatNodePath","flattenedNode","subtree","parentIndex","parentId","startIndex","parentDepth","previousNodes","newNodes","previousLastNodeId","previousLastNode","newLastNodeId","newLastNode","loadedCount","lastNode","loadingParentPath","flatNodeIndex","numOfPlaceholders","firstLoaderIndex","n","Tree"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"tree.mjs","sources":["../src/constants.ts","../src/node.ts","../src/checkbox-node.ts","../src/radio-button-node.ts","../src/tree-node.ts","../src/loading-indicator.ts","../src/utils.ts","../src/tree.ts"],"sourcesContent":["export const NODE_MARGIN_LEFT = 16;\nexport const NODE_HEIGHT = 35;\n","import { NodeType, NodeSelectionState } from \"./types\";\nimport { CheckboxNode } from \"./checkbox-node\";\nimport { RadioButtonNode } from \"./radio-button-node\";\n\ntype NodeGetter = (path: string[]) => Node;\n\ninterface IParent {\n nodes: Node[];\n childCount: number;\n expanded: boolean;\n childrenType: NodeType;\n}\n\nabstract class Node implements IParent {\n public type: NodeType;\n public depth = 0;\n public selectionState: NodeSelectionState = \"unchecked\";\n public childCount: number;\n public expanded = false;\n public childrenType: NodeType;\n public parentSelectionAllowed = false;\n public lastLoadingChild = false;\n public loading = false;\n public disabled = false;\n public nodeGetter: NodeGetter;\n public getSiblings: () => Node[];\n\n private parent: string[] = [];\n\n constructor(\n public id: string,\n public text: string,\n public path: string[],\n public nodes: Node[],\n ) {\n if (path) {\n this.depth = path.length - 1;\n this.parent = path.slice(0, -1);\n } else {\n this.path = [id];\n }\n this.childCount = nodes ? nodes.length : 0;\n }\n\n public abstract toggle(): void;\n\n // updates this node, its parent and children recursively\n public abstract updateBranch(): void;\n\n // updates the selection state of this node according to the state of its children\n public abstract updateSelectionStateByChildren(): void;\n\n public updateSelectionStateOfChildren(): void {\n this.nodes.forEach((child) => {\n if (this.selectionState === \"checked\") {\n if (child.childrenType === \"radio\" || isRadioButtonNode(child)) {\n return;\n }\n child.selectionState = \"checked\";\n } else if (this.selectionState === \"unchecked\") {\n child.selectionState = \"unchecked\";\n }\n child.updateSelectionStateOfChildren();\n });\n }\n\n public updateParent(): Node {\n const parent = this.parentNode;\n\n if (parent) {\n if (!this.parentSelectionAllowed || this.selectionState !== \"unchecked\" || parent.disabled) {\n parent.updateSelectionStateByChildren();\n parent.updateParent();\n }\n }\n return parent;\n }\n\n public get parentNode(): Node | null {\n return this.parent.length ? this.nodeGetter(this.parent) : null;\n }\n\n public check(): void {\n if (this.selectionState !== \"checked\") {\n this.selectionState = \"checked\";\n this.updateBranch();\n }\n }\n\n public uncheck(): void {\n if (this.selectionState !== \"unchecked\") {\n this.selectionState = \"unchecked\";\n this.updateBranch();\n }\n }\n\n public hasRadioButtonDescendant(): boolean {\n if (this.childrenType === \"radio\") {\n return true;\n }\n\n for (const child of this.nodes) {\n const hasRadioButtonChildren = child.hasRadioButtonDescendant();\n if (hasRadioButtonChildren) {\n return true;\n }\n }\n }\n}\n\nconst isCheckboxNode = (node: Node): node is CheckboxNode => {\n return node?.type === \"checkbox\";\n};\n\nconst isRadioButtonNode = (node: Node): node is RadioButtonNode => {\n return node?.type === \"radio\";\n};\n\nexport { Node, isCheckboxNode, isRadioButtonNode };\nexport type { NodeGetter, IParent };\n","import { Node, isCheckboxNode } from \"./node\";\n\nclass CheckboxNode extends Node {\n constructor(id: string, text: string, path: string[], nodes: Node[]) {\n super(id, text, path, nodes);\n this.type = \"checkbox\";\n }\n\n public toggle(): void {\n if (this.selectionState === \"checked\") {\n this.selectionState = \"unchecked\";\n } else {\n this.selectionState = \"checked\";\n }\n this.updateBranch();\n }\n\n public updateBranch(): void {\n if (!this.parentSelectionAllowed || this.selectionState === \"unchecked\") {\n this.updateSelectionStateOfChildren();\n this.updateSelectionStateByChildren();\n }\n this.updateParent();\n }\n\n public updateSelectionStateByChildren(): void {\n if (this.nodes.length === 0) {\n return;\n }\n const checkStatus = this.nodes.map((child) => {\n return child.selectionState === \"checked\" || child.selectionState === \"indeterminate\";\n });\n const some = checkStatus.some(Boolean);\n if (this.parentSelectionAllowed) {\n this.selectionState = some ? \"checked\" : \"unchecked\";\n } else {\n const every = checkStatus.every(Boolean);\n const anyIndeterminate = this.nodes\n .map((child) => child.selectionState)\n .some((state) => state === \"indeterminate\");\n if (this.childrenType === \"radio\") {\n this.selectionState = some ? \"checked\" : \"unchecked\";\n } else if (anyIndeterminate) {\n this.selectionState = \"indeterminate\";\n } else if (every) {\n this.selectionState = \"checked\";\n } else if (some) {\n this.selectionState = \"indeterminate\";\n } else {\n this.selectionState = \"unchecked\";\n }\n }\n }\n\n private getFlattenedSubtree(nodes: Node[]): Node[] {\n return nodes.reduce<Node[]>((ack, curr) => {\n return ack.concat(\n isCheckboxNode(curr) && curr.childCount > 0 && curr.expanded\n ? [curr, ...this.getFlattenedSubtree(curr.nodes)]\n : curr,\n );\n }, []);\n }\n}\n\nexport { CheckboxNode };\n","import { Node } from \"./node\";\n\ntype RadioButtonNodeSelectionState = \"unchecked\" | \"checked\";\n\nclass RadioButtonNode extends Node {\n constructor(id: string, text: string, path: string[], nodes: Node[]) {\n super(id, text, path, nodes);\n this.type = \"radio\";\n }\n\n public toggle(): void {\n if (this.selectionState === \"checked\") {\n this.selectionState = \"unchecked\";\n } else {\n this.selectionState = \"checked\";\n this.clearSiblings();\n }\n this.updateBranch();\n }\n\n public check(): void {\n if (this.selectionState !== \"checked\") {\n this.selectionState = \"checked\";\n this.clearSiblings();\n this.updateBranch();\n }\n }\n\n public updateBranch(): void {\n if (this.selectionState === \"unchecked\") {\n this.updateSelectionStateOfChildren();\n }\n this.updateParent();\n }\n\n public updateParent(): Node {\n const parent = super.updateParent();\n if (parent instanceof RadioButtonNode) {\n parent.clearSiblings();\n }\n return parent;\n }\n\n public updateSelectionStateByChildren(): void {\n if (this.nodes.length === 0) {\n return;\n }\n const some = this.nodes.map((child) => child.selectionState === \"checked\").some(Boolean);\n if (some) {\n this.selectionState = \"checked\";\n } else {\n this.selectionState = \"unchecked\";\n }\n }\n\n private clearSiblings(): void {\n const siblings = this.getSiblings();\n siblings.forEach((sibling) => {\n sibling.uncheck();\n });\n }\n}\n\nexport { RadioButtonNode };\nexport type { RadioButtonNodeSelectionState };\n","import { LitElement, css, html, unsafeCSS } from \"lit\";\nimport { property } from \"lit/decorators/property.js\";\nimport type { IExpansion, ISelection, NodeType } from \"./types\";\nimport { SDCheckbox } from \"@cas-smartdesign/checkbox\";\nimport { RadioButton } from \"@cas-smartdesign/radio-button-group\";\nimport { NODE_MARGIN_LEFT } from \"./constants\";\nimport { Node } from \"./node\";\nimport type { NodeSelectionState } from \"./types\";\nimport { CheckboxNode } from \"./checkbox-node\";\nimport { RadioButtonNode } from \"./radio-button-node\";\nimport style from \"./scss/node.scss?inline\";\n\ndeclare global {\n interface HTMLElementTagNameMap {\n [TreeNode.ID]: TreeNode;\n }\n}\n\nexport interface CustomEventMap extends HTMLElementEventMap {\n selection: CustomEvent<ISelection>;\n expansion: CustomEvent<IExpansion>;\n}\n\nexport default interface TreeNode {\n addEventListener<K extends keyof CustomEventMap>(\n event: K,\n listener: ((this: this, ev: CustomEventMap[K]) => unknown) | null,\n options?: AddEventListenerOptions | boolean,\n ): void;\n addEventListener(\n type: string,\n callback: EventListenerOrEventListenerObject | null,\n options?: AddEventListenerOptions | boolean,\n ): void;\n removeEventListener<K extends keyof CustomEventMap>(\n type: K,\n listener: (this: this, ev: CustomEventMap[K]) => unknown,\n options?: boolean | EventListenerOptions,\n ): void;\n removeEventListener(\n type: string,\n listener: EventListenerOrEventListenerObject,\n options?: boolean | EventListenerOptions,\n ): void;\n dispatchEvent<EventType extends CustomEventMap[keyof CustomEventMap]>(event: EventType): boolean;\n}\n\nexport default class TreeNode extends LitElement {\n public static readonly ID = \"sd-tree-node\";\n @property({ type: String, reflect: true, attribute: true })\n public text = \"\";\n @property({ type: Boolean, reflect: true, attribute: true })\n public expanded = false;\n @property({ type: String, reflect: true, attribute: \"node-id\" })\n public nodeId: string;\n @property({ type: Number, reflect: true, attribute: \"child-count\" })\n public childCount = 0;\n @property({ type: Boolean, reflect: true, attribute: true })\n public focused = false;\n @property({ type: Boolean, reflect: true, attribute: true })\n public readonly = false;\n @property({ type: Number })\n public depth = 0;\n @property({ type: Array, attribute: false })\n public path: string[] = [];\n @property({ type: String, reflect: true, attribute: true })\n public type: NodeType = \"checkbox\";\n @property({ type: String, reflect: true, attribute: \"selection-state\" })\n public selectionState: NodeSelectionState = \"unchecked\";\n @property({ type: Boolean, reflect: true, attribute: true })\n public disabled = false;\n @property({ type: Boolean, reflect: true, attribute: true })\n public loading = false;\n\n static get styles() {\n return [\n css`\n ${unsafeCSS(style)}\n `,\n ];\n }\n\n public static ensureDefined = () => {\n RadioButton.ensureDefined();\n SDCheckbox.ensureDefined();\n if (!customElements.get(TreeNode.ID)) {\n customElements.define(TreeNode.ID, TreeNode);\n }\n };\n\n public render() {\n const hasChildren = this.childCount > 0 || this.children.length > 0;\n return html`\n <li class=\"node\" style=\"margin-left: ${this.depth * NODE_MARGIN_LEFT}px\">\n ${hasChildren\n ? html` <div class=\"expander ${this.expanded ? \"less\" : \"more\"}\" @click=\"${this.toggle}\"></div> `\n : html` <div class=\"placeholder\"></div> `}\n ${!this.readonly\n ? html`\n ${this.type === \"checkbox\"\n ? html`\n <sd-checkbox\n class=\"input\"\n tabIndex=\"-1\"\n label=\"${this.text}\"\n ?checked=\"${this.selectionState === \"checked\"}\"\n ?focused=\"${this.focused}\"\n ?disabled=\"${this.disabled}\"\n .indeterminate=\"${this.selectionState === \"indeterminate\"}\"\n @value-change=\"${this.onSelectionChange}\"\n oneline\n ></sd-checkbox>\n `\n : html`\n <sd-radio-button\n class=\"input\"\n tabIndex=\"-1\"\n label=\"${this.text}\"\n ?checked=\"${this.selectionState === \"checked\"}\"\n ?focused=\"${this.focused}\"\n ?disabled=\"${this.disabled}\"\n oneline=\"\"\n @click=\"${this.onSelectionChange}\"\n ></sd-radio-button>\n `}\n `\n : html` <div class=\"label\">${this.text}</div> `}\n ${hasChildren && this.expanded\n ? html`\n <ul>\n <slot></slot>\n </ul>\n `\n : \"\"}\n </li>\n `;\n }\n\n public toggle(): void {\n if (!this.loading) {\n this.expanded = !this.expanded;\n this.dispatchExpansionEvent();\n }\n }\n\n public expand(): void {\n if (!this.loading) {\n const hasChanged = !this.expanded;\n this.expanded = true;\n if (hasChanged) {\n this.dispatchExpansionEvent();\n }\n }\n }\n\n public collapse(): void {\n if (!this.loading) {\n const hasChanged = this.expanded;\n this.expanded = false;\n if (hasChanged) {\n this.dispatchExpansionEvent();\n }\n }\n }\n\n public getState(parentPath?: string[]): Node {\n const path = Array.isArray(parentPath) ? [...parentPath, this.nodeId] : [this.nodeId];\n const children = [...(this.children as HTMLCollectionOf<TreeNode>)].map((child) => child.getState(path));\n let node: Node;\n if (this.type === \"checkbox\") {\n node = new CheckboxNode(this.nodeId, this.text, path, children);\n } else {\n node = new RadioButtonNode(this.nodeId, this.text, path, children);\n }\n node.selectionState = this.selectionState;\n node.childrenType = children[0]?.type;\n node.expanded = this.expanded;\n node.disabled = this.disabled;\n return node;\n }\n\n private dispatchExpansionEvent(): void {\n this.dispatchEvent(\n new CustomEvent<IExpansion>(\"expansion\", {\n detail: { path: this.path, expanded: this.expanded },\n bubbles: true,\n composed: true,\n }),\n );\n }\n\n private onSelectionChange = (): void => {\n if (!this.readonly) {\n if (this.type == \"checkbox\") {\n const checkbox = this.shadowRoot.querySelector(\".input\") as SDCheckbox;\n this.selectionState = checkbox.checked\n ? \"checked\"\n : checkbox.indeterminate\n ? \"indeterminate\"\n : \"unchecked\";\n } else {\n const radioButton = this.shadowRoot.querySelector(\".input\") as RadioButton;\n this.selectionState = radioButton.checked ? \"checked\" : \"unchecked\";\n }\n this.updateComplete.then(() => {\n this.dispatchEvent(\n new CustomEvent<ISelection>(\"selection\", {\n detail: {\n path: this.path,\n checked: this.selectionState === \"checked\",\n indeterminate: this.selectionState === \"indeterminate\",\n },\n bubbles: true,\n composed: true,\n }),\n );\n });\n }\n };\n}\n","import { LitElement, TemplateResult, html, unsafeCSS, css } from \"lit\";\nimport { property } from \"lit/decorators/property.js\";\nimport { NODE_MARGIN_LEFT } from \"./constants\";\n\ndeclare global {\n interface HTMLElementTagNameMap {\n [LoadingIndicator.ID]: LoadingIndicator;\n }\n}\n\nimport style from \"./scss/loading-indicator.scss?inline\";\n\nexport default class LoadingIndicator extends LitElement {\n public static readonly ID = \"sd-tree-loading-indicator\";\n @property({ type: Boolean, reflect: true, attribute: true })\n public readonly = false;\n @property({ type: Number })\n public depth = 0;\n\n static get styles() {\n return [\n css`\n ${unsafeCSS(style)}\n `,\n ];\n }\n\n public static ensureDefined = () => {\n if (!customElements.get(LoadingIndicator.ID)) {\n customElements.define(LoadingIndicator.ID, LoadingIndicator);\n }\n };\n\n public render(): TemplateResult {\n return html`\n <li class=\"root\" style=\"margin-left: ${this.depth * NODE_MARGIN_LEFT}px;\">\n <div class=\"text\">\n <slot>Loading...</slot>\n </div>\n </li>\n `;\n }\n}\n","import { ScrollToAlignment, ILoadingNode } from \"./types\";\nimport { Node } from \"./node\";\n\nexport const flattenNodes = (arr: Node[], d = 1, depth = 0): Node[] => {\n return d > 0\n ? arr.reduce<Node[]>(\n (acc, val) =>\n acc.concat(\n val.childCount > 0 && val.expanded ? [val, ...flattenNodes(val.nodes, d - 1, depth + 1)] : val,\n ),\n [],\n )\n : arr.slice();\n};\n\nexport const findNodeByPath = (nodes: Node[], path: string[], depth = 0): Node => {\n if (!path) {\n return null;\n }\n const currentId = path[depth];\n const matchingNode = nodes.find((node) => node.id === currentId);\n if (path.length - 1 === depth) {\n return matchingNode;\n }\n if (matchingNode?.nodes.length > 0) {\n return findNodeByPath(matchingNode.nodes, path, depth + 1);\n } else {\n return null;\n }\n};\n\nexport const getOffsetForIndexAndAlignment = (\n index: number,\n alignment: ScrollToAlignment,\n scrollOffset: number,\n itemHeight: number,\n height: number,\n itemCount: number,\n): number => {\n const lastItemOffset = Math.max(0, itemCount * itemHeight);\n const maxOffset = Math.min(lastItemOffset, index * itemHeight);\n const minOffset = Math.max(0, index * itemHeight - height + itemHeight);\n\n switch (alignment) {\n case \"start\":\n return maxOffset;\n case \"end\":\n return minOffset;\n case \"center\": {\n const middleOffset = Math.round(minOffset + (maxOffset - minOffset) / 2);\n if (middleOffset < Math.ceil(height / 2)) {\n return 0;\n } else if (middleOffset > lastItemOffset + Math.floor(height / 2)) {\n return lastItemOffset;\n } else {\n return middleOffset;\n }\n }\n case \"auto\":\n default:\n if (scrollOffset >= minOffset && scrollOffset <= maxOffset) {\n return scrollOffset;\n } else if (scrollOffset < minOffset) {\n return minOffset;\n } else {\n return maxOffset;\n }\n }\n};\n\nexport const isNode = (node: Node | ILoadingNode): node is Node => {\n return node && typeof node !== \"string\";\n};\n\nexport const findNode = (nodes: (Node | ILoadingNode)[], path: string[]): Node => {\n const node = nodes.find((node) => isNode(node) && JSON.stringify(node.path) === JSON.stringify(path));\n if (isNode(node)) {\n return node;\n }\n return null;\n};\n\nexport const findNodeIndex = (nodes: (string | ILoadingNode)[], path: string[]): number => {\n return nodes.findIndex((node) => typeof node === \"string\" && node === JSON.stringify(path));\n};\n\nexport const isFlattenedNode = (node: string | ILoadingNode): node is string => {\n return typeof node === \"string\";\n};\n","import { LitElement, html, unsafeCSS, PropertyValues, css, render, TemplateResult } from \"lit\";\nimport { property } from \"lit/decorators/property.js\";\nimport TreeNode from \"./tree-node\";\nimport LoadingIndicator from \"./loading-indicator\";\nimport { IDataRequest, ScrollToAlignment, IExpansion, ISelection, ILoadingNode } from \"./types\";\nimport { getOffsetForIndexAndAlignment, flattenNodes, isFlattenedNode, findNodeIndex } from \"./utils\";\nimport { NODE_HEIGHT } from \"./constants\";\nimport { Node } from \"./node\";\nimport style from \"./scss/tree.scss?inline\";\n\ndeclare global {\n interface HTMLElementTagNameMap {\n [Tree.ID]: Tree;\n }\n}\n\nexport interface CustomEventMap extends HTMLElementEventMap {\n \"data-request\": CustomEvent<IDataRequest>;\n selection: CustomEvent<ISelection>;\n expansion: CustomEvent<IExpansion>;\n}\n\ninterface Tree {\n addEventListener<K extends keyof CustomEventMap>(\n event: K,\n listener: ((this: this, ev: CustomEventMap[K]) => unknown) | null,\n options?: AddEventListenerOptions | boolean,\n ): void;\n addEventListener(\n type: string,\n callback: EventListenerOrEventListenerObject | null,\n options?: AddEventListenerOptions | boolean,\n ): void;\n removeEventListener<K extends keyof CustomEventMap>(\n type: K,\n listener: (this: this, ev: CustomEventMap[K]) => unknown,\n options?: boolean | EventListenerOptions,\n ): void;\n removeEventListener(\n type: string,\n listener: EventListenerOrEventListenerObject,\n options?: boolean | EventListenerOptions,\n ): void;\n dispatchEvent<EventType extends CustomEventMap[keyof CustomEventMap]>(event: EventType): boolean;\n}\n\nclass Tree extends LitElement {\n public static readonly ID = \"sd-tree\";\n public static ensureDefined = (): void => {\n TreeNode.ensureDefined();\n LoadingIndicator.ensureDefined();\n if (!customElements.get(Tree.ID)) {\n customElements.define(Tree.ID, Tree);\n }\n };\n public pageSize = 50;\n @property({ type: String })\n public loadingText = \"Loading...\";\n @property({ type: Boolean, reflect: true, attribute: \"parent-selection-allowed\" })\n public parentSelectionAllowed = false;\n @property({ type: Boolean, reflect: true, attribute: true })\n public readonly = false;\n private _resizeObserver: ResizeObserver;\n private _lastKnownHeight = 0;\n private _lastKnownScrollTop = 0;\n private _lastRenderedScrollTop = 0;\n private _visibleItemsNum = 0;\n\n private _firstVisibleIndex = 0;\n private _lastVisibleIndex = 0;\n private _firstRenderedIndex = 0;\n private _lastRenderedIndex = 0;\n\n private _focusIndex = -1;\n // contains the id of the loaded nodes and placeholders for nodes\n // which are currently loading\n private _flattenedNodes: (string | ILoadingNode)[] = [];\n private _rootItemsLoading = false;\n private _rootNodeCount = 0;\n private _loadedRootNodeCount = 0;\n // it's the sum of the loaded and the unloaded nodes at\n // any level in the tree\n private _allNodeCount = 0;\n\n private _nodeStates: Map<string, Node> = new Map();\n private _reusePreviousRenderData: boolean;\n\n @property({ type: Number })\n public get rootNodeCount(): number {\n return this._rootNodeCount;\n }\n\n public set rootNodeCount(count: number) {\n if (count === 0) {\n this._allNodeCount = 0;\n } else if (count > 0) {\n this._allNodeCount += count - this.rootNodeCount;\n }\n this._rootNodeCount = count;\n this.requestUpdate();\n }\n\n @property({ type: Number, attribute: \"focus-index\", reflect: true })\n public get focusIndex(): number {\n return this._focusIndex;\n }\n\n public set focusIndex(index: number) {\n if (index >= -1 && index < this._allNodeCount) {\n const oldValue = this._focusIndex;\n this._focusIndex = index;\n if (index <= this._firstVisibleIndex || this._lastVisibleIndex <= index) {\n this.scrollToNode(index);\n }\n if (oldValue != index) {\n this.requestUpdate(\"focusIndex\", oldValue);\n }\n }\n }\n\n constructor() {\n super();\n this._resizeObserver = new ResizeObserver(() => {\n if (this._lastKnownHeight !== this.offsetHeight) {\n this._lastKnownHeight = this.offsetHeight;\n this.requestUpdate();\n }\n });\n }\n\n public setNodes(nodes: Node[]) {\n this.stopLoadingIndicator();\n this.setLastLoadingChildren(nodes, this.rootNodeCount, nodes.length);\n nodes.forEach((node, ind) => {\n const siblings = [...nodes];\n siblings.splice(ind, 1);\n this.updateNodeMap(node, siblings);\n });\n this.updateCount(nodes);\n this._loadedRootNodeCount = nodes.length;\n this._flattenedNodes = flattenNodes(nodes, Infinity).map(this.getFlattenedNodeId);\n this.requestUpdate();\n }\n\n public addNodes(nodes: Node[], parentPath?: string[]): void {\n this.stopLoadingIndicator(parentPath);\n nodes.forEach((node, ind) => {\n const siblings = [...nodes];\n siblings.splice(ind, 1);\n this.updateNodeMap(node, siblings);\n });\n const parentNode = this.nodeGetter(parentPath);\n if (parentNode) {\n if (parentNode.expanded) {\n this._allNodeCount += nodes.length + this.getNodeCount(nodes);\n }\n } else {\n this._loadedRootNodeCount += nodes.length;\n }\n this.updateFlattenedNodes(nodes, parentPath);\n this.requestUpdate();\n }\n\n public connectedCallback(): void {\n super.connectedCallback();\n this._resizeObserver.observe(this);\n }\n\n public disconnectedCallback(): void {\n super.disconnectedCallback();\n this._resizeObserver.disconnect();\n }\n\n static get styles() {\n return [\n css`\n ${unsafeCSS(style)}\n `,\n ];\n }\n\n public firstUpdated(changedProperties: PropertyValues): void {\n super.firstUpdated(changedProperties);\n this.addEventListener(\"scroll\", this.onScroll);\n this.addEventListener(\"keydown\", this.handleKeyDown);\n this.addEventListener(\"expansion\", this.handleNodeExpansion);\n this.addEventListener(\"selection\", this.handleNodeSelection);\n this.addEventListener(\"focus\", () => {\n if (this.focusIndex == -1 && this.matches(\":focus-visible\")) {\n this.focusIndex = this.normalizeIndex(0);\n }\n });\n if (this._nodeStates.size === 0) {\n if (this.children.length > 0) {\n this.syncState();\n } else {\n this.requestData();\n }\n }\n }\n\n public updated(changedProperties: PropertyValues): void {\n super.updated(changedProperties);\n this.updateNodes();\n if (changedProperties.has(\"parentSelectionAllowed\")) {\n this.updateParentSelectionAllowed();\n }\n }\n\n public render(): TemplateResult {\n this.updateRenderData();\n return html`\n <div class=\"root\" style=\"height: ${this._allNodeCount * NODE_HEIGHT}px\">\n <ul>\n <slot></slot>\n </ul>\n </div>\n `;\n }\n\n public scrollToNode(index: number, alignment: ScrollToAlignment = \"auto\"): void {\n this.scrollTop = getOffsetForIndexAndAlignment(\n this.normalizeIndex(index),\n alignment,\n this.scrollTop,\n NODE_HEIGHT,\n this.height,\n this._allNodeCount,\n );\n }\n\n private updateNodeMap(node: Node, siblings: Node[]): void {\n if (node) {\n node.nodeGetter = this.nodeGetter;\n node.getSiblings = (): Node[] => {\n return siblings;\n };\n this._nodeStates.set(JSON.stringify(node.path), node);\n node.nodes.forEach((child, ind) => {\n const siblings = [...node.nodes];\n siblings.splice(ind, 1);\n this.updateNodeMap(child, siblings);\n });\n }\n }\n\n private updateParentSelectionAllowed(): void {\n this._nodeStates.forEach((node) => {\n node.parentSelectionAllowed = this.parentSelectionAllowed;\n });\n }\n\n private updateNodes(): void {\n const nodesToRender = this._flattenedNodes.slice(this._firstRenderedIndex, this._lastRenderedIndex + 1);\n render(\n html`\n ${nodesToRender.map((node, ind) => {\n const virtualIndex = ind + this._firstRenderedIndex;\n const top = this.getTopPosition(virtualIndex);\n if (!isFlattenedNode(node)) {\n return html`\n <sd-tree-loading-indicator .depth=\"${node.depth}\" style=\"transform: translateY(${top}px)\"\n >${this.loadingText}</sd-tree-loading-indicator\n >\n `;\n }\n const data = this._nodeStates.get(node);\n const isFocused = virtualIndex === this.focusIndex;\n let isDisabled = data.disabled;\n if (!this.parentSelectionAllowed) {\n // when parent selection is not allowed and a node has radio button descendant\n // and such a node is selected then we wouldn't know which radio button descendant\n // should be selected that is why this node should be 'disabled'\n isDisabled = isDisabled || data.hasRadioButtonDescendant();\n }\n return html`\n <sd-tree-node\n text=\"${data.text}\"\n selection-state=\"${data.selectionState}\"\n .nodeId=\"${data.id}\"\n .depth=\"${data.depth}\"\n style=\"transform: translateY(${top}px);\"\n .path=\"${data.path}\"\n ?focused=\"${isFocused}\"\n ?readonly=\"${this.readonly}\"\n type=\"${data.type}\"\n ?expanded=\"${data.expanded}\"\n child-count=\"${data.childCount}\"\n ?disabled=\"${isDisabled}\"\n .loading=\"${data.loading}\"\n ></sd-tree-node>\n `;\n })}\n `,\n this,\n );\n }\n\n private getTopPosition(index: number): number {\n return index * NODE_HEIGHT;\n }\n\n private updateRenderData(): void {\n if (this._reusePreviousRenderData) {\n return;\n }\n this._lastRenderedScrollTop = this.scrollTop;\n this._visibleItemsNum = Math.min(Math.ceil(this.height / NODE_HEIGHT), this._allNodeCount);\n if (this._visibleItemsNum > 0) {\n this._firstVisibleIndex = this.normalizeIndex(Math.floor(this._lastRenderedScrollTop / NODE_HEIGHT));\n this._lastVisibleIndex = this.normalizeIndex(this._firstVisibleIndex + this._visibleItemsNum);\n\n this._firstRenderedIndex = this.normalizeIndex(this._firstVisibleIndex - 2);\n this._lastRenderedIndex = this.normalizeIndex(this._lastVisibleIndex + 2);\n\n for (const node of this._flattenedNodes.slice(this._firstRenderedIndex, this._lastRenderedIndex + 1)) {\n const data = isFlattenedNode(node) && this._nodeStates.get(node);\n if (data) {\n if (data.lastLoadingChild) {\n const parentNode = data.parentNode;\n if (parentNode) {\n if (this.needsFurtherData(parentNode)) {\n this.requestData(parentNode);\n break;\n }\n } else if (this._loadedRootNodeCount < this.rootNodeCount && !this._rootItemsLoading) {\n this.requestData();\n break;\n }\n } else if (this.needsFurtherData(data)) {\n this.requestData(data);\n break;\n }\n }\n }\n } else {\n this._firstVisibleIndex = 0;\n this._lastVisibleIndex = 0;\n this._firstRenderedIndex = 0;\n this._lastRenderedIndex = 0;\n }\n }\n\n private needsFurtherData(node: Node): boolean {\n return (\n node.expanded &&\n node.childCount > node.nodes.length &&\n this.nodeIndex(node.id) + node.nodes.length < this._lastRenderedIndex\n );\n }\n\n private nodeIndex(id: string): number {\n return this._flattenedNodes.findIndex((flatNode) => flatNode === id);\n }\n\n private normalizeIndex(index: number): number {\n return Math.max(0, Math.min(index, this._allNodeCount - 1));\n }\n\n private get height(): number {\n return this.offsetHeight;\n }\n\n private requestData(node?: Node): void {\n if (!node?.loading) {\n const path = node?.path;\n this.startLoadingIndicator(path);\n this.dispatchEvent(\n new CustomEvent<IDataRequest>(\"data-request\", {\n detail: { path },\n }),\n );\n }\n }\n\n private onScroll = (): void => {\n this._lastKnownScrollTop = this.scrollTop;\n const delta = this._lastRenderedScrollTop - this._lastKnownScrollTop;\n if (Math.abs(delta) >= NODE_HEIGHT) {\n this._lastRenderedScrollTop = this._lastKnownScrollTop;\n this.requestUpdate();\n }\n };\n\n private handleNodeExpansion = (event: CustomEvent<IExpansion>): void => {\n const { path, expanded } = event.detail;\n this.updateAfterExpansion(path, expanded);\n };\n\n private updateAfterExpansion(path: string[], expanded: boolean): void {\n const node = this._nodeStates.get(JSON.stringify(path));\n if (node) {\n node.expanded = expanded;\n const flattenedNodeIndex = findNodeIndex(this._flattenedNodes, path);\n const focusedNode = this._flattenedNodes[this.focusIndex];\n if (expanded) {\n const numberOfNodesAdded = this.addSubtree(node, flattenedNodeIndex + 1);\n const hasUnloadedChildren = node.childCount > node.nodes.length;\n const hasVisibleUnloadedChildren = flattenedNodeIndex + node.nodes.length < this._lastRenderedIndex;\n if (hasUnloadedChildren && hasVisibleUnloadedChildren) {\n this.requestData(node);\n }\n this._allNodeCount += numberOfNodesAdded;\n } else {\n const numberOfNodesRemoved = this.removeSubtree(flattenedNodeIndex);\n this._allNodeCount -= numberOfNodesRemoved;\n }\n if (focusedNode) {\n const newIndex = this._flattenedNodes.findIndex((flatNode) => flatNode == focusedNode);\n if (newIndex !== this.focusIndex) {\n this._focusIndex = newIndex;\n }\n }\n }\n this.requestUpdate();\n }\n\n private addSubtree(rootNode: Node, firstIndex: number): number {\n const flattenedSubtree = this.getFlattenedSubtree(rootNode.nodes);\n this._flattenedNodes.splice(firstIndex, 0, ...flattenedSubtree);\n return flattenedSubtree.length;\n }\n\n private getFlattenedSubtree(nodes: Node[]): string[] {\n return nodes.reduce<string[]>((ack, curr) => {\n return ack.concat(\n curr && curr.childCount > 0 && curr.expanded\n ? [JSON.stringify(curr.path), ...this.getFlattenedSubtree(curr.nodes)]\n : JSON.stringify(curr.path),\n );\n }, []);\n }\n\n private removeSubtree(rootNodeIndex: number): number {\n const nextNonDescendantIndex = this.getNextNonDescendantIndex(rootNodeIndex);\n let numberOfNodesToRemove = 0;\n if (nextNonDescendantIndex !== -1) {\n numberOfNodesToRemove = nextNonDescendantIndex - rootNodeIndex - 1;\n this._flattenedNodes.splice(rootNodeIndex + 1, numberOfNodesToRemove);\n } else {\n numberOfNodesToRemove = this._flattenedNodes.length - rootNodeIndex - 1;\n this._flattenedNodes.splice(rootNodeIndex + 1);\n }\n return numberOfNodesToRemove;\n }\n\n // Returns the index of the node which is the next node\n // in this._flattenedNodes after the descendants of the given node.\n // This is used for removing the descendans of a node from this._flattenedNodes\n // after collapsing it.\n private getNextNonDescendantIndex(index: number): number {\n const nodePath = this._flattenedNodes[index];\n const node = isFlattenedNode(nodePath) && this._nodeStates.get(nodePath);\n if (node) {\n for (let i = index + 1; i < this._flattenedNodes.length; i++) {\n const flatNodePath = this._flattenedNodes[i];\n const flatNode = isFlattenedNode(flatNodePath) && this._nodeStates.get(flatNodePath);\n if (flatNode && flatNode.path.length <= node.path.length) {\n return i;\n }\n }\n }\n return -1;\n }\n\n private handleKeyDown = (event: KeyboardEvent): void => {\n let shouldPrevent = true;\n switch (event.key) {\n case \"ArrowDown\": {\n this.focusIndex = this.normalizeIndex(this.focusIndex + 1);\n break;\n }\n case \"ArrowUp\": {\n this.focusIndex = this.normalizeIndex(this.focusIndex - 1);\n break;\n }\n case \"ArrowRight\": {\n const focusedNode = this.focusedNode;\n if (focusedNode) {\n if (focusedNode.childCount > 0 && !focusedNode.expanded) {\n const focusedNodeElement = this.querySelector(`[node-id='${focusedNode.id}']`) as TreeNode;\n if (focusedNodeElement) {\n focusedNodeElement.expand();\n }\n } else {\n this.focusIndex = this.normalizeIndex(this.focusIndex + 1);\n }\n }\n break;\n }\n case \"ArrowLeft\": {\n const focusedNode = this.focusedNode;\n if (focusedNode) {\n if (focusedNode.childCount > 0 && focusedNode.expanded) {\n const focusedNodeElement = this.querySelector(`[node-id='${focusedNode.id}']`) as TreeNode;\n if (focusedNodeElement) {\n focusedNodeElement.collapse();\n }\n } else {\n this.focusIndex = this.normalizeIndex(this.focusIndex - 1);\n }\n }\n break;\n }\n case \"Enter\": {\n const focusedNode = this.focusedNode;\n if (focusedNode) {\n this.toggleSelection(focusedNode.path);\n this.updateComplete.then(() => {\n this.dispatchEvent(\n new CustomEvent<ISelection>(\"selection\", {\n detail: {\n path: focusedNode.path,\n checked: focusedNode.selectionState === \"checked\",\n indeterminate: focusedNode.selectionState === \"indeterminate\",\n },\n bubbles: true,\n composed: true,\n }),\n );\n });\n }\n break;\n }\n default: {\n shouldPrevent = false;\n break;\n }\n }\n if (shouldPrevent) {\n event.preventDefault();\n event.stopPropagation();\n }\n };\n\n private handleNodeSelection = (event: CustomEvent<ISelection>): void => {\n if (event.target == this) {\n return;\n }\n this._reusePreviousRenderData = true;\n const { path } = event.detail;\n // focus index should be updated before focusing, otherwise automatic focus index setting may cause unexpected scrolling\n this.focusIndex = findNodeIndex(this._flattenedNodes, path);\n // when the selection is triggered by a click on a checkbox\n // the :active pseudo class is kept on the checkbox\n // even after scrolling and rerendering it with different data\n // to prevent this focusing the tree is needed\n this.focus();\n this.toggleSelection(path);\n this.updateComplete.then(() => {\n // Fixes 262528.\n // The render data may not be up-to-date due to the delta change detection in the scroll handler.\n // If we use another render data directly after the selection, then template fragments can change\n // without noticing the most recent value, causing the nodes to show invalid data on the UI.\n this._reusePreviousRenderData = false;\n });\n };\n\n private get focusedNode(): Node | undefined {\n const flattenedNode = this._flattenedNodes[this.focusIndex];\n return isFlattenedNode(flattenedNode) && this._nodeStates.get(flattenedNode);\n }\n\n private toggleSelection(path: string[]): void {\n const node = this.nodeGetter(path);\n node.toggle();\n this.requestUpdate();\n }\n\n private updateFlattenedNodes(subtree: Node[], parentPath: string[]): void {\n if (parentPath) {\n const parentIndex = findNodeIndex(this._flattenedNodes, parentPath);\n const parentId = this._flattenedNodes[parentIndex];\n if (isFlattenedNode(parentId)) {\n const parentNode = this._nodeStates.get(parentId);\n if (parentNode) {\n const startIndex = parentIndex + parentNode.nodes.length + 1;\n const parentDepth = parentNode.depth;\n const flattenedSubtree = flattenNodes(subtree, Infinity, parentDepth + 1).map(\n this.getFlattenedNodeId,\n );\n if (parentNode.expanded) {\n this._flattenedNodes.splice(startIndex, 0, ...flattenedSubtree);\n }\n parentNode.nodes = [...parentNode.nodes, ...subtree];\n parentNode.loading = false;\n this.updateLastLoadingChild(parentNode.nodes, flattenedSubtree);\n }\n }\n } else {\n const flattenedSubtree = flattenNodes(subtree, Infinity).map(this.getFlattenedNodeId);\n this.updateLastLoadingChild(this._flattenedNodes, flattenedSubtree);\n this._flattenedNodes = [...this._flattenedNodes, ...flattenedSubtree];\n }\n }\n\n private getFlattenedNodeId = (node: Node): string => {\n return JSON.stringify(node.path);\n };\n\n private updateLastLoadingChild(previousNodes: (string | ILoadingNode)[], newNodes: string[]): void {\n const previousLastNodeId = previousNodes[previousNodes.length - 1];\n const previousLastNode = isFlattenedNode(previousLastNodeId) && this._nodeStates.get(previousLastNodeId);\n const newLastNodeId = newNodes[newNodes.length - 1];\n const newLastNode = isFlattenedNode(newLastNodeId) && this._nodeStates.get(newLastNodeId);\n if (previousLastNode) {\n previousLastNode.lastLoadingChild = false;\n }\n if (newLastNode) {\n const parent = newLastNode.parentNode;\n const hasUnloadedSiblings =\n (parent && parent.childCount > parent.nodes.length) ||\n (!parent && this.rootNodeCount > this._loadedRootNodeCount);\n if (hasUnloadedSiblings) {\n newLastNode.lastLoadingChild = true;\n }\n }\n }\n\n private setLastLoadingChildren(nodes: Node[], count: number, loadedCount: number): void {\n if (loadedCount < count) {\n const lastNode = nodes[nodes.length - 1];\n if (lastNode) {\n lastNode.lastLoadingChild = true;\n }\n }\n nodes.forEach((node) => {\n this.setLastLoadingChildren(node.nodes, node.childCount, node.nodes.length);\n });\n }\n\n private startLoadingIndicator(loadingParentPath: string[]): void {\n if (loadingParentPath) {\n const node = this._nodeStates.get(JSON.stringify(loadingParentPath));\n if (node) {\n const flatNodeIndex = findNodeIndex(this._flattenedNodes, loadingParentPath);\n node.loading = true;\n this.addPlaceholders(flatNodeIndex, node);\n }\n } else {\n this._rootItemsLoading = true;\n this._flattenedNodes = [\n ...this._flattenedNodes,\n ...new Array(this.rootNodeCount - this._loadedRootNodeCount).fill({ depth: 0 }),\n ];\n }\n this.updateNodes();\n }\n\n private addPlaceholders(index: number, node: Node): void {\n const firstIndex = index + node.nodes.length + 1;\n const numOfPlaceholders = node.childCount - node.nodes.length;\n this._flattenedNodes.splice(\n firstIndex,\n 0,\n ...new Array(numOfPlaceholders).fill({\n depth: node.depth + 1,\n }),\n );\n }\n\n private stopLoadingIndicator(loadingParentPath?: string[]): void {\n if (loadingParentPath) {\n const node = this._nodeStates.get(JSON.stringify(loadingParentPath));\n if (node) {\n node.loading = false;\n if (node.expanded) {\n const flatNodeIndex = findNodeIndex(this._flattenedNodes, loadingParentPath);\n this.removePlaceHolders(flatNodeIndex, node);\n }\n }\n } else {\n this._rootItemsLoading = false;\n const firstLoaderIndex = this._flattenedNodes.findIndex((node) => !isFlattenedNode(node));\n this._flattenedNodes.splice(firstLoaderIndex);\n }\n }\n\n private removePlaceHolders(index: number, node: Node): void {\n const firstIndex = index + node.nodes.length + 1;\n const numOfPlaceholders = node.childCount - node.nodes.length;\n this._flattenedNodes.splice(firstIndex, numOfPlaceholders);\n }\n\n // this method is used to synchronize this.nodes property\n // to the declaratively created nodes\n private syncState(): void {\n const rootNodes = [...(this.children as HTMLCollectionOf<TreeNode>)];\n const state = rootNodes.map((node) => node.getState());\n this.addNodes(state);\n this.rootNodeCount = state.length;\n this.innerHTML = \"\";\n }\n\n private updateCount(nodes: Node[]): void {\n this._allNodeCount = nodes.length + this.getNodeCount(nodes);\n }\n\n private getNodeCount(nodes: Node[]): number {\n let n = 0;\n nodes.forEach((node) => {\n if (node.expanded) {\n n += node.childCount + this.getNodeCount(node.nodes);\n }\n });\n return n;\n }\n\n private nodeGetter = (path: string[]): Node | null => {\n return path ? this._nodeStates.get(JSON.stringify(path)) : null;\n };\n}\n\nTree.ensureDefined();\n\nexport { Tree };\nexport * from \"./node\";\nexport * from \"./checkbox-node\";\nexport * from \"./radio-button-node\";\nexport * from \"./types\";\nexport * from \"./utils\";\n"],"names":["NODE_MARGIN_LEFT","NODE_HEIGHT","Node","id","text","path","nodes","child","isRadioButtonNode","parent","isCheckboxNode","node","CheckboxNode","checkStatus","some","every","anyIndeterminate","state","ack","curr","RadioButtonNode","sibling","_TreeNode","_a","LitElement","checkbox","radioButton","css","unsafeCSS","style","hasChildren","html","hasChanged","parentPath","children","RadioButton","SDCheckbox","__decorateClass","property","TreeNode","_LoadingIndicator","LoadingIndicator","flattenNodes","arr","d","depth","acc","val","findNodeByPath","currentId","matchingNode","getOffsetForIndexAndAlignment","index","alignment","scrollOffset","itemHeight","height","itemCount","lastItemOffset","maxOffset","minOffset","middleOffset","isNode","findNode","findNodeIndex","isFlattenedNode","_Tree","delta","event","expanded","shouldPrevent","focusedNode","focusedNodeElement","count","oldValue","ind","siblings","parentNode","changedProperties","nodesToRender","render","virtualIndex","top","data","isFocused","isDisabled","flatNode","flattenedNodeIndex","numberOfNodesAdded","hasUnloadedChildren","hasVisibleUnloadedChildren","numberOfNodesRemoved","newIndex","rootNode","firstIndex","flattenedSubtree","rootNodeIndex","nextNonDescendantIndex","numberOfNodesToRemove","nodePath","flatNodePath","flattenedNode","subtree","parentIndex","parentId","startIndex","parentDepth","previousNodes","newNodes","previousLastNodeId","previousLastNode","newLastNodeId","newLastNode","loadedCount","lastNode","loadingParentPath","flatNodeIndex","numOfPlaceholders","firstLoaderIndex","n","Tree"],"mappings":"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"}
|
|
@@ -1,15 +1,20 @@
|
|
|
1
1
|
{
|
|
2
|
-
"@cypress/vite-dev-server@
|
|
2
|
+
"@cypress/vite-dev-server@7.0.0": {
|
|
3
3
|
"licenses": "MIT",
|
|
4
4
|
"repository": "https://github.com/cypress-io/cypress",
|
|
5
5
|
"licenseUrl": "https://github.com/cypress-io/cypress/tree/develop/npm/vite-dev-server#readme"
|
|
6
6
|
},
|
|
7
|
-
"@
|
|
7
|
+
"@eslint/js@9.34.0": {
|
|
8
|
+
"licenses": "MIT",
|
|
9
|
+
"repository": "https://github.com/eslint/eslint",
|
|
10
|
+
"licenseUrl": "https://github.com/eslint/eslint/raw/HEAD/LICENSE"
|
|
11
|
+
},
|
|
12
|
+
"@rollup/plugin-node-resolve@16.0.1": {
|
|
8
13
|
"licenses": "MIT",
|
|
9
14
|
"repository": "https://github.com/rollup/plugins",
|
|
10
15
|
"licenseUrl": "https://github.com/rollup/plugins/raw/HEAD/LICENSE"
|
|
11
16
|
},
|
|
12
|
-
"@types/node@
|
|
17
|
+
"@types/node@24.3.0": {
|
|
13
18
|
"licenses": "MIT",
|
|
14
19
|
"repository": "https://github.com/DefinitelyTyped/DefinitelyTyped",
|
|
15
20
|
"licenseUrl": "https://github.com/DefinitelyTyped/DefinitelyTyped/raw/HEAD/LICENSE"
|
|
@@ -19,47 +24,42 @@
|
|
|
19
24
|
"repository": "https://github.com/DefinitelyTyped/DefinitelyTyped",
|
|
20
25
|
"licenseUrl": "https://github.com/DefinitelyTyped/DefinitelyTyped/raw/HEAD/LICENSE"
|
|
21
26
|
},
|
|
22
|
-
"@typescript-eslint/eslint-plugin@
|
|
27
|
+
"@typescript-eslint/eslint-plugin@8.41.0": {
|
|
23
28
|
"licenses": "MIT",
|
|
24
29
|
"repository": "https://github.com/typescript-eslint/typescript-eslint",
|
|
25
30
|
"licenseUrl": "https://github.com/typescript-eslint/typescript-eslint/raw/HEAD/LICENSE"
|
|
26
31
|
},
|
|
27
|
-
"@typescript-eslint/parser@
|
|
28
|
-
"licenses": "
|
|
32
|
+
"@typescript-eslint/parser@8.41.0": {
|
|
33
|
+
"licenses": "MIT",
|
|
29
34
|
"repository": "https://github.com/typescript-eslint/typescript-eslint",
|
|
30
35
|
"licenseUrl": "https://github.com/typescript-eslint/typescript-eslint/raw/HEAD/LICENSE"
|
|
31
36
|
},
|
|
32
|
-
"@vitest/coverage-v8@
|
|
37
|
+
"@vitest/coverage-v8@3.2.4": {
|
|
33
38
|
"licenses": "MIT",
|
|
34
39
|
"repository": "https://github.com/vitest-dev/vitest",
|
|
35
40
|
"licenseUrl": "https://github.com/vitest-dev/vitest/raw/HEAD/LICENSE"
|
|
36
41
|
},
|
|
37
|
-
"@vitest/ui@
|
|
42
|
+
"@vitest/ui@3.2.4": {
|
|
38
43
|
"licenses": "MIT",
|
|
39
44
|
"repository": "https://github.com/vitest-dev/vitest",
|
|
40
45
|
"licenseUrl": "https://github.com/vitest-dev/vitest/raw/HEAD/LICENSE"
|
|
41
46
|
},
|
|
42
|
-
"axe-core@4.
|
|
47
|
+
"axe-core@4.10.3": {
|
|
43
48
|
"licenses": "MPL-2.0",
|
|
44
49
|
"repository": "https://github.com/dequelabs/axe-core",
|
|
45
50
|
"licenseUrl": "https://github.com/dequelabs/axe-core/raw/HEAD/LICENSE"
|
|
46
51
|
},
|
|
47
|
-
"cypress-axe@1.
|
|
52
|
+
"cypress-axe@1.7.0": {
|
|
48
53
|
"licenses": "MIT",
|
|
49
54
|
"repository": "https://github.com/component-driven/cypress-axe",
|
|
50
55
|
"licenseUrl": "https://github.com/component-driven/cypress-axe/raw/HEAD/License.md"
|
|
51
56
|
},
|
|
52
|
-
"cypress
|
|
53
|
-
"licenses": "MIT",
|
|
54
|
-
"repository": "https://github.com/dmtrKovalenko/cypress-real-events",
|
|
55
|
-
"licenseUrl": "https://github.com/dmtrKovalenko/cypress-real-events"
|
|
56
|
-
},
|
|
57
|
-
"cypress@13.6.2": {
|
|
57
|
+
"cypress@15.0.0": {
|
|
58
58
|
"licenses": "MIT",
|
|
59
59
|
"repository": "https://github.com/cypress-io/cypress",
|
|
60
60
|
"licenseUrl": "https://cypress.io"
|
|
61
61
|
},
|
|
62
|
-
"esbuild@0.
|
|
62
|
+
"esbuild@0.25.9": {
|
|
63
63
|
"licenses": "MIT",
|
|
64
64
|
"repository": "https://github.com/evanw/esbuild",
|
|
65
65
|
"licenseUrl": "https://github.com/evanw/esbuild/raw/HEAD/LICENSE.md"
|
|
@@ -69,57 +69,57 @@
|
|
|
69
69
|
"repository": "https://github.com/google/eslint-config-google",
|
|
70
70
|
"licenseUrl": "https://github.com/google/eslint-config-google/raw/HEAD/LICENSE"
|
|
71
71
|
},
|
|
72
|
-
"eslint-config-prettier@
|
|
72
|
+
"eslint-config-prettier@10.1.8": {
|
|
73
73
|
"licenses": "MIT",
|
|
74
74
|
"repository": "https://github.com/prettier/eslint-config-prettier",
|
|
75
75
|
"licenseUrl": "https://github.com/prettier/eslint-config-prettier/raw/HEAD/LICENSE"
|
|
76
76
|
},
|
|
77
|
-
"eslint@
|
|
77
|
+
"eslint@9.34.0": {
|
|
78
78
|
"licenses": "MIT",
|
|
79
79
|
"repository": "https://github.com/eslint/eslint",
|
|
80
80
|
"licenseUrl": "https://github.com/eslint/eslint/raw/HEAD/LICENSE"
|
|
81
81
|
},
|
|
82
|
-
"github-markdown-css@5.
|
|
82
|
+
"github-markdown-css@5.8.1": {
|
|
83
83
|
"licenses": "MIT",
|
|
84
84
|
"repository": "https://github.com/sindresorhus/github-markdown-css",
|
|
85
85
|
"licenseUrl": "https://github.com/sindresorhus/github-markdown-css/raw/HEAD/license"
|
|
86
86
|
},
|
|
87
|
-
"highlight.js@11.
|
|
87
|
+
"highlight.js@11.11.1": {
|
|
88
88
|
"licenses": "BSD-3-Clause",
|
|
89
89
|
"repository": "https://github.com/highlightjs/highlight.js",
|
|
90
90
|
"licenseUrl": "https://github.com/highlightjs/highlight.js/raw/HEAD/LICENSE"
|
|
91
91
|
},
|
|
92
|
-
"junit-report-builder@
|
|
92
|
+
"junit-report-builder@5.1.1": {
|
|
93
93
|
"licenses": "MIT",
|
|
94
94
|
"repository": "https://github.com/davidparsson/junit-report-builder",
|
|
95
95
|
"licenseUrl": "https://github.com/davidparsson/junit-report-builder/raw/HEAD/LICENSE"
|
|
96
96
|
},
|
|
97
|
-
"lint-staged@
|
|
97
|
+
"lint-staged@16.1.5": {
|
|
98
98
|
"licenses": "MIT",
|
|
99
|
-
"repository": "https://github.com/
|
|
100
|
-
"licenseUrl": "https://github.com/
|
|
99
|
+
"repository": "https://github.com/lint-staged/lint-staged",
|
|
100
|
+
"licenseUrl": "https://github.com/lint-staged/lint-staged/raw/HEAD/LICENSE"
|
|
101
101
|
},
|
|
102
|
-
"lit@
|
|
102
|
+
"lit@3.3.1": {
|
|
103
103
|
"licenses": "BSD-3-Clause",
|
|
104
104
|
"repository": "https://github.com/lit/lit",
|
|
105
105
|
"licenseUrl": "https://github.com/lit/lit/raw/HEAD/LICENSE"
|
|
106
106
|
},
|
|
107
|
-
"marked@
|
|
107
|
+
"marked@16.2.1": {
|
|
108
108
|
"licenses": "MIT",
|
|
109
109
|
"repository": "https://github.com/markedjs/marked",
|
|
110
110
|
"licenseUrl": "https://github.com/markedjs/marked/raw/HEAD/LICENSE.md"
|
|
111
111
|
},
|
|
112
|
-
"postcss-prefix-selector@1.
|
|
112
|
+
"postcss-prefix-selector@2.1.1": {
|
|
113
113
|
"licenses": "MIT",
|
|
114
114
|
"repository": "https://github.com/RadValentin/postcss-prefix-selector",
|
|
115
115
|
"licenseUrl": "https://github.com/RadValentin/postcss-prefix-selector/raw/HEAD/LICENSE"
|
|
116
116
|
},
|
|
117
|
-
"postcss@8.
|
|
117
|
+
"postcss@8.5.6": {
|
|
118
118
|
"licenses": "MIT",
|
|
119
119
|
"repository": "https://github.com/postcss/postcss",
|
|
120
120
|
"licenseUrl": "https://github.com/postcss/postcss/raw/HEAD/LICENSE"
|
|
121
121
|
},
|
|
122
|
-
"prettier@3.
|
|
122
|
+
"prettier@3.6.2": {
|
|
123
123
|
"licenses": "MIT",
|
|
124
124
|
"repository": "https://github.com/prettier/prettier",
|
|
125
125
|
"licenseUrl": "https://github.com/prettier/prettier/raw/HEAD/LICENSE"
|
|
@@ -129,62 +129,67 @@
|
|
|
129
129
|
"repository": "https://github.com/sindresorhus/resolve-pkg",
|
|
130
130
|
"licenseUrl": "https://github.com/sindresorhus/resolve-pkg/raw/HEAD/license"
|
|
131
131
|
},
|
|
132
|
-
"sass@1.
|
|
132
|
+
"sass@1.91.0": {
|
|
133
133
|
"licenses": "MIT",
|
|
134
134
|
"repository": "https://github.com/sass/dart-sass",
|
|
135
135
|
"licenseUrl": "https://github.com/sass/dart-sass/raw/HEAD/LICENSE"
|
|
136
136
|
},
|
|
137
|
-
"stylelint-config-recommended-scss@
|
|
137
|
+
"stylelint-config-recommended-scss@16.0.0": {
|
|
138
138
|
"licenses": "MIT",
|
|
139
139
|
"repository": "https://github.com/stylelint-scss/stylelint-config-recommended-scss",
|
|
140
140
|
"licenseUrl": "https://github.com/stylelint-scss/stylelint-config-recommended-scss/raw/HEAD/LICENSE"
|
|
141
141
|
},
|
|
142
|
-
"stylelint-config-standard@
|
|
142
|
+
"stylelint-config-standard@39.0.0": {
|
|
143
143
|
"licenses": "MIT",
|
|
144
144
|
"repository": "https://github.com/stylelint/stylelint-config-standard",
|
|
145
145
|
"licenseUrl": "https://github.com/stylelint/stylelint-config-standard/raw/HEAD/LICENSE"
|
|
146
146
|
},
|
|
147
|
-
"stylelint-scss@6.
|
|
147
|
+
"stylelint-scss@6.12.1": {
|
|
148
148
|
"licenses": "MIT",
|
|
149
149
|
"repository": "https://github.com/stylelint-scss/stylelint-scss",
|
|
150
150
|
"licenseUrl": "https://github.com/stylelint-scss/stylelint-scss/raw/HEAD/LICENSE"
|
|
151
151
|
},
|
|
152
|
-
"stylelint@16.1
|
|
152
|
+
"stylelint@16.23.1": {
|
|
153
153
|
"licenses": "MIT",
|
|
154
154
|
"repository": "https://github.com/stylelint/stylelint",
|
|
155
155
|
"licenseUrl": "https://github.com/stylelint/stylelint/raw/HEAD/LICENSE"
|
|
156
156
|
},
|
|
157
|
-
"tsup@8.0
|
|
157
|
+
"tsup@8.5.0": {
|
|
158
158
|
"licenses": "MIT",
|
|
159
159
|
"repository": "https://github.com/egoist/tsup",
|
|
160
160
|
"licenseUrl": "https://github.com/egoist/tsup/raw/HEAD/LICENSE"
|
|
161
161
|
},
|
|
162
|
-
"turbo@
|
|
163
|
-
"licenses": "
|
|
164
|
-
"repository": "https://github.com/vercel/
|
|
165
|
-
"licenseUrl": "https://github.com/vercel/
|
|
162
|
+
"turbo@2.5.6": {
|
|
163
|
+
"licenses": "MIT",
|
|
164
|
+
"repository": "https://github.com/vercel/turborepo",
|
|
165
|
+
"licenseUrl": "https://github.com/vercel/turborepo/raw/HEAD/LICENSE"
|
|
166
|
+
},
|
|
167
|
+
"typescript-eslint@8.41.0": {
|
|
168
|
+
"licenses": "MIT",
|
|
169
|
+
"repository": "https://github.com/typescript-eslint/typescript-eslint",
|
|
170
|
+
"licenseUrl": "https://github.com/typescript-eslint/typescript-eslint/raw/HEAD/LICENSE"
|
|
166
171
|
},
|
|
167
|
-
"typescript@5.
|
|
172
|
+
"typescript@5.9.2": {
|
|
168
173
|
"licenses": "Apache-2.0",
|
|
169
|
-
"repository": "https://github.com/
|
|
170
|
-
"licenseUrl": "https://github.com/
|
|
174
|
+
"repository": "https://github.com/microsoft/TypeScript",
|
|
175
|
+
"licenseUrl": "https://github.com/microsoft/TypeScript/raw/HEAD/LICENSE.txt"
|
|
171
176
|
},
|
|
172
|
-
"vite-tsconfig-paths@
|
|
177
|
+
"vite-tsconfig-paths@5.1.4": {
|
|
173
178
|
"licenses": "MIT",
|
|
174
179
|
"repository": "https://github.com/aleclarson/vite-tsconfig-paths",
|
|
175
180
|
"licenseUrl": "https://github.com/aleclarson/vite-tsconfig-paths/raw/HEAD/LICENSE"
|
|
176
181
|
},
|
|
177
|
-
"vite@
|
|
182
|
+
"vite@7.1.3": {
|
|
178
183
|
"licenses": "MIT",
|
|
179
184
|
"repository": "https://github.com/vitejs/vite",
|
|
180
185
|
"licenseUrl": "https://github.com/vitejs/vite/raw/HEAD/LICENSE.md"
|
|
181
186
|
},
|
|
182
|
-
"vitest@
|
|
187
|
+
"vitest@3.2.4": {
|
|
183
188
|
"licenses": "MIT",
|
|
184
189
|
"repository": "https://github.com/vitest-dev/vitest",
|
|
185
190
|
"licenseUrl": "https://github.com/vitest-dev/vitest/raw/HEAD/LICENSE.md"
|
|
186
191
|
},
|
|
187
|
-
"yargs@
|
|
192
|
+
"yargs@18.0.0": {
|
|
188
193
|
"licenses": "MIT",
|
|
189
194
|
"repository": "https://github.com/yargs/yargs",
|
|
190
195
|
"licenseUrl": "https://github.com/yargs/yargs/raw/HEAD/LICENSE"
|