From 87b8e5e0107980a0a89c13bb2fb4d9daa5eb2f27 Mon Sep 17 00:00:00 2001 From: ChuChencheng Date: Tue, 11 Jun 2024 03:22:42 +0800 Subject: [PATCH 01/13] refactor: vue3 --- README.md | 8 + examples/App.vue | 2 +- examples/Drag.vue | 2 +- examples/Drop.vue | 16 +- examples/DropDataChange.vue | 2 +- examples/Feature.vue | 2 +- examples/InsertRenderTree.vue | 2 +- examples/Loading.vue | 2 +- examples/Mobile.vue | 2 +- examples/Performance.vue | 2 +- examples/Search.vue | 6 +- examples/vite.config.ts | 9 - jest.config.js | 13 +- package.json | 60 +- pnpm-lock.yaml | 12025 ++++++++++-------------- scripts/postinstall.cjs | 35 - src/components/LoadingIcon.vue | 2 +- src/components/Tree.vue | 1594 +--- src/components/TreeDrop.vue | 728 +- src/components/TreeNode.vue | 486 +- src/components/TreeSearch.vue | 593 +- src/const.ts | 65 +- src/hooks/useIframeResize.ts | 19 + src/hooks/usePublicTreeAPI.ts | 273 + src/hooks/useTreeCls.ts | 47 + src/hooks/useTreeDropCls.ts | 81 + src/hooks/useTreeNodeCls.ts | 114 + src/hooks/useTreeSearchCls.ts | 82 + src/hooks/useVirtualList.ts | 171 + src/index.ts | 6 - src/{types.ts => types/index.ts} | 14 +- src/utils.ts | 42 +- tsconfig.json | 7 +- tsconfig.tsbuildinfo | 2 +- types/components/LoadingIcon.vue.d.ts | 2 +- types/components/Tree.vue.d.ts | 635 +- types/components/TreeDrop.vue.d.ts | 425 +- types/components/TreeNode.vue.d.ts | 124 +- types/components/TreeSearch.vue.d.ts | 357 +- types/const.d.ts | 47 +- types/hooks/useIframeResize.d.ts | 1 + types/hooks/usePublicTreeAPI.d.ts | 64 + types/hooks/useTreeCls.d.ts | 13 + types/hooks/useTreeDropCls.d.ts | 24 + types/hooks/useTreeNodeCls.d.ts | 52 + types/hooks/useTreeSearchCls.d.ts | 31 + types/hooks/useVirtualList.d.ts | 43 + types/store/tree-store.d.ts | 4 +- types/types/index.d.ts | 24 + types/utils.d.ts | 9 +- 50 files changed, 8329 insertions(+), 10040 deletions(-) delete mode 100644 scripts/postinstall.cjs create mode 100644 src/hooks/useIframeResize.ts create mode 100644 src/hooks/usePublicTreeAPI.ts create mode 100644 src/hooks/useTreeCls.ts create mode 100644 src/hooks/useTreeDropCls.ts create mode 100644 src/hooks/useTreeNodeCls.ts create mode 100644 src/hooks/useTreeSearchCls.ts create mode 100644 src/hooks/useVirtualList.ts rename src/{types.ts => types/index.ts} (60%) create mode 100644 types/hooks/useIframeResize.d.ts create mode 100644 types/hooks/usePublicTreeAPI.d.ts create mode 100644 types/hooks/useTreeCls.d.ts create mode 100644 types/hooks/useTreeDropCls.d.ts create mode 100644 types/hooks/useTreeNodeCls.d.ts create mode 100644 types/hooks/useTreeSearchCls.d.ts create mode 100644 types/hooks/useVirtualList.d.ts create mode 100644 types/types/index.d.ts diff --git a/README.md b/README.md index 7c7dcc7..25632f2 100644 --- a/README.md +++ b/README.md @@ -5,6 +5,14 @@ > 这是原先[ctree](https://github.com/wsfe/vue-tree/tree/2.x)的升级版本,同时支持 vue2 和 vue3。 > 新版改变了包的名称和部分 export 模块名称。 +## **注意** + +`@wsfe/vue-tree` 使用了 `vue-demi` 包尝试使组件在 vue 2/3 都通用。但遗憾的是 `vue-demi` 并不能完美使 vue3 组件兼容 vue2 。 + +`@wsfe/vue-tree` 将使用最新版 vue(3.x) 开发 + +因此,建议 vue2 用户使用 2.x 使用 `@wsfe/ctree` 包。 + ## 案例 [在线 demo](https://wsfe.github.io/vue-tree/) diff --git a/examples/App.vue b/examples/App.vue index 7af85f9..cc45a98 100644 --- a/examples/App.vue +++ b/examples/App.vue @@ -17,7 +17,7 @@ + + diff --git a/src/components/TreeDrop.vue b/src/components/TreeDrop.vue index bf6d34f..1d722eb 100644 --- a/src/components/TreeDrop.vue +++ b/src/components/TreeDrop.vue @@ -31,8 +31,9 @@ > + + diff --git a/src/components/TreeNode.vue b/src/components/TreeNode.vue index 801965d..71eded4 100644 --- a/src/components/TreeNode.vue +++ b/src/components/TreeNode.vue @@ -35,323 +35,205 @@ + + diff --git a/src/components/TreeSearch.vue b/src/components/TreeSearch.vue index 65608f0..47cde24 100644 --- a/src/components/TreeSearch.vue +++ b/src/components/TreeSearch.vue @@ -33,8 +33,9 @@
@@ -54,375 +55,285 @@ + + diff --git a/src/const.ts b/src/const.ts index 16dd03c..44b5a0a 100644 --- a/src/const.ts +++ b/src/const.ts @@ -1,3 +1,5 @@ +import { IEventNames } from "./store/tree-store" + //#region ignoreMode export enum ignoreEnum { none = 'none', @@ -8,42 +10,7 @@ export enum ignoreEnum { //#region API // Tree API -// 方便获取 TypeScript 类型,写成枚举,但是为了打包体积减小,定义为 const ,并重新声明一个 JavaScript 数组 -const enum apiEnum { - 'setData', - 'setChecked', - 'setCheckedKeys', - 'checkAll', - 'clearChecked', - 'setSelected', - 'clearSelected', - 'setExpand', - 'setExpandKeys', - 'setExpandAll', - 'getCheckedNodes', - 'getCheckedKeys', - 'getIndeterminateNodes', - 'getSelectedNode', - 'getSelectedKey', - 'getExpandNodes', - 'getExpandKeys', - 'getCurrentVisibleNodes', - 'getNode', - 'getTreeData', - 'getFlatData', - 'getNodesCount', - 'insertBefore', - 'insertAfter', - 'append', - 'prepend', - 'remove', - 'filter', - 'showCheckedNodes', - 'loadRootNodes', - 'scrollTo' -} - -export const API_METHODS = [ +export const TREE_API_METHODS = [ 'setData', 'setChecked', 'setCheckedKeys', @@ -75,20 +42,9 @@ export const API_METHODS = [ 'showCheckedNodes', 'loadRootNodes', 'scrollTo' -] - -export type ApiType = keyof typeof apiEnum - -// TreeSearch API -const enum treeSearchApiEnum { - 'clearKeyword', - 'getKeyword', - 'search' -} - -export const TREE_SEARCH_API_METHODS = ['clearKeyword', 'getKeyword', 'search'] +] as const -export type TreeSearchApiType = keyof typeof treeSearchApiEnum +export const TREE_SEARCH_API_METHODS = [...TREE_API_METHODS, 'clearKeyword', 'getKeyword', 'search'] as const export enum placementEnum { 'bottom-start' = 'bottom-start', @@ -130,3 +86,14 @@ export const TREE_NODE_EVENTS = [ 'node-dragleave', 'node-drop' ] + +export const storeEvents: Array = [ + 'expand', + 'select', + 'unselect', + 'selected-change', + 'check', + 'uncheck', + 'checked-change', + 'set-data' +] diff --git a/src/hooks/useIframeResize.ts b/src/hooks/useIframeResize.ts new file mode 100644 index 0000000..a81ae09 --- /dev/null +++ b/src/hooks/useIframeResize.ts @@ -0,0 +1,19 @@ +import { onBeforeUnmount, onMounted, ref } from "vue" + +export const useIframeResize = (resizeCallback: () => void) => { + const iframe = ref() + + onMounted(() => { + const $iframe = iframe.value + if ($iframe?.contentWindow) { + $iframe.contentWindow.addEventListener('resize', resizeCallback) + } + }) + + onBeforeUnmount(() => { + const $iframe = iframe.value + if ($iframe?.contentWindow) { + $iframe.contentWindow.removeEventListener('resize', resizeCallback) + } + }) +} diff --git a/src/hooks/usePublicTreeAPI.ts b/src/hooks/usePublicTreeAPI.ts new file mode 100644 index 0000000..6672f5d --- /dev/null +++ b/src/hooks/usePublicTreeAPI.ts @@ -0,0 +1,273 @@ +import { ref } from "vue" +import { AnyPropsArrayType, INonReactiveData, IgnoreType, TreeNodeKeyType } from "../types" +import { TreeNode } from ".." +import { ITreeNodeOptions } from "../store/tree-node" +import { FilterFunctionType } from "../store/tree-store" +import { TreeProps } from "../components/Tree.vue" + +type IUsePublicTreeAPIProps = Required> & Pick + +export const usePublicTreeAPI = ( + nonReactive: INonReactiveData, + props: IUsePublicTreeAPIProps, + options: { + resetSpaceHeights: () => void, + updateExpandedKeys: () => void, + updateBlockData: () => void, + updateRender: () => void, + }, +) => { + const { + resetSpaceHeights, + updateExpandedKeys, + updateBlockData, + updateRender, + } = options + + const unloadCheckedNodes = ref([]) + const isRootLoading = ref(false) + + /** 使用此方法重置树数据,可避免大量数据被 vue 监听 */ + function setData(data: AnyPropsArrayType): void { + resetSpaceHeights() + let checkableUnloadKeys: TreeNodeKeyType | TreeNodeKeyType[] | null = null + let selectableUnloadKey: TreeNodeKeyType | null = null + if (props.checkable) { + if (Array.isArray(props.modelValue)) { + checkableUnloadKeys = props.modelValue.concat() + } else if (typeof props.modelValue === 'string') { + checkableUnloadKeys = + props.modelValue === '' + ? [] + : props.modelValue.split(props.separator) + } + } else if (props.selectable && !Array.isArray(props.modelValue)) { + selectableUnloadKey = props.modelValue as TreeNodeKeyType | null + } + nonReactive.store.setData( + data, + selectableUnloadKey, + checkableUnloadKeys as TreeNodeKeyType[] + ) + updateExpandedKeys() + } + function setChecked(key: TreeNodeKeyType, value: boolean): void { + nonReactive.store.setChecked(key, value) + } + function setCheckedKeys(keys: TreeNodeKeyType[], value: boolean): void { + nonReactive.store.setCheckedKeys(keys, value) + } + function checkAll(): void { + nonReactive.store.checkAll() + } + function clearChecked(): void { + nonReactive.store.clearChecked() + } + function setSelected(key: TreeNodeKeyType, value: boolean): void { + nonReactive.store.setSelected(key, value) + } + function clearSelected(): void { + nonReactive.store.clearSelected() + } + function setExpand( + key: TreeNodeKeyType, + value: boolean, + expandParent: boolean = true + ): void { + nonReactive.store.setExpand(key, value, expandParent) + } + function setExpandKeys(keys: TreeNodeKeyType[], value: boolean): void { + nonReactive.store.setExpandKeys(keys, value) + } + function setExpandAll(value: boolean): void { + nonReactive.store.setExpandAll(value) + } + function getCheckedNodes(ignoreMode?: IgnoreType): TreeNode[] { + ignoreMode = ignoreMode || props.ignoreMode + return nonReactive.store.getCheckedNodes(ignoreMode) + } + function getCheckedKeys(ignoreMode?: IgnoreType): TreeNodeKeyType[] { + ignoreMode = ignoreMode || props.ignoreMode + return nonReactive.store.getCheckedKeys(ignoreMode) + } + function getIndeterminateNodes(): TreeNode[] { + return nonReactive.store.getIndeterminateNodes() + } + function getSelectedNode(): TreeNode | null { + return nonReactive.store.getSelectedNode() + } + function getSelectedKey(): TreeNodeKeyType | null { + return nonReactive.store.getSelectedKey() + } + function getExpandNodes(): TreeNode[] { + return nonReactive.store.getExpandNodes() + } + function getExpandKeys(): TreeNodeKeyType[] { + return nonReactive.store.getExpandKeys() + } + function getCurrentVisibleNodes(): TreeNode[] { + return nonReactive.store.flatData.filter(node => node._filterVisible) + } + function getNode(key: TreeNodeKeyType): TreeNode | null { + return nonReactive.store.getNode(key) + } + /** 返回树形结构的节点数据 */ + function getTreeData(): TreeNode[] { + return nonReactive.store.data + } + /** 返回扁平化后的节点数据 */ + function getFlatData(): TreeNode[] { + return nonReactive.store.flatData + } + function getNodesCount(): number { + return nonReactive.store.flatData.length + } + function insertBefore( + insertedNode: TreeNodeKeyType | ITreeNodeOptions, + referenceKey: TreeNodeKeyType + ): TreeNode | null { + return nonReactive.store.insertBefore(insertedNode, referenceKey) + } + function insertAfter( + insertedNode: TreeNodeKeyType | ITreeNodeOptions, + referenceKey: TreeNodeKeyType + ): TreeNode | null { + return nonReactive.store.insertAfter(insertedNode, referenceKey) + } + function append( + insertedNode: TreeNodeKeyType | ITreeNodeOptions, + parentKey: TreeNodeKeyType + ): TreeNode | null { + return nonReactive.store.append(insertedNode, parentKey) + } + function prepend( + insertedNode: TreeNodeKeyType | ITreeNodeOptions, + parentKey: TreeNodeKeyType + ): TreeNode | null { + return nonReactive.store.prepend(insertedNode, parentKey) + } + function remove(removedKey: TreeNodeKeyType): TreeNode | null { + return nonReactive.store.remove(removedKey) + } + function filter(keyword: string, filterMethod?: FilterFunctionType): void { + const defaultFilterMethod = (keyword: string, node: TreeNode) => { + const title = node[props.titleField] + if (title == null || !title.toString) return false + return ( + (title.toString() as string) + .toLowerCase() + .indexOf(keyword.toLowerCase()) > -1 + ) + } + filterMethod = filterMethod || props.filterMethod || defaultFilterMethod + nonReactive.store.filter(keyword, filterMethod) + } + /** + * 展示已选节点 + */ + function showCheckedNodes(showUnloadCheckedNodes?: boolean): void { + if (!props.checkable) return + showUnloadCheckedNodes = + showUnloadCheckedNodes == null + ? props.showUnloadCheckedNodes + : showUnloadCheckedNodes + const checkedNodesCache = nonReactive.store.getCheckedNodes() + nonReactive.store.filter('', (keyword, node) => node.checked) + if (!showUnloadCheckedNodes) return + const unloadKeys = nonReactive.store.getUnloadCheckedKeys() + if (unloadKeys.length) { + const unloadNodes: TreeNode[] = unloadKeys.map(key => { + const queryList = props.unloadDataList.concat(checkedNodesCache) + let title = key + queryList.some(query => { + if ( + query[props.keyField] === key && + query[props.titleField] != null + ) { + title = query[props.titleField] + return true + } + return false + }) + + return new TreeNode( + { + [props.keyField]: key, + [props.titleField]: title, + checked: true, + isLeaf: true + }, + null, + props.keyField, + !!props.load + ) + }) + unloadCheckedNodes.value = unloadNodes as TreeNode[] + nonReactive.blockNodes.push(...unloadNodes) + updateBlockData() + updateRender() + } + } + /** + * 从远程加载根节点 + */ + function loadRootNodes(): Promise { + isRootLoading.value = true + return new Promise((resolve, reject) => { + if (props.load) props.load(null, resolve, reject) + }) + .then(root => { + if (Array.isArray(root)) { + setData(root as AnyPropsArrayType) + } + }) + .catch(() => {}) + .then(() => { + isRootLoading.value = false + }) + } + + return { + unloadCheckedNodes, + isRootLoading, + setData, + setChecked, + setCheckedKeys, + checkAll, + clearChecked, + setSelected, + clearSelected, + setExpand, + setExpandKeys, + setExpandAll, + getCheckedNodes, + getCheckedKeys, + getIndeterminateNodes, + getSelectedNode, + getSelectedKey, + getExpandNodes, + getExpandKeys, + getCurrentVisibleNodes, + getNode, + getTreeData, + getFlatData, + getNodesCount, + insertBefore, + insertAfter, + append, + prepend, + remove, + filter, + showCheckedNodes, + loadRootNodes, + } +} diff --git a/src/hooks/useTreeCls.ts b/src/hooks/useTreeCls.ts new file mode 100644 index 0000000..f2a8802 --- /dev/null +++ b/src/hooks/useTreeCls.ts @@ -0,0 +1,47 @@ +import { computed } from "vue" + +const prefixCls = 'ctree-tree' + +export { prefixCls as TREE_PREFIX_CLS } + +export const useTreeCls = () => { + const wrapperCls = computed(() => { + return [`${prefixCls}__wrapper`] + }) + const scrollAreaCls = computed(() => { + return [`${prefixCls}__scroll-area`] + }) + const blockAreaCls = computed(() => { + return [`${prefixCls}__block-area`] + }) + const emptyCls = computed(() => { + return [`${prefixCls}__empty`] + }) + const emptyTextDefaultCls = computed(() => { + return [`${prefixCls}__empty-text_default`] + }) + const loadingCls = computed(() => { + return [`${prefixCls}__loading`] + }) + const loadingWrapperCls = computed(() => { + return [`${prefixCls}__loading-wrapper`] + }) + const loadingIconCls = computed(() => { + return [`${prefixCls}__loading-icon`] + }) + const iframeCls = computed(() => { + return [`${prefixCls}__iframe`] + }) + + return { + wrapperCls, + scrollAreaCls, + blockAreaCls, + emptyCls, + emptyTextDefaultCls, + loadingCls, + loadingWrapperCls, + loadingIconCls, + iframeCls, + } +} diff --git a/src/hooks/useTreeDropCls.ts b/src/hooks/useTreeDropCls.ts new file mode 100644 index 0000000..f322200 --- /dev/null +++ b/src/hooks/useTreeDropCls.ts @@ -0,0 +1,81 @@ +import { Ref, computed } from 'vue' +import { TREE_SEARCH_PREFIX_CLS as treeSearchPrefixCls } from './useTreeSearchCls' +import { TreeDropProps } from '../components/TreeDrop.vue' + +const prefixCls = 'ctree-tree-drop' + +export { prefixCls as TREE_DROP_PREFIX_CLS } + +export const useTreeDropCls = (props: TreeDropProps, options: { + dropdownVisible: Ref + checkedCount: Ref + selectedTitle: Ref +}) => { + const { + dropdownVisible, + checkedCount, + selectedTitle, + } = options + + const wrapperCls = computed(() => { + return [`${prefixCls}__wrapper`] + }) + const referenceCls = computed(() => { + return [`${prefixCls}__reference`] + }) + + const displayInputCls = computed(() => { + return [ + `${treeSearchPrefixCls}__input`, + `${prefixCls}__display-input`, + { + [`${prefixCls}__display-input_focus`]: dropdownVisible.value, + [`${treeSearchPrefixCls}__input_disabled`]: props.dropDisabled + } + ] + }) + + const displayInputTextCls = computed(() => { + let showPlaceholder: boolean = false + if (typeof props.dropPlaceholder === 'string') { + if (props.checkable) showPlaceholder = checkedCount.value === 0 + else if (props.selectable) showPlaceholder = selectedTitle.value === '' + } + return [ + `${prefixCls}__display-input-text`, + { + [`${prefixCls}__display-input-placeholder`]: showPlaceholder + } + ] + }) + + const dropIconCls = computed(() => { + return [ + `${prefixCls}__display-icon-drop`, + { + [`${prefixCls}__display-icon-drop_active`]: dropdownVisible.value + } + ] + }) + + const clearIconCls = computed(() => { + return [`${prefixCls}__display-icon-clear`] + }) + + const dropdownCls = computed(() => { + const extraClassName = Array.isArray(props.dropdownClassName) + ? props.dropdownClassName + : [props.dropdownClassName] + return [`${prefixCls}__dropdown`, ...extraClassName] + }) + + return { + wrapperCls, + referenceCls, + displayInputCls, + displayInputTextCls, + dropIconCls, + clearIconCls, + dropdownCls, + } +} diff --git a/src/hooks/useTreeNodeCls.ts b/src/hooks/useTreeNodeCls.ts new file mode 100644 index 0000000..da80b3e --- /dev/null +++ b/src/hooks/useTreeNodeCls.ts @@ -0,0 +1,114 @@ +import { Ref, computed } from "vue" +import { TreeNodeProps } from "../components/TreeNode.vue" + +const prefixCls = 'ctree-tree-node' + +export { prefixCls as TREE_NODE_PREFIX_CLS } + +export const useTreeNodeCls = (props: TreeNodeProps, dragoverRefs: { + dragoverBody: Ref + dragoverBefore: Ref + dragoverAfter: Ref +}) => { + const { + dragoverBody, + dragoverBefore, + dragoverAfter, + } = dragoverRefs + + const wrapperCls = computed(() => { + return [ + `${prefixCls}__wrapper`, + { + [`${prefixCls}__wrapper_is-leaf`]: props.data?.isLeaf, + [`${prefixCls}_disabled`]: + props.disableAll || props.data?.disabled + }, + // 复选 + { + [`${prefixCls}_checked`]: props.checkable && props.data?.checked, + [`${prefixCls}_indeterminate`]: props.checkable && props.data?.indeterminate + }, + // 单选 + { + [`${prefixCls}_selected`]: props.data?.selected, + } + ] + }) + const nodeBodyCls = computed(() => { + return [ + `${prefixCls}__node-body`, + { + [`${prefixCls}__drop_active`]: dragoverBody.value + } + ] + }) + const dropBeforeCls = computed(() => { + return [ + `${prefixCls}__drop`, + { + [`${prefixCls}__drop_active`]: dragoverBefore.value + } + ] + }) + const dropAfterCls = computed(() => { + return [ + `${prefixCls}__drop`, + { + [`${prefixCls}__drop_active`]: dragoverAfter.value + } + ] + }) + // const squareCls = computed(() => { + // return [`${prefixCls}__square`] + // }) + // 复选框图标 + const checkboxWrapperCls = computed(() => { + return [`${prefixCls}__square`, `${prefixCls}__checkbox_wrapper`] + }) + const expandCls = computed(() => { + return [ + `${prefixCls}__square`, + `${prefixCls}__expand`, + { + [`${prefixCls}__expand_active`]: props.data?.expand + } + ] + }) + const loadingIconCls = computed(() => { + return [`${prefixCls}__loading-icon`] + }) + const checkboxCls = computed(() => { + return [ + `${prefixCls}__checkbox`, + { + [`${prefixCls}__checkbox_checked`]: props.data?.checked, + [`${prefixCls}__checkbox_indeterminate`]: props.data?.indeterminate, + [`${prefixCls}__checkbox_disabled`]: + props.disableAll || props.data?.disabled + } + ] + }) + const titleCls = computed(() => { + return [ + `${prefixCls}__title`, + { + [`${prefixCls}__title_selected`]: props.data?.selected, + [`${prefixCls}__title_disabled`]: + props.disableAll || props.data?.disabled + } + ] + }) + + return { + wrapperCls, + nodeBodyCls, + dropBeforeCls, + dropAfterCls, + checkboxWrapperCls, + expandCls, + loadingIconCls, + checkboxCls, + titleCls, + } +} diff --git a/src/hooks/useTreeSearchCls.ts b/src/hooks/useTreeSearchCls.ts new file mode 100644 index 0000000..b38e6c0 --- /dev/null +++ b/src/hooks/useTreeSearchCls.ts @@ -0,0 +1,82 @@ +import { Ref, computed } from 'vue' +import { TREE_NODE_PREFIX_CLS as treeNodePrefixCls } from './useTreeNodeCls' +import { TreeSearchProps } from '../components/TreeSearch.vue' + +const prefixCls = 'ctree-tree-search' + +export { prefixCls as TREE_SEARCH_PREFIX_CLS } + +export const useTreeSearchCls = (props: TreeSearchProps, options: { + checkAllStatus: { + checked: boolean + indeterminate: boolean + disabled: boolean + } + isShowingChecked: Ref +}) => { + const { checkAllStatus, isShowingChecked } = options + + const wrapperCls = computed(() => { + return [`${prefixCls}__wrapper`] + }) + const searchCls = computed(() => { + return [`${prefixCls}__search`] + }) + const checkAllWrapperCls = computed(() => { + return [`${prefixCls}__check-all-wrapper`] + }) + const checkboxCls = computed(() => { + return [ + `${prefixCls}__check-all`, + `${treeNodePrefixCls}__checkbox`, + { + [`${treeNodePrefixCls}__checkbox_checked`]: checkAllStatus.checked, + [`${treeNodePrefixCls}__checkbox_indeterminate`]: + checkAllStatus.indeterminate, + [`${treeNodePrefixCls}__checkbox_disabled`]: + props.searchDisabled || checkAllStatus.disabled + } + ] + }) + const inputWrapperCls = computed(() => { + return [`${prefixCls}__input-wrapper`] + }) + const inputCls = computed(() => { + return [ + `${prefixCls}__input`, + { + [`${prefixCls}__input_disabled`]: props.searchDisabled + } + ] + }) + const actionWrapperCls = computed(() => { + return [`${prefixCls}__action-wrapper`] + }) + const checkedButtonCls = computed(() => { + return [ + `${prefixCls}__checked-button`, + { + [`${prefixCls}__checked-button_active`]: isShowingChecked.value + } + ] + }) + const treeWrapperCls = computed(() => { + return [`${prefixCls}__tree-wrapper`] + }) + const footerCls = computed(() => { + return [`${prefixCls}__footer`] + }) + + return { + wrapperCls, + searchCls, + checkAllWrapperCls, + checkboxCls, + inputWrapperCls, + inputCls, + actionWrapperCls, + checkedButtonCls, + treeWrapperCls, + footerCls, + } +} diff --git a/src/hooks/useVirtualList.ts b/src/hooks/useVirtualList.ts new file mode 100644 index 0000000..12c9d94 --- /dev/null +++ b/src/hooks/useVirtualList.ts @@ -0,0 +1,171 @@ +import { ref } from "vue" +import { TreeNode } from ".." +import { INonReactiveData, TreeNodeKeyType } from "../types" +import { VerticalPositionType, verticalPositionEnum } from "../const" +import { TreeProps } from "../components/Tree.vue" + +type IUseVirtualListProps = Required> + +export const useVirtualList = (nonReactive: INonReactiveData, props: IUseVirtualListProps) => { + const scrollArea = ref() + const renderNodes = ref([]) + const blockLength = ref(0) + const blockAreaHeight = ref(0) + const topSpaceHeight = ref(0) + const bottomSpaceHeight = ref(0) + const renderAmount = ref(0) + const renderAmountCache = ref(0) + const renderStart = ref(0) + const renderStartCache = ref(0) + const debounceTimer = ref(undefined) + + /** + * 重置空白与滚动高度 + */ + const resetSpaceHeights = (): void => { + topSpaceHeight.value = 0 + bottomSpaceHeight.value = 0 + if (scrollArea.value) scrollArea.value.scrollTop = 0 + } + + /** + * 计算需要渲染的节点的数量,只要容器高度(clientHeight)不变,这个数量一般就不会变 + */ + const updateRenderAmount = (): void => { + const clientHeight = scrollArea.value.clientHeight + renderAmount.value = Math.max( + props.renderNodeAmount, + Math.ceil(clientHeight / props.nodeMinHeight) + props.bufferNodeAmount + ) + } + + /** + * 计算渲染的节点,基于 scrollTop 计算当前应该渲染哪些节点 + */ + const updateRenderNodes = (isScroll: boolean = false): void => { + if (blockLength.value > renderAmount.value) { + const scrollTop = scrollArea.value.scrollTop + /** 当前滚动了多少节点 */ + const scrollNodeAmount = Math.floor(scrollTop / props.nodeMinHeight) + renderStart.value = + Math.floor(scrollNodeAmount / props.bufferNodeAmount) * + props.bufferNodeAmount + } else { + renderStart.value = 0 + } + if ( + isScroll && + renderAmountCache.value === renderAmount.value && + renderStartCache.value === renderStart.value + ) + return + renderNodes.value = nonReactive.blockNodes + .slice(renderStart.value, renderStart.value + renderAmount.value) + .map(blockNode => { + return Object.assign({}, blockNode, { + _parent: null, + children: [] + }) + }) as TreeNode[] + topSpaceHeight.value = renderStart.value * props.nodeMinHeight + bottomSpaceHeight.value = + blockAreaHeight.value - + (topSpaceHeight.value + renderNodes.value.length * props.nodeMinHeight) + } + + /** + * 计算渲染节点数量,并计算渲染节点 + */ + const updateRender = (): void => { + updateRenderAmount() + updateRenderNodes() + } + + /** + * 计算可见节点 + */ + const updateBlockNodes = (): void => { + nonReactive.blockNodes = nonReactive.store.flatData.filter( + node => node.visible + ) + updateBlockData() + updateRender() + } + + /** + * 更新 block 数据相关信息 + */ + const updateBlockData = (): void => { + blockLength.value = nonReactive.blockNodes.length + blockAreaHeight.value = props.nodeMinHeight * blockLength.value + } + + const handleTreeScroll = (): void => { + if (debounceTimer.value) { + window.cancelAnimationFrame(debounceTimer.value) + } + renderAmountCache.value = renderAmount.value + renderStartCache.value = renderStart.value + debounceTimer.value = window.requestAnimationFrame( + updateRenderNodes.bind(null, true) + ) + } + + /** + * 滚动到指定节点位置 + * @param key 要滚动的节点 + * @param verticalPosition 滚动的垂直位置,可选为 'top', 'center', 'bottom' 或距离容器可视顶部距离的数字,默认为 'top' + */ + const scrollTo = ( + key: TreeNodeKeyType, + verticalPosition: VerticalPositionType | number = verticalPositionEnum.top + ): void => { + const node = nonReactive.store.mapData[key] + if (!node || !node.visible) return + let index: number = -1 + for (let i = 0; i < blockLength.value; i++) { + if (nonReactive.blockNodes[i][props.keyField] === key) { + index = i + break + } + } + if (index === -1) return + let scrollTop = index * props.nodeMinHeight + if (verticalPosition === verticalPositionEnum.center) { + const clientHeight = scrollArea.value.clientHeight + scrollTop = scrollTop - (clientHeight - props.nodeMinHeight) / 2 + } else if (verticalPosition === verticalPositionEnum.bottom) { + const clientHeight = scrollArea.value.clientHeight + scrollTop = scrollTop - (clientHeight - props.nodeMinHeight) + } else if (typeof verticalPosition === 'number') { + scrollTop = scrollTop - verticalPosition + } + if (scrollArea.value) scrollArea.value.scrollTop = scrollTop + } + + return { + scrollArea, + renderNodes, + blockLength, + blockAreaHeight, + topSpaceHeight, + bottomSpaceHeight, + renderAmount, + renderAmountCache, + renderStart, + renderStartCache, + resetSpaceHeights, + updateRenderAmount, + updateRenderNodes, + updateRender, + updateBlockNodes, + updateBlockData, + handleTreeScroll, + scrollTo, + } +} diff --git a/src/index.ts b/src/index.ts index eea6aa2..89a6e6a 100644 --- a/src/index.ts +++ b/src/index.ts @@ -8,9 +8,3 @@ import './styles/index.less' // export * from './types' export default VTree - -// export { -// CTreeNode, -// CTreeSearch, -// CTreeDrop, -// } diff --git a/src/types.ts b/src/types/index.ts similarity index 60% rename from src/types.ts rename to src/types/index.ts index c29c96e..22e2539 100644 --- a/src/types.ts +++ b/src/types/index.ts @@ -1,9 +1,8 @@ -import { placementEnum, ignoreEnum } from './const' +import { placementEnum, ignoreEnum } from '../const' -import { TreeNode } from './store' +import TreeStore, { TreeNode } from '../store' export type PlacementType = keyof typeof placementEnum -//#endregion Placement export type TreeNodeKeyType = string | number @@ -11,6 +10,8 @@ export type GetNodeFn = (key: TreeNodeKeyType) => TreeNode | null export type IgnoreType = keyof typeof ignoreEnum +export type LoadFn = (node: null | TreeNode, resolve: Function, reject: Function) => any + export interface TreeDropSlotProps { /** 多选选中的节点 */ checkedNodes: TreeNode[] @@ -22,3 +23,10 @@ export interface TreeDropSlotProps { /** 单选选中的节点 key */ selectedKey?: TreeNodeKeyType } + +export type AnyPropsArrayType = Array<{ [key: string]: any }> + +export interface INonReactiveData { + store: TreeStore + blockNodes: TreeNode[] +} \ No newline at end of file diff --git a/src/utils.ts b/src/utils.ts index f0fd4ab..c3b7fd7 100644 --- a/src/utils.ts +++ b/src/utils.ts @@ -1,22 +1,30 @@ -import CTree from './components/Tree.vue' -import type { Ref } from 'vue-demi' -import { API_METHODS } from './const' +import { Ref } from "vue"; -type CTreeInstanceType = InstanceType -type CtreeInstanceKeyType = keyof CTreeInstanceType +export const getCtreeMethods = >(apiMethods: readonly T[], ref: Ref): Pick => { + return apiMethods.reduce((prev, cur) => { + const fn = (...args: any[]) => { + const value = ref.value?.[cur] + if (typeof value !== 'function') return + return value(...args) + } + prev[cur] = fn as K[T] + return prev + }, {} as Pick) +} -// Vue 2.6 内部没改变的话可以这样获取 Vue.extend 中的 methods。Vue 版本有升级的话需要注意这个特性有没有改变 -// 如果是对象的话可以直接 CTree.methods ,并且是安全的。 -// let ctreeMethods: CTreeApiMethodsType = {} as CTreeApiMethodsType +type PickReadonly = { + readonly [P in K]: T[P]; +}; -export function getCtreeMethods(treeRef: Ref) { - return API_METHODS.reduce((prev, cur) => { - prev[cur] = function (...args: any[]) { - return (treeRef.value[cur as keyof T] as Function).apply( - treeRef.value, - args - ) +export const pickReadonly = ( + obj: Readonly, + ...keys: K[] +): PickReadonly => { + const picked: Partial> = {}; + keys.forEach(key => { + if (obj.hasOwnProperty(key)) { + picked[key] = obj[key]; } - return prev - }, {} as Record) + }); + return picked as PickReadonly; } diff --git a/tsconfig.json b/tsconfig.json index 6804b5d..afcd324 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -6,7 +6,9 @@ "module": "ESNext", "moduleResolution": "Node", "strict": true, + "noImplicitAny": true, "jsx": "preserve", + "jsxImportSource": "vue", "resolveJsonModule": true, "isolatedModules": true, "esModuleInterop": true, @@ -14,10 +16,7 @@ "skipLibCheck": true, "declaration": true, "rootDir": "./src", - "declarationDir": "types", - "paths": { - "@/*": ["./src/*"] - } + "declarationDir": "types" }, "include": ["src/**/*.ts", "src/**/*.d.ts", "src/**/*.tsx", "src/**/*.vue"], "references": [{ "path": "./tsconfig.node.json" }] diff --git a/tsconfig.tsbuildinfo b/tsconfig.tsbuildinfo index 56e0964..3429f79 100644 --- a/tsconfig.tsbuildinfo +++ b/tsconfig.tsbuildinfo @@ -1 +1 @@ -{"version":"4.9.5"} \ No newline at end of file +{"program":{"fileNames":["./node_modules/.pnpm/typescript@5.4.5/node_modules/typescript/lib/lib.es5.d.ts","./node_modules/.pnpm/typescript@5.4.5/node_modules/typescript/lib/lib.es2015.d.ts","./node_modules/.pnpm/typescript@5.4.5/node_modules/typescript/lib/lib.es2016.d.ts","./node_modules/.pnpm/typescript@5.4.5/node_modules/typescript/lib/lib.es2017.d.ts","./node_modules/.pnpm/typescript@5.4.5/node_modules/typescript/lib/lib.es2018.d.ts","./node_modules/.pnpm/typescript@5.4.5/node_modules/typescript/lib/lib.es2019.d.ts","./node_modules/.pnpm/typescript@5.4.5/node_modules/typescript/lib/lib.es2020.d.ts","./node_modules/.pnpm/typescript@5.4.5/node_modules/typescript/lib/lib.es2021.d.ts","./node_modules/.pnpm/typescript@5.4.5/node_modules/typescript/lib/lib.es2022.d.ts","./node_modules/.pnpm/typescript@5.4.5/node_modules/typescript/lib/lib.es2023.d.ts","./node_modules/.pnpm/typescript@5.4.5/node_modules/typescript/lib/lib.esnext.d.ts","./node_modules/.pnpm/typescript@5.4.5/node_modules/typescript/lib/lib.dom.d.ts","./node_modules/.pnpm/typescript@5.4.5/node_modules/typescript/lib/lib.es2015.core.d.ts","./node_modules/.pnpm/typescript@5.4.5/node_modules/typescript/lib/lib.es2015.collection.d.ts","./node_modules/.pnpm/typescript@5.4.5/node_modules/typescript/lib/lib.es2015.generator.d.ts","./node_modules/.pnpm/typescript@5.4.5/node_modules/typescript/lib/lib.es2015.iterable.d.ts","./node_modules/.pnpm/typescript@5.4.5/node_modules/typescript/lib/lib.es2015.promise.d.ts","./node_modules/.pnpm/typescript@5.4.5/node_modules/typescript/lib/lib.es2015.proxy.d.ts","./node_modules/.pnpm/typescript@5.4.5/node_modules/typescript/lib/lib.es2015.reflect.d.ts","./node_modules/.pnpm/typescript@5.4.5/node_modules/typescript/lib/lib.es2015.symbol.d.ts","./node_modules/.pnpm/typescript@5.4.5/node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts","./node_modules/.pnpm/typescript@5.4.5/node_modules/typescript/lib/lib.es2016.array.include.d.ts","./node_modules/.pnpm/typescript@5.4.5/node_modules/typescript/lib/lib.es2016.intl.d.ts","./node_modules/.pnpm/typescript@5.4.5/node_modules/typescript/lib/lib.es2017.date.d.ts","./node_modules/.pnpm/typescript@5.4.5/node_modules/typescript/lib/lib.es2017.object.d.ts","./node_modules/.pnpm/typescript@5.4.5/node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts","./node_modules/.pnpm/typescript@5.4.5/node_modules/typescript/lib/lib.es2017.string.d.ts","./node_modules/.pnpm/typescript@5.4.5/node_modules/typescript/lib/lib.es2017.intl.d.ts","./node_modules/.pnpm/typescript@5.4.5/node_modules/typescript/lib/lib.es2017.typedarrays.d.ts","./node_modules/.pnpm/typescript@5.4.5/node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts","./node_modules/.pnpm/typescript@5.4.5/node_modules/typescript/lib/lib.es2018.asynciterable.d.ts","./node_modules/.pnpm/typescript@5.4.5/node_modules/typescript/lib/lib.es2018.intl.d.ts","./node_modules/.pnpm/typescript@5.4.5/node_modules/typescript/lib/lib.es2018.promise.d.ts","./node_modules/.pnpm/typescript@5.4.5/node_modules/typescript/lib/lib.es2018.regexp.d.ts","./node_modules/.pnpm/typescript@5.4.5/node_modules/typescript/lib/lib.es2019.array.d.ts","./node_modules/.pnpm/typescript@5.4.5/node_modules/typescript/lib/lib.es2019.object.d.ts","./node_modules/.pnpm/typescript@5.4.5/node_modules/typescript/lib/lib.es2019.string.d.ts","./node_modules/.pnpm/typescript@5.4.5/node_modules/typescript/lib/lib.es2019.symbol.d.ts","./node_modules/.pnpm/typescript@5.4.5/node_modules/typescript/lib/lib.es2019.intl.d.ts","./node_modules/.pnpm/typescript@5.4.5/node_modules/typescript/lib/lib.es2020.bigint.d.ts","./node_modules/.pnpm/typescript@5.4.5/node_modules/typescript/lib/lib.es2020.date.d.ts","./node_modules/.pnpm/typescript@5.4.5/node_modules/typescript/lib/lib.es2020.promise.d.ts","./node_modules/.pnpm/typescript@5.4.5/node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts","./node_modules/.pnpm/typescript@5.4.5/node_modules/typescript/lib/lib.es2020.string.d.ts","./node_modules/.pnpm/typescript@5.4.5/node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts","./node_modules/.pnpm/typescript@5.4.5/node_modules/typescript/lib/lib.es2020.intl.d.ts","./node_modules/.pnpm/typescript@5.4.5/node_modules/typescript/lib/lib.es2020.number.d.ts","./node_modules/.pnpm/typescript@5.4.5/node_modules/typescript/lib/lib.es2021.promise.d.ts","./node_modules/.pnpm/typescript@5.4.5/node_modules/typescript/lib/lib.es2021.string.d.ts","./node_modules/.pnpm/typescript@5.4.5/node_modules/typescript/lib/lib.es2021.weakref.d.ts","./node_modules/.pnpm/typescript@5.4.5/node_modules/typescript/lib/lib.es2021.intl.d.ts","./node_modules/.pnpm/typescript@5.4.5/node_modules/typescript/lib/lib.es2022.array.d.ts","./node_modules/.pnpm/typescript@5.4.5/node_modules/typescript/lib/lib.es2022.error.d.ts","./node_modules/.pnpm/typescript@5.4.5/node_modules/typescript/lib/lib.es2022.intl.d.ts","./node_modules/.pnpm/typescript@5.4.5/node_modules/typescript/lib/lib.es2022.object.d.ts","./node_modules/.pnpm/typescript@5.4.5/node_modules/typescript/lib/lib.es2022.sharedmemory.d.ts","./node_modules/.pnpm/typescript@5.4.5/node_modules/typescript/lib/lib.es2022.string.d.ts","./node_modules/.pnpm/typescript@5.4.5/node_modules/typescript/lib/lib.es2022.regexp.d.ts","./node_modules/.pnpm/typescript@5.4.5/node_modules/typescript/lib/lib.es2023.array.d.ts","./node_modules/.pnpm/typescript@5.4.5/node_modules/typescript/lib/lib.es2023.collection.d.ts","./node_modules/.pnpm/typescript@5.4.5/node_modules/typescript/lib/lib.esnext.collection.d.ts","./node_modules/.pnpm/typescript@5.4.5/node_modules/typescript/lib/lib.esnext.intl.d.ts","./node_modules/.pnpm/typescript@5.4.5/node_modules/typescript/lib/lib.esnext.disposable.d.ts","./node_modules/.pnpm/typescript@5.4.5/node_modules/typescript/lib/lib.esnext.promise.d.ts","./node_modules/.pnpm/typescript@5.4.5/node_modules/typescript/lib/lib.esnext.decorators.d.ts","./node_modules/.pnpm/typescript@5.4.5/node_modules/typescript/lib/lib.esnext.object.d.ts","./node_modules/.pnpm/typescript@5.4.5/node_modules/typescript/lib/lib.decorators.d.ts","./node_modules/.pnpm/typescript@5.4.5/node_modules/typescript/lib/lib.decorators.legacy.d.ts","./node_modules/.pnpm/@vue+shared@3.4.27/node_modules/@vue/shared/dist/shared.d.ts","./node_modules/.pnpm/@vue+reactivity@3.4.27/node_modules/@vue/reactivity/dist/reactivity.d.ts","./node_modules/.pnpm/@vue+runtime-core@3.4.27/node_modules/@vue/runtime-core/dist/runtime-core.d.ts","./node_modules/.pnpm/csstype@3.1.3/node_modules/csstype/index.d.ts","./node_modules/.pnpm/@vue+runtime-dom@3.4.27/node_modules/@vue/runtime-dom/dist/runtime-dom.d.ts","./node_modules/.pnpm/vue@3.4.27_typescript@5.4.5/node_modules/vue/jsx-runtime/index.d.ts","./src/store/index.ts","./src/types/index.ts","./src/store/tree-node.ts","./src/store/tree-store.ts","./src/const.ts","./node_modules/.pnpm/@babel+types@7.24.7/node_modules/@babel/types/lib/index.d.ts","./node_modules/.pnpm/@babel+parser@7.24.7/node_modules/@babel/parser/typings/babel-parser.d.ts","./node_modules/.pnpm/@vue+compiler-core@3.4.27/node_modules/@vue/compiler-core/dist/compiler-core.d.ts","./node_modules/.pnpm/@vue+compiler-dom@3.4.27/node_modules/@vue/compiler-dom/dist/compiler-dom.d.ts","./node_modules/.pnpm/vue@3.4.27_typescript@5.4.5/node_modules/vue/dist/vue.d.ts","./src/env.d.ts","./src/components/loadingicon.vue","./src/hooks/usetreenodecls.ts","./src/components/treenode.vue","./src/hooks/usetreecls.ts","./src/hooks/usevirtuallist.ts","./src/hooks/useiframeresize.ts","./src/hooks/usepublictreeapi.ts","./src/utils.ts","./src/components/tree.vue","./src/hooks/usetreesearchcls.ts","./src/components/treesearch.vue","./src/hooks/usetreedropcls.ts","./src/components/treedrop.vue","./src/index.ts","./node_modules/.pnpm/vite@5.2.13_less@4.2.0/node_modules/vite/types/hmrpayload.d.ts","./node_modules/.pnpm/vite@5.2.13_less@4.2.0/node_modules/vite/types/customevent.d.ts","./node_modules/.pnpm/vite@5.2.13_less@4.2.0/node_modules/vite/types/hot.d.ts","./node_modules/.pnpm/vite@5.2.13_less@4.2.0/node_modules/vite/types/importglob.d.ts","./node_modules/.pnpm/vite@5.2.13_less@4.2.0/node_modules/vite/types/importmeta.d.ts","./node_modules/.pnpm/vite@5.2.13_less@4.2.0/node_modules/vite/client.d.ts","./src/vite-env.d.ts","./node_modules/.pnpm/@jest+expect-utils@29.7.0/node_modules/@jest/expect-utils/build/index.d.ts","./node_modules/.pnpm/chalk@4.1.2/node_modules/chalk/index.d.ts","./node_modules/.pnpm/@sinclair+typebox@0.27.8/node_modules/@sinclair/typebox/typebox.d.ts","./node_modules/.pnpm/@jest+schemas@29.6.3/node_modules/@jest/schemas/build/index.d.ts","./node_modules/.pnpm/pretty-format@29.7.0/node_modules/pretty-format/build/index.d.ts","./node_modules/.pnpm/jest-diff@29.7.0/node_modules/jest-diff/build/index.d.ts","./node_modules/.pnpm/jest-matcher-utils@29.7.0/node_modules/jest-matcher-utils/build/index.d.ts","./node_modules/.pnpm/expect@29.7.0/node_modules/expect/build/index.d.ts","./node_modules/.pnpm/@types+jest@29.5.12/node_modules/@types/jest/index.d.ts"],"fileInfos":[{"version":"824cb491a40f7e8fdeb56f1df5edf91b23f3e3ee6b4cde84d4a99be32338faee","affectsGlobalScope":true},"45b7ab580deca34ae9729e97c13cfd999df04416a79116c3bfb483804f85ded4","3facaf05f0c5fc569c5649dd359892c98a85557e3e0c847964caeb67076f4d75","9a68c0c07ae2fa71b44384a839b7b8d81662a236d4b9ac30916718f7510b1b2d","5e1c4c362065a6b95ff952c0eab010f04dcd2c3494e813b493ecfd4fcb9fc0d8","68d73b4a11549f9c0b7d352d10e91e5dca8faa3322bfb77b661839c42b1ddec7","5efce4fc3c29ea84e8928f97adec086e3dc876365e0982cc8479a07954a3efd4","feecb1be483ed332fad555aff858affd90a48ab19ba7272ee084704eb7167569","5514e54f17d6d74ecefedc73c504eadffdeda79c7ea205cf9febead32d45c4bc","1c0cdb8dc619bc549c3e5020643e7cf7ae7940058e8c7e5aefa5871b6d86f44b","886e50ef125efb7878f744e86908884c0133e7a6d9d80013f421b0cd8fb2af94",{"version":"87d693a4920d794a73384b3c779cadcb8548ac6945aa7a925832fe2418c9527a","affectsGlobalScope":true},{"version":"138fb588d26538783b78d1e3b2c2cc12d55840b97bf5e08bca7f7a174fbe2f17","affectsGlobalScope":true},{"version":"dc2df20b1bcdc8c2d34af4926e2c3ab15ffe1160a63e58b7e09833f616efff44","affectsGlobalScope":true},{"version":"4443e68b35f3332f753eacc66a04ac1d2053b8b035a0e0ac1d455392b5e243b3","affectsGlobalScope":true},{"version":"bc47685641087c015972a3f072480889f0d6c65515f12bd85222f49a98952ed7","affectsGlobalScope":true},{"version":"0dc1e7ceda9b8b9b455c3a2d67b0412feab00bd2f66656cd8850e8831b08b537","affectsGlobalScope":true},{"version":"ce691fb9e5c64efb9547083e4a34091bcbe5bdb41027e310ebba8f7d96a98671","affectsGlobalScope":true},{"version":"8d697a2a929a5fcb38b7a65594020fcef05ec1630804a33748829c5ff53640d0","affectsGlobalScope":true},{"version":"4ff2a353abf8a80ee399af572debb8faab2d33ad38c4b4474cff7f26e7653b8d","affectsGlobalScope":true},{"version":"93495ff27b8746f55d19fcbcdbaccc99fd95f19d057aed1bd2c0cafe1335fbf0","affectsGlobalScope":true},{"version":"6fc23bb8c3965964be8c597310a2878b53a0306edb71d4b5a4dfe760186bcc01","affectsGlobalScope":true},{"version":"ea011c76963fb15ef1cdd7ce6a6808b46322c527de2077b6cfdf23ae6f5f9ec7","affectsGlobalScope":true},{"version":"38f0219c9e23c915ef9790ab1d680440d95419ad264816fa15009a8851e79119","affectsGlobalScope":true},{"version":"bb42a7797d996412ecdc5b2787720de477103a0b2e53058569069a0e2bae6c7e","affectsGlobalScope":true},{"version":"4738f2420687fd85629c9efb470793bb753709c2379e5f85bc1815d875ceadcd","affectsGlobalScope":true},{"version":"2f11ff796926e0832f9ae148008138ad583bd181899ab7dd768a2666700b1893","affectsGlobalScope":true},{"version":"4de680d5bb41c17f7f68e0419412ca23c98d5749dcaaea1896172f06435891fc","affectsGlobalScope":true},{"version":"9fc46429fbe091ac5ad2608c657201eb68b6f1b8341bd6d670047d32ed0a88fa","affectsGlobalScope":true},{"version":"61c37c1de663cf4171e1192466e52c7a382afa58da01b1dc75058f032ddf0839","affectsGlobalScope":true},{"version":"b541a838a13f9234aba650a825393ffc2292dc0fc87681a5d81ef0c96d281e7a","affectsGlobalScope":true},{"version":"b20fe0eca9a4e405f1a5ae24a2b3290b37cf7f21eba6cbe4fc3fab979237d4f3","affectsGlobalScope":true},{"version":"811ec78f7fefcabbda4bfa93b3eb67d9ae166ef95f9bff989d964061cbf81a0c","affectsGlobalScope":true},{"version":"717937616a17072082152a2ef351cb51f98802fb4b2fdabd32399843875974ca","affectsGlobalScope":true},{"version":"d7e7d9b7b50e5f22c915b525acc5a49a7a6584cf8f62d0569e557c5cfc4b2ac2","affectsGlobalScope":true},{"version":"71c37f4c9543f31dfced6c7840e068c5a5aacb7b89111a4364b1d5276b852557","affectsGlobalScope":true},{"version":"576711e016cf4f1804676043e6a0a5414252560eb57de9faceee34d79798c850","affectsGlobalScope":true},{"version":"89c1b1281ba7b8a96efc676b11b264de7a8374c5ea1e6617f11880a13fc56dc6","affectsGlobalScope":true},{"version":"49ed889be54031e1044af0ad2c603d627b8bda8b50c1a68435fe85583901d072","affectsGlobalScope":true},{"version":"e93d098658ce4f0c8a0779e6cab91d0259efb88a318137f686ad76f8410ca270","affectsGlobalScope":true},{"version":"063600664504610fe3e99b717a1223f8b1900087fab0b4cad1496a114744f8df","affectsGlobalScope":true},{"version":"934019d7e3c81950f9a8426d093458b65d5aff2c7c1511233c0fd5b941e608ab","affectsGlobalScope":true},{"version":"bf14a426dbbf1022d11bd08d6b8e709a2e9d246f0c6c1032f3b2edb9a902adbe","affectsGlobalScope":true},{"version":"5e07ed3809d48205d5b985642a59f2eba47c402374a7cf8006b686f79efadcbd","affectsGlobalScope":true},{"version":"2b72d528b2e2fe3c57889ca7baef5e13a56c957b946906d03767c642f386bbc3","affectsGlobalScope":true},{"version":"8073890e29d2f46fdbc19b8d6d2eb9ea58db9a2052f8640af20baff9afbc8640","affectsGlobalScope":true},{"version":"368af93f74c9c932edd84c58883e736c9e3d53cec1fe24c0b0ff451f529ceab1","affectsGlobalScope":true},{"version":"af3dd424cf267428f30ccfc376f47a2c0114546b55c44d8c0f1d57d841e28d74","affectsGlobalScope":true},{"version":"995c005ab91a498455ea8dfb63aa9f83fa2ea793c3d8aa344be4a1678d06d399","affectsGlobalScope":true},{"version":"51e547984877a62227042850456de71a5c45e7fe86b7c975c6e68896c86fa23b","affectsGlobalScope":true},{"version":"956d27abdea9652e8368ce029bb1e0b9174e9678a273529f426df4b3d90abd60","affectsGlobalScope":true},{"version":"4fa6ed14e98aa80b91f61b9805c653ee82af3502dc21c9da5268d3857772ca05","affectsGlobalScope":true},{"version":"e6633e05da3ff36e6da2ec170d0d03ccf33de50ca4dc6f5aeecb572cedd162fb","affectsGlobalScope":true},{"version":"d8670852241d4c6e03f2b89d67497a4bbefe29ecaa5a444e2c11a9b05e6fccc6","affectsGlobalScope":true},{"version":"8444af78980e3b20b49324f4a16ba35024fef3ee069a0eb67616ea6ca821c47a","affectsGlobalScope":true},{"version":"caccc56c72713969e1cfe5c3d44e5bab151544d9d2b373d7dbe5a1e4166652be","affectsGlobalScope":true},{"version":"3287d9d085fbd618c3971944b65b4be57859f5415f495b33a6adc994edd2f004","affectsGlobalScope":true},{"version":"50d53ccd31f6667aff66e3d62adf948879a3a16f05d89882d1188084ee415bbc","affectsGlobalScope":true},{"version":"08a58483392df5fcc1db57d782e87734f77ae9eab42516028acbfe46f29a3ef7","affectsGlobalScope":true},{"version":"436aaf437562f276ec2ddbee2f2cdedac7664c1e4c1d2c36839ddd582eeb3d0a","affectsGlobalScope":true},{"version":"b1cb28af0c891c8c96b2d6b7be76bd394fddcfdb4709a20ba05a7c1605eea0f9","affectsGlobalScope":true},{"version":"13f6e6380c78e15e140243dc4be2fa546c287c6d61f4729bc2dd7cf449605471","affectsGlobalScope":true},{"version":"15b98a533864d324e5f57cd3cfc0579b231df58c1c0f6063ea0fcb13c3c74ff9","affectsGlobalScope":true},{"version":"ac77cb3e8c6d3565793eb90a8373ee8033146315a3dbead3bde8db5eaf5e5ec6","affectsGlobalScope":true},{"version":"d4b1d2c51d058fc21ec2629fff7a76249dec2e36e12960ea056e3ef89174080f","affectsGlobalScope":true},{"version":"2fef54945a13095fdb9b84f705f2b5994597640c46afeb2ce78352fab4cb3279","affectsGlobalScope":true},{"version":"33358442698bb565130f52ba79bfd3d4d484ac85fe33f3cb1759c54d18201393","affectsGlobalScope":true},{"version":"782dec38049b92d4e85c1585fbea5474a219c6984a35b004963b00beb1aab538","affectsGlobalScope":true},"f2649bdaeed458e8f87da8831ec7bcee585e2d98c5a8e6c6ae3e94afcccc657c","27b7462cd0c24df4b9a4714a6e7ea46b431a6304887fe8092a5aa112e37c4ebc",{"version":"6cc7204cc90bb752b93d42fd0fa4399df1b0497664a4ad7bc03ed60e2d66cf2b","affectsGlobalScope":true},"8a8eb4ebffd85e589a1cc7c178e291626c359543403d58c9cd22b81fab5b1fb9","d9e7800ad7ed1cedf9cdb9293e06e2a7bf6556dc76aa11aa148251396ffb8909","9c077ba346f2891d1725d6cbf1ff8bc7ca075ccff10d1ea38eda571245df0eeb",{"version":"b865a704defacff59c3bb720160484a54e289cfdd989612486e6f01be6290f7b","signature":"39d41b5a776ff01c0a42a1027da60595ebb0516275c3f7ff60bdc4a09bad8ebb"},{"version":"211f5a5ab3b9c5c074e363f521a9ed9ad0e2d41da2c8404136d0fcc7cf06d3f0","signature":"14d4ac85ac6126dd7be4574d76a1307292118893ebc4b1b34976156c6766e729"},{"version":"f49141065651c11d754ee88bd2a3eb1445ca7caa7e593fba441540dd51c6d18e","signature":"c8f3ddebfb82319d72a5395e20d2a57ff0a986fe4cf3607dc7b9d45796db18d1"},{"version":"61955dc20ccc1b371a283291746a7e316f7268d0cfd8e840e8a01e677cae9ede","signature":"43e78d552b2245adbbda9dd00a7bdbd0ae88bf4588d28baec5688d05afa548e5"},{"version":"98fde8ef3f4bb5e9100f73ae69b0c370dd38c580817a03ebf071fb51aaba3461","signature":"bba16ef8f9bb74e7aa2fd8f93cd75080eef330272dd822d1a59c87d2379dd948"},"55584873eae27c5607725f0a9b2123cdea9100fd47cd4bfd582b567a7c363877","5f02abbb1b17e3d1e68c5eea14adf4705696e6255e2982b010c0dc2a5417b606","7a770eeb2c4f5afb21feccbf2f2ecbe2de157deeb2743ffc51c75f67a928c512","cf76e2f59b26aea7c923015783083b4820d6c0d85cda2fec3a0f232aabfc56c3","c0191592be8eb7906f99ac4b8798d80a585b94001ea1a5f50d6ce5b0d13a5c62","0061c087ec8109c283988a398e5155cb9894bcb3aed39b5cbbc00b6c8486c523",{"version":"f3ca98701a9c8ad11fc01b3609956d2db975249f4c25dcee112ba06dda620066","signature":"ea2f54194f8e10a8f031fa7838ccdd9bb0247793abbf93965d0f3a9e66d4e45d"},{"version":"f46d834700b7befe46778c11e4da6de5967ecb6cd06f928cda2db6785055075c","signature":"0e2b10db3d8deee3801dbaf81c7e75f916c74f79e75467a61dc5bc28ae007c9a"},{"version":"02f44c5b991262a4069939ccebd3cc7aa247ee519b75f3c6b81c1657bee0204b","signature":"8d685f7d9213b141fd32ce268435dac6bb69e635460282ce497bea551735de07"},{"version":"f6418952c8cade9fc4d5ad1f45a966940bcb54b958ccb47fd1c8c5645183143a","signature":"8cb2400757455835f65ccd2233126765d6b709b833acd0b19c5fc02cd423a369"},{"version":"e6dfb9f7e2771d4c9e1fa580876a562724e7439a8e6c89c48aedefd3f79e0393","signature":"e577577b7d2cbbc66992367791b8d684d8fb6777a9dcd7006dd9e261a357440e"},{"version":"5dc2af6c8e885efebaade7511552ded17afc1c0743cc61df0b48cbef94d857c7","signature":"579b26bb470532cef36e56be304e17bab9533a9f74d4505b6ce41579afe8d51d"},{"version":"e8aef3666e8a6f935dba8f42031446cf923f679a96b056f778d6ed84058057f9","signature":"34381759f0c10e533da298e079afdde1adcabb9f2e6317511736ec9a4371ce1d"},{"version":"0ea8f61c910ad1f67c7395d8518976b51b167f4277869ca8fe85b114d961b685","signature":"06f4f39689bf2664d5cc301ce26c46f364abfc7d8ff65a2045db2b56dbec4d6f"},{"version":"6cfa2934ba7fef1a70e8d926b40a65b7400c6141166a3ae1913b27670cf5a6a7","signature":"31ff777ba18ddadc8fafc389f07e70f80832895b042bdab173da3ad1bf5ca5a1","affectsGlobalScope":true},{"version":"ad1f3efbdf0e44bfdded42b1b960976f6f77fc03cc106110371f8d559b4d6ed8","signature":"2218c3c9ad242b7d5aa82b6e8b4ea9a79c887bd35a02147944e58c3e4cb6f599"},{"version":"274bdeb60d340ce8aee28601b8164f63e3e95754ac6fe07542ebcada9dd1f583","signature":"9e75d2a81afd9fea879d03563502c69f4421efdcac273c0a5a17cc950e33b542"},{"version":"bbcd29347b84d8688c506b8af8a72228b49c984cd0270f77ddecb1fb2dfa9c4b","signature":"04e24cac4762d95e31202958df446af04b23ab92c7e07c8b4742baa270d1a792"},{"version":"97948fb2c256049ae66c8ffce17f389c249c7bcf3cb6973e3ae8f585d4242af2","signature":"1b90df68f7a5f0df79604f3420daa30d8c06e9f0f5337cab72e54f6eec5005b1"},{"version":"de2da6332594498b2fc457a3106e893d90f64445be24d0f2009a1326f51e7f72","signature":"4c38b6abc8eed95f59d91f45d28b00d42ebe678ec16a4d7e4b0582f15e78d690"},"282f98006ed7fa9bb2cd9bdbe2524595cfc4bcd58a0bb3232e4519f2138df811","6222e987b58abfe92597e1273ad7233626285bc2d78409d4a7b113d81a83496b","cbe726263ae9a7bf32352380f7e8ab66ee25b3457137e316929269c19e18a2be","7f698624bbbb060ece7c0e51b7236520ebada74b747d7523c7df376453ed6fea",{"version":"4025a454b1ca489b179ee8c684bdd70ff8c1967e382076ade53e7e4653e1daec","affectsGlobalScope":true},{"version":"c4baf2c38b00f29adfb4e60554de4152ebf4c17f3365c0f2ff34af7f3b35ef1d","affectsGlobalScope":true},"65996936fbb042915f7b74a200fcdde7e410f32a669b1ab9597cfaa4b0faddb5","cdcc132f207d097d7d3aa75615ab9a2e71d6a478162dde8b67f88ea19f3e54de","0d14fa22c41fdc7277e6f71473b20ebc07f40f00e38875142335d5b63cdfc9d2","c085e9aa62d1ae1375794c1fb927a445fa105fed891a7e24edbb1c3300f7384a","f315e1e65a1f80992f0509e84e4ae2df15ecd9ef73df975f7c98813b71e4c8da","5b9586e9b0b6322e5bfbd2c29bd3b8e21ab9d871f82346cb71020e3d84bae73e","3e70a7e67c2cb16f8cd49097360c0309fe9d1e3210ff9222e9dac1f8df9d4fb6","ab68d2a3e3e8767c3fba8f80de099a1cfc18c0de79e42cb02ae66e22dfe14a66","d96cc6598148bf1a98fb2e8dcf01c63a4b3558bdaec6ef35e087fd0562eb40ec",{"version":"5ab630d466ac55baa6d32820378098404fc18ba9da6f7bc5df30c5dbb1cffae8","affectsGlobalScope":true}],"root":[[75,79],[85,99],106],"options":{"composite":true,"declaration":true,"declarationDir":"./types","emitDeclarationOnly":true,"esModuleInterop":true,"jsx":1,"jsxImportSource":"vue","module":99,"noImplicitAny":true,"rootDir":"./src","skipLibCheck":true,"strict":true,"target":99,"useDefineForClassFields":true},"fileIdsList":[[80],[109],[111,114],[69,80,81],[82],[69],[69,70,71,73],[70,71,72],[107,113],[111],[108,112],[110],[104],[100],[101],[102,103],[73,83],[73],[74,84,86],[74,75,76,78,79,84,86,88,89,90,91,92,93],[74,75,76,79,84,93,96,97],[74,75,76,79,84,86,87,94],[74,79,84,93,94,95,99],[74,78],[84],[74,84],[74,76,77,78,84,94,99],[74,84,95,98],[74,84,88],[74,84,87,96],[74,76,79,84,94,99],[74,75,88,94,96,98,105],[74,77,78],[74,76],[74,76,77,79],[74,75,79],[105],[74,75,76,77,78,79,84],[75,76,77,78,79,84,96],[75,76,84,94],[76,77,78,79,84,94,99],[78],[76,77,78,84,94,99],[84,98],[84,88],[84,96],[76,77,79,84,94],[75,88,94,96,98,105],[77,78],[76],[76,77],[75,79]],"referencedMap":[[81,1],[110,2],[115,3],[82,4],[83,5],[70,6],[71,7],[73,8],[114,9],[112,10],[113,11],[111,12],[105,13],[101,14],[102,15],[104,16],[84,17],[74,18],[86,19],[94,20],[98,21],[88,22],[96,23],[79,24],[85,25],[91,26],[92,27],[89,26],[97,28],[87,29],[95,30],[90,31],[99,32],[75,33],[77,34],[78,35],[76,36],[93,26],[106,37]],"exportedModulesMap":[[81,1],[110,2],[115,3],[82,4],[83,5],[70,6],[71,7],[73,8],[114,9],[112,10],[113,11],[111,12],[105,13],[101,14],[102,15],[104,16],[84,17],[74,18],[86,25],[94,38],[98,39],[88,40],[96,41],[79,42],[85,25],[92,43],[89,25],[97,44],[87,45],[95,46],[90,47],[99,48],[75,49],[77,50],[78,51],[76,52],[93,25],[106,37]],"semanticDiagnosticsPerFile":[81,80,107,110,109,115,82,83,70,71,73,69,108,72,114,112,113,111,67,68,12,14,13,2,15,16,17,18,19,20,21,22,3,23,4,24,28,25,26,27,29,30,31,5,32,33,34,35,6,39,36,37,38,40,7,41,46,47,42,43,44,45,8,51,48,49,50,52,9,53,54,55,58,56,57,59,60,10,1,61,11,65,63,62,66,64,105,101,100,102,103,104,84,74,86,94,98,88,96,79,85,91,92,89,97,87,95,90,99,75,77,78,76,93,106],"latestChangedDtsFile":"./types/index.d.ts"},"version":"5.4.5"} \ No newline at end of file diff --git a/types/components/LoadingIcon.vue.d.ts b/types/components/LoadingIcon.vue.d.ts index 4a570a4..34d7596 100644 --- a/types/components/LoadingIcon.vue.d.ts +++ b/types/components/LoadingIcon.vue.d.ts @@ -1,2 +1,2 @@ -declare const _default: import("vue-demi").DefineComponent<{}, {}, {}, {}, {}, import("vue-demi").ComponentOptionsMixin, import("vue-demi").ComponentOptionsMixin, {}, string, import("vue-demi").VNodeProps & import("vue-demi").AllowedComponentProps & import("vue-demi").ComponentCustomProps, Readonly>, {}>; +declare const _default: import("vue").DefineComponent<{}, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly>, {}, {}>; export default _default; diff --git a/types/components/Tree.vue.d.ts b/types/components/Tree.vue.d.ts index 83ffa93..7ea7b46 100644 --- a/types/components/Tree.vue.d.ts +++ b/types/components/Tree.vue.d.ts @@ -1,230 +1,144 @@ -import { VNode, Ref, PropType } from 'vue-demi'; -import TreeStore, { TreeNode } from '../store'; +import { VNode } from 'vue'; +import { TreeNode } from '../store'; +import { ignoreEnum, dragHoverPartEnum } from '../const'; +import { TreeNodeKeyType, IgnoreType, AnyPropsArrayType, LoadFn } from '../types'; import { FilterFunctionType } from '../store/tree-store'; -import { ITreeNodeOptions } from '../store/tree-node'; -import { ignoreEnum, VerticalPositionType, dragHoverPartEnum } from '../const'; -import { TreeNodeKeyType, IgnoreType } from '../types'; -type AnyPropsArrayType = Array<{ - [key: string]: any; -}>; -type VModelType = TreeNodeKeyType | TreeNodeKeyType[]; -interface INonReactiveData { - store: TreeStore; - blockNodes: TreeNode[]; -} -declare const _default: import("vue-demi").DefineComponent<{ - /** 单选模式下为字符串或数字,多选模式下为数组或者以 separator 分隔的字符串。当即可单选又可多选时,value 是多选的值 */ - modelValue: PropType; +export interface TreeProps { /** 传入的树数据。数据量大时,不建议通过 props 传入数据,建议用 `setData` 方法代替 */ - data: { - type: PropType; - default: () => never[]; - }; - /** 供未加载且选中节点查询 title 字段值用的列表,格式与 `data` 一致即可 */ - unloadDataList: { - type: PropType; - default: () => never[]; - }; - /** 过滤已选时是否在列表后面展示未加载的已选节点 */ - showUnloadCheckedNodes: { - type: BooleanConstructor; - default: boolean; - }; + data?: AnyPropsArrayType; /** 数据为空时显示的文本 */ - emptyText: { - type: StringConstructor; - default: string; - }; + emptyText?: string; + /** 单选模式下为字符串或数字,多选模式下为数组或者以 separator 分隔的字符串。当即可单选又可多选时,value 是多选的值 */ + modelValue?: string | number | TreeNodeKeyType[]; + /** 是否可单选 */ + selectable?: boolean; + /** 是否可多选 */ + checkable?: boolean; + /** 多选模式下 value 分隔符 */ + separator?: string; + /** 忽略模式 */ + ignoreMode?: IgnoreType; /** 节点标题字段 */ - titleField: { - type: StringConstructor; - default: string; - }; + titleField?: string; /** 节点唯一标识字段 */ - keyField: { - type: StringConstructor; - default: string; - }; - /** 多选模式下 value 分隔符 */ - separator: { - type: StringConstructor; - default: string; - }; - /** 是否可多选 */ - checkable: { - type: BooleanConstructor; - default: boolean; - }; - /** 是否可单选 */ - selectable: { - type: BooleanConstructor; - default: boolean; - }; + keyField?: string; + /** 节点过滤方法 */ + filterMethod?: FilterFunctionType; + /** 过滤已选时是否在列表后面展示未加载的已选节点 */ + showUnloadCheckedNodes?: boolean; + /** 供未加载且选中节点查询 title 字段值用的列表,格式与 `data` 一致即可 */ + unloadDataList?: AnyPropsArrayType; + /** 异步加载方法 */ + load?: LoadFn; /** 是否可勾选被过滤节点 */ - filteredNodeCheckable: { - type: BooleanConstructor; - default: boolean; - }; + filteredNodeCheckable?: boolean; /** 父子节点是否关联 */ - cascade: { - type: BooleanConstructor; - default: boolean; - }; + cascade?: boolean; /** 是否只启用子节点,当 `多选且父子不关联` 或 `单选` 时有效 */ - enableLeafOnly: { - type: BooleanConstructor; - default: boolean; - }; + enableLeafOnly?: boolean; /** 是否禁用所有节点 */ - disableAll: { - type: BooleanConstructor; - default: boolean; - }; + disableAll?: boolean; /** 是否默认展开所有节点 */ - defaultExpandAll: { - type: BooleanConstructor; - default: boolean; - }; + defaultExpandAll?: boolean; /** * 默认展开的节点 key * @deprecated 下一个大版本将废弃,使用 expandedKeys 代替 */ - defaultExpandedKeys: { - type: PropType; - default: () => never[]; - }; + defaultExpandedKeys?: TreeNodeKeyType[]; /** 展开的节点,该 Prop 变化时,树组件将会响应,建议配合事件使用 */ - expandedKeys: { - type: PropType; - default: () => never[]; - }; + expandedKeys?: TreeNodeKeyType[]; /** 是否可拖拽 */ - draggable: { - type: BooleanConstructor; - default: boolean; - }; + draggable?: boolean; /** 是否可放置 */ - droppable: { - type: BooleanConstructor; - default: boolean; - }; + droppable?: boolean; /** 在放置节点之前执行的方法,返回 true 允许放置, false 可阻止放置 */ - beforeDropMethod: { - type: PropType<(dragKey: TreeNodeKeyType, dropKey: TreeNodeKeyType, hoverPart: dragHoverPartEnum) => boolean>; - default: () => () => true; - }; - /** 忽略模式 */ - ignoreMode: { - type: PropType<"none" | "children" | "parents">; - default: ignoreEnum; - }; + beforeDropMethod?: (dragKey: TreeNodeKeyType, dropKey: TreeNodeKeyType, hoverPart: dragHoverPartEnum) => boolean; /** 异步加载初始化时是否自动加载根节点 */ - autoLoad: { - type: BooleanConstructor; - default: boolean; - }; - /** 异步加载方法 */ - load: PropType<(node: null | TreeNode, resolve: Function, reject: Function) => any>; + autoLoad?: boolean; /** 节点渲染 render 函数 */ - render: PropType<(node: TreeNode) => VNode>; - /** 节点过滤方法 */ - filterMethod: PropType; + render?: (node: TreeNode) => VNode; /** * 过滤时是否展开所有可见节点 * 有时候可能因为开发者样式设置问题导致虚拟列表失效,而展开数据量又过多从而卡顿 * 加上这个选项并不是为了解决上述问题,而仅仅作为一个可选项 */ - expandOnFilter: { - type: BooleanConstructor; - default: boolean; - }; + expandOnFilter?: boolean; /** 点击已选中节点是否取消选中 */ - unselectOnClick: { - type: BooleanConstructor; - default: boolean; - }; + unselectOnClick?: boolean; /** 是否显示 loading 图标 */ - loading: { - type: BooleanConstructor; - default: boolean; - }; - /** 根据节点最小高度计算数据总高度 */ - nodeMinHeight: { - type: NumberConstructor; - default: number; - }; + loading?: boolean; + /** 节点根元素的 class ,传入函数以对每个节点定制 class */ + nodeClassName?: string | object | Array | ((node: TreeNode) => string | object | Array); /** 子节点缩进 */ - nodeIndent: { - type: NumberConstructor; - default: number; - }; + nodeIndent?: number; /** 渲染节点数量,可见节点数大于此值且高度超过(容器可视高度能容纳节点数 + bufferNodeAmount)则不会渲染所有可见节点 */ - renderNodeAmount: { - type: NumberConstructor; - default: number; - }; + renderNodeAmount?: number; + /** 根据节点最小高度计算数据总高度 */ + nodeMinHeight?: number; /** 当滚动到视野外的节点个数大于此值时刷新渲染节点 */ - bufferNodeAmount: { - type: NumberConstructor; - default: number; - }; - /** 节点根元素的 class ,传入函数以对每个节点定制 class */ - nodeClassName: { - type: (ObjectConstructor | StringConstructor | (() => Array) | (() => (node: TreeNode) => string | object | Array))[]; - }; - /** - * 使用 padding 代替 margin 来展示子节点缩进 - * 此 Prop 是为了方便样式定制,在下个大版本将全部使用 padding - * @deprecated - */ - usePadding: { - type: BooleanConstructor; - default: boolean; - }; -}, { - nonReactive: INonReactiveData; - /** 未加载选中的节点,展示已选时生成,其他情况下没用 */ - unloadCheckedNodes: TreeNode[]; - /** 可见节点个数 */ - blockLength: Ref; - /** 可见节点总高度 */ - blockAreaHeight: Ref; - /** 顶部填充高度 */ - topSpaceHeight: Ref; - /** 底部填充高度 */ - bottomSpaceHeight: Ref; - /** 实际渲染节点个数 */ - renderAmount: Ref; - /** renderAmount 缓存 */ - renderAmountCache: Ref; - /** 渲染节点(实际渲染节点) */ - renderNodes: Ref; - /** 渲染开始下标 */ - renderStart: Ref; - /** renderStart 缓存 */ - renderStartCache: Ref; - /** 是否正在载入根节点,组件内部调用 load 时会改变此值 */ - isRootLoading: Ref; - /** 缓存的 value ,用于 value 变化时与之做比对 */ - valueCache: Ref; - /** 防抖计时器 id */ - debounceTimer: Ref; - topSpaceStyles: import("vue-demi").ComputedRef<{ - height: string; - }>; - bottomSpaceStyles: import("vue-demi").ComputedRef<{ - height: string; - }>; - wrapperCls: import("vue-demi").ComputedRef; - scrollAreaCls: import("vue-demi").ComputedRef; - blockAreaCls: import("vue-demi").ComputedRef; - emptyCls: import("vue-demi").ComputedRef; - emptyTextDefaultCls: import("vue-demi").ComputedRef; - loadingCls: import("vue-demi").ComputedRef; - loadingWrapperCls: import("vue-demi").ComputedRef; - loadingIconCls: import("vue-demi").ComputedRef; - iframeCls: import("vue-demi").ComputedRef; - treeNodeListeners: Record; + bufferNodeAmount?: number; +} +export declare const DEFAULT_TREE_PROPS: { + data: () => never[]; + unloadDataList: () => never[]; + showUnloadCheckedNodes: boolean; + emptyText: string; + titleField: string; + keyField: string; + separator: string; + checkable: boolean; + selectable: boolean; + filteredNodeCheckable: boolean; + cascade: boolean; + enableLeafOnly: boolean; + disableAll: boolean; + defaultExpandAll: boolean; + defaultExpandedKeys: () => never[]; + expandedKeys: () => never[]; + draggable: boolean; + droppable: boolean; + beforeDropMethod: () => () => boolean; + ignoreMode: ignoreEnum; + autoLoad: boolean; + expandOnFilter: boolean; + unselectOnClick: boolean; + loading: boolean; + nodeMinHeight: number; + nodeIndent: number; + renderNodeAmount: number; + bufferNodeAmount: number; +}; +export declare const TREE_EVENTS: string[]; +declare const _default: __VLS_WithTemplateSlots, { + data: () => never[]; + unloadDataList: () => never[]; + showUnloadCheckedNodes: boolean; + emptyText: string; + titleField: string; + keyField: string; + separator: string; + checkable: boolean; + selectable: boolean; + filteredNodeCheckable: boolean; + cascade: boolean; + enableLeafOnly: boolean; + disableAll: boolean; + defaultExpandAll: boolean; + defaultExpandedKeys: () => never[]; + expandedKeys: () => never[]; + draggable: boolean; + droppable: boolean; + beforeDropMethod: () => () => boolean; + ignoreMode: ignoreEnum; + autoLoad: boolean; + expandOnFilter: boolean; + unselectOnClick: boolean; + loading: boolean; + nodeMinHeight: number; + nodeIndent: number; + renderNodeAmount: number; + bufferNodeAmount: number; +}>, { setData: (data: AnyPropsArrayType) => void; setChecked: (key: TreeNodeKeyType, value: boolean) => void; setCheckedKeys: (keys: TreeNodeKeyType[], value: boolean) => void; @@ -235,272 +149,66 @@ declare const _default: import("vue-demi").DefineComponent<{ setExpand: (key: TreeNodeKeyType, value: boolean, expandParent?: boolean) => void; setExpandKeys: (keys: TreeNodeKeyType[], value: boolean) => void; setExpandAll: (value: boolean) => void; - getCheckedNodes: (ignoreMode?: IgnoreType) => TreeNode[]; - getCheckedKeys: (ignoreMode?: IgnoreType) => TreeNodeKeyType[]; + getCheckedNodes: (ignoreMode?: "children" | "none" | "parents" | undefined) => TreeNode[]; + getCheckedKeys: (ignoreMode?: "children" | "none" | "parents" | undefined) => TreeNodeKeyType[]; getIndeterminateNodes: () => TreeNode[]; getSelectedNode: () => TreeNode | null; getSelectedKey: () => TreeNodeKeyType | null; getExpandNodes: () => TreeNode[]; getExpandKeys: () => TreeNodeKeyType[]; getCurrentVisibleNodes: () => TreeNode[]; + getNode: (key: TreeNodeKeyType) => TreeNode | null; getTreeData: () => TreeNode[]; getFlatData: () => TreeNode[]; getNodesCount: () => number; - insertBefore: (insertedNode: TreeNodeKeyType | ITreeNodeOptions, referenceKey: TreeNodeKeyType) => TreeNode | null; - insertAfter: (insertedNode: TreeNodeKeyType | ITreeNodeOptions, referenceKey: TreeNodeKeyType) => TreeNode | null; - append: (insertedNode: TreeNodeKeyType | ITreeNodeOptions, parentKey: TreeNodeKeyType) => TreeNode | null; - prepend: (insertedNode: TreeNodeKeyType | ITreeNodeOptions, parentKey: TreeNodeKeyType) => TreeNode | null; + insertBefore: (insertedNode: TreeNodeKeyType | import("../store/tree-node").ITreeNodeOptions, referenceKey: TreeNodeKeyType) => TreeNode | null; + insertAfter: (insertedNode: TreeNodeKeyType | import("../store/tree-node").ITreeNodeOptions, referenceKey: TreeNodeKeyType) => TreeNode | null; + append: (insertedNode: TreeNodeKeyType | import("../store/tree-node").ITreeNodeOptions, parentKey: TreeNodeKeyType) => TreeNode | null; + prepend: (insertedNode: TreeNodeKeyType | import("../store/tree-node").ITreeNodeOptions, parentKey: TreeNodeKeyType) => TreeNode | null; remove: (removedKey: TreeNodeKeyType) => TreeNode | null; - filter: (keyword: string, filterMethod?: FilterFunctionType) => void; - showCheckedNodes: (showUnloadCheckedNodes?: boolean) => void; + filter: (keyword: string, filterMethod?: FilterFunctionType | undefined) => void; + showCheckedNodes: (showUnloadCheckedNodes?: boolean | undefined) => void; loadRootNodes: () => Promise; - scrollTo: (key: TreeNodeKeyType, verticalPosition?: VerticalPositionType | number) => void; - updateExpandedKeys: () => void; - updateUnloadStatus: () => void; - handleTreeScroll: () => void; - handleNodeCheck: (node: TreeNode) => void; - handleNodeSelect: (node: TreeNode) => void; - handleNodeExpand: (node: TreeNode) => void; - handleNodeDrop: (data: TreeNode, e: DragEvent, hoverPart: dragHoverPartEnum) => void; - emitCheckableInput: (checkedNodes: TreeNode[], checkedKeys: TreeNodeKeyType[]) => void; - emitSelectableInput: (selectedNode: TreeNode | null, selectedKey: TreeNodeKeyType | null) => void; - attachStoreEvents: () => void; - resetSpaceHeights: () => void; - updateBlockNodes: () => void; - updateBlockData: () => void; - updateRender: () => void; - updateRenderAmount: () => void; - updateRenderNodes: (isScroll?: boolean) => void; - getNode: (key: TreeNodeKeyType) => TreeNode | null; - scrollArea: Ref; - iframe: Ref; - methods: { - setData: (data: AnyPropsArrayType) => void; - setChecked: (key: TreeNodeKeyType, value: boolean) => void; - setCheckedKeys: (keys: TreeNodeKeyType[], value: boolean) => void; - checkAll: () => void; - clearChecked: () => void; - setSelected: (key: TreeNodeKeyType, value: boolean) => void; - clearSelected: () => void; - setExpand: (key: TreeNodeKeyType, value: boolean, expandParent?: boolean) => void; - setExpandKeys: (keys: TreeNodeKeyType[], value: boolean) => void; - setExpandAll: (value: boolean) => void; - getCheckedNodes: (ignoreMode?: IgnoreType) => TreeNode[]; - getCheckedKeys: (ignoreMode?: IgnoreType) => TreeNodeKeyType[]; - getIndeterminateNodes: () => TreeNode[]; - getSelectedNode: () => TreeNode | null; - getSelectedKey: () => TreeNodeKeyType | null; - getExpandNodes: () => TreeNode[]; - getExpandKeys: () => TreeNodeKeyType[]; - getCurrentVisibleNodes: () => TreeNode[]; - getTreeData: () => TreeNode[]; - getFlatData: () => TreeNode[]; - getNodesCount: () => number; - insertBefore: (insertedNode: TreeNodeKeyType | ITreeNodeOptions, referenceKey: TreeNodeKeyType) => TreeNode | null; - insertAfter: (insertedNode: TreeNodeKeyType | ITreeNodeOptions, referenceKey: TreeNodeKeyType) => TreeNode | null; - append: (insertedNode: TreeNodeKeyType | ITreeNodeOptions, parentKey: TreeNodeKeyType) => TreeNode | null; - prepend: (insertedNode: TreeNodeKeyType | ITreeNodeOptions, parentKey: TreeNodeKeyType) => TreeNode | null; - remove: (removedKey: TreeNodeKeyType) => TreeNode | null; - filter: (keyword: string, filterMethod?: FilterFunctionType) => void; - showCheckedNodes: (showUnloadCheckedNodes?: boolean) => void; - loadRootNodes: () => Promise; - scrollTo: (key: TreeNodeKeyType, verticalPosition?: VerticalPositionType | number) => void; - updateExpandedKeys: () => void; - updateUnloadStatus: () => void; - handleTreeScroll: () => void; - handleNodeCheck: (node: TreeNode) => void; - handleNodeSelect: (node: TreeNode) => void; - handleNodeExpand: (node: TreeNode) => void; - handleNodeDrop: (data: TreeNode, e: DragEvent, hoverPart: dragHoverPartEnum) => void; - emitCheckableInput: (checkedNodes: TreeNode[], checkedKeys: TreeNodeKeyType[]) => void; - emitSelectableInput: (selectedNode: TreeNode | null, selectedKey: TreeNodeKeyType | null) => void; - resetSpaceHeights: () => void; - updateBlockNodes: () => void; - updateBlockData: () => void; - updateRender: () => void; - updateRenderAmount: () => void; - updateRenderNodes: (isScroll?: boolean) => void; - getNode: (key: TreeNodeKeyType) => TreeNode | null; - }; -}, unknown, {}, {}, import("vue-demi").ComponentOptionsMixin, import("vue-demi").ComponentOptionsMixin, string[], string, import("vue-demi").VNodeProps & import("vue-demi").AllowedComponentProps & import("vue-demi").ComponentCustomProps, Readonly; - /** 传入的树数据。数据量大时,不建议通过 props 传入数据,建议用 `setData` 方法代替 */ - data: { - type: PropType; - default: () => never[]; - }; - /** 供未加载且选中节点查询 title 字段值用的列表,格式与 `data` 一致即可 */ - unloadDataList: { - type: PropType; - default: () => never[]; - }; - /** 过滤已选时是否在列表后面展示未加载的已选节点 */ - showUnloadCheckedNodes: { - type: BooleanConstructor; - default: boolean; - }; - /** 数据为空时显示的文本 */ - emptyText: { - type: StringConstructor; - default: string; - }; - /** 节点标题字段 */ - titleField: { - type: StringConstructor; - default: string; - }; - /** 节点唯一标识字段 */ - keyField: { - type: StringConstructor; - default: string; - }; - /** 多选模式下 value 分隔符 */ - separator: { - type: StringConstructor; - default: string; - }; - /** 是否可多选 */ - checkable: { - type: BooleanConstructor; - default: boolean; - }; - /** 是否可单选 */ - selectable: { - type: BooleanConstructor; - default: boolean; - }; - /** 是否可勾选被过滤节点 */ - filteredNodeCheckable: { - type: BooleanConstructor; - default: boolean; - }; - /** 父子节点是否关联 */ - cascade: { - type: BooleanConstructor; - default: boolean; - }; - /** 是否只启用子节点,当 `多选且父子不关联` 或 `单选` 时有效 */ - enableLeafOnly: { - type: BooleanConstructor; - default: boolean; - }; - /** 是否禁用所有节点 */ - disableAll: { - type: BooleanConstructor; - default: boolean; - }; - /** 是否默认展开所有节点 */ - defaultExpandAll: { - type: BooleanConstructor; - default: boolean; - }; - /** - * 默认展开的节点 key - * @deprecated 下一个大版本将废弃,使用 expandedKeys 代替 - */ - defaultExpandedKeys: { - type: PropType; - default: () => never[]; - }; - /** 展开的节点,该 Prop 变化时,树组件将会响应,建议配合事件使用 */ - expandedKeys: { - type: PropType; - default: () => never[]; - }; - /** 是否可拖拽 */ - draggable: { - type: BooleanConstructor; - default: boolean; - }; - /** 是否可放置 */ - droppable: { - type: BooleanConstructor; - default: boolean; - }; - /** 在放置节点之前执行的方法,返回 true 允许放置, false 可阻止放置 */ - beforeDropMethod: { - type: PropType<(dragKey: TreeNodeKeyType, dropKey: TreeNodeKeyType, hoverPart: dragHoverPartEnum) => boolean>; - default: () => () => true; - }; - /** 忽略模式 */ - ignoreMode: { - type: PropType<"none" | "children" | "parents">; - default: ignoreEnum; - }; - /** 异步加载初始化时是否自动加载根节点 */ - autoLoad: { - type: BooleanConstructor; - default: boolean; - }; - /** 异步加载方法 */ - load: PropType<(node: null | TreeNode, resolve: Function, reject: Function) => any>; - /** 节点渲染 render 函数 */ - render: PropType<(node: TreeNode) => VNode>; - /** 节点过滤方法 */ - filterMethod: PropType; - /** - * 过滤时是否展开所有可见节点 - * 有时候可能因为开发者样式设置问题导致虚拟列表失效,而展开数据量又过多从而卡顿 - * 加上这个选项并不是为了解决上述问题,而仅仅作为一个可选项 - */ - expandOnFilter: { - type: BooleanConstructor; - default: boolean; - }; - /** 点击已选中节点是否取消选中 */ - unselectOnClick: { - type: BooleanConstructor; - default: boolean; - }; - /** 是否显示 loading 图标 */ - loading: { - type: BooleanConstructor; - default: boolean; - }; - /** 根据节点最小高度计算数据总高度 */ - nodeMinHeight: { - type: NumberConstructor; - default: number; - }; - /** 子节点缩进 */ - nodeIndent: { - type: NumberConstructor; - default: number; - }; - /** 渲染节点数量,可见节点数大于此值且高度超过(容器可视高度能容纳节点数 + bufferNodeAmount)则不会渲染所有可见节点 */ - renderNodeAmount: { - type: NumberConstructor; - default: number; - }; - /** 当滚动到视野外的节点个数大于此值时刷新渲染节点 */ - bufferNodeAmount: { - type: NumberConstructor; - default: number; - }; - /** 节点根元素的 class ,传入函数以对每个节点定制 class */ - nodeClassName: { - type: (ObjectConstructor | StringConstructor | (() => Array) | (() => (node: TreeNode) => string | object | Array))[]; - }; - /** - * 使用 padding 代替 margin 来展示子节点缩进 - * 此 Prop 是为了方便样式定制,在下个大版本将全部使用 padding - * @deprecated - */ - usePadding: { - type: BooleanConstructor; - default: boolean; - }; -}>> & { - [x: `on${Capitalize}`]: ((...args: any[]) => any) | undefined; -}, { - data: AnyPropsArrayType; + scrollTo: (key: TreeNodeKeyType, verticalPosition?: number | "bottom" | "top" | "center") => void; +}, unknown, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, { + [x: string]: (...args: any[]) => void; +}, string, import("vue").PublicProps, Readonly, { + data: () => never[]; + unloadDataList: () => never[]; + showUnloadCheckedNodes: boolean; + emptyText: string; + titleField: string; keyField: string; - ignoreMode: "none" | "children" | "parents"; + separator: string; + checkable: boolean; + selectable: boolean; filteredNodeCheckable: boolean; cascade: boolean; + enableLeafOnly: boolean; + disableAll: boolean; defaultExpandAll: boolean; + defaultExpandedKeys: () => never[]; + expandedKeys: () => never[]; + draggable: boolean; + droppable: boolean; + beforeDropMethod: () => () => boolean; + ignoreMode: ignoreEnum; + autoLoad: boolean; expandOnFilter: boolean; + unselectOnClick: boolean; + loading: boolean; + nodeMinHeight: number; + nodeIndent: number; + renderNodeAmount: number; + bufferNodeAmount: number; +}>>>, { + keyField: string; + ignoreMode: "children" | "none" | "parents"; + filteredNodeCheckable: boolean; + cascade: boolean; + defaultExpandAll: boolean; + expandOnFilter: boolean; + data: AnyPropsArrayType; titleField: string; checkable: boolean; selectable: boolean; @@ -508,20 +216,45 @@ declare const _default: import("vue-demi").DefineComponent<{ disableAll: boolean; draggable: boolean; droppable: boolean; - unloadDataList: AnyPropsArrayType; - showUnloadCheckedNodes: boolean; emptyText: string; separator: string; + showUnloadCheckedNodes: boolean; + unloadDataList: AnyPropsArrayType; enableLeafOnly: boolean; defaultExpandedKeys: TreeNodeKeyType[]; expandedKeys: TreeNodeKeyType[]; beforeDropMethod: (dragKey: TreeNodeKeyType, dropKey: TreeNodeKeyType, hoverPart: dragHoverPartEnum) => boolean; autoLoad: boolean; loading: boolean; - nodeMinHeight: number; nodeIndent: number; renderNodeAmount: number; + nodeMinHeight: number; bufferNodeAmount: number; - usePadding: boolean; +}, {}>, { + empty?(_: {}): any; + loading?(_: {}): any; }>; export default _default; + +type __VLS_WithDefaults = { + [K in keyof Pick]: K extends keyof D ? __VLS_Prettify : P[K]; +}; +type __VLS_Prettify = { + [K in keyof T]: T[K]; +} & {}; +type __VLS_WithTemplateSlots = T & { + new (): { + $slots: S; + }; +}; +type __VLS_NonUndefinedable = T extends undefined ? never : T; +type __VLS_TypePropsToOption = { + [K in keyof T]-?: {} extends Pick ? { + type: import('vue').PropType<__VLS_NonUndefinedable>; + } : { + type: import('vue').PropType; + required: true; + }; +}; diff --git a/types/components/TreeDrop.vue.d.ts b/types/components/TreeDrop.vue.d.ts index e71c1fb..d188b88 100644 --- a/types/components/TreeDrop.vue.d.ts +++ b/types/components/TreeDrop.vue.d.ts @@ -1,56 +1,244 @@ -import { PropType } from 'vue-demi'; +import { TreeSearchProps } from './TreeSearch.vue'; import { TreeNode } from '../store'; import { placementEnum } from '../const'; -import { TreeNodeKeyType } from '../types'; -declare const _default: import("vue-demi").DefineComponent<{ - /** 兼容 Vue 2.5.16 bug */ - modelValue: PropType; +import { TreeNodeKeyType, PlacementType } from '../types'; +export type TreeDropProps = TreeSearchProps & { /** 下拉内容高度 */ - dropHeight: { - type: NumberConstructor; - default: number; - }; + dropHeight?: number; /** 展示输入框 placeholder */ - dropPlaceholder: { - type: StringConstructor; - }; + dropPlaceholder?: string; /** 是否禁用 */ - dropDisabled: { - type: BooleanConstructor; - default: boolean; - }; + dropDisabled?: boolean; /** 允许清空 */ - clearable: { - type: BooleanConstructor; - default: boolean; - }; + clearable?: boolean; /** 下拉弹出框位置 */ - placement: { - type: PropType<"top" | "bottom" | "bottom-start" | "bottom-end" | "top-start" | "top-end">; - default: placementEnum; - }; + placement?: PlacementType; /** 将下拉 DOM 转移到 body 中 */ - transfer: { - type: BooleanConstructor; - default: boolean; - }; + transfer?: boolean; /** 在下拉框容器上额外添加的 class */ - dropdownClassName: PropType; + dropdownClassName?: string | string[]; /** 下拉框容器最小宽度,未指定则默认为展示输入框宽度 */ - dropdownMinWidth: { - type: NumberConstructor; - }; + dropdownMinWidth?: number; /** 固定下拉框容器宽度,当内容超出最小宽度不会伸长,而是出现横向滚动条 */ - dropdownWidthFixed: { - type: BooleanConstructor; - default: boolean; - }; -}, { - treeSearchValue: import("vue-demi").WritableComputedRef; - dropdownVisible: import("vue-demi").Ref; - checkedCount: import("vue-demi").Ref; - selectedTitle: import("vue-demi").Ref; - slotProps: { + dropdownWidthFixed?: boolean; +}; +export declare const DEFAULT_TREE_DROP_PROPS: { + dropHeight: number; + dropDisabled: boolean; + clearable: boolean; + placement: placementEnum; + transfer: boolean; + dropdownWidthFixed: boolean; + searchPlaceholder: string; + showCheckAll: boolean; + showCheckedButton: boolean; + checkedButtonText: string; + showFooter: boolean; + searchLength: number; + searchDisabled: boolean; + searchRemote: boolean; + searchDebounceTime: number; + data: () => never[]; + unloadDataList: () => never[]; + showUnloadCheckedNodes: boolean; + emptyText: string; + titleField: string; + keyField: string; + separator: string; + checkable: boolean; + selectable: boolean; + filteredNodeCheckable: boolean; + cascade: boolean; + enableLeafOnly: boolean; + disableAll: boolean; + defaultExpandAll: boolean; + defaultExpandedKeys: () => never[]; + expandedKeys: () => never[]; + draggable: boolean; + droppable: boolean; + beforeDropMethod: () => () => boolean; + ignoreMode: import("../const").ignoreEnum; + autoLoad: boolean; + expandOnFilter: boolean; + unselectOnClick: boolean; + loading: boolean; + nodeMinHeight: number; + nodeIndent: number; + renderNodeAmount: number; + bufferNodeAmount: number; +}; +export declare const TREE_DROP_EVENTS: string[]; +declare const _default: __VLS_WithTemplateSlots, { + dropHeight: number; + dropDisabled: boolean; + clearable: boolean; + placement: placementEnum; + transfer: boolean; + dropdownWidthFixed: boolean; + searchPlaceholder: string; + showCheckAll: boolean; + showCheckedButton: boolean; + checkedButtonText: string; + showFooter: boolean; + searchLength: number; + searchDisabled: boolean; + searchRemote: boolean; + searchDebounceTime: number; + data: () => never[]; + unloadDataList: () => never[]; + showUnloadCheckedNodes: boolean; + emptyText: string; + titleField: string; + keyField: string; + separator: string; + checkable: boolean; + selectable: boolean; + filteredNodeCheckable: boolean; + cascade: boolean; + enableLeafOnly: boolean; + disableAll: boolean; + defaultExpandAll: boolean; + defaultExpandedKeys: () => never[]; + expandedKeys: () => never[]; + draggable: boolean; + droppable: boolean; + beforeDropMethod: () => () => boolean; + ignoreMode: import("../const").ignoreEnum; + autoLoad: boolean; + expandOnFilter: boolean; + unselectOnClick: boolean; + loading: boolean; + nodeMinHeight: number; + nodeIndent: number; + renderNodeAmount: number; + bufferNodeAmount: number; +}>, { + filter: (keyword: string, filterMethod?: import("../store/tree-store.js").FilterFunctionType | undefined) => void; + setData: (data: import("../types").AnyPropsArrayType) => void; + setChecked: (key: TreeNodeKeyType, value: boolean) => void; + setCheckedKeys: (keys: TreeNodeKeyType[], value: boolean) => void; + checkAll: () => void; + clearChecked: () => void; + setSelected: (key: TreeNodeKeyType, value: boolean) => void; + clearSelected: () => void; + setExpand: (key: TreeNodeKeyType, value: boolean, expandParent?: boolean) => void; + setExpandKeys: (keys: TreeNodeKeyType[], value: boolean) => void; + setExpandAll: (value: boolean) => void; + getCheckedNodes: (ignoreMode?: "children" | "none" | "parents" | undefined) => TreeNode[]; + getCheckedKeys: (ignoreMode?: "children" | "none" | "parents" | undefined) => TreeNodeKeyType[]; + getIndeterminateNodes: () => TreeNode[]; + getSelectedNode: () => TreeNode | null; + getSelectedKey: () => TreeNodeKeyType | null; + getExpandNodes: () => TreeNode[]; + getExpandKeys: () => TreeNodeKeyType[]; + getCurrentVisibleNodes: () => TreeNode[]; + getNode: (key: TreeNodeKeyType) => TreeNode | null; + getTreeData: () => TreeNode[]; + getFlatData: () => TreeNode[]; + getNodesCount: () => number; + insertBefore: (insertedNode: TreeNodeKeyType | import("../store/tree-node.js").ITreeNodeOptions, referenceKey: TreeNodeKeyType) => TreeNode | null; + insertAfter: (insertedNode: TreeNodeKeyType | import("../store/tree-node.js").ITreeNodeOptions, referenceKey: TreeNodeKeyType) => TreeNode | null; + append: (insertedNode: TreeNodeKeyType | import("../store/tree-node.js").ITreeNodeOptions, parentKey: TreeNodeKeyType) => TreeNode | null; + prepend: (insertedNode: TreeNodeKeyType | import("../store/tree-node.js").ITreeNodeOptions, parentKey: TreeNodeKeyType) => TreeNode | null; + remove: (removedKey: TreeNodeKeyType) => TreeNode | null; + showCheckedNodes: (showUnloadCheckedNodes?: boolean | undefined) => void; + loadRootNodes: () => Promise; + scrollTo: (key: TreeNodeKeyType, verticalPosition?: number | "bottom" | "top" | "center") => void; + clearKeyword: () => void; + getKeyword: () => string; + search: (keyword1?: string | undefined) => Promise; +}, unknown, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, { + [x: string]: (...args: any[]) => void; +}, string, import("vue").PublicProps, Readonly, { + dropHeight: number; + dropDisabled: boolean; + clearable: boolean; + placement: placementEnum; + transfer: boolean; + dropdownWidthFixed: boolean; + searchPlaceholder: string; + showCheckAll: boolean; + showCheckedButton: boolean; + checkedButtonText: string; + showFooter: boolean; + searchLength: number; + searchDisabled: boolean; + searchRemote: boolean; + searchDebounceTime: number; + data: () => never[]; + unloadDataList: () => never[]; + showUnloadCheckedNodes: boolean; + emptyText: string; + titleField: string; + keyField: string; + separator: string; + checkable: boolean; + selectable: boolean; + filteredNodeCheckable: boolean; + cascade: boolean; + enableLeafOnly: boolean; + disableAll: boolean; + defaultExpandAll: boolean; + defaultExpandedKeys: () => never[]; + expandedKeys: () => never[]; + draggable: boolean; + droppable: boolean; + beforeDropMethod: () => () => boolean; + ignoreMode: import("../const").ignoreEnum; + autoLoad: boolean; + expandOnFilter: boolean; + unselectOnClick: boolean; + loading: boolean; + nodeMinHeight: number; + nodeIndent: number; + renderNodeAmount: number; + bufferNodeAmount: number; +}>>>, { + keyField: string; + ignoreMode: "children" | "none" | "parents"; + filteredNodeCheckable: boolean; + cascade: boolean; + defaultExpandAll: boolean; + expandOnFilter: boolean; + data: import("../types").AnyPropsArrayType; + titleField: string; + checkable: boolean; + selectable: boolean; + unselectOnClick: boolean; + disableAll: boolean; + draggable: boolean; + droppable: boolean; + emptyText: string; + separator: string; + showUnloadCheckedNodes: boolean; + unloadDataList: import("../types").AnyPropsArrayType; + enableLeafOnly: boolean; + defaultExpandedKeys: TreeNodeKeyType[]; + expandedKeys: TreeNodeKeyType[]; + beforeDropMethod: (dragKey: TreeNodeKeyType, dropKey: TreeNodeKeyType, hoverPart: import("../const").dragHoverPartEnum) => boolean; + autoLoad: boolean; + loading: boolean; + nodeIndent: number; + renderNodeAmount: number; + nodeMinHeight: number; + bufferNodeAmount: number; + searchPlaceholder: string; + showCheckAll: boolean; + showCheckedButton: boolean; + checkedButtonText: string; + showFooter: boolean; + searchLength: number; + searchDisabled: boolean; + searchRemote: boolean; + searchDebounceTime: number; + dropHeight: number; + dropDisabled: boolean; + clearable: boolean; + placement: "bottom-start" | "bottom-end" | "bottom" | "top-start" | "top-end" | "top"; + transfer: boolean; + dropdownWidthFixed: boolean; +}, {}>, Partial, (_: any) => any>> & { + default?(_: { checkedNodes: { [x: string]: any; _level: number; @@ -68,7 +256,7 @@ declare const _default: import("vue-demi").DefineComponent<{ _loaded: boolean; readonly _keyField: string; readonly _remote: boolean; - setChildren: (children: import("../store/tree-node").ITreeNodeOptions[]) => void; + setChildren: (children: import("../store/tree-node.js").ITreeNodeOptions[]) => void; }[]; checkedKeys: TreeNodeKeyType[]; selectedNode?: { @@ -88,91 +276,74 @@ declare const _default: import("vue-demi").DefineComponent<{ _loaded: boolean; readonly _keyField: string; readonly _remote: boolean; - setChildren: (children: import("../store/tree-node").ITreeNodeOptions[]) => void; + setChildren: (children: import("../store/tree-node.js").ITreeNodeOptions[]) => void; } | undefined; selectedKey?: TreeNodeKeyType | undefined; - }; - wrapperCls: import("vue-demi").ComputedRef; - referenceCls: import("vue-demi").ComputedRef; - displayInputCls: import("vue-demi").ComputedRef<(string | { - [x: string]: boolean; - })[]>; - displayInputTextCls: import("vue-demi").ComputedRef<(string | { - [x: string]: boolean; - })[]>; - dropIconCls: import("vue-demi").ComputedRef<(string | { - [x: string]: boolean; - })[]>; - clearIconCls: import("vue-demi").ComputedRef; - dropdownCls: import("vue-demi").ComputedRef<(string | undefined)[]>; - checkable: import("vue-demi").ComputedRef; - selectable: import("vue-demi").ComputedRef; - displayValue: import("vue-demi").ComputedRef; - showClearIcon: import("vue-demi").ComputedRef; - referenceRef: import("vue-demi").Ref; - dropdownRef: import("vue-demi").Ref; - treeSearchRef: import("vue-demi").Ref; - locateDropdown: () => void; - handleRefClick: () => void; - handleDocumentClick: (e: MouseEvent) => void; - handleClear: () => void; - handleCheckedChange: (nodes: TreeNode[], keys: TreeNodeKeyType[]) => void; - handleSelectedChange: (node?: TreeNode, key?: TreeNodeKeyType) => void; - handleSetData: () => void; -}, unknown, {}, {}, import("vue-demi").ComponentOptionsMixin, import("vue-demi").ComponentOptionsMixin, ("checked-change" | "update:modelValue" | "clear" | "dropdown-visible-change")[], "checked-change" | "update:modelValue" | "clear" | "dropdown-visible-change", import("vue-demi").VNodeProps & import("vue-demi").AllowedComponentProps & import("vue-demi").ComponentCustomProps, Readonly; - /** 下拉内容高度 */ - dropHeight: { - type: NumberConstructor; - default: number; - }; - /** 展示输入框 placeholder */ - dropPlaceholder: { - type: StringConstructor; - }; - /** 是否禁用 */ - dropDisabled: { - type: BooleanConstructor; - default: boolean; - }; - /** 允许清空 */ - clearable: { - type: BooleanConstructor; - default: boolean; - }; - /** 下拉弹出框位置 */ - placement: { - type: PropType<"top" | "bottom" | "bottom-start" | "bottom-end" | "top-start" | "top-end">; - default: placementEnum; - }; - /** 将下拉 DOM 转移到 body 中 */ - transfer: { - type: BooleanConstructor; - default: boolean; - }; - /** 在下拉框容器上额外添加的 class */ - dropdownClassName: PropType; - /** 下拉框容器最小宽度,未指定则默认为展示输入框宽度 */ - dropdownMinWidth: { - type: NumberConstructor; - }; - /** 固定下拉框容器宽度,当内容超出最小宽度不会伸长,而是出现横向滚动条 */ - dropdownWidthFixed: { - type: BooleanConstructor; - default: boolean; - }; -}>> & { - "onChecked-change"?: ((...args: any[]) => any) | undefined; - "onUpdate:modelValue"?: ((...args: any[]) => any) | undefined; - onClear?: ((...args: any[]) => any) | undefined; - "onDropdown-visible-change"?: ((...args: any[]) => any) | undefined; -}, { - dropHeight: number; - dropDisabled: boolean; - clearable: boolean; - placement: "top" | "bottom" | "bottom-start" | "bottom-end" | "top-start" | "top-end"; - transfer: boolean; - dropdownWidthFixed: boolean; + }): any; + display?(_: { + checkedNodes: { + [x: string]: any; + _level: number; + checked: boolean; + selected: boolean; + indeterminate: boolean; + disabled: boolean; + expand: boolean; + visible: boolean; + _filterVisible: boolean; + _parent: any | null; + children: any[]; + isLeaf: boolean; + _loading: boolean; + _loaded: boolean; + readonly _keyField: string; + readonly _remote: boolean; + setChildren: (children: import("../store/tree-node.js").ITreeNodeOptions[]) => void; + }[]; + checkedKeys: TreeNodeKeyType[]; + selectedNode?: { + [x: string]: any; + _level: number; + checked: boolean; + selected: boolean; + indeterminate: boolean; + disabled: boolean; + expand: boolean; + visible: boolean; + _filterVisible: boolean; + _parent: any | null; + children: any[]; + isLeaf: boolean; + _loading: boolean; + _loaded: boolean; + readonly _keyField: string; + readonly _remote: boolean; + setChildren: (children: import("../store/tree-node.js").ITreeNodeOptions[]) => void; + } | undefined; + selectedKey?: TreeNodeKeyType | undefined; + }): any; + clear?(_: {}): any; }>; export default _default; +type __VLS_WithDefaults = { + [K in keyof Pick]: K extends keyof D ? __VLS_Prettify : P[K]; +}; +type __VLS_Prettify = { + [K in keyof T]: T[K]; +} & {}; +type __VLS_WithTemplateSlots = T & { + new (): { + $slots: S; + }; +}; +type __VLS_NonUndefinedable = T extends undefined ? never : T; +type __VLS_TypePropsToOption = { + [K in keyof T]-?: {} extends Pick ? { + type: import('vue').PropType<__VLS_NonUndefinedable>; + } : { + type: import('vue').PropType; + required: true; + }; +}; diff --git a/types/components/TreeNode.vue.d.ts b/types/components/TreeNode.vue.d.ts index 727fb12..d0fb09e 100644 --- a/types/components/TreeNode.vue.d.ts +++ b/types/components/TreeNode.vue.d.ts @@ -1,107 +1,21 @@ -import { VNode, PropType } from 'vue-demi'; import { TreeNode } from '../store'; -import type { GetNodeFn } from '../types'; -declare const _default: import("vue-demi").DefineComponent<{ - /** 节点数据,注意!!为了性能,不让 Vue 监听过多属性,这个 data 不是完整的 TreeNode ,不包括 _parent 和 children 属性 */ - data: PropType; - /** 节点标题字段 */ - titleField: { - type: StringConstructor; - default: string; - }; - /** 节点唯一标识字段 */ - keyField: StringConstructor; - /** 节点渲染 render 函数 */ - render: PropType<(node: TreeNode) => VNode>; - /** 是否可多选 */ - checkable: BooleanConstructor; - /** 是否可单选 */ - selectable: BooleanConstructor; - /** 点击已选中节点是否取消选中 */ - unselectOnClick: BooleanConstructor; - /** 是否禁用所有节点 */ - disableAll: BooleanConstructor; - /** 是否可拖拽 */ - draggable: BooleanConstructor; - /** 是否可放置 */ - droppable: BooleanConstructor; - getNode: PropType; -}, { - /** 节点拖拽 dragover */ - dragoverBody: import("vue-demi").Ref; - /** 节点前拖拽 dragover */ - dragoverBefore: import("vue-demi").Ref; - /** 节点后拖拽 dragover */ - dragoverAfter: import("vue-demi").Ref; - wrapperCls: import("vue-demi").ComputedRef<(string | { - [x: string]: boolean | undefined; - })[]>; - nodeBodyCls: import("vue-demi").ComputedRef<(string | { - [x: string]: boolean; - })[]>; - dropBeforeCls: import("vue-demi").ComputedRef<(string | { - [x: string]: boolean; - })[]>; - dropAfterCls: import("vue-demi").ComputedRef<(string | { - [x: string]: boolean; - })[]>; - squareCls: import("vue-demi").ComputedRef; - expandCls: import("vue-demi").ComputedRef<(string | { - [x: string]: boolean | undefined; - })[]>; - loadingIconCls: import("vue-demi").ComputedRef; - checkboxCls: import("vue-demi").ComputedRef<(string | { - [x: string]: boolean | undefined; - })[]>; - titleCls: import("vue-demi").ComputedRef<(string | { - [x: string]: boolean | undefined; - })[]>; - fullData: import("vue-demi").ComputedRef; - showCheckbox: import("vue-demi").ComputedRef; - renderFunction: any; - renderComponent: import("vue-demi").ComputedRef>, {}>>; - dragListeners: import("vue-demi").ComputedRef<{}>; - dropListeners: import("vue-demi").ComputedRef<{}>; - handleExpand: () => void; - handleCheck: () => void; - handleSelect: (e: MouseEvent) => void; - handleDblclick: (e: MouseEvent) => void; - handleRightClick: (e: MouseEvent) => void; - nodeBody: import("vue-demi").Ref; -}, unknown, {}, {}, import("vue-demi").ComponentOptionsMixin, import("vue-demi").ComponentOptionsMixin, string[], string, import("vue-demi").VNodeProps & import("vue-demi").AllowedComponentProps & import("vue-demi").ComponentCustomProps, Readonly; - /** 节点标题字段 */ - titleField: { - type: StringConstructor; - default: string; - }; - /** 节点唯一标识字段 */ - keyField: StringConstructor; - /** 节点渲染 render 函数 */ - render: PropType<(node: TreeNode) => VNode>; - /** 是否可多选 */ - checkable: BooleanConstructor; - /** 是否可单选 */ - selectable: BooleanConstructor; - /** 点击已选中节点是否取消选中 */ - unselectOnClick: BooleanConstructor; - /** 是否禁用所有节点 */ - disableAll: BooleanConstructor; - /** 是否可拖拽 */ - draggable: BooleanConstructor; - /** 是否可放置 */ - droppable: BooleanConstructor; - getNode: PropType; -}>> & { - [x: `on${Capitalize}`]: ((...args: any[]) => any) | undefined; -}, { - titleField: string; - checkable: boolean; - selectable: boolean; - unselectOnClick: boolean; - disableAll: boolean; - draggable: boolean; - droppable: boolean; -}>; +import { TreeProps } from './Tree.vue'; +import { GetNodeFn } from '../types'; +type PickedProps = Required> & Pick; +export type TreeNodeProps = PickedProps & { + data: TreeNode; + getNode?: GetNodeFn; +}; +declare const _default: import("vue").DefineComponent<__VLS_TypePropsToOption, {}, unknown, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, { + [x: string]: (...args: any[]) => void; +}, string, import("vue").PublicProps, Readonly>>, {}, {}>; export default _default; +type __VLS_NonUndefinedable = T extends undefined ? never : T; +type __VLS_TypePropsToOption = { + [K in keyof T]-?: {} extends Pick ? { + type: import('vue').PropType<__VLS_NonUndefinedable>; + } : { + type: import('vue').PropType; + required: true; + }; +}; diff --git a/types/components/TreeSearch.vue.d.ts b/types/components/TreeSearch.vue.d.ts index 0baad28..3fb1aea 100644 --- a/types/components/TreeSearch.vue.d.ts +++ b/types/components/TreeSearch.vue.d.ts @@ -1,152 +1,209 @@ -import { Ref, PropType } from 'vue-demi'; -import type { TreeNodeKeyType } from '../types'; -declare const _default: import("vue-demi").DefineComponent<{ - /** 兼容 Vue 2.5.16 bug */ - modelValue: PropType; +import { TreeProps } from './Tree.vue'; +import { TreeNode } from '..'; +export type TreeSearchProps = TreeProps & { /** 搜索输入框的 placeholder */ - searchPlaceholder: { - type: StringConstructor; - default: string; - }; + searchPlaceholder?: string; /** 是否显示全选复选框 */ - showCheckAll: { - type: BooleanConstructor; - default: boolean; - }; + showCheckAll?: boolean; /** 是否显示已选按钮 */ - showCheckedButton: { - type: BooleanConstructor; - default: boolean; - }; + showCheckedButton?: boolean; /** 已选按钮文字 */ - checkedButtonText: { - type: StringConstructor; - default: string; - }; + checkedButtonText?: string; /** 是否显示底部信息 */ - showFooter: { - type: BooleanConstructor; - default: boolean; - }; + showFooter?: boolean; /** 如果传入此 Prop ,触发 `search` 事件后将会执行此方法,否则会执行组件内置的搜索方法 */ - searchMethod: PropType<(keyword: string) => void | Promise>; + searchMethod?: (keyword: string) => void | Promise; /** 触发搜索的字符长度 */ - searchLength: { - type: NumberConstructor; - default: number; - }; + searchLength?: number; /** 禁用搜索功能 */ - searchDisabled: { - type: BooleanConstructor; - default: boolean; - }; + searchDisabled?: boolean; /** 是否远程搜索,传入 `searchMethod` 时无效 */ - searchRemote: { - type: BooleanConstructor; - default: boolean; - }; + searchRemote?: boolean; /** 搜索防抖时间,单位为毫秒 */ - searchDebounceTime: { - type: NumberConstructor; - default: number; - }; -}, { - treeModelValue: import("vue-demi").WritableComputedRef; - setChecked: (a: any, b: any) => void; - checkAllStatus: { - checked: boolean; - indeterminate: boolean; - disabled: boolean; - }; - isShowingChecked: Ref; - keyword: Ref; - debounceTimer: Ref; - checkedCount: Ref; - wrapperCls: import("vue-demi").ComputedRef; - searchCls: import("vue-demi").ComputedRef; - checkAllWrapperCls: import("vue-demi").ComputedRef; - checkboxCls: import("vue-demi").ComputedRef<(string | { - [x: string]: boolean; - })[]>; - inputWrapperCls: import("vue-demi").ComputedRef; - inputCls: import("vue-demi").ComputedRef<(string | { - [x: string]: boolean; - })[]>; - actionWrapperCls: import("vue-demi").ComputedRef; - checkedButtonCls: import("vue-demi").ComputedRef<(string | { - [x: string]: boolean; - })[]>; - treeWrapperCls: import("vue-demi").ComputedRef; - footerCls: import("vue-demi").ComputedRef; - checkable: import("vue-demi").ComputedRef; - treeRef: Ref; - handleCheckAll: () => void; - handleSearch: () => void; - handleShowChecked: () => void; - updateCheckedCount: () => void; - handleSetData: () => void; - updateCheckAllStatus: () => void; - getKeyword: () => string; - checkedChange: (value1: any, value2: any) => void; - onSetData: () => void; + searchDebounceTime?: number; +}; +export declare const DEFAULT_TREE_SEARCH_PROPS: { + searchPlaceholder: string; + showCheckAll: boolean; + showCheckedButton: boolean; + checkedButtonText: string; + showFooter: boolean; + searchLength: number; + searchDisabled: boolean; + searchRemote: boolean; + searchDebounceTime: number; + data: () => never[]; + unloadDataList: () => never[]; + showUnloadCheckedNodes: boolean; + emptyText: string; + titleField: string; + keyField: string; + separator: string; + checkable: boolean; + selectable: boolean; + filteredNodeCheckable: boolean; + cascade: boolean; + enableLeafOnly: boolean; + disableAll: boolean; + defaultExpandAll: boolean; + defaultExpandedKeys: () => never[]; + expandedKeys: () => never[]; + draggable: boolean; + droppable: boolean; + beforeDropMethod: () => () => boolean; + ignoreMode: import("../const").ignoreEnum; + autoLoad: boolean; + expandOnFilter: boolean; + unselectOnClick: boolean; + loading: boolean; + nodeMinHeight: number; + nodeIndent: number; + renderNodeAmount: number; + bufferNodeAmount: number; +}; +export declare const TREE_SEARCH_EVENTS: string[]; +declare const _default: __VLS_WithTemplateSlots, { + searchPlaceholder: string; + showCheckAll: boolean; + showCheckedButton: boolean; + checkedButtonText: string; + showFooter: boolean; + searchLength: number; + searchDisabled: boolean; + searchRemote: boolean; + searchDebounceTime: number; + data: () => never[]; + unloadDataList: () => never[]; + showUnloadCheckedNodes: boolean; + emptyText: string; + titleField: string; + keyField: string; + separator: string; + checkable: boolean; + selectable: boolean; + filteredNodeCheckable: boolean; + cascade: boolean; + enableLeafOnly: boolean; + disableAll: boolean; + defaultExpandAll: boolean; + defaultExpandedKeys: () => never[]; + expandedKeys: () => never[]; + draggable: boolean; + droppable: boolean; + beforeDropMethod: () => () => boolean; + ignoreMode: import("../const").ignoreEnum; + autoLoad: boolean; + expandOnFilter: boolean; + unselectOnClick: boolean; + loading: boolean; + nodeMinHeight: number; + nodeIndent: number; + renderNodeAmount: number; + bufferNodeAmount: number; +}>, { clearKeyword: () => void; + getKeyword: () => string; search: (keyword1?: string) => Promise; -}, unknown, {}, {}, import("vue-demi").ComponentOptionsMixin, import("vue-demi").ComponentOptionsMixin, ("search" | "set-data" | "checked-change" | "update:modelValue")[], "search" | "set-data" | "checked-change" | "update:modelValue", import("vue-demi").VNodeProps & import("vue-demi").AllowedComponentProps & import("vue-demi").ComponentCustomProps, Readonly; - /** 搜索输入框的 placeholder */ - searchPlaceholder: { - type: StringConstructor; - default: string; - }; - /** 是否显示全选复选框 */ - showCheckAll: { - type: BooleanConstructor; - default: boolean; - }; - /** 是否显示已选按钮 */ - showCheckedButton: { - type: BooleanConstructor; - default: boolean; - }; - /** 已选按钮文字 */ - checkedButtonText: { - type: StringConstructor; - default: string; - }; - /** 是否显示底部信息 */ - showFooter: { - type: BooleanConstructor; - default: boolean; - }; - /** 如果传入此 Prop ,触发 `search` 事件后将会执行此方法,否则会执行组件内置的搜索方法 */ - searchMethod: PropType<(keyword: string) => void | Promise>; - /** 触发搜索的字符长度 */ - searchLength: { - type: NumberConstructor; - default: number; - }; - /** 禁用搜索功能 */ - searchDisabled: { - type: BooleanConstructor; - default: boolean; - }; - /** 是否远程搜索,传入 `searchMethod` 时无效 */ - searchRemote: { - type: BooleanConstructor; - default: boolean; - }; - /** 搜索防抖时间,单位为毫秒 */ - searchDebounceTime: { - type: NumberConstructor; - default: number; - }; -}>> & { - onSearch?: ((...args: any[]) => any) | undefined; - "onSet-data"?: ((...args: any[]) => any) | undefined; - "onChecked-change"?: ((...args: any[]) => any) | undefined; - "onUpdate:modelValue"?: ((...args: any[]) => any) | undefined; -}, { + filter: (keyword: string, filterMethod?: import("../store/tree-store.js").FilterFunctionType | undefined) => void; + setData: (data: import("../types/index.js").AnyPropsArrayType) => void; + setChecked: (key: import("../types/index.js").TreeNodeKeyType, value: boolean) => void; + setCheckedKeys: (keys: import("../types/index.js").TreeNodeKeyType[], value: boolean) => void; + checkAll: () => void; + clearChecked: () => void; + setSelected: (key: import("../types/index.js").TreeNodeKeyType, value: boolean) => void; + clearSelected: () => void; + setExpand: (key: import("../types/index.js").TreeNodeKeyType, value: boolean, expandParent?: boolean) => void; + setExpandKeys: (keys: import("../types/index.js").TreeNodeKeyType[], value: boolean) => void; + setExpandAll: (value: boolean) => void; + getCheckedNodes: (ignoreMode?: "children" | "none" | "parents" | undefined) => TreeNode[]; + getCheckedKeys: (ignoreMode?: "children" | "none" | "parents" | undefined) => import("../types/index.js").TreeNodeKeyType[]; + getIndeterminateNodes: () => TreeNode[]; + getSelectedNode: () => TreeNode | null; + getSelectedKey: () => import("../types/index.js").TreeNodeKeyType | null; + getExpandNodes: () => TreeNode[]; + getExpandKeys: () => import("../types/index.js").TreeNodeKeyType[]; + getCurrentVisibleNodes: () => TreeNode[]; + getNode: (key: import("../types/index.js").TreeNodeKeyType) => TreeNode | null; + getTreeData: () => TreeNode[]; + getFlatData: () => TreeNode[]; + getNodesCount: () => number; + insertBefore: (insertedNode: import("../types/index.js").TreeNodeKeyType | import("../store/tree-node.js").ITreeNodeOptions, referenceKey: import("../types/index.js").TreeNodeKeyType) => TreeNode | null; + insertAfter: (insertedNode: import("../types/index.js").TreeNodeKeyType | import("../store/tree-node.js").ITreeNodeOptions, referenceKey: import("../types/index.js").TreeNodeKeyType) => TreeNode | null; + append: (insertedNode: import("../types/index.js").TreeNodeKeyType | import("../store/tree-node.js").ITreeNodeOptions, parentKey: import("../types/index.js").TreeNodeKeyType) => TreeNode | null; + prepend: (insertedNode: import("../types/index.js").TreeNodeKeyType | import("../store/tree-node.js").ITreeNodeOptions, parentKey: import("../types/index.js").TreeNodeKeyType) => TreeNode | null; + remove: (removedKey: import("../types/index.js").TreeNodeKeyType) => TreeNode | null; + showCheckedNodes: (showUnloadCheckedNodes?: boolean | undefined) => void; + loadRootNodes: () => Promise; + scrollTo: (key: import("../types/index.js").TreeNodeKeyType, verticalPosition?: number | "bottom" | "top" | "center") => void; +}, unknown, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, { + [x: string]: (...args: any[]) => void; +}, string, import("vue").PublicProps, Readonly, { + searchPlaceholder: string; + showCheckAll: boolean; + showCheckedButton: boolean; + checkedButtonText: string; + showFooter: boolean; + searchLength: number; + searchDisabled: boolean; + searchRemote: boolean; + searchDebounceTime: number; + data: () => never[]; + unloadDataList: () => never[]; + showUnloadCheckedNodes: boolean; + emptyText: string; + titleField: string; + keyField: string; + separator: string; + checkable: boolean; + selectable: boolean; + filteredNodeCheckable: boolean; + cascade: boolean; + enableLeafOnly: boolean; + disableAll: boolean; + defaultExpandAll: boolean; + defaultExpandedKeys: () => never[]; + expandedKeys: () => never[]; + draggable: boolean; + droppable: boolean; + beforeDropMethod: () => () => boolean; + ignoreMode: import("../const").ignoreEnum; + autoLoad: boolean; + expandOnFilter: boolean; + unselectOnClick: boolean; + loading: boolean; + nodeMinHeight: number; + nodeIndent: number; + renderNodeAmount: number; + bufferNodeAmount: number; +}>>>, { + keyField: string; + ignoreMode: "children" | "none" | "parents"; + filteredNodeCheckable: boolean; + cascade: boolean; + defaultExpandAll: boolean; + expandOnFilter: boolean; + data: import("../types/index.js").AnyPropsArrayType; + titleField: string; + checkable: boolean; + selectable: boolean; + unselectOnClick: boolean; + disableAll: boolean; + draggable: boolean; + droppable: boolean; + emptyText: string; + separator: string; + showUnloadCheckedNodes: boolean; + unloadDataList: import("../types/index.js").AnyPropsArrayType; + enableLeafOnly: boolean; + defaultExpandedKeys: import("../types/index.js").TreeNodeKeyType[]; + expandedKeys: import("../types/index.js").TreeNodeKeyType[]; + beforeDropMethod: (dragKey: import("../types/index.js").TreeNodeKeyType, dropKey: import("../types/index.js").TreeNodeKeyType, hoverPart: import("../const").dragHoverPartEnum) => boolean; + autoLoad: boolean; + loading: boolean; + nodeIndent: number; + renderNodeAmount: number; + nodeMinHeight: number; + bufferNodeAmount: number; searchPlaceholder: string; showCheckAll: boolean; showCheckedButton: boolean; @@ -156,5 +213,31 @@ declare const _default: import("vue-demi").DefineComponent<{ searchDisabled: boolean; searchRemote: boolean; searchDebounceTime: number; +}, {}>, Partial, (_: any) => any>> & { + "search-input"?(_: {}): any; + actions?(_: {}): any; + footer?(_: {}): any; }>; export default _default; +type __VLS_WithDefaults = { + [K in keyof Pick]: K extends keyof D ? __VLS_Prettify : P[K]; +}; +type __VLS_Prettify = { + [K in keyof T]: T[K]; +} & {}; +type __VLS_WithTemplateSlots = T & { + new (): { + $slots: S; + }; +}; +type __VLS_NonUndefinedable = T extends undefined ? never : T; +type __VLS_TypePropsToOption = { + [K in keyof T]-?: {} extends Pick ? { + type: import('vue').PropType<__VLS_NonUndefinedable>; + } : { + type: import('vue').PropType; + required: true; + }; +}; diff --git a/types/const.d.ts b/types/const.d.ts index 23e19b6..2beb6a4 100644 --- a/types/const.d.ts +++ b/types/const.d.ts @@ -1,50 +1,11 @@ +import { IEventNames } from "./store/tree-store"; export declare enum ignoreEnum { none = "none", parents = "parents", children = "children" } -declare const enum apiEnum { - 'setData' = 0, - 'setChecked' = 1, - 'setCheckedKeys' = 2, - 'checkAll' = 3, - 'clearChecked' = 4, - 'setSelected' = 5, - 'clearSelected' = 6, - 'setExpand' = 7, - 'setExpandKeys' = 8, - 'setExpandAll' = 9, - 'getCheckedNodes' = 10, - 'getCheckedKeys' = 11, - 'getIndeterminateNodes' = 12, - 'getSelectedNode' = 13, - 'getSelectedKey' = 14, - 'getExpandNodes' = 15, - 'getExpandKeys' = 16, - 'getCurrentVisibleNodes' = 17, - 'getNode' = 18, - 'getTreeData' = 19, - 'getFlatData' = 20, - 'getNodesCount' = 21, - 'insertBefore' = 22, - 'insertAfter' = 23, - 'append' = 24, - 'prepend' = 25, - 'remove' = 26, - 'filter' = 27, - 'showCheckedNodes' = 28, - 'loadRootNodes' = 29, - 'scrollTo' = 30 -} -export declare const API_METHODS: string[]; -export type ApiType = keyof typeof apiEnum; -declare const enum treeSearchApiEnum { - 'clearKeyword' = 0, - 'getKeyword' = 1, - 'search' = 2 -} -export declare const TREE_SEARCH_API_METHODS: string[]; -export type TreeSearchApiType = keyof typeof treeSearchApiEnum; +export declare const TREE_API_METHODS: readonly ["setData", "setChecked", "setCheckedKeys", "checkAll", "clearChecked", "setSelected", "clearSelected", "setExpand", "setExpandKeys", "setExpandAll", "getCheckedNodes", "getCheckedKeys", "getIndeterminateNodes", "getSelectedNode", "getSelectedKey", "getExpandNodes", "getExpandKeys", "getCurrentVisibleNodes", "getNode", "getTreeData", "getFlatData", "getNodesCount", "insertBefore", "insertAfter", "append", "prepend", "remove", "filter", "showCheckedNodes", "loadRootNodes", "scrollTo"]; +export declare const TREE_SEARCH_API_METHODS: readonly ["setData", "setChecked", "setCheckedKeys", "checkAll", "clearChecked", "setSelected", "clearSelected", "setExpand", "setExpandKeys", "setExpandAll", "getCheckedNodes", "getCheckedKeys", "getIndeterminateNodes", "getSelectedNode", "getSelectedKey", "getExpandNodes", "getExpandKeys", "getCurrentVisibleNodes", "getNode", "getTreeData", "getFlatData", "getNodesCount", "insertBefore", "insertAfter", "append", "prepend", "remove", "filter", "showCheckedNodes", "loadRootNodes", "scrollTo", "clearKeyword", "getKeyword", "search"]; export declare enum placementEnum { 'bottom-start' = "bottom-start", 'bottom-end' = "bottom-end", @@ -65,4 +26,4 @@ export declare enum dragHoverPartEnum { after = "after" } export declare const TREE_NODE_EVENTS: string[]; -export {}; +export declare const storeEvents: Array; diff --git a/types/hooks/useIframeResize.d.ts b/types/hooks/useIframeResize.d.ts new file mode 100644 index 0000000..ec4ce87 --- /dev/null +++ b/types/hooks/useIframeResize.d.ts @@ -0,0 +1 @@ +export declare const useIframeResize: (resizeCallback: () => void) => void; diff --git a/types/hooks/usePublicTreeAPI.d.ts b/types/hooks/usePublicTreeAPI.d.ts new file mode 100644 index 0000000..2b4aa75 --- /dev/null +++ b/types/hooks/usePublicTreeAPI.d.ts @@ -0,0 +1,64 @@ +import { AnyPropsArrayType, INonReactiveData, IgnoreType, TreeNodeKeyType } from "../types"; +import { TreeNode } from ".."; +import { ITreeNodeOptions } from "../store/tree-node"; +import { FilterFunctionType } from "../store/tree-store"; +import { TreeProps } from "../components/Tree.vue"; +type IUsePublicTreeAPIProps = Required> & Pick; +export declare const usePublicTreeAPI: (nonReactive: INonReactiveData, props: IUsePublicTreeAPIProps, options: { + resetSpaceHeights: () => void; + updateExpandedKeys: () => void; + updateBlockData: () => void; + updateRender: () => void; +}) => { + unloadCheckedNodes: import("vue").Ref<{ + [x: string]: any; + _level: number; + checked: boolean; + selected: boolean; + indeterminate: boolean; + disabled: boolean; + expand: boolean; + visible: boolean; + _filterVisible: boolean; + _parent: any | null; + children: any[]; + isLeaf: boolean; + _loading: boolean; + _loaded: boolean; + readonly _keyField: string; + readonly _remote: boolean; + setChildren: (children: ITreeNodeOptions[]) => void; + }[]>; + isRootLoading: import("vue").Ref; + setData: (data: AnyPropsArrayType) => void; + setChecked: (key: TreeNodeKeyType, value: boolean) => void; + setCheckedKeys: (keys: TreeNodeKeyType[], value: boolean) => void; + checkAll: () => void; + clearChecked: () => void; + setSelected: (key: TreeNodeKeyType, value: boolean) => void; + clearSelected: () => void; + setExpand: (key: TreeNodeKeyType, value: boolean, expandParent?: boolean) => void; + setExpandKeys: (keys: TreeNodeKeyType[], value: boolean) => void; + setExpandAll: (value: boolean) => void; + getCheckedNodes: (ignoreMode?: IgnoreType) => TreeNode[]; + getCheckedKeys: (ignoreMode?: IgnoreType) => TreeNodeKeyType[]; + getIndeterminateNodes: () => TreeNode[]; + getSelectedNode: () => TreeNode | null; + getSelectedKey: () => TreeNodeKeyType | null; + getExpandNodes: () => TreeNode[]; + getExpandKeys: () => TreeNodeKeyType[]; + getCurrentVisibleNodes: () => TreeNode[]; + getNode: (key: TreeNodeKeyType) => TreeNode | null; + getTreeData: () => TreeNode[]; + getFlatData: () => TreeNode[]; + getNodesCount: () => number; + insertBefore: (insertedNode: TreeNodeKeyType | ITreeNodeOptions, referenceKey: TreeNodeKeyType) => TreeNode | null; + insertAfter: (insertedNode: TreeNodeKeyType | ITreeNodeOptions, referenceKey: TreeNodeKeyType) => TreeNode | null; + append: (insertedNode: TreeNodeKeyType | ITreeNodeOptions, parentKey: TreeNodeKeyType) => TreeNode | null; + prepend: (insertedNode: TreeNodeKeyType | ITreeNodeOptions, parentKey: TreeNodeKeyType) => TreeNode | null; + remove: (removedKey: TreeNodeKeyType) => TreeNode | null; + filter: (keyword: string, filterMethod?: FilterFunctionType) => void; + showCheckedNodes: (showUnloadCheckedNodes?: boolean) => void; + loadRootNodes: () => Promise; +}; +export {}; diff --git a/types/hooks/useTreeCls.d.ts b/types/hooks/useTreeCls.d.ts new file mode 100644 index 0000000..e48e9e5 --- /dev/null +++ b/types/hooks/useTreeCls.d.ts @@ -0,0 +1,13 @@ +declare const prefixCls = "ctree-tree"; +export { prefixCls as TREE_PREFIX_CLS }; +export declare const useTreeCls: () => { + wrapperCls: import("vue").ComputedRef; + scrollAreaCls: import("vue").ComputedRef; + blockAreaCls: import("vue").ComputedRef; + emptyCls: import("vue").ComputedRef; + emptyTextDefaultCls: import("vue").ComputedRef; + loadingCls: import("vue").ComputedRef; + loadingWrapperCls: import("vue").ComputedRef; + loadingIconCls: import("vue").ComputedRef; + iframeCls: import("vue").ComputedRef; +}; diff --git a/types/hooks/useTreeDropCls.d.ts b/types/hooks/useTreeDropCls.d.ts new file mode 100644 index 0000000..1509ee4 --- /dev/null +++ b/types/hooks/useTreeDropCls.d.ts @@ -0,0 +1,24 @@ +import { Ref } from 'vue'; +import { TreeDropProps } from '../components/TreeDrop.vue'; +declare const prefixCls = "ctree-tree-drop"; +export { prefixCls as TREE_DROP_PREFIX_CLS }; +export declare const useTreeDropCls: (props: TreeDropProps, options: { + dropdownVisible: Ref; + checkedCount: Ref; + selectedTitle: Ref; +}) => { + wrapperCls: import("vue").ComputedRef; + referenceCls: import("vue").ComputedRef; + displayInputCls: import("vue").ComputedRef<(string | { + "ctree-tree-drop__display-input_focus": boolean; + "ctree-tree-search__input_disabled": boolean | undefined; + })[]>; + displayInputTextCls: import("vue").ComputedRef<(string | { + "ctree-tree-drop__display-input-placeholder": boolean; + })[]>; + dropIconCls: import("vue").ComputedRef<(string | { + "ctree-tree-drop__display-icon-drop_active": boolean; + })[]>; + clearIconCls: import("vue").ComputedRef; + dropdownCls: import("vue").ComputedRef<(string | undefined)[]>; +}; diff --git a/types/hooks/useTreeNodeCls.d.ts b/types/hooks/useTreeNodeCls.d.ts new file mode 100644 index 0000000..ad20e12 --- /dev/null +++ b/types/hooks/useTreeNodeCls.d.ts @@ -0,0 +1,52 @@ +import { Ref } from "vue"; +import { TreeNodeProps } from "../components/TreeNode.vue"; +declare const prefixCls = "ctree-tree-node"; +export { prefixCls as TREE_NODE_PREFIX_CLS }; +export declare const useTreeNodeCls: (props: TreeNodeProps, dragoverRefs: { + dragoverBody: Ref; + dragoverBefore: Ref; + dragoverAfter: Ref; +}) => { + wrapperCls: import("vue").ComputedRef<(string | { + "ctree-tree-node__wrapper_is-leaf": boolean; + "ctree-tree-node_disabled": boolean; + "ctree-tree-node_checked"?: undefined; + "ctree-tree-node_indeterminate"?: undefined; + "ctree-tree-node_selected"?: undefined; + } | { + "ctree-tree-node_checked": boolean; + "ctree-tree-node_indeterminate": boolean; + "ctree-tree-node__wrapper_is-leaf"?: undefined; + "ctree-tree-node_disabled"?: undefined; + "ctree-tree-node_selected"?: undefined; + } | { + "ctree-tree-node_selected": boolean; + "ctree-tree-node__wrapper_is-leaf"?: undefined; + "ctree-tree-node_disabled"?: undefined; + "ctree-tree-node_checked"?: undefined; + "ctree-tree-node_indeterminate"?: undefined; + })[]>; + nodeBodyCls: import("vue").ComputedRef<(string | { + "ctree-tree-node__drop_active": boolean; + })[]>; + dropBeforeCls: import("vue").ComputedRef<(string | { + "ctree-tree-node__drop_active": boolean; + })[]>; + dropAfterCls: import("vue").ComputedRef<(string | { + "ctree-tree-node__drop_active": boolean; + })[]>; + checkboxWrapperCls: import("vue").ComputedRef; + expandCls: import("vue").ComputedRef<(string | { + "ctree-tree-node__expand_active": boolean; + })[]>; + loadingIconCls: import("vue").ComputedRef; + checkboxCls: import("vue").ComputedRef<(string | { + "ctree-tree-node__checkbox_checked": boolean; + "ctree-tree-node__checkbox_indeterminate": boolean; + "ctree-tree-node__checkbox_disabled": boolean; + })[]>; + titleCls: import("vue").ComputedRef<(string | { + "ctree-tree-node__title_selected": boolean; + "ctree-tree-node__title_disabled": boolean; + })[]>; +}; diff --git a/types/hooks/useTreeSearchCls.d.ts b/types/hooks/useTreeSearchCls.d.ts new file mode 100644 index 0000000..9f4af8c --- /dev/null +++ b/types/hooks/useTreeSearchCls.d.ts @@ -0,0 +1,31 @@ +import { Ref } from 'vue'; +import { TreeSearchProps } from '../components/TreeSearch.vue'; +declare const prefixCls = "ctree-tree-search"; +export { prefixCls as TREE_SEARCH_PREFIX_CLS }; +export declare const useTreeSearchCls: (props: TreeSearchProps, options: { + checkAllStatus: { + checked: boolean; + indeterminate: boolean; + disabled: boolean; + }; + isShowingChecked: Ref; +}) => { + wrapperCls: import("vue").ComputedRef; + searchCls: import("vue").ComputedRef; + checkAllWrapperCls: import("vue").ComputedRef; + checkboxCls: import("vue").ComputedRef<(string | { + "ctree-tree-node__checkbox_checked": boolean; + "ctree-tree-node__checkbox_indeterminate": boolean; + "ctree-tree-node__checkbox_disabled": boolean; + })[]>; + inputWrapperCls: import("vue").ComputedRef; + inputCls: import("vue").ComputedRef<(string | { + "ctree-tree-search__input_disabled": boolean | undefined; + })[]>; + actionWrapperCls: import("vue").ComputedRef; + checkedButtonCls: import("vue").ComputedRef<(string | { + "ctree-tree-search__checked-button_active": boolean; + })[]>; + treeWrapperCls: import("vue").ComputedRef; + footerCls: import("vue").ComputedRef; +}; diff --git a/types/hooks/useVirtualList.d.ts b/types/hooks/useVirtualList.d.ts new file mode 100644 index 0000000..f13e2f0 --- /dev/null +++ b/types/hooks/useVirtualList.d.ts @@ -0,0 +1,43 @@ +import { INonReactiveData, TreeNodeKeyType } from "../types"; +import { VerticalPositionType } from "../const"; +import { TreeProps } from "../components/Tree.vue"; +type IUseVirtualListProps = Required>; +export declare const useVirtualList: (nonReactive: INonReactiveData, props: IUseVirtualListProps) => { + scrollArea: import("vue").Ref; + renderNodes: import("vue").Ref<{ + [x: string]: any; + _level: number; + checked: boolean; + selected: boolean; + indeterminate: boolean; + disabled: boolean; + expand: boolean; + visible: boolean; + _filterVisible: boolean; + _parent: any | null; + children: any[]; + isLeaf: boolean; + _loading: boolean; + _loaded: boolean; + readonly _keyField: string; + readonly _remote: boolean; + setChildren: (children: import("../store/tree-node").ITreeNodeOptions[]) => void; + }[]>; + blockLength: import("vue").Ref; + blockAreaHeight: import("vue").Ref; + topSpaceHeight: import("vue").Ref; + bottomSpaceHeight: import("vue").Ref; + renderAmount: import("vue").Ref; + renderAmountCache: import("vue").Ref; + renderStart: import("vue").Ref; + renderStartCache: import("vue").Ref; + resetSpaceHeights: () => void; + updateRenderAmount: () => void; + updateRenderNodes: (isScroll?: boolean) => void; + updateRender: () => void; + updateBlockNodes: () => void; + updateBlockData: () => void; + handleTreeScroll: () => void; + scrollTo: (key: TreeNodeKeyType, verticalPosition?: VerticalPositionType | number) => void; +}; +export {}; diff --git a/types/store/tree-store.d.ts b/types/store/tree-store.d.ts index f9ca37c..ce47d8a 100644 --- a/types/store/tree-store.d.ts +++ b/types/store/tree-store.d.ts @@ -122,12 +122,12 @@ export default class TreeStore { * 获取多选选中节点 * @param ignoreMode 忽略模式,可选择忽略父节点或子节点,默认值是 CTree 的 ignoreMode Prop */ - getCheckedNodes(ignoreMode?: "none" | "children" | "parents" | undefined): TreeNode[]; + getCheckedNodes(ignoreMode?: "children" | "none" | "parents" | undefined): TreeNode[]; /** * 获取多选选中的节点 key ,包括未加载的 key * @param ignoreMode 忽略模式,同 `getCheckedNodes` */ - getCheckedKeys(ignoreMode?: "none" | "children" | "parents" | undefined): TreeNodeKeyType[]; + getCheckedKeys(ignoreMode?: "children" | "none" | "parents" | undefined): TreeNodeKeyType[]; /** * 获取多选半选状态节点 */ diff --git a/types/types/index.d.ts b/types/types/index.d.ts new file mode 100644 index 0000000..e3d7afb --- /dev/null +++ b/types/types/index.d.ts @@ -0,0 +1,24 @@ +import { placementEnum, ignoreEnum } from '../const'; +import TreeStore, { TreeNode } from '../store'; +export type PlacementType = keyof typeof placementEnum; +export type TreeNodeKeyType = string | number; +export type GetNodeFn = (key: TreeNodeKeyType) => TreeNode | null; +export type IgnoreType = keyof typeof ignoreEnum; +export type LoadFn = (node: null | TreeNode, resolve: Function, reject: Function) => any; +export interface TreeDropSlotProps { + /** 多选选中的节点 */ + checkedNodes: TreeNode[]; + /** 多选选中的节点 key */ + checkedKeys: TreeNodeKeyType[]; + /** 单选选中的节点 */ + selectedNode?: TreeNode; + /** 单选选中的节点 key */ + selectedKey?: TreeNodeKeyType; +} +export type AnyPropsArrayType = Array<{ + [key: string]: any; +}>; +export interface INonReactiveData { + store: TreeStore; + blockNodes: TreeNode[]; +} diff --git a/types/utils.d.ts b/types/utils.d.ts index 50ca4af..eb17755 100644 --- a/types/utils.d.ts +++ b/types/utils.d.ts @@ -1,2 +1,7 @@ -import type { Ref } from 'vue-demi'; -export declare function getCtreeMethods(treeRef: Ref): Record; +import { Ref } from "vue"; +export declare const getCtreeMethods: >(apiMethods: readonly T[], ref: Ref) => Pick; +type PickReadonly = { + readonly [P in K]: T[P]; +}; +export declare const pickReadonly: (obj: Readonly, ...keys: K[]) => PickReadonly; +export {}; From 8f6b7abe55f8354043f7a007969d42ca9df58ee7 Mon Sep 17 00:00:00 2001 From: ChuChencheng Date: Thu, 13 Jun 2024 00:45:21 +0800 Subject: [PATCH 02/13] test: use vitest --- jest.config.js | 32 -- package.json | 22 +- packages/vue2/package.json | 18 - packages/vue2/vite.config.ts | 41 -- pnpm-lock.yaml | 697 ++++++++++++++------------- pnpm-workspace.yaml | 3 - src/components/Tree.vue | 9 +- src/components/TreeDrop.vue | 11 +- src/components/TreeNode.vue | 3 +- src/components/TreeSearch.vue | 7 +- src/constants/events.ts | 36 ++ src/{const.ts => constants/index.ts} | 27 -- src/hooks/usePublicTreeAPI.ts | 6 +- src/hooks/useVirtualList.ts | 2 +- src/index.ts | 2 +- src/store/tree-store.ts | 2 +- src/types/index.ts | 2 +- tests/unit/tree-search.spec.ts | 10 +- tests/unit/tree.spec.ts | 43 +- tsconfig.tsbuildinfo | 2 +- types/components/Tree.vue.d.ts | 11 +- types/components/TreeDrop.vue.d.ts | 21 +- types/components/TreeSearch.vue.d.ts | 55 ++- types/constants/events.d.ts | 6 + types/constants/index.d.ts | 26 + types/hooks/useVirtualList.d.ts | 2 +- types/index.d.ts | 1 + types/store/tree-store.d.ts | 4 +- types/types/index.d.ts | 2 +- vite.config.ts | 14 +- vitest.config.ts | 11 + 31 files changed, 551 insertions(+), 577 deletions(-) delete mode 100644 jest.config.js delete mode 100644 packages/vue2/package.json delete mode 100644 packages/vue2/vite.config.ts delete mode 100644 pnpm-workspace.yaml create mode 100644 src/constants/events.ts rename src/{const.ts => constants/index.ts} (76%) create mode 100644 types/constants/events.d.ts create mode 100644 types/constants/index.d.ts create mode 100644 vitest.config.ts diff --git a/jest.config.js b/jest.config.js deleted file mode 100644 index 7abaaf4..0000000 --- a/jest.config.js +++ /dev/null @@ -1,32 +0,0 @@ -module.exports = { - moduleFileExtensions: [ - 'js', - 'jsx', - 'json', - 'vue', - 'ts', - 'tsx' - ], - transform: { - '^.+\\.vue$': '@vue/vue3-jest', - '.+\\.(css|styl|less|sass|scss|svg|png|jpg|ttf|woff|woff2)$': 'jest-transform-stub', - '^.+\\.tsx?$': ['ts-jest', { - babelConfig: true - }] - }, - transformIgnorePatterns: [ - '/node_modules/' - ], - moduleNameMapper: { - '^@/(.*)$': '/src/$1' - }, - snapshotSerializers: [ - 'jest-serializer-vue' - ], - testMatch: [ - '**/tests/unit/**/*.spec.(js|jsx|ts|tsx)|**/__tests__/*.(js|jsx|ts|tsx)' - ], - testEnvironmentOptions: { - url: 'http://localhost/' - } -} diff --git a/package.json b/package.json index 8a15a24..6dd04c1 100644 --- a/package.json +++ b/package.json @@ -3,15 +3,15 @@ "version": "3.2.0", "types": "./types", "description": "A vue tree component using virtual list.", - "main": "./dist/v3/vue-tree.umd.js", - "module": "./dist/v3/vue-tree.mjs", + "main": "./dist/vue-tree.umd.js", + "module": "./dist/vue-tree.mjs", "exports": { ".": { "types": "./types/index.d.ts", - "import": "./dist/v3/vue-tree.mjs", - "require": "./dist/v3/vue-tree.umd.js" + "import": "./dist/vue-tree.mjs", + "require": "./dist/vue-tree.umd.js" }, - "./style.css": "./dist/v3/style.css", + "./style.css": "./dist/style.css", "./*": "./*" }, "scripts": { @@ -20,8 +20,8 @@ "build": "npm run dts && vite build", "docs": "vue-tsc --noEmit && vite build -c examples/vite.config.ts", "preview": "vite preview", - "test": "jest --watch", - "test:ci": "jest", + "test": "vitest watch", + "test:ci": "vitest run", "prettier": "prettier --write \"{src,examples,tests}/**/*.{ts,js,json,vue,tsx,less,scss,less,html}\" --fix" }, "publishConfig": { @@ -59,22 +59,18 @@ "@babel/preset-env": "^7.24.7", "@babel/preset-typescript": "^7.24.7", "@faker-js/faker": "^8.4.1", - "@types/jest": "29.5.12", "@vitejs/plugin-vue": "^5.0.5", "@vue/babel-preset-app": "^5.0.8", "@vue/test-utils": "^2.4.6", "@vue/vue3-jest": "^29.2.6", "autoprefixer": "^10.4.19", - "babel-jest": "^29.7.0", - "jest": "29.7.0", - "jest-serializer-vue": "^3.1.0", - "jest-transform-stub": "^2.0.0", + "happy-dom": "^14.12.0", "less": "^4.2.0", "postcss": "^8.4.38", "prettier": "^3.3.1", - "ts-jest": "29.1.4", "typescript": "^5.4.5", "vite": "^5.2.13", + "vitest": "^1.6.0", "vue": "^3.4.27", "vue-tsc": "^2.0.21" } diff --git a/packages/vue2/package.json b/packages/vue2/package.json deleted file mode 100644 index 1e45ee8..0000000 --- a/packages/vue2/package.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "name": "vue2", - "version": "1.0.0", - "description": "", - "main": "index.js", - "scripts": { - "build": "vite build" - }, - "author": "", - "license": "ISC", - "devDependencies": { - "@vue/composition-api": "^1.7.1", - "vite": "^4.1.1", - "vite-plugin-vue2": "^2.0.3", - "vue": "2.6.14", - "vue-template-compiler": "2.6.14" - } -} diff --git a/packages/vue2/vite.config.ts b/packages/vue2/vite.config.ts deleted file mode 100644 index 9f8b799..0000000 --- a/packages/vue2/vite.config.ts +++ /dev/null @@ -1,41 +0,0 @@ -import { defineConfig, UserConfig } from 'vite' -// import vue2 from '@vitejs/plugin-vue2' -import { createVuePlugin } from 'vite-plugin-vue2' -import { resolve, join } from 'path' - -// https://vitejs.dev/config/ -export default defineConfig((): UserConfig => { - return { - resolve: { - alias: { - '@': resolve('../../src') - } - }, - plugins: [createVuePlugin()], - optimizeDeps: { - exclude: ['vue-demi'] - }, - server: { - open:true, - hmr:true - }, - build: { - lib: { - entry: resolve(__dirname,'../../src/index.ts'), - name:'Vtree', - fileName: 'vue-tree' - }, - rollupOptions: { - external: ['vue', 'vue-demi'], - output: { - dir: join(__dirname, '../../dist/v2'), - exports: 'named', - globals: { - vue: 'Vue', - 'vue-demi': 'VueDemi' - } - } - } - } - } -}) \ No newline at end of file diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 987af78..0ff6b1e 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -17,9 +17,6 @@ importers: '@faker-js/faker': specifier: ^8.4.1 version: 8.4.1 - '@types/jest': - specifier: 29.5.12 - version: 29.5.12 '@vitejs/plugin-vue': specifier: ^5.0.5 version: 5.0.5(vite@5.2.13)(vue@3.4.27) @@ -35,18 +32,9 @@ importers: autoprefixer: specifier: ^10.4.19 version: 10.4.19(postcss@8.4.38) - babel-jest: - specifier: ^29.7.0 - version: 29.7.0(@babel/core@7.24.7) - jest: - specifier: 29.7.0 - version: 29.7.0 - jest-serializer-vue: - specifier: ^3.1.0 - version: registry.npmmirror.com/jest-serializer-vue@3.1.0 - jest-transform-stub: - specifier: ^2.0.0 - version: registry.npmmirror.com/jest-transform-stub@2.0.0 + happy-dom: + specifier: ^14.12.0 + version: 14.12.0 less: specifier: ^4.2.0 version: 4.2.0 @@ -56,15 +44,15 @@ importers: prettier: specifier: ^3.3.1 version: 3.3.1 - ts-jest: - specifier: 29.1.4 - version: 29.1.4(@babel/core@7.24.7)(babel-jest@29.7.0)(jest@29.7.0)(typescript@5.4.5) typescript: specifier: ^5.4.5 version: 5.4.5 vite: specifier: ^5.2.13 version: 5.2.13(less@4.2.0) + vitest: + specifier: ^1.6.0 + version: 1.6.0(happy-dom@14.12.0)(less@4.2.0) vue: specifier: ^3.4.27 version: 3.4.27(typescript@5.4.5) @@ -486,7 +474,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-plugin-utils': 7.24.7 dev: true /@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.24.7): @@ -564,16 +552,6 @@ packages: '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-syntax-jsx@7.22.5(@babel/core@7.24.7): - resolution: {integrity: sha512-gvyP4hZrgrs/wWMaocvxZ44Hw0b3W8Pe+cMxc8V1ULQ07oh8VNbIRaoD1LRZVTvD+0nieDKjfgKg89sD7rrKrg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.22.5 - dev: true - /@babel/plugin-syntax-jsx@7.24.7(@babel/core@7.24.7): resolution: {integrity: sha512-6ddciUPe/mpMnOKv/U+RSd2vvVy+Yw/JfBB0ZHYjEZt9NLHmCUylNYlsbqCCS1Bffjlb0fCwC9Vqz+sBz6PsiQ==} engines: {node: '>=6.9.0'} @@ -658,16 +636,6 @@ packages: '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-syntax-typescript@7.22.5(@babel/core@7.24.7): - resolution: {integrity: sha512-1mS2o03i7t1c6VzH6fdQ3OA8tcEIxwG18zIPRp+UY1Ihv6W+XZzBCVxExF9upussPXJ0xE9XRHwMoNs1ep/nRQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.22.5 - dev: true - /@babel/plugin-syntax-typescript@7.24.7(@babel/core@7.24.7): resolution: {integrity: sha512-c/+fVeJBB0FeKsFvwytYiUD+LBvhHjGSI0g446PRGdSVGZLRNArBUno2PETbAly3tpiNAQR5XaZ+JslxkotsbA==} engines: {node: '>=6.9.0'} @@ -2324,13 +2292,6 @@ packages: '@types/istanbul-lib-report': 3.0.0 dev: true - /@types/jest@29.5.12: - resolution: {integrity: sha512-eDC8bTvT/QhYdxJAulQikueigY5AsdBRH2yDKW3yveW7svY3+DzN84/2NUgkw10RTiJbWqZrTtoGVdYlvFJdLw==} - dependencies: - expect: 29.7.0 - pretty-format: 29.7.0 - dev: true - /@types/node@20.4.2: resolution: {integrity: sha512-Dd0BYtWgnWJKwO1jkmTrzofjK2QXXcai0dmtzvIBhcA+RsG5h8R3xlyta0kGOZRNfL9GuRtb1knmPEhQrePCEw==} dev: true @@ -2368,6 +2329,45 @@ packages: vue: 3.4.27(typescript@5.4.5) dev: true + /@vitest/expect@1.6.0: + resolution: {integrity: sha512-ixEvFVQjycy/oNgHjqsL6AZCDduC+tflRluaHIzKIsdbzkLn2U/iBnVeJwB6HsIjQBdfMR8Z0tRxKUsvFJEeWQ==} + dependencies: + '@vitest/spy': 1.6.0 + '@vitest/utils': 1.6.0 + chai: 4.4.1 + dev: true + + /@vitest/runner@1.6.0: + resolution: {integrity: sha512-P4xgwPjwesuBiHisAVz/LSSZtDjOTPYZVmNAnpHHSR6ONrf8eCJOFRvUwdHn30F5M1fxhqtl7QZQUk2dprIXAg==} + dependencies: + '@vitest/utils': 1.6.0 + p-limit: 5.0.0 + pathe: 1.1.2 + dev: true + + /@vitest/snapshot@1.6.0: + resolution: {integrity: sha512-+Hx43f8Chus+DCmygqqfetcAZrDJwvTj0ymqjQq4CvmpKFSTVteEOBzCusu1x2tt4OJcvBflyHUE0DZSLgEMtQ==} + dependencies: + magic-string: 0.30.10 + pathe: 1.1.2 + pretty-format: 29.7.0 + dev: true + + /@vitest/spy@1.6.0: + resolution: {integrity: sha512-leUTap6B/cqi/bQkXUu6bQV5TZPx7pmMBKBQiI0rJA8c3pB56ZsaTbREnF7CJfmvAS4V2cXIBAh/3rVwrrCYgw==} + dependencies: + tinyspy: 2.2.1 + dev: true + + /@vitest/utils@1.6.0: + resolution: {integrity: sha512-21cPiuGMoMZwiOHa2i4LXkMkMkCGzA+MVFV70jRwHo95dL4x/ts5GZhML1QWuy7yfp3WzK3lRvZi3JnXTYqrBw==} + dependencies: + diff-sequences: 29.6.3 + estree-walker: 3.0.3 + loupe: 2.3.7 + pretty-format: 29.7.0 + dev: true + /@volar/language-core@2.3.0: resolution: {integrity: sha512-pvhL24WUh3VDnv7Yw5N1sjhPtdx7q9g+Wl3tggmnkMcyK8GcCNElF2zHiKznryn0DiUGk+eez/p2qQhz+puuHw==} dependencies: @@ -2518,6 +2518,17 @@ packages: resolution: {integrity: sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==} dev: true + /acorn-walk@8.3.2: + resolution: {integrity: sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A==} + engines: {node: '>=0.4.0'} + dev: true + + /acorn@8.11.3: + resolution: {integrity: sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==} + engines: {node: '>=0.4.0'} + hasBin: true + dev: true + /ansi-escapes@4.3.2: resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==} engines: {node: '>=8'} @@ -2563,6 +2574,10 @@ packages: sprintf-js: 1.0.3 dev: true + /assertion-error@1.1.0: + resolution: {integrity: sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==} + dev: true + /autoprefixer@10.4.19(postcss@8.4.38): resolution: {integrity: sha512-BaENR2+zBZ8xXhM4pUaKUxlVdxZ0EZhjvbopwnXmxRUfqDmwSpC2lAi/QXvx7NRdPCo1WKEcEF6mV64si1z4Ew==} engines: {node: ^10 || ^12 || >=14} @@ -2601,7 +2616,7 @@ packages: resolution: {integrity: sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==} engines: {node: '>=8'} dependencies: - '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-plugin-utils': 7.24.7 '@istanbuljs/load-nyc-config': 1.1.0 '@istanbuljs/schema': 0.1.3 istanbul-lib-instrument: 5.2.1 @@ -2722,13 +2737,6 @@ packages: update-browserslist-db: 1.0.16(browserslist@4.23.0) dev: true - /bs-logger@0.2.6: - resolution: {integrity: sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==} - engines: {node: '>= 6'} - dependencies: - fast-json-stable-stringify: 2.1.0 - dev: true - /bser@2.1.1: resolution: {integrity: sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==} dependencies: @@ -2739,6 +2747,11 @@ packages: resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} dev: true + /cac@6.7.14: + resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==} + engines: {node: '>=8'} + dev: true + /callsites@3.1.0: resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} engines: {node: '>=6'} @@ -2758,6 +2771,19 @@ packages: resolution: {integrity: sha512-udx3o7yHJfUxMLkGohMlVHCvFvWmirKh9JAH/d7WOLPetlH+LTL5cocMZ0t7oZx/mdlOWXti97xLZWc8uURRHg==} dev: true + /chai@4.4.1: + resolution: {integrity: sha512-13sOfMv2+DWduEU+/xbun3LScLoqN17nBeTLUsmDfKdoiC1fr0n9PU4guu4AhRcOVFk/sW8LyZWHuhWtQZiF+g==} + engines: {node: '>=4'} + dependencies: + assertion-error: 1.1.0 + check-error: 1.0.3 + deep-eql: 4.1.4 + get-func-name: 2.0.2 + loupe: 2.3.7 + pathval: 1.1.1 + type-detect: 4.0.8 + dev: true + /chalk@2.4.2: resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} engines: {node: '>=4'} @@ -2780,6 +2806,12 @@ packages: engines: {node: '>=10'} dev: true + /check-error@1.0.3: + resolution: {integrity: sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==} + dependencies: + get-func-name: 2.0.2 + dev: true + /ci-info@3.9.0: resolution: {integrity: sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==} engines: {node: '>=8'} @@ -2841,6 +2873,10 @@ packages: resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} dev: true + /confbox@0.1.7: + resolution: {integrity: sha512-uJcB/FKZtBMCJpK8MQji6bJHgu1tixKPxRLeGkNzBoOZzpnZUJm0jm2/sBDWcuBx1dYgxV4JU+g5hmNxCyAmdA==} + dev: true + /config-chain@1.1.13: resolution: {integrity: sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==} dependencies: @@ -2939,6 +2975,13 @@ packages: optional: true dev: true + /deep-eql@4.1.4: + resolution: {integrity: sha512-SUwdGfqdKOwxCPeVYjwSyRpJ7Z+fhpwIAtmCUdZIWZ/YP5R9WAsyuSgpLVDi9bjWoN2LXHNss/dk3urXtdQxGg==} + engines: {node: '>=6'} + dependencies: + type-detect: 4.0.8 + dev: true + /deepmerge@4.3.1: resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==} engines: {node: '>=0.10.0'} @@ -3054,6 +3097,12 @@ packages: resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==} dev: true + /estree-walker@3.0.3: + resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==} + dependencies: + '@types/estree': 1.0.5 + dev: true + /esutils@2.0.3: resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} engines: {node: '>=0.10.0'} @@ -3074,6 +3123,21 @@ packages: strip-final-newline: 2.0.0 dev: true + /execa@8.0.1: + resolution: {integrity: sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==} + engines: {node: '>=16.17'} + dependencies: + cross-spawn: 7.0.3 + get-stream: 8.0.1 + human-signals: 5.0.0 + is-stream: 3.0.0 + merge-stream: 2.0.0 + npm-run-path: 5.3.0 + onetime: 6.0.0 + signal-exit: 4.1.0 + strip-final-newline: 3.0.0 + dev: true + /exit@0.1.2: resolution: {integrity: sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==} engines: {node: '>= 0.8.0'} @@ -3145,6 +3209,10 @@ packages: engines: {node: 6.* || 8.* || >= 10.*} dev: true + /get-func-name@2.0.2: + resolution: {integrity: sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==} + dev: true + /get-package-type@0.1.0: resolution: {integrity: sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==} engines: {node: '>=8.0.0'} @@ -3155,6 +3223,11 @@ packages: engines: {node: '>=10'} dev: true + /get-stream@8.0.1: + resolution: {integrity: sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==} + engines: {node: '>=16'} + dev: true + /glob@7.2.3: resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} deprecated: Glob versions prior to v9 are no longer supported @@ -3188,6 +3261,15 @@ packages: resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} dev: true + /happy-dom@14.12.0: + resolution: {integrity: sha512-dHcnlGFY2o2CdxfuYpqwSrBrpj/Kuzv4u4f3TU5yHW1GL24dKij4pv1BRjXnXc3uWo8qsCbToF9weaDsm/He8A==} + engines: {node: '>=16.0.0'} + dependencies: + entities: 4.5.0 + webidl-conversions: 7.0.0 + whatwg-mimetype: 3.0.0 + dev: true + /has-flag@3.0.0: resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} engines: {node: '>=4'} @@ -3219,6 +3301,11 @@ packages: engines: {node: '>=10.17.0'} dev: true + /human-signals@5.0.0: + resolution: {integrity: sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==} + engines: {node: '>=16.17.0'} + dev: true + /iconv-lite@0.6.3: resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==} engines: {node: '>=0.10.0'} @@ -3295,6 +3382,11 @@ packages: engines: {node: '>=8'} dev: true + /is-stream@3.0.0: + resolution: {integrity: sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + dev: true + /is-what@3.14.1: resolution: {integrity: sha512-sNxgpk9793nzSs7bA6JQJGeIuRBQhAaNGG77kzYQgMkrID+lS6SlK07K5LaptscDlSaIgH+GPFzf+d75FVxozA==} dev: true @@ -3681,8 +3773,8 @@ packages: dependencies: '@babel/core': 7.24.7 '@babel/generator': 7.24.7 - '@babel/plugin-syntax-jsx': 7.22.5(@babel/core@7.24.7) - '@babel/plugin-syntax-typescript': 7.22.5(@babel/core@7.24.7) + '@babel/plugin-syntax-jsx': 7.24.7(@babel/core@7.24.7) + '@babel/plugin-syntax-typescript': 7.24.7(@babel/core@7.24.7) '@babel/types': 7.24.7 '@jest/expect-utils': 29.7.0 '@jest/transform': 29.7.0 @@ -3787,6 +3879,10 @@ packages: resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} dev: true + /js-tokens@9.0.0: + resolution: {integrity: sha512-WriZw1luRMlmV3LGJaR6QOJjWwgLUTf89OwT2lUOyjX2dJGBwgmIkbcz+7WFZjrZM635JOIR517++e/67CP9dQ==} + dev: true + /js-yaml@3.14.1: resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==} hasBin: true @@ -3848,6 +3944,14 @@ packages: resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} dev: true + /local-pkg@0.5.0: + resolution: {integrity: sha512-ok6z3qlYyCDS4ZEU27HaU6x/xZa9Whf8jD4ptH5UZTQYZVYeb9bnZ3ojVhiJNLiXK1Hfc0GNbLXcmZ5plLDDBg==} + engines: {node: '>=14'} + dependencies: + mlly: 1.7.1 + pkg-types: 1.1.1 + dev: true + /locate-path@5.0.0: resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} engines: {node: '>=8'} @@ -3859,8 +3963,10 @@ packages: resolution: {integrity: sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==} dev: true - /lodash.memoize@4.1.2: - resolution: {integrity: sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==} + /loupe@2.3.7: + resolution: {integrity: sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==} + dependencies: + get-func-name: 2.0.2 dev: true /lru-cache@5.1.1: @@ -3899,10 +4005,6 @@ packages: semver: 6.3.1 dev: true - /make-error@1.3.6: - resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==} - dev: true - /makeerror@1.0.12: resolution: {integrity: sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==} dependencies: @@ -3938,6 +4040,11 @@ packages: engines: {node: '>=6'} dev: true + /mimic-fn@4.0.0: + resolution: {integrity: sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==} + engines: {node: '>=12'} + dev: true + /minimatch@3.1.2: resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} dependencies: @@ -3965,6 +4072,15 @@ packages: brace-expansion: 2.0.1 dev: true + /mlly@1.7.1: + resolution: {integrity: sha512-rrVRZRELyQzrIUAVMHxP97kv+G786pHmOKzuFII8zDYahFBS7qnHh2AlYSl1GAHhaMPCz6/oHjVMcfFYgFYHgA==} + dependencies: + acorn: 8.11.3 + pathe: 1.1.2 + pkg-types: 1.1.1 + ufo: 1.5.3 + dev: true + /ms@2.1.2: resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} dev: true @@ -4027,6 +4143,13 @@ packages: path-key: 3.1.1 dev: true + /npm-run-path@5.3.0: + resolution: {integrity: sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + dependencies: + path-key: 4.0.0 + dev: true + /once@1.4.0: resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} dependencies: @@ -4040,6 +4163,13 @@ packages: mimic-fn: 2.1.0 dev: true + /onetime@6.0.0: + resolution: {integrity: sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==} + engines: {node: '>=12'} + dependencies: + mimic-fn: 4.0.0 + dev: true + /p-limit@2.3.0: resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} engines: {node: '>=6'} @@ -4054,6 +4184,13 @@ packages: yocto-queue: 0.1.0 dev: true + /p-limit@5.0.0: + resolution: {integrity: sha512-/Eaoq+QyLSiXQ4lyYV23f14mZRQcXnxfHrN0vCai+ak9G0pp9iEQukIIZq5NccEvwRB8PUnZT0KsOoDCINS1qQ==} + engines: {node: '>=18'} + dependencies: + yocto-queue: 1.0.0 + dev: true + /p-locate@4.1.0: resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==} engines: {node: '>=8'} @@ -4100,10 +4237,23 @@ packages: engines: {node: '>=8'} dev: true + /path-key@4.0.0: + resolution: {integrity: sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==} + engines: {node: '>=12'} + dev: true + /path-parse@1.0.7: resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} dev: true + /pathe@1.1.2: + resolution: {integrity: sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==} + dev: true + + /pathval@1.1.1: + resolution: {integrity: sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==} + dev: true + /picocolors@0.2.1: resolution: {integrity: sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==} dev: true @@ -4135,6 +4285,14 @@ packages: find-up: 4.1.0 dev: true + /pkg-types@1.1.1: + resolution: {integrity: sha512-ko14TjmDuQJ14zsotODv7dBlwxKhUKQEhuhmbqo1uCi9BB0Z2alo/wAXg6q1dTR5TyuqYyWhjtfe/Tsh+X28jQ==} + dependencies: + confbox: 0.1.7 + mlly: 1.7.1 + pathe: 1.1.2 + dev: true + /postcss-value-parser@4.2.0: resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} dev: true @@ -4342,10 +4500,19 @@ packages: engines: {node: '>=8'} dev: true + /siginfo@2.0.0: + resolution: {integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==} + dev: true + /signal-exit@3.0.7: resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} dev: true + /signal-exit@4.1.0: + resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} + engines: {node: '>=14'} + dev: true + /sisteransi@1.0.5: resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==} dev: true @@ -4388,6 +4555,14 @@ packages: escape-string-regexp: 2.0.0 dev: true + /stackback@0.0.2: + resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==} + dev: true + + /std-env@3.7.0: + resolution: {integrity: sha512-JPbdCEQLj1w5GilpiHAx3qJvFndqybBysA3qUOnznweH4QbNYUsW/ea8QzSrnh0vNsezMMw5bcVool8lM0gwzg==} + dev: true + /string-length@4.0.2: resolution: {integrity: sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==} engines: {node: '>=10'} @@ -4427,6 +4602,11 @@ packages: engines: {node: '>=6'} dev: true + /strip-final-newline@3.0.0: + resolution: {integrity: sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==} + engines: {node: '>=12'} + dev: true + /strip-json-comments@2.0.1: resolution: {integrity: sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==} engines: {node: '>=0.10.0'} @@ -4437,6 +4617,12 @@ packages: engines: {node: '>=8'} dev: true + /strip-literal@2.1.0: + resolution: {integrity: sha512-Op+UycaUt/8FbN/Z2TWPBLge3jWrP3xj10f3fnYxf052bKuS3EKs1ZQcVGjnEMdsNVAM+plXRdmjrZ/KgG3Skw==} + dependencies: + js-tokens: 9.0.0 + dev: true + /supports-color@5.5.0: resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} engines: {node: '>=4'} @@ -4472,6 +4658,20 @@ packages: minimatch: 3.1.2 dev: true + /tinybench@2.8.0: + resolution: {integrity: sha512-1/eK7zUnIklz4JUUlL+658n58XO2hHLQfSk1Zf2LKieUjxidN16eKFEoDEfjHc3ohofSSqK3X5yO6VGb6iW8Lw==} + dev: true + + /tinypool@0.8.4: + resolution: {integrity: sha512-i11VH5gS6IFeLY3gMBQ00/MmLncVP7JLXOw1vlgkytLmJK7QnEr7NXf0LBdxfmNPAeyetukOk0bOYrJrFGjYJQ==} + engines: {node: '>=14.0.0'} + dev: true + + /tinyspy@2.2.1: + resolution: {integrity: sha512-KYad6Vy5VDWV4GH3fjpseMQ/XU2BhIYP7Vzd0LG44qRWm/Yt2WCOTicFdvmgo6gWaqooMQCawTtILVQJupKu7A==} + engines: {node: '>=14.0.0'} + dev: true + /tmpl@1.0.5: resolution: {integrity: sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==} dev: true @@ -4488,44 +4688,6 @@ packages: is-number: 7.0.0 dev: true - /ts-jest@29.1.4(@babel/core@7.24.7)(babel-jest@29.7.0)(jest@29.7.0)(typescript@5.4.5): - resolution: {integrity: sha512-YiHwDhSvCiItoAgsKtoLFCuakDzDsJ1DLDnSouTaTmdOcOwIkSzbLXduaQ6M5DRVhuZC/NYaaZ/mtHbWMv/S6Q==} - engines: {node: ^14.15.0 || ^16.10.0 || ^18.0.0 || >=20.0.0} - hasBin: true - peerDependencies: - '@babel/core': '>=7.0.0-beta.0 <8' - '@jest/transform': ^29.0.0 - '@jest/types': ^29.0.0 - babel-jest: ^29.0.0 - esbuild: '*' - jest: ^29.0.0 - typescript: '>=4.3 <6' - peerDependenciesMeta: - '@babel/core': - optional: true - '@jest/transform': - optional: true - '@jest/types': - optional: true - babel-jest: - optional: true - esbuild: - optional: true - dependencies: - '@babel/core': 7.24.7 - babel-jest: 29.7.0(@babel/core@7.24.7) - bs-logger: 0.2.6 - fast-json-stable-stringify: 2.1.0 - jest: 29.7.0 - jest-util: 29.7.0 - json5: 2.2.3 - lodash.memoize: 4.1.2 - make-error: 1.3.6 - semver: 7.5.4 - typescript: 5.4.5 - yargs-parser: 21.1.1 - dev: true - /tsconfig@7.0.0: resolution: {integrity: sha512-vZXmzPrL+EmC4T/4rVlT2jNVMWCi/O4DIiSj3UHg1OE5kCKbk4mfrXc6dZksLgRM/TZlKnousKH9bbTazUWRRw==} dependencies: @@ -4555,6 +4717,10 @@ packages: hasBin: true dev: true + /ufo@1.5.3: + resolution: {integrity: sha512-Y7HYmWaFwPUmkoQCUIAYpKqkOf+SbVj/2fJJZ4RJMCfZp0rTGwRbzQD+HghfnhKOjL9E01okqz+ncJskGYfBNw==} + dev: true + /unicode-canonical-property-names-ecmascript@2.0.0: resolution: {integrity: sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==} engines: {node: '>=4'} @@ -4598,6 +4764,27 @@ packages: convert-source-map: 2.0.0 dev: true + /vite-node@1.6.0(less@4.2.0): + resolution: {integrity: sha512-de6HJgzC+TFzOu0NTC4RAIsyf/DY/ibWDYQUcuEA84EMHhcefTUGkjFHKKEJhQN4A+6I0u++kr3l36ZF2d7XRw==} + engines: {node: ^18.0.0 || >=20.0.0} + hasBin: true + dependencies: + cac: 6.7.14 + debug: 4.3.5 + pathe: 1.1.2 + picocolors: 1.0.1 + vite: 5.2.13(less@4.2.0) + transitivePeerDependencies: + - '@types/node' + - less + - lightningcss + - sass + - stylus + - sugarss + - supports-color + - terser + dev: true + /vite@5.2.13(less@4.2.0): resolution: {integrity: sha512-SSq1noJfY9pR3I1TUENL3rQYDQCFqgD+lM6fTRAM8Nv6Lsg5hDLaXkjETVeBt+7vZBCMoibD+6IWnT2mJ+Zb/A==} engines: {node: ^18.0.0 || >=20.0.0} @@ -4634,6 +4821,62 @@ packages: fsevents: 2.3.3 dev: true + /vitest@1.6.0(happy-dom@14.12.0)(less@4.2.0): + resolution: {integrity: sha512-H5r/dN06swuFnzNFhq/dnz37bPXnq8xB2xB5JOVk8K09rUtoeNN+LHWkoQ0A/i3hvbUKKcCei9KpbxqHMLhLLA==} + engines: {node: ^18.0.0 || >=20.0.0} + hasBin: true + peerDependencies: + '@edge-runtime/vm': '*' + '@types/node': ^18.0.0 || >=20.0.0 + '@vitest/browser': 1.6.0 + '@vitest/ui': 1.6.0 + happy-dom: '*' + jsdom: '*' + peerDependenciesMeta: + '@edge-runtime/vm': + optional: true + '@types/node': + optional: true + '@vitest/browser': + optional: true + '@vitest/ui': + optional: true + happy-dom: + optional: true + jsdom: + optional: true + dependencies: + '@vitest/expect': 1.6.0 + '@vitest/runner': 1.6.0 + '@vitest/snapshot': 1.6.0 + '@vitest/spy': 1.6.0 + '@vitest/utils': 1.6.0 + acorn-walk: 8.3.2 + chai: 4.4.1 + debug: 4.3.5 + execa: 8.0.1 + happy-dom: 14.12.0 + local-pkg: 0.5.0 + magic-string: 0.30.10 + pathe: 1.1.2 + picocolors: 1.0.1 + std-env: 3.7.0 + strip-literal: 2.1.0 + tinybench: 2.8.0 + tinypool: 0.8.4 + vite: 5.2.13(less@4.2.0) + vite-node: 1.6.0(less@4.2.0) + why-is-node-running: 2.2.2 + transitivePeerDependencies: + - less + - lightningcss + - sass + - stylus + - sugarss + - supports-color + - terser + dev: true + /vscode-uri@3.0.8: resolution: {integrity: sha512-AyFQ0EVmsOZOlAnxoFOGOq1SQDWAB7C6aqMGS23svWAllfOaxbuFvcT8D1i8z3Gyn8fraVeZNNmN6e9bxxXkKw==} dev: true @@ -4683,6 +4926,16 @@ packages: makeerror: 1.0.12 dev: true + /webidl-conversions@7.0.0: + resolution: {integrity: sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==} + engines: {node: '>=12'} + dev: true + + /whatwg-mimetype@3.0.0: + resolution: {integrity: sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q==} + engines: {node: '>=12'} + dev: true + /which@2.0.2: resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} engines: {node: '>= 8'} @@ -4691,6 +4944,15 @@ packages: isexe: 2.0.0 dev: true + /why-is-node-running@2.2.2: + resolution: {integrity: sha512-6tSwToZxTOcotxHeA+qGCq1mVzKR3CwcJGmVcY+QE8SHy6TnpFnh8PAvPNHYr7EcuVeG0QSMxtYCuO1ta/G/oA==} + engines: {node: '>=8'} + hasBin: true + dependencies: + siginfo: 2.0.0 + stackback: 0.0.2 + dev: true + /wrap-ansi@7.0.0: resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} engines: {node: '>=10'} @@ -4748,6 +5010,11 @@ packages: engines: {node: '>=10'} dev: true + /yocto-queue@1.0.0: + resolution: {integrity: sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==} + engines: {node: '>=12.20'} + dev: true + registry.npmmirror.com/@ampproject/remapping@2.2.1: resolution: {integrity: sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==, registry: https://registry.npmjs.org/, tarball: https://registry.npmmirror.com/@ampproject/remapping/-/remapping-2.2.1.tgz} name: '@ampproject/remapping' @@ -5537,12 +5804,6 @@ packages: hasBin: true dev: true - registry.npmmirror.com/@one-ini/wasm@0.1.1: - resolution: {integrity: sha512-XuySG1E38YScSJoMlqovLru4KTUNSjgVTIjyh7qMX6aNN5HY5Ct5LhRJdxO79JtTzKfzV/bnWpz+zquYrISsvw==, registry: https://registry.npmjs.org/, tarball: https://registry.npmmirror.com/@one-ini/wasm/-/wasm-0.1.1.tgz} - name: '@one-ini/wasm' - version: 0.1.1 - dev: true - registry.npmmirror.com/@rollup/pluginutils@4.2.1: resolution: {integrity: sha512-iKnFXr7NkdZAIHiIWE+BX5ULi/ucVFYWD6TbAV+rZctiRTY2PL6tsIKhoIOaoskiWAkgu+VsbXgUVDNLHf+InQ==, registry: https://registry.npmjs.org/, tarball: https://registry.npmmirror.com/@rollup/pluginutils/-/pluginutils-4.2.1.tgz} name: '@rollup/pluginutils' @@ -5944,12 +6205,6 @@ packages: vue: registry.npmmirror.com/vue@2.6.14 dev: true - registry.npmmirror.com/abbrev@1.1.1: - resolution: {integrity: sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==, registry: https://registry.npmjs.org/, tarball: https://registry.npmmirror.com/abbrev/-/abbrev-1.1.1.tgz} - name: abbrev - version: 1.1.1 - dev: true - registry.npmmirror.com/ansi-styles@3.2.1: resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==, registry: https://registry.npmjs.org/, tarball: https://registry.npmmirror.com/ansi-styles/-/ansi-styles-3.2.1.tgz} name: ansi-styles @@ -6012,26 +6267,12 @@ packages: - supports-color dev: true - registry.npmmirror.com/balanced-match@1.0.2: - resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==, registry: https://registry.npmjs.org/, tarball: https://registry.npmmirror.com/balanced-match/-/balanced-match-1.0.2.tgz} - name: balanced-match - version: 1.0.2 - dev: true - registry.npmmirror.com/bluebird@3.7.2: resolution: {integrity: sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==, registry: https://registry.npmjs.org/, tarball: https://registry.npmmirror.com/bluebird/-/bluebird-3.7.2.tgz} name: bluebird version: 3.7.2 dev: true - registry.npmmirror.com/brace-expansion@2.0.1: - resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==, registry: https://registry.npmjs.org/, tarball: https://registry.npmmirror.com/brace-expansion/-/brace-expansion-2.0.1.tgz} - name: brace-expansion - version: 2.0.1 - dependencies: - balanced-match: registry.npmmirror.com/balanced-match@1.0.2 - dev: true - registry.npmmirror.com/browserslist@4.21.9: resolution: {integrity: sha512-M0MFoZzbUrRU4KNfCrDLnvyE7gub+peetoTid3TBIqtunaDJyXlwhakT+/VkvSXcfIzFfK/nkCs4nmyTmxdNSg==, registry: https://registry.npmjs.org/, tarball: https://registry.npmmirror.com/browserslist/-/browserslist-4.21.9.tgz} name: browserslist @@ -6093,33 +6334,6 @@ packages: version: 1.1.3 dev: true - registry.npmmirror.com/commander@10.0.1: - resolution: {integrity: sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==, registry: https://registry.npmjs.org/, tarball: https://registry.npmmirror.com/commander/-/commander-10.0.1.tgz} - name: commander - version: 10.0.1 - engines: {node: '>=14'} - dev: true - - registry.npmmirror.com/condense-newlines@0.2.1: - resolution: {integrity: sha512-P7X+QL9Hb9B/c8HI5BFFKmjgBu2XpQuF98WZ9XkO+dBGgk5XgwiQz7o1SmpglNWId3581UcS0SFAWfoIhMHPfg==, registry: https://registry.npmjs.org/, tarball: https://registry.npmmirror.com/condense-newlines/-/condense-newlines-0.2.1.tgz} - name: condense-newlines - version: 0.2.1 - engines: {node: '>=0.10.0'} - dependencies: - extend-shallow: registry.npmmirror.com/extend-shallow@2.0.1 - is-whitespace: registry.npmmirror.com/is-whitespace@0.3.0 - kind-of: registry.npmmirror.com/kind-of@3.2.2 - dev: true - - registry.npmmirror.com/config-chain@1.1.13: - resolution: {integrity: sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==, registry: https://registry.npmjs.org/, tarball: https://registry.npmmirror.com/config-chain/-/config-chain-1.1.13.tgz} - name: config-chain - version: 1.1.13 - dependencies: - ini: registry.npmmirror.com/ini@1.3.8 - proto-list: registry.npmmirror.com/proto-list@1.2.4 - dev: true - registry.npmmirror.com/consolidate@0.15.1: resolution: {integrity: sha512-DW46nrsMJgy9kqAbPt5rKaCr7uFtpo4mSUvLHIUbJEjm0vo+aY5QLwBUq3FK4tRnJr/X0Psc0C4jf/h+HtXSMw==, registry: https://registry.npmjs.org/, tarball: https://registry.npmmirror.com/consolidate/-/consolidate-0.15.1.tgz} name: consolidate @@ -6521,19 +6735,6 @@ packages: object-keys: registry.npmmirror.com/object-keys@1.1.1 dev: true - registry.npmmirror.com/editorconfig@1.0.4: - resolution: {integrity: sha512-L9Qe08KWTlqYMVvMcTIvMAdl1cDUubzRNYL+WfA4bLDMHe4nemKkpmYzkznE1FwLKu0EEmy6obgQKzMJrg4x9Q==, registry: https://registry.npmjs.org/, tarball: https://registry.npmmirror.com/editorconfig/-/editorconfig-1.0.4.tgz} - name: editorconfig - version: 1.0.4 - engines: {node: '>=14'} - hasBin: true - dependencies: - '@one-ini/wasm': registry.npmmirror.com/@one-ini/wasm@0.1.1 - commander: registry.npmmirror.com/commander@10.0.1 - minimatch: registry.npmmirror.com/minimatch@9.0.1 - semver: registry.npmmirror.com/semver@7.5.4 - dev: true - registry.npmmirror.com/electron-to-chromium@1.4.463: resolution: {integrity: sha512-fT3hvdUWLjDbaTGzyOjng/CQhQJSQP8ThO3XZAoaxHvHo2kUXiRQVMj9M235l8uDFiNPsPa6KHT1p3RaR6ugRw==, registry: https://registry.npmjs.org/, tarball: https://registry.npmmirror.com/electron-to-chromium/-/electron-to-chromium-1.4.463.tgz} name: electron-to-chromium @@ -6592,15 +6793,6 @@ packages: version: 2.0.2 dev: true - registry.npmmirror.com/extend-shallow@2.0.1: - resolution: {integrity: sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==, registry: https://registry.npmjs.org/, tarball: https://registry.npmmirror.com/extend-shallow/-/extend-shallow-2.0.1.tgz} - name: extend-shallow - version: 2.0.1 - engines: {node: '>=0.10.0'} - dependencies: - is-extendable: registry.npmmirror.com/is-extendable@0.1.1 - dev: true - registry.npmmirror.com/fs-extra@10.1.0: resolution: {integrity: sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==, registry: https://registry.npmjs.org/, tarball: https://registry.npmmirror.com/fs-extra/-/fs-extra-10.1.0.tgz} name: fs-extra @@ -6612,12 +6804,6 @@ packages: universalify: registry.npmmirror.com/universalify@2.0.0 dev: true - registry.npmmirror.com/fs.realpath@1.0.0: - resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==, registry: https://registry.npmjs.org/, tarball: https://registry.npmmirror.com/fs.realpath/-/fs.realpath-1.0.0.tgz} - name: fs.realpath - version: 1.0.0 - dev: true - registry.npmmirror.com/function-bind@1.1.1: resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==, registry: https://registry.npmjs.org/, tarball: https://registry.npmmirror.com/function-bind/-/function-bind-1.1.1.tgz} name: function-bind @@ -6642,19 +6828,6 @@ packages: has-symbols: registry.npmmirror.com/has-symbols@1.0.3 dev: true - registry.npmmirror.com/glob@8.1.0: - resolution: {integrity: sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==, registry: https://registry.npmjs.org/, tarball: https://registry.npmmirror.com/glob/-/glob-8.1.0.tgz} - name: glob - version: 8.1.0 - engines: {node: '>=12'} - dependencies: - fs.realpath: registry.npmmirror.com/fs.realpath@1.0.0 - inflight: registry.npmmirror.com/inflight@1.0.6 - inherits: registry.npmmirror.com/inherits@2.0.4 - minimatch: registry.npmmirror.com/minimatch@5.1.6 - once: registry.npmmirror.com/once@1.4.0 - dev: true - registry.npmmirror.com/globals@11.12.0: resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==, registry: https://registry.npmjs.org/, tarball: https://registry.npmmirror.com/globals/-/globals-11.12.0.tgz} name: globals @@ -6739,33 +6912,6 @@ packages: engines: {node: '>=8'} dev: true - registry.npmmirror.com/inflight@1.0.6: - resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==, registry: https://registry.npmjs.org/, tarball: https://registry.npmmirror.com/inflight/-/inflight-1.0.6.tgz} - name: inflight - version: 1.0.6 - dependencies: - once: registry.npmmirror.com/once@1.4.0 - wrappy: registry.npmmirror.com/wrappy@1.0.2 - dev: true - - registry.npmmirror.com/inherits@2.0.4: - resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==, registry: https://registry.npmjs.org/, tarball: https://registry.npmmirror.com/inherits/-/inherits-2.0.4.tgz} - name: inherits - version: 2.0.4 - dev: true - - registry.npmmirror.com/ini@1.3.8: - resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==, registry: https://registry.npmjs.org/, tarball: https://registry.npmmirror.com/ini/-/ini-1.3.8.tgz} - name: ini - version: 1.3.8 - dev: true - - registry.npmmirror.com/is-buffer@1.1.6: - resolution: {integrity: sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==, registry: https://registry.npmjs.org/, tarball: https://registry.npmmirror.com/is-buffer/-/is-buffer-1.1.6.tgz} - name: is-buffer - version: 1.1.6 - dev: true - registry.npmmirror.com/is-core-module@2.12.1: resolution: {integrity: sha512-Q4ZuBAe2FUsKtyQJoQHlvP8OvBERxO3jEmy1I7hcRXcJBGGHFh/aJBswbXuS9sgrDH2QUO8ilkwNPHvHMd8clg==, registry: https://registry.npmjs.org/, tarball: https://registry.npmmirror.com/is-core-module/-/is-core-module-2.12.1.tgz} name: is-core-module @@ -6774,47 +6920,6 @@ packages: has: registry.npmmirror.com/has@1.0.3 dev: true - registry.npmmirror.com/is-extendable@0.1.1: - resolution: {integrity: sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==, registry: https://registry.npmjs.org/, tarball: https://registry.npmmirror.com/is-extendable/-/is-extendable-0.1.1.tgz} - name: is-extendable - version: 0.1.1 - engines: {node: '>=0.10.0'} - dev: true - - registry.npmmirror.com/is-whitespace@0.3.0: - resolution: {integrity: sha512-RydPhl4S6JwAyj0JJjshWJEFG6hNye3pZFBRZaTUfZFwGHxzppNaNOVgQuS/E/SlhrApuMXrpnK1EEIXfdo3Dg==, registry: https://registry.npmjs.org/, tarball: https://registry.npmmirror.com/is-whitespace/-/is-whitespace-0.3.0.tgz} - name: is-whitespace - version: 0.3.0 - engines: {node: '>=0.10.0'} - dev: true - - registry.npmmirror.com/jest-serializer-vue@3.1.0: - resolution: {integrity: sha512-vXz9/3IgBbLhsaVANYLG4ROCQd+Wg3qbB6ICofzFL+fbhSFPlqb0/MMGXcueVsjaovdWlYiRaLQLpdi1PTcoRQ==, registry: https://registry.npmjs.org/, tarball: https://registry.npmmirror.com/jest-serializer-vue/-/jest-serializer-vue-3.1.0.tgz} - name: jest-serializer-vue - version: 3.1.0 - dependencies: - pretty: registry.npmmirror.com/pretty@2.0.0 - dev: true - - registry.npmmirror.com/jest-transform-stub@2.0.0: - resolution: {integrity: sha512-lspHaCRx/mBbnm3h4uMMS3R5aZzMwyNpNIJLXj4cEsV0mIUtS4IjYJLSoyjRCtnxb6RIGJ4NL2quZzfIeNhbkg==, registry: https://registry.npmjs.org/, tarball: https://registry.npmmirror.com/jest-transform-stub/-/jest-transform-stub-2.0.0.tgz} - name: jest-transform-stub - version: 2.0.0 - dev: true - - registry.npmmirror.com/js-beautify@1.14.9: - resolution: {integrity: sha512-coM7xq1syLcMyuVGyToxcj2AlzhkDjmfklL8r0JgJ7A76wyGMpJ1oA35mr4APdYNO/o/4YY8H54NQIJzhMbhBg==, registry: https://registry.npmjs.org/, tarball: https://registry.npmmirror.com/js-beautify/-/js-beautify-1.14.9.tgz} - name: js-beautify - version: 1.14.9 - engines: {node: '>=12'} - hasBin: true - dependencies: - config-chain: registry.npmmirror.com/config-chain@1.1.13 - editorconfig: registry.npmmirror.com/editorconfig@1.0.4 - glob: registry.npmmirror.com/glob@8.1.0 - nopt: registry.npmmirror.com/nopt@6.0.0 - dev: true - registry.npmmirror.com/js-tokens@4.0.0: resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==, registry: https://registry.npmjs.org/, tarball: https://registry.npmmirror.com/js-tokens/-/js-tokens-4.0.0.tgz} name: js-tokens @@ -6847,15 +6952,6 @@ packages: graceful-fs: 4.2.11 dev: true - registry.npmmirror.com/kind-of@3.2.2: - resolution: {integrity: sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==, registry: https://registry.npmjs.org/, tarball: https://registry.npmmirror.com/kind-of/-/kind-of-3.2.2.tgz} - name: kind-of - version: 3.2.2 - engines: {node: '>=0.10.0'} - dependencies: - is-buffer: registry.npmmirror.com/is-buffer@1.1.6 - dev: true - registry.npmmirror.com/lodash.debounce@4.0.8: resolution: {integrity: sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==, registry: https://registry.npmjs.org/, tarball: https://registry.npmmirror.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz} name: lodash.debounce @@ -6911,24 +7007,6 @@ packages: source-map: 0.6.1 dev: true - registry.npmmirror.com/minimatch@5.1.6: - resolution: {integrity: sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==, registry: https://registry.npmjs.org/, tarball: https://registry.npmmirror.com/minimatch/-/minimatch-5.1.6.tgz} - name: minimatch - version: 5.1.6 - engines: {node: '>=10'} - dependencies: - brace-expansion: registry.npmmirror.com/brace-expansion@2.0.1 - dev: true - - registry.npmmirror.com/minimatch@9.0.1: - resolution: {integrity: sha512-0jWhJpD/MdhPXwPuiRkCbfYfSKp2qnn2eOc279qI7f+osl/l+prKSrvhg157zSYvx/1nmgn2NqdT6k2Z7zSH9w==, registry: https://registry.npmjs.org/, tarball: https://registry.npmmirror.com/minimatch/-/minimatch-9.0.1.tgz} - name: minimatch - version: 9.0.1 - engines: {node: '>=16 || 14 >=14.17'} - dependencies: - brace-expansion: registry.npmmirror.com/brace-expansion@2.0.1 - dev: true - registry.npmmirror.com/ms@2.1.2: resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==, registry: https://registry.npmjs.org/, tarball: https://registry.npmmirror.com/ms/-/ms-2.1.2.tgz} name: ms @@ -6949,16 +7027,6 @@ packages: version: 2.0.13 dev: true - registry.npmmirror.com/nopt@6.0.0: - resolution: {integrity: sha512-ZwLpbTgdhuZUnZzjd7nb1ZV+4DoiC6/sfiVKok72ym/4Tlf+DFdlHYmT2JPmcNNWV6Pi3SDf1kT+A4r9RTuT9g==, registry: https://registry.npmjs.org/, tarball: https://registry.npmmirror.com/nopt/-/nopt-6.0.0.tgz} - name: nopt - version: 6.0.0 - engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} - hasBin: true - dependencies: - abbrev: registry.npmmirror.com/abbrev@1.1.1 - dev: true - registry.npmmirror.com/object-keys@1.1.1: resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==, registry: https://registry.npmjs.org/, tarball: https://registry.npmmirror.com/object-keys/-/object-keys-1.1.1.tgz} name: object-keys @@ -6978,14 +7046,6 @@ packages: object-keys: registry.npmmirror.com/object-keys@1.1.1 dev: true - registry.npmmirror.com/once@1.4.0: - resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==, registry: https://registry.npmjs.org/, tarball: https://registry.npmmirror.com/once/-/once-1.4.0.tgz} - name: once - version: 1.4.0 - dependencies: - wrappy: registry.npmmirror.com/wrappy@1.0.2 - dev: true - registry.npmmirror.com/path-parse@1.0.7: resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==, registry: https://registry.npmjs.org/, tarball: https://registry.npmmirror.com/path-parse/-/path-parse-1.0.7.tgz} name: path-parse @@ -7034,23 +7094,6 @@ packages: hasBin: true dev: true - registry.npmmirror.com/pretty@2.0.0: - resolution: {integrity: sha1-rbx5YLe7/iiaVX3F9zdhmiINBqU=, registry: https://registry.npmjs.org/, tarball: https://registry.npmmirror.com/pretty/download/pretty-2.0.0.tgz} - name: pretty - version: 2.0.0 - engines: {node: '>=0.10.0'} - dependencies: - condense-newlines: registry.npmmirror.com/condense-newlines@0.2.1 - extend-shallow: registry.npmmirror.com/extend-shallow@2.0.1 - js-beautify: registry.npmmirror.com/js-beautify@1.14.9 - dev: true - - registry.npmmirror.com/proto-list@1.2.4: - resolution: {integrity: sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==, registry: https://registry.npmjs.org/, tarball: https://registry.npmmirror.com/proto-list/-/proto-list-1.2.4.tgz} - name: proto-list - version: 1.2.4 - dev: true - registry.npmmirror.com/pseudomap@1.0.2: resolution: {integrity: sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ==, registry: https://registry.npmjs.org/, tarball: https://registry.npmmirror.com/pseudomap/-/pseudomap-1.0.2.tgz} name: pseudomap @@ -7392,12 +7435,6 @@ packages: version: 2.6.14 dev: true - registry.npmmirror.com/wrappy@1.0.2: - resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==, registry: https://registry.npmjs.org/, tarball: https://registry.npmmirror.com/wrappy/-/wrappy-1.0.2.tgz} - name: wrappy - version: 1.0.2 - dev: true - registry.npmmirror.com/yallist@2.1.2: resolution: {integrity: sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A==, registry: https://registry.npmjs.org/, tarball: https://registry.npmmirror.com/yallist/-/yallist-2.1.2.tgz} name: yallist diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml deleted file mode 100644 index 1992877..0000000 --- a/pnpm-workspace.yaml +++ /dev/null @@ -1,3 +0,0 @@ -packages: - - 'packages/**' - - '!**/test/**' \ No newline at end of file diff --git a/src/components/Tree.vue b/src/components/Tree.vue index 2384def..9aec191 100644 --- a/src/components/Tree.vue +++ b/src/components/Tree.vue @@ -195,8 +195,6 @@ export const DEFAULT_TREE_PROPS = { renderNodeAmount: 100, bufferNodeAmount: 20, } - -export const TREE_EVENTS = [...TREE_NODE_EVENTS, ...storeEvents] @@ -59,14 +88,15 @@ import { computed, getCurrentInstance, h, + toRef, } from 'vue' import { TreeNode } from '../store' import LoadingIcon from './LoadingIcon.vue' -import { dragHoverPartEnum } from '../constants' +import { dragHoverPartEnum, showLineType } from '../constants' import { TREE_NODE_EVENTS } from '../constants/events' import { useTreeNodeCls } from '../hooks/useTreeNodeCls' import { TreeProps } from './Tree.vue' -import { GetNodeFn } from '../types' +import { GetNodeFn, ShowLine } from '../types' const props = defineProps() @@ -75,10 +105,47 @@ const emit = defineEmits([...TREE_NODE_EVENTS]) const dragoverBody = ref(false) const dragoverBefore = ref(false) const dragoverAfter = ref(false) -const keyField = props.keyField as string -const getNode = props.getNode as Function + +const showLineParams = computed(() => { + const defaultParams: Required = { + width: 1, + type: showLineType.solid, + color: '#D3D3D3', + polyline: false, + } + let params: Required = defaultParams + if (typeof props.showLine === 'object') { + params = { + width: props.showLine.width ?? defaultParams.width, + type: props.showLine.type ?? defaultParams.type, + color: props.showLine.color ?? defaultParams.color, + polyline: props.showLine.polyline ?? defaultParams.polyline, + } + } + return params +}) + +const strokeWidth = computed(() => showLineParams.value.width * 100 / props.nodeIndent) + +const strokeDasharray = computed(() => { + switch (showLineParams.value.type) { + case showLineType.dashed: + return '25' + default: + break + } + return 'none' +}) + +const polylinePoints = (isDirectParentLine: boolean) => { + if (!showLineParams.value.polyline || !isDirectParentLine) return '50,0 50,100' + const parent = props.getNode(props.data[props.keyField])?._parent + if (parent && props.noSiblingNodeMap[parent[props.keyField]] && props.noSiblingNodeMap[props.data[props.keyField]]) return '50,0 50,50 100,50 50,50' + return '50,0 50,50 100,50 50,50 50,100' +} const { + indentWrapperCls, wrapperCls, nodeBodyCls, dropBeforeCls, @@ -96,7 +163,7 @@ const { const fullData = computed(() => { return ( - getNode(props.data ? props.data[keyField] : '') || + props.getNode(props.data ? props.data[props.keyField] : '') || props.data || ({} as TreeNode) ) diff --git a/src/constants/index.ts b/src/constants/index.ts index f2eb53d..b316bdf 100644 --- a/src/constants/index.ts +++ b/src/constants/index.ts @@ -70,3 +70,9 @@ export enum dragHoverPartEnum { after = 'after' } //#endregion Drag + +export enum showLineType { + // dotted = 'dotted', + dashed = 'dashed', + solid = 'solid', +} diff --git a/src/hooks/useTreeNodeCls.ts b/src/hooks/useTreeNodeCls.ts index da80b3e..162f161 100644 --- a/src/hooks/useTreeNodeCls.ts +++ b/src/hooks/useTreeNodeCls.ts @@ -16,6 +16,11 @@ export const useTreeNodeCls = (props: TreeNodeProps, dragoverRefs: { dragoverAfter, } = dragoverRefs + const indentWrapperCls = computed(() => { + return [ + `${prefixCls}__indent-wrapper`, + ] + }) const wrapperCls = computed(() => { return [ `${prefixCls}__wrapper`, @@ -101,6 +106,7 @@ export const useTreeNodeCls = (props: TreeNodeProps, dragoverRefs: { }) return { + indentWrapperCls, wrapperCls, nodeBodyCls, dropBeforeCls, diff --git a/src/store/tree-store.ts b/src/store/tree-store.ts index 8db6dbb..e82343a 100644 --- a/src/store/tree-store.ts +++ b/src/store/tree-store.ts @@ -1004,7 +1004,7 @@ export default class TreeStore extends TreeEventTarget { const key: TreeNodeKeyType = node[this.options.keyField] result.push(node) if (this.mapData[key]) { - throw new Error('[CTree] Duplicate tree node key.') + throw new Error('[VTree] Duplicate tree node key.') } this.mapData[key] = node diff --git a/src/styles/tree.less b/src/styles/tree.less index 85a104c..993bb29 100644 --- a/src/styles/tree.less +++ b/src/styles/tree.less @@ -77,8 +77,14 @@ .@{tree-node-prefix} { @base-square-length: 20px; + // 缩进 + &__indent-wrapper { + display: flex; + } + // 容器 &__wrapper { + flex: 1; display: flex; flex-direction: column; } diff --git a/src/types/index.ts b/src/types/index.ts index 8c64f89..48de6cf 100644 --- a/src/types/index.ts +++ b/src/types/index.ts @@ -1,4 +1,4 @@ -import { placementEnum, ignoreEnum } from '../constants' +import { placementEnum, ignoreEnum, showLineType } from '../constants' import TreeStore, { TreeNode } from '../store' @@ -30,3 +30,11 @@ export interface INonReactiveData { store: TreeStore blockNodes: TreeNode[] } + +export interface ShowLine { + /** 连接线宽度,svg stroke-width, 默认 1px */ + width?: number + type?: showLineType + color?: string + polyline?: boolean +} diff --git a/src/utils.ts b/src/utils.ts index c3b7fd7..d169bc1 100644 --- a/src/utils.ts +++ b/src/utils.ts @@ -20,11 +20,11 @@ export const pickReadonly = ( obj: Readonly, ...keys: K[] ): PickReadonly => { - const picked: Partial> = {}; + const picked: Partial> = {} keys.forEach(key => { if (obj.hasOwnProperty(key)) { - picked[key] = obj[key]; + picked[key] = obj[key] } - }); - return picked as PickReadonly; + }) + return picked as PickReadonly } From f7983d94ecc9ef903cd16145c30bb1ff21158c9e Mon Sep 17 00:00:00 2001 From: ChuChencheng Date: Thu, 20 Jun 2024 23:54:19 +0800 Subject: [PATCH 06/13] feat: rename ctree to vtree --- examples/Mobile.vue | 12 ++--- src/components/LoadingIcon.vue | 2 +- src/components/Tree.vue | 6 +-- src/components/TreeDrop.vue | 16 +++--- src/components/TreeNode.vue | 2 +- src/components/TreeSearch.vue | 14 ++--- src/hooks/useTreeCls.ts | 2 +- src/hooks/useTreeDropCls.ts | 2 +- src/hooks/useTreeNodeCls.ts | 2 +- src/hooks/useTreeSearchCls.ts | 2 +- src/store/tree-store.ts | 2 +- src/styles/loading-icon.less | 8 +-- src/styles/tree-drop.less | 22 ++++---- src/styles/tree-search.less | 28 +++++----- src/styles/tree.less | 40 +++++++------- src/styles/variables.less | 42 +++++++-------- src/utils.ts | 2 +- tests/unit/tree-search.spec.ts | 4 +- tests/unit/tree.spec.ts | 80 ++++++++++++++-------------- tsconfig.tsbuildinfo | 2 +- types/components/Tree.vue.d.ts | 8 +-- types/components/TreeDrop.vue.d.ts | 4 +- types/components/TreeNode.vue.d.ts | 5 +- types/components/TreeSearch.vue.d.ts | 4 +- types/constants/events.d.ts | 2 +- types/constants/index.d.ts | 4 ++ types/hooks/useTreeCls.d.ts | 2 +- types/hooks/useTreeDropCls.d.ts | 10 ++-- types/hooks/useTreeNodeCls.d.ts | 51 +++++++++--------- types/hooks/useTreeSearchCls.d.ts | 12 ++--- types/store/tree-event-target.d.ts | 25 +++++++++ types/store/tree-store.d.ts | 31 ++++------- types/types/index.d.ts | 9 +++- types/utils.d.ts | 2 +- 34 files changed, 243 insertions(+), 216 deletions(-) create mode 100644 types/store/tree-event-target.d.ts diff --git a/examples/Mobile.vue b/examples/Mobile.vue index a473b93..5acbcff 100644 --- a/examples/Mobile.vue +++ b/examples/Mobile.vue @@ -102,22 +102,22 @@ function onResetBtnClick() { - - + +
- diff --git a/package.json b/package.json index 18ffef1..486ea55 100644 --- a/package.json +++ b/package.json @@ -72,6 +72,6 @@ "vite": "^5.2.13", "vitest": "^1.6.0", "vue": "^3.4.30", - "vue-tsc": "^2.0.21" + "vue-tsc": "^2.0.22" } } \ No newline at end of file diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index ec909a4..7ac29ab 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -54,8 +54,8 @@ devDependencies: specifier: ^3.4.30 version: 3.4.30(typescript@5.4.5) vue-tsc: - specifier: ^2.0.21 - version: 2.0.21(typescript@5.4.5) + specifier: ^2.0.22 + version: 2.0.22(typescript@5.4.5) packages: @@ -2438,8 +2438,8 @@ packages: '@vue/shared': 3.4.30 dev: true - /@vue/language-core@2.0.21(typescript@5.4.5): - resolution: {integrity: sha512-vjs6KwnCK++kIXT+eI63BGpJHfHNVJcUCr3RnvJsccT3vbJnZV5IhHR2puEkoOkIbDdp0Gqi1wEnv3hEd3WsxQ==} + /@vue/language-core@2.0.22(typescript@5.4.5): + resolution: {integrity: sha512-dNTAAtEOuMiz7N1s5tKpypnVVCtawxVSF5BukD0ELcYSw+DSbrSlYYSw8GuwvurodCeYFSHsmslE+c2sYDNoiA==} peerDependencies: typescript: '*' peerDependenciesMeta: @@ -2451,6 +2451,7 @@ packages: '@vue/shared': 3.4.30 computeds: 0.0.1 minimatch: 9.0.4 + muggle-string: 0.4.1 path-browserify: 1.0.1 typescript: 5.4.5 vue-template-compiler: 2.7.16 @@ -4228,6 +4229,10 @@ packages: resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} dev: true + /muggle-string@0.4.1: + resolution: {integrity: sha512-VNTrAak/KhO2i8dqqnqnAHOa3cYBwXEZe9h+D5h/1ZqFSTEFHdM65lR7RoIqq3tBBYavsOXV84NoHXZ0AkPyqQ==} + dev: true + /nanoid@3.3.7: resolution: {integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==} engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} @@ -5072,14 +5077,14 @@ packages: he: 1.2.0 dev: true - /vue-tsc@2.0.21(typescript@5.4.5): - resolution: {integrity: sha512-E6x1p1HaHES6Doy8pqtm7kQern79zRtIewkf9fiv7Y43Zo4AFDS5hKi+iHi2RwEhqRmuiwliB1LCEFEGwvxQnw==} + /vue-tsc@2.0.22(typescript@5.4.5): + resolution: {integrity: sha512-lMBIwPBO0sxCcmvu45yt1b035AaQ8/XSXQDk8m75y4j0jSXY/y/XzfEtssQ9JMS47lDaR10O3/926oCs8OeGUw==} hasBin: true peerDependencies: typescript: '*' dependencies: '@volar/typescript': 2.3.1 - '@vue/language-core': 2.0.21(typescript@5.4.5) + '@vue/language-core': 2.0.22(typescript@5.4.5) semver: 7.6.2 typescript: 5.4.5 dev: true diff --git a/tsconfig.tsbuildinfo b/tsconfig.tsbuildinfo index 4e9b369..d99a321 100644 --- a/tsconfig.tsbuildinfo +++ b/tsconfig.tsbuildinfo @@ -1 +1 @@ -{"program":{"fileNames":["./node_modules/.pnpm/typescript@5.4.5/node_modules/typescript/lib/lib.es5.d.ts","./node_modules/.pnpm/typescript@5.4.5/node_modules/typescript/lib/lib.es2015.d.ts","./node_modules/.pnpm/typescript@5.4.5/node_modules/typescript/lib/lib.es2016.d.ts","./node_modules/.pnpm/typescript@5.4.5/node_modules/typescript/lib/lib.es2017.d.ts","./node_modules/.pnpm/typescript@5.4.5/node_modules/typescript/lib/lib.es2018.d.ts","./node_modules/.pnpm/typescript@5.4.5/node_modules/typescript/lib/lib.es2019.d.ts","./node_modules/.pnpm/typescript@5.4.5/node_modules/typescript/lib/lib.es2020.d.ts","./node_modules/.pnpm/typescript@5.4.5/node_modules/typescript/lib/lib.es2021.d.ts","./node_modules/.pnpm/typescript@5.4.5/node_modules/typescript/lib/lib.es2022.d.ts","./node_modules/.pnpm/typescript@5.4.5/node_modules/typescript/lib/lib.es2023.d.ts","./node_modules/.pnpm/typescript@5.4.5/node_modules/typescript/lib/lib.esnext.d.ts","./node_modules/.pnpm/typescript@5.4.5/node_modules/typescript/lib/lib.dom.d.ts","./node_modules/.pnpm/typescript@5.4.5/node_modules/typescript/lib/lib.es2015.core.d.ts","./node_modules/.pnpm/typescript@5.4.5/node_modules/typescript/lib/lib.es2015.collection.d.ts","./node_modules/.pnpm/typescript@5.4.5/node_modules/typescript/lib/lib.es2015.generator.d.ts","./node_modules/.pnpm/typescript@5.4.5/node_modules/typescript/lib/lib.es2015.iterable.d.ts","./node_modules/.pnpm/typescript@5.4.5/node_modules/typescript/lib/lib.es2015.promise.d.ts","./node_modules/.pnpm/typescript@5.4.5/node_modules/typescript/lib/lib.es2015.proxy.d.ts","./node_modules/.pnpm/typescript@5.4.5/node_modules/typescript/lib/lib.es2015.reflect.d.ts","./node_modules/.pnpm/typescript@5.4.5/node_modules/typescript/lib/lib.es2015.symbol.d.ts","./node_modules/.pnpm/typescript@5.4.5/node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts","./node_modules/.pnpm/typescript@5.4.5/node_modules/typescript/lib/lib.es2016.array.include.d.ts","./node_modules/.pnpm/typescript@5.4.5/node_modules/typescript/lib/lib.es2016.intl.d.ts","./node_modules/.pnpm/typescript@5.4.5/node_modules/typescript/lib/lib.es2017.date.d.ts","./node_modules/.pnpm/typescript@5.4.5/node_modules/typescript/lib/lib.es2017.object.d.ts","./node_modules/.pnpm/typescript@5.4.5/node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts","./node_modules/.pnpm/typescript@5.4.5/node_modules/typescript/lib/lib.es2017.string.d.ts","./node_modules/.pnpm/typescript@5.4.5/node_modules/typescript/lib/lib.es2017.intl.d.ts","./node_modules/.pnpm/typescript@5.4.5/node_modules/typescript/lib/lib.es2017.typedarrays.d.ts","./node_modules/.pnpm/typescript@5.4.5/node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts","./node_modules/.pnpm/typescript@5.4.5/node_modules/typescript/lib/lib.es2018.asynciterable.d.ts","./node_modules/.pnpm/typescript@5.4.5/node_modules/typescript/lib/lib.es2018.intl.d.ts","./node_modules/.pnpm/typescript@5.4.5/node_modules/typescript/lib/lib.es2018.promise.d.ts","./node_modules/.pnpm/typescript@5.4.5/node_modules/typescript/lib/lib.es2018.regexp.d.ts","./node_modules/.pnpm/typescript@5.4.5/node_modules/typescript/lib/lib.es2019.array.d.ts","./node_modules/.pnpm/typescript@5.4.5/node_modules/typescript/lib/lib.es2019.object.d.ts","./node_modules/.pnpm/typescript@5.4.5/node_modules/typescript/lib/lib.es2019.string.d.ts","./node_modules/.pnpm/typescript@5.4.5/node_modules/typescript/lib/lib.es2019.symbol.d.ts","./node_modules/.pnpm/typescript@5.4.5/node_modules/typescript/lib/lib.es2019.intl.d.ts","./node_modules/.pnpm/typescript@5.4.5/node_modules/typescript/lib/lib.es2020.bigint.d.ts","./node_modules/.pnpm/typescript@5.4.5/node_modules/typescript/lib/lib.es2020.date.d.ts","./node_modules/.pnpm/typescript@5.4.5/node_modules/typescript/lib/lib.es2020.promise.d.ts","./node_modules/.pnpm/typescript@5.4.5/node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts","./node_modules/.pnpm/typescript@5.4.5/node_modules/typescript/lib/lib.es2020.string.d.ts","./node_modules/.pnpm/typescript@5.4.5/node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts","./node_modules/.pnpm/typescript@5.4.5/node_modules/typescript/lib/lib.es2020.intl.d.ts","./node_modules/.pnpm/typescript@5.4.5/node_modules/typescript/lib/lib.es2020.number.d.ts","./node_modules/.pnpm/typescript@5.4.5/node_modules/typescript/lib/lib.es2021.promise.d.ts","./node_modules/.pnpm/typescript@5.4.5/node_modules/typescript/lib/lib.es2021.string.d.ts","./node_modules/.pnpm/typescript@5.4.5/node_modules/typescript/lib/lib.es2021.weakref.d.ts","./node_modules/.pnpm/typescript@5.4.5/node_modules/typescript/lib/lib.es2021.intl.d.ts","./node_modules/.pnpm/typescript@5.4.5/node_modules/typescript/lib/lib.es2022.array.d.ts","./node_modules/.pnpm/typescript@5.4.5/node_modules/typescript/lib/lib.es2022.error.d.ts","./node_modules/.pnpm/typescript@5.4.5/node_modules/typescript/lib/lib.es2022.intl.d.ts","./node_modules/.pnpm/typescript@5.4.5/node_modules/typescript/lib/lib.es2022.object.d.ts","./node_modules/.pnpm/typescript@5.4.5/node_modules/typescript/lib/lib.es2022.sharedmemory.d.ts","./node_modules/.pnpm/typescript@5.4.5/node_modules/typescript/lib/lib.es2022.string.d.ts","./node_modules/.pnpm/typescript@5.4.5/node_modules/typescript/lib/lib.es2022.regexp.d.ts","./node_modules/.pnpm/typescript@5.4.5/node_modules/typescript/lib/lib.es2023.array.d.ts","./node_modules/.pnpm/typescript@5.4.5/node_modules/typescript/lib/lib.es2023.collection.d.ts","./node_modules/.pnpm/typescript@5.4.5/node_modules/typescript/lib/lib.esnext.collection.d.ts","./node_modules/.pnpm/typescript@5.4.5/node_modules/typescript/lib/lib.esnext.intl.d.ts","./node_modules/.pnpm/typescript@5.4.5/node_modules/typescript/lib/lib.esnext.disposable.d.ts","./node_modules/.pnpm/typescript@5.4.5/node_modules/typescript/lib/lib.esnext.promise.d.ts","./node_modules/.pnpm/typescript@5.4.5/node_modules/typescript/lib/lib.esnext.decorators.d.ts","./node_modules/.pnpm/typescript@5.4.5/node_modules/typescript/lib/lib.esnext.object.d.ts","./node_modules/.pnpm/typescript@5.4.5/node_modules/typescript/lib/lib.decorators.d.ts","./node_modules/.pnpm/typescript@5.4.5/node_modules/typescript/lib/lib.decorators.legacy.d.ts","./node_modules/.pnpm/@babel+types@7.24.7/node_modules/@babel/types/lib/index.d.ts","./node_modules/.pnpm/@babel+parser@7.24.7/node_modules/@babel/parser/typings/babel-parser.d.ts","./node_modules/.pnpm/@vue+shared@3.4.29/node_modules/@vue/shared/dist/shared.d.ts","./node_modules/.pnpm/@vue+compiler-core@3.4.29/node_modules/@vue/compiler-core/dist/compiler-core.d.ts","./node_modules/.pnpm/@vue+compiler-dom@3.4.29/node_modules/@vue/compiler-dom/dist/compiler-dom.d.ts","./node_modules/.pnpm/@vue+reactivity@3.4.29/node_modules/@vue/reactivity/dist/reactivity.d.ts","./node_modules/.pnpm/@vue+runtime-core@3.4.29/node_modules/@vue/runtime-core/dist/runtime-core.d.ts","./node_modules/.pnpm/csstype@3.1.3/node_modules/csstype/index.d.ts","./node_modules/.pnpm/@vue+runtime-dom@3.4.29/node_modules/@vue/runtime-dom/dist/runtime-dom.d.ts","./node_modules/.pnpm/vue@3.4.29_typescript@5.4.5/node_modules/vue/dist/vue.d.ts","./src/env.d.ts","./node_modules/.pnpm/vue@3.4.29_typescript@5.4.5/node_modules/vue/jsx-runtime/index.d.ts","./src/constants/index.ts","./src/types/index.ts","./src/store/tree-node.ts","./src/store/tree-event-target.ts","./src/store/tree-store.ts","./src/store/index.ts","./src/components/loadingicon.vue","./src/constants/events.ts","./src/hooks/usetreenodecls.ts","./src/components/treenode.vue","./src/hooks/usetreecls.ts","./src/hooks/usevirtuallist.ts","./src/hooks/useiframeresize.ts","./src/hooks/usepublictreeapi.ts","./src/utils.ts","./src/components/tree.vue","./src/hooks/usetreesearchcls.ts","./src/components/treesearch.vue","./src/hooks/usetreedropcls.ts","./src/components/treedrop.vue","./src/index.ts","./node_modules/.pnpm/vite@5.2.13_less@4.2.0/node_modules/vite/types/hmrpayload.d.ts","./node_modules/.pnpm/vite@5.2.13_less@4.2.0/node_modules/vite/types/customevent.d.ts","./node_modules/.pnpm/vite@5.2.13_less@4.2.0/node_modules/vite/types/hot.d.ts","./node_modules/.pnpm/vite@5.2.13_less@4.2.0/node_modules/vite/types/importglob.d.ts","./node_modules/.pnpm/vite@5.2.13_less@4.2.0/node_modules/vite/types/importmeta.d.ts","./node_modules/.pnpm/vite@5.2.13_less@4.2.0/node_modules/vite/client.d.ts","./src/vite-env.d.ts","./node_modules/.pnpm/vue@3.4.27_typescript@5.4.5/node_modules/vue/dist/vue.d.ts"],"fileInfos":[{"version":"824cb491a40f7e8fdeb56f1df5edf91b23f3e3ee6b4cde84d4a99be32338faee","affectsGlobalScope":true},"45b7ab580deca34ae9729e97c13cfd999df04416a79116c3bfb483804f85ded4","3facaf05f0c5fc569c5649dd359892c98a85557e3e0c847964caeb67076f4d75","9a68c0c07ae2fa71b44384a839b7b8d81662a236d4b9ac30916718f7510b1b2d","5e1c4c362065a6b95ff952c0eab010f04dcd2c3494e813b493ecfd4fcb9fc0d8","68d73b4a11549f9c0b7d352d10e91e5dca8faa3322bfb77b661839c42b1ddec7","5efce4fc3c29ea84e8928f97adec086e3dc876365e0982cc8479a07954a3efd4","feecb1be483ed332fad555aff858affd90a48ab19ba7272ee084704eb7167569","5514e54f17d6d74ecefedc73c504eadffdeda79c7ea205cf9febead32d45c4bc","1c0cdb8dc619bc549c3e5020643e7cf7ae7940058e8c7e5aefa5871b6d86f44b","886e50ef125efb7878f744e86908884c0133e7a6d9d80013f421b0cd8fb2af94",{"version":"87d693a4920d794a73384b3c779cadcb8548ac6945aa7a925832fe2418c9527a","affectsGlobalScope":true},{"version":"138fb588d26538783b78d1e3b2c2cc12d55840b97bf5e08bca7f7a174fbe2f17","affectsGlobalScope":true},{"version":"dc2df20b1bcdc8c2d34af4926e2c3ab15ffe1160a63e58b7e09833f616efff44","affectsGlobalScope":true},{"version":"4443e68b35f3332f753eacc66a04ac1d2053b8b035a0e0ac1d455392b5e243b3","affectsGlobalScope":true},{"version":"bc47685641087c015972a3f072480889f0d6c65515f12bd85222f49a98952ed7","affectsGlobalScope":true},{"version":"0dc1e7ceda9b8b9b455c3a2d67b0412feab00bd2f66656cd8850e8831b08b537","affectsGlobalScope":true},{"version":"ce691fb9e5c64efb9547083e4a34091bcbe5bdb41027e310ebba8f7d96a98671","affectsGlobalScope":true},{"version":"8d697a2a929a5fcb38b7a65594020fcef05ec1630804a33748829c5ff53640d0","affectsGlobalScope":true},{"version":"4ff2a353abf8a80ee399af572debb8faab2d33ad38c4b4474cff7f26e7653b8d","affectsGlobalScope":true},{"version":"93495ff27b8746f55d19fcbcdbaccc99fd95f19d057aed1bd2c0cafe1335fbf0","affectsGlobalScope":true},{"version":"6fc23bb8c3965964be8c597310a2878b53a0306edb71d4b5a4dfe760186bcc01","affectsGlobalScope":true},{"version":"ea011c76963fb15ef1cdd7ce6a6808b46322c527de2077b6cfdf23ae6f5f9ec7","affectsGlobalScope":true},{"version":"38f0219c9e23c915ef9790ab1d680440d95419ad264816fa15009a8851e79119","affectsGlobalScope":true},{"version":"bb42a7797d996412ecdc5b2787720de477103a0b2e53058569069a0e2bae6c7e","affectsGlobalScope":true},{"version":"4738f2420687fd85629c9efb470793bb753709c2379e5f85bc1815d875ceadcd","affectsGlobalScope":true},{"version":"2f11ff796926e0832f9ae148008138ad583bd181899ab7dd768a2666700b1893","affectsGlobalScope":true},{"version":"4de680d5bb41c17f7f68e0419412ca23c98d5749dcaaea1896172f06435891fc","affectsGlobalScope":true},{"version":"9fc46429fbe091ac5ad2608c657201eb68b6f1b8341bd6d670047d32ed0a88fa","affectsGlobalScope":true},{"version":"61c37c1de663cf4171e1192466e52c7a382afa58da01b1dc75058f032ddf0839","affectsGlobalScope":true},{"version":"b541a838a13f9234aba650a825393ffc2292dc0fc87681a5d81ef0c96d281e7a","affectsGlobalScope":true},{"version":"b20fe0eca9a4e405f1a5ae24a2b3290b37cf7f21eba6cbe4fc3fab979237d4f3","affectsGlobalScope":true},{"version":"811ec78f7fefcabbda4bfa93b3eb67d9ae166ef95f9bff989d964061cbf81a0c","affectsGlobalScope":true},{"version":"717937616a17072082152a2ef351cb51f98802fb4b2fdabd32399843875974ca","affectsGlobalScope":true},{"version":"d7e7d9b7b50e5f22c915b525acc5a49a7a6584cf8f62d0569e557c5cfc4b2ac2","affectsGlobalScope":true},{"version":"71c37f4c9543f31dfced6c7840e068c5a5aacb7b89111a4364b1d5276b852557","affectsGlobalScope":true},{"version":"576711e016cf4f1804676043e6a0a5414252560eb57de9faceee34d79798c850","affectsGlobalScope":true},{"version":"89c1b1281ba7b8a96efc676b11b264de7a8374c5ea1e6617f11880a13fc56dc6","affectsGlobalScope":true},{"version":"49ed889be54031e1044af0ad2c603d627b8bda8b50c1a68435fe85583901d072","affectsGlobalScope":true},{"version":"e93d098658ce4f0c8a0779e6cab91d0259efb88a318137f686ad76f8410ca270","affectsGlobalScope":true},{"version":"063600664504610fe3e99b717a1223f8b1900087fab0b4cad1496a114744f8df","affectsGlobalScope":true},{"version":"934019d7e3c81950f9a8426d093458b65d5aff2c7c1511233c0fd5b941e608ab","affectsGlobalScope":true},{"version":"bf14a426dbbf1022d11bd08d6b8e709a2e9d246f0c6c1032f3b2edb9a902adbe","affectsGlobalScope":true},{"version":"5e07ed3809d48205d5b985642a59f2eba47c402374a7cf8006b686f79efadcbd","affectsGlobalScope":true},{"version":"2b72d528b2e2fe3c57889ca7baef5e13a56c957b946906d03767c642f386bbc3","affectsGlobalScope":true},{"version":"8073890e29d2f46fdbc19b8d6d2eb9ea58db9a2052f8640af20baff9afbc8640","affectsGlobalScope":true},{"version":"368af93f74c9c932edd84c58883e736c9e3d53cec1fe24c0b0ff451f529ceab1","affectsGlobalScope":true},{"version":"af3dd424cf267428f30ccfc376f47a2c0114546b55c44d8c0f1d57d841e28d74","affectsGlobalScope":true},{"version":"995c005ab91a498455ea8dfb63aa9f83fa2ea793c3d8aa344be4a1678d06d399","affectsGlobalScope":true},{"version":"51e547984877a62227042850456de71a5c45e7fe86b7c975c6e68896c86fa23b","affectsGlobalScope":true},{"version":"956d27abdea9652e8368ce029bb1e0b9174e9678a273529f426df4b3d90abd60","affectsGlobalScope":true},{"version":"4fa6ed14e98aa80b91f61b9805c653ee82af3502dc21c9da5268d3857772ca05","affectsGlobalScope":true},{"version":"e6633e05da3ff36e6da2ec170d0d03ccf33de50ca4dc6f5aeecb572cedd162fb","affectsGlobalScope":true},{"version":"d8670852241d4c6e03f2b89d67497a4bbefe29ecaa5a444e2c11a9b05e6fccc6","affectsGlobalScope":true},{"version":"8444af78980e3b20b49324f4a16ba35024fef3ee069a0eb67616ea6ca821c47a","affectsGlobalScope":true},{"version":"caccc56c72713969e1cfe5c3d44e5bab151544d9d2b373d7dbe5a1e4166652be","affectsGlobalScope":true},{"version":"3287d9d085fbd618c3971944b65b4be57859f5415f495b33a6adc994edd2f004","affectsGlobalScope":true},{"version":"50d53ccd31f6667aff66e3d62adf948879a3a16f05d89882d1188084ee415bbc","affectsGlobalScope":true},{"version":"08a58483392df5fcc1db57d782e87734f77ae9eab42516028acbfe46f29a3ef7","affectsGlobalScope":true},{"version":"436aaf437562f276ec2ddbee2f2cdedac7664c1e4c1d2c36839ddd582eeb3d0a","affectsGlobalScope":true},{"version":"b1cb28af0c891c8c96b2d6b7be76bd394fddcfdb4709a20ba05a7c1605eea0f9","affectsGlobalScope":true},{"version":"13f6e6380c78e15e140243dc4be2fa546c287c6d61f4729bc2dd7cf449605471","affectsGlobalScope":true},{"version":"15b98a533864d324e5f57cd3cfc0579b231df58c1c0f6063ea0fcb13c3c74ff9","affectsGlobalScope":true},{"version":"ac77cb3e8c6d3565793eb90a8373ee8033146315a3dbead3bde8db5eaf5e5ec6","affectsGlobalScope":true},{"version":"d4b1d2c51d058fc21ec2629fff7a76249dec2e36e12960ea056e3ef89174080f","affectsGlobalScope":true},{"version":"2fef54945a13095fdb9b84f705f2b5994597640c46afeb2ce78352fab4cb3279","affectsGlobalScope":true},{"version":"33358442698bb565130f52ba79bfd3d4d484ac85fe33f3cb1759c54d18201393","affectsGlobalScope":true},{"version":"782dec38049b92d4e85c1585fbea5474a219c6984a35b004963b00beb1aab538","affectsGlobalScope":true},"55584873eae27c5607725f0a9b2123cdea9100fd47cd4bfd582b567a7c363877","5f02abbb1b17e3d1e68c5eea14adf4705696e6255e2982b010c0dc2a5417b606","6dcb89623cc070c3b2a29218f99a3501041b3ac3fc4c80ee7083b99ba320a694","dcd9523c1e55d7ddfbdc99cfe04d89b475ccad640cfeb574bf48dd6558240eb9","cf76e2f59b26aea7c923015783083b4820d6c0d85cda2fec3a0f232aabfc56c3","9ab0867560be107f6fe6396655a3056f63468d72a36af8dd1d596f553e253887",{"version":"dd67ef911f60cb12b682604d85e02f16f2c188872b2edf7eb7eb68bad88d2dba","affectsGlobalScope":true},"8a8eb4ebffd85e589a1cc7c178e291626c359543403d58c9cd22b81fab5b1fb9","151cfb303a9c1805f414d8d448183edaa616474da7523023d4048ed4a3d5f91d","c0191592be8eb7906f99ac4b8798d80a585b94001ea1a5f50d6ce5b0d13a5c62","0061c087ec8109c283988a398e5155cb9894bcb3aed39b5cbbc00b6c8486c523","9c077ba346f2891d1725d6cbf1ff8bc7ca075ccff10d1ea38eda571245df0eeb",{"version":"0dc4f8dcc231c5d68e913a191530b3660c0f2e3ac51634a491af6980d9c1b273","signature":"0746be796ab0d24f92070647777fc4bad04f2152b3c32c36f1fafe51350310d5"},{"version":"41b056259082d40ea1e0be3d3a2c863689ab44b4bba00da27a2d4d150eb9ca35","signature":"a68e9d884850eef8e5fce88407dd12acf89bfaea029780c32e4fce7e6af9f57c"},{"version":"f49141065651c11d754ee88bd2a3eb1445ca7caa7e593fba441540dd51c6d18e","signature":"c8f3ddebfb82319d72a5395e20d2a57ff0a986fe4cf3607dc7b9d45796db18d1"},{"version":"98efc79e4d4886728eac419cc0ab107159c78a48cb382b5ea55e1ba914263e5f","signature":"5da339ef944d33997e84fe29c47d644c1fd57950880c909be0fbbb44b83149cf"},{"version":"b2965fbd4e33958952ebcbbb70308f0c2cac79fd24eafbdfc7e7b877a901c0cc","signature":"1627f8cc5f6348ff5af743a1f8f55370422a7d443f22aa440887370999cc4a92"},{"version":"b865a704defacff59c3bb720160484a54e289cfdd989612486e6f01be6290f7b","signature":"39d41b5a776ff01c0a42a1027da60595ebb0516275c3f7ff60bdc4a09bad8ebb"},{"version":"316ba102614e57348139a6e79eada372f493af08b3aad732778a486d715f37a8","signature":"ea2f54194f8e10a8f031fa7838ccdd9bb0247793abbf93965d0f3a9e66d4e45d"},{"version":"9679dae9dda620aeba88f0cebfb0b8b7d007eb3c17439c3f70b6ccb29504caa3","signature":"a531c03cfa02552a302a2ca8b815de555ad65e13e75307936c58611370be1612"},{"version":"c34be9c61edd3a50b59b0ca8a3ec59e6cd2d195900e94330e371c1755451330c","signature":"92c2afb5b02cb620c135cae53e545ee56884dd771c2eddda6063203c8e5bc659"},{"version":"c2db97222a3ea8ecb4268a243c6861c6d9660e00254bec9c5a10ad1caa437b82","signature":"b0df9db054a2abbeffbd3a47263d360bb0f14072f1c66bb5b349f28506e40889"},{"version":"4425c46200dbdbc8205e90ba27de66d7e577d0dbd637713be867ac909f0d0d62","signature":"0cdd31c161a88c071695c17d64715aa2445a7b8ce7dacb55031c79e82c328e12"},{"version":"19a5ddf1f3c9b6fa3fa9a101e0c284e483fe872ced97aa33d5de8765f0729892","signature":"17667536f7a1fbc5d11d9ae34eddd390c135fdba6b2098a220222a3017bf2f7e"},{"version":"5dc2af6c8e885efebaade7511552ded17afc1c0743cc61df0b48cbef94d857c7","signature":"579b26bb470532cef36e56be304e17bab9533a9f74d4505b6ce41579afe8d51d"},{"version":"45d75215a88cc0c65d87e4873757fce2e4a36680513c324e1a41701614c855b3","signature":"34381759f0c10e533da298e079afdde1adcabb9f2e6317511736ec9a4371ce1d"},{"version":"a155116d9201e6f1b8639c6970f9f6bbe672b6c34d4f87ddbc57ae7ca5da738f","signature":"79b52efba7de52e36b1196573c6ca2ead2957e965aa773fabd3a6e09955b418f"},{"version":"e87daa10f3de9a99d6ef3e4e887d291ab0924d2da895671e01b41c69293ffcb5","signature":"51444d0f2ac3283f5920af07653079d3662beef4013b42c1dd8a1f594171204f","affectsGlobalScope":true},{"version":"0e31fd88258ac0b9b1f865d2cddcd0495b24ea817d72e743dc785f4e290024df","signature":"1794152c57b71823a51e27efb1365ff77db6e0b6440de11f2250a467fbfc0840"},{"version":"4e457f67a2ed9297f654af0e317dd0c039ea4d64626ad317a7d387a0fa3c10b3","signature":"9be663278a117f9c4e32ff380a758598f1a0e880f86d1fb304a10c24508553a9"},{"version":"4fa0b6c7e6edcda5c144e3dfdd565bb96be4238b524fd0da6d4de002cd22622d","signature":"82b632edf79a19253444e341d704fc63ff22f21371c95974be7e8071260ddb42"},{"version":"2db5358fe1b1a1102b85c386153c3e53953aac8f656020eb61b7d4beeef99a67","signature":"cb3e6185a860f859006381058cb053e6d1756b5221af559c3e0bf74b518ab001"},{"version":"c786eab737522209c93caeebbc2fd0c38e901a13e897b6c736f1e74459b090a7","signature":"698cef40f46a4aa3441936fe00b474e55dede36f6877ed05bbb693583395f295"},"282f98006ed7fa9bb2cd9bdbe2524595cfc4bcd58a0bb3232e4519f2138df811","6222e987b58abfe92597e1273ad7233626285bc2d78409d4a7b113d81a83496b","cbe726263ae9a7bf32352380f7e8ab66ee25b3457137e316929269c19e18a2be","7f698624bbbb060ece7c0e51b7236520ebada74b747d7523c7df376453ed6fea",{"version":"4025a454b1ca489b179ee8c684bdd70ff8c1967e382076ade53e7e4653e1daec","affectsGlobalScope":true},{"version":"c4baf2c38b00f29adfb4e60554de4152ebf4c17f3365c0f2ff34af7f3b35ef1d","affectsGlobalScope":true},"65996936fbb042915f7b74a200fcdde7e410f32a669b1ab9597cfaa4b0faddb5"],"root":[79,[81,101],108],"options":{"composite":true,"declaration":true,"declarationDir":"./types","emitDeclarationOnly":true,"esModuleInterop":true,"jsx":1,"jsxImportSource":"vue","module":99,"noImplicitAny":true,"rootDir":"./src","skipLibCheck":true,"strict":true,"target":99,"useDefineForClassFields":true},"fileIdsList":[[69],[69,70,71],[72],[71],[71,74,75,77],[74,75,76],[106],[102],[103],[104,105],[73,77],[77],[78,80,87],[78,80,81,82,85,86,87,88,90,91,92,93,94,95],[78,80,81,82,86,88,95,98,99],[78,80,81,82,86,87,88,89,96],[78,80,81,88,95,96,97,101],[80,84],[80],[78],[78,80],[78,80,82,83,85,96,101],[78,80,97,100],[78,80,90],[78,80,89,98],[78,80,81,82,96,101],[80,82,86,90,96,98,100,107],[80,83,85],[80,82,83],[80,82],[80,81,82,83,84],[80,81,86],[107],[109],[78,80,81,82,83,85,86],[78,81,82,83,85,86,98],[78,82,86,96],[78,81,83,85,96,101],[84],[82,83,85,96,101,109],[78,100],[78,90],[78,98],[81,82,83,96,109],[82,86,90,96,98,100,107],[83,85],[82,83],[82],[82,83,84],[81,86]],"referencedMap":[[70,1],[72,2],[73,3],[74,4],[75,5],[77,6],[107,7],[103,8],[104,9],[106,10],[78,11],[80,12],[87,13],[96,14],[100,15],[90,16],[98,17],[88,18],[81,19],[79,20],[93,21],[94,22],[91,21],[99,23],[89,24],[97,25],[92,26],[101,27],[86,28],[84,29],[83,30],[85,31],[82,32],[95,21],[108,33]],"exportedModulesMap":[[70,1],[72,2],[73,3],[74,4],[75,5],[77,6],[107,7],[103,8],[104,9],[106,10],[78,11],[80,12],[87,34],[96,35],[100,36],[90,37],[98,38],[88,39],[79,20],[94,40],[91,20],[99,41],[89,42],[97,43],[92,44],[101,45],[86,46],[84,47],[83,48],[85,49],[82,50],[95,20],[108,33]],"semanticDiagnosticsPerFile":[70,69,72,73,74,75,77,71,76,67,68,12,14,13,2,15,16,17,18,19,20,21,22,3,23,4,24,28,25,26,27,29,30,31,5,32,33,34,35,6,39,36,37,38,40,7,41,46,47,42,43,44,45,8,51,48,49,50,52,9,53,54,55,58,56,57,59,60,10,1,61,11,65,63,62,66,64,107,103,102,104,105,106,78,80,87,96,100,90,98,88,81,79,93,94,91,99,89,97,92,101,86,84,83,85,82,95,108],"latestChangedDtsFile":"./types/components/TreeDrop.vue.d.ts"},"version":"5.4.5"} \ No newline at end of file +{"program":{"fileNames":["./node_modules/.pnpm/typescript@5.4.5/node_modules/typescript/lib/lib.es5.d.ts","./node_modules/.pnpm/typescript@5.4.5/node_modules/typescript/lib/lib.es2015.d.ts","./node_modules/.pnpm/typescript@5.4.5/node_modules/typescript/lib/lib.es2016.d.ts","./node_modules/.pnpm/typescript@5.4.5/node_modules/typescript/lib/lib.es2017.d.ts","./node_modules/.pnpm/typescript@5.4.5/node_modules/typescript/lib/lib.es2018.d.ts","./node_modules/.pnpm/typescript@5.4.5/node_modules/typescript/lib/lib.es2019.d.ts","./node_modules/.pnpm/typescript@5.4.5/node_modules/typescript/lib/lib.es2020.d.ts","./node_modules/.pnpm/typescript@5.4.5/node_modules/typescript/lib/lib.es2021.d.ts","./node_modules/.pnpm/typescript@5.4.5/node_modules/typescript/lib/lib.es2022.d.ts","./node_modules/.pnpm/typescript@5.4.5/node_modules/typescript/lib/lib.es2023.d.ts","./node_modules/.pnpm/typescript@5.4.5/node_modules/typescript/lib/lib.esnext.d.ts","./node_modules/.pnpm/typescript@5.4.5/node_modules/typescript/lib/lib.dom.d.ts","./node_modules/.pnpm/typescript@5.4.5/node_modules/typescript/lib/lib.es2015.core.d.ts","./node_modules/.pnpm/typescript@5.4.5/node_modules/typescript/lib/lib.es2015.collection.d.ts","./node_modules/.pnpm/typescript@5.4.5/node_modules/typescript/lib/lib.es2015.generator.d.ts","./node_modules/.pnpm/typescript@5.4.5/node_modules/typescript/lib/lib.es2015.iterable.d.ts","./node_modules/.pnpm/typescript@5.4.5/node_modules/typescript/lib/lib.es2015.promise.d.ts","./node_modules/.pnpm/typescript@5.4.5/node_modules/typescript/lib/lib.es2015.proxy.d.ts","./node_modules/.pnpm/typescript@5.4.5/node_modules/typescript/lib/lib.es2015.reflect.d.ts","./node_modules/.pnpm/typescript@5.4.5/node_modules/typescript/lib/lib.es2015.symbol.d.ts","./node_modules/.pnpm/typescript@5.4.5/node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts","./node_modules/.pnpm/typescript@5.4.5/node_modules/typescript/lib/lib.es2016.array.include.d.ts","./node_modules/.pnpm/typescript@5.4.5/node_modules/typescript/lib/lib.es2016.intl.d.ts","./node_modules/.pnpm/typescript@5.4.5/node_modules/typescript/lib/lib.es2017.date.d.ts","./node_modules/.pnpm/typescript@5.4.5/node_modules/typescript/lib/lib.es2017.object.d.ts","./node_modules/.pnpm/typescript@5.4.5/node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts","./node_modules/.pnpm/typescript@5.4.5/node_modules/typescript/lib/lib.es2017.string.d.ts","./node_modules/.pnpm/typescript@5.4.5/node_modules/typescript/lib/lib.es2017.intl.d.ts","./node_modules/.pnpm/typescript@5.4.5/node_modules/typescript/lib/lib.es2017.typedarrays.d.ts","./node_modules/.pnpm/typescript@5.4.5/node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts","./node_modules/.pnpm/typescript@5.4.5/node_modules/typescript/lib/lib.es2018.asynciterable.d.ts","./node_modules/.pnpm/typescript@5.4.5/node_modules/typescript/lib/lib.es2018.intl.d.ts","./node_modules/.pnpm/typescript@5.4.5/node_modules/typescript/lib/lib.es2018.promise.d.ts","./node_modules/.pnpm/typescript@5.4.5/node_modules/typescript/lib/lib.es2018.regexp.d.ts","./node_modules/.pnpm/typescript@5.4.5/node_modules/typescript/lib/lib.es2019.array.d.ts","./node_modules/.pnpm/typescript@5.4.5/node_modules/typescript/lib/lib.es2019.object.d.ts","./node_modules/.pnpm/typescript@5.4.5/node_modules/typescript/lib/lib.es2019.string.d.ts","./node_modules/.pnpm/typescript@5.4.5/node_modules/typescript/lib/lib.es2019.symbol.d.ts","./node_modules/.pnpm/typescript@5.4.5/node_modules/typescript/lib/lib.es2019.intl.d.ts","./node_modules/.pnpm/typescript@5.4.5/node_modules/typescript/lib/lib.es2020.bigint.d.ts","./node_modules/.pnpm/typescript@5.4.5/node_modules/typescript/lib/lib.es2020.date.d.ts","./node_modules/.pnpm/typescript@5.4.5/node_modules/typescript/lib/lib.es2020.promise.d.ts","./node_modules/.pnpm/typescript@5.4.5/node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts","./node_modules/.pnpm/typescript@5.4.5/node_modules/typescript/lib/lib.es2020.string.d.ts","./node_modules/.pnpm/typescript@5.4.5/node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts","./node_modules/.pnpm/typescript@5.4.5/node_modules/typescript/lib/lib.es2020.intl.d.ts","./node_modules/.pnpm/typescript@5.4.5/node_modules/typescript/lib/lib.es2020.number.d.ts","./node_modules/.pnpm/typescript@5.4.5/node_modules/typescript/lib/lib.es2021.promise.d.ts","./node_modules/.pnpm/typescript@5.4.5/node_modules/typescript/lib/lib.es2021.string.d.ts","./node_modules/.pnpm/typescript@5.4.5/node_modules/typescript/lib/lib.es2021.weakref.d.ts","./node_modules/.pnpm/typescript@5.4.5/node_modules/typescript/lib/lib.es2021.intl.d.ts","./node_modules/.pnpm/typescript@5.4.5/node_modules/typescript/lib/lib.es2022.array.d.ts","./node_modules/.pnpm/typescript@5.4.5/node_modules/typescript/lib/lib.es2022.error.d.ts","./node_modules/.pnpm/typescript@5.4.5/node_modules/typescript/lib/lib.es2022.intl.d.ts","./node_modules/.pnpm/typescript@5.4.5/node_modules/typescript/lib/lib.es2022.object.d.ts","./node_modules/.pnpm/typescript@5.4.5/node_modules/typescript/lib/lib.es2022.sharedmemory.d.ts","./node_modules/.pnpm/typescript@5.4.5/node_modules/typescript/lib/lib.es2022.string.d.ts","./node_modules/.pnpm/typescript@5.4.5/node_modules/typescript/lib/lib.es2022.regexp.d.ts","./node_modules/.pnpm/typescript@5.4.5/node_modules/typescript/lib/lib.es2023.array.d.ts","./node_modules/.pnpm/typescript@5.4.5/node_modules/typescript/lib/lib.es2023.collection.d.ts","./node_modules/.pnpm/typescript@5.4.5/node_modules/typescript/lib/lib.esnext.collection.d.ts","./node_modules/.pnpm/typescript@5.4.5/node_modules/typescript/lib/lib.esnext.intl.d.ts","./node_modules/.pnpm/typescript@5.4.5/node_modules/typescript/lib/lib.esnext.disposable.d.ts","./node_modules/.pnpm/typescript@5.4.5/node_modules/typescript/lib/lib.esnext.promise.d.ts","./node_modules/.pnpm/typescript@5.4.5/node_modules/typescript/lib/lib.esnext.decorators.d.ts","./node_modules/.pnpm/typescript@5.4.5/node_modules/typescript/lib/lib.esnext.object.d.ts","./node_modules/.pnpm/typescript@5.4.5/node_modules/typescript/lib/lib.decorators.d.ts","./node_modules/.pnpm/typescript@5.4.5/node_modules/typescript/lib/lib.decorators.legacy.d.ts","./node_modules/.pnpm/@babel+types@7.24.7/node_modules/@babel/types/lib/index.d.ts","./node_modules/.pnpm/@babel+parser@7.24.7/node_modules/@babel/parser/typings/babel-parser.d.ts","./node_modules/.pnpm/@vue+shared@3.4.30/node_modules/@vue/shared/dist/shared.d.ts","./node_modules/.pnpm/@vue+compiler-core@3.4.30/node_modules/@vue/compiler-core/dist/compiler-core.d.ts","./node_modules/.pnpm/@vue+compiler-dom@3.4.30/node_modules/@vue/compiler-dom/dist/compiler-dom.d.ts","./node_modules/.pnpm/@vue+reactivity@3.4.30/node_modules/@vue/reactivity/dist/reactivity.d.ts","./node_modules/.pnpm/@vue+runtime-core@3.4.30/node_modules/@vue/runtime-core/dist/runtime-core.d.ts","./node_modules/.pnpm/csstype@3.1.3/node_modules/csstype/index.d.ts","./node_modules/.pnpm/@vue+runtime-dom@3.4.30/node_modules/@vue/runtime-dom/dist/runtime-dom.d.ts","./node_modules/.pnpm/vue@3.4.30_typescript@5.4.5/node_modules/vue/dist/vue.d.ts","./src/env.d.ts","./node_modules/.pnpm/vue@3.4.30_typescript@5.4.5/node_modules/vue/jsx-runtime/index.d.ts","./src/constants/index.ts","./src/types/index.ts","./src/store/tree-node.ts","./src/store/tree-event-target.ts","./src/store/tree-store.ts","./src/store/index.ts","./src/components/loadingicon.vue","./src/constants/events.ts","./src/hooks/usetreenodecls.ts","./src/components/treenode.vue","./src/hooks/usetreecls.ts","./src/hooks/usevirtuallist.ts","./src/hooks/useiframeresize.ts","./src/hooks/usepublictreeapi.ts","./src/utils.ts","./src/hooks/useexpandanimation.ts","./src/components/tree.vue","./src/hooks/usetreesearchcls.ts","./src/components/treesearch.vue","./src/hooks/usetreedropcls.ts","./src/components/treedrop.vue","./src/index.ts","./node_modules/.pnpm/vite@5.2.13_less@4.2.0/node_modules/vite/types/hmrpayload.d.ts","./node_modules/.pnpm/vite@5.2.13_less@4.2.0/node_modules/vite/types/customevent.d.ts","./node_modules/.pnpm/vite@5.2.13_less@4.2.0/node_modules/vite/types/hot.d.ts","./node_modules/.pnpm/vite@5.2.13_less@4.2.0/node_modules/vite/types/importglob.d.ts","./node_modules/.pnpm/vite@5.2.13_less@4.2.0/node_modules/vite/types/importmeta.d.ts","./node_modules/.pnpm/vite@5.2.13_less@4.2.0/node_modules/vite/client.d.ts","./src/vite-env.d.ts","./node_modules/.pnpm/vue@3.4.27_typescript@5.4.5/node_modules/vue/dist/vue.d.ts","./node_modules/.pnpm/vue@3.4.29_typescript@5.4.5/node_modules/vue/dist/vue.d.ts"],"fileInfos":[{"version":"824cb491a40f7e8fdeb56f1df5edf91b23f3e3ee6b4cde84d4a99be32338faee","affectsGlobalScope":true},"45b7ab580deca34ae9729e97c13cfd999df04416a79116c3bfb483804f85ded4","3facaf05f0c5fc569c5649dd359892c98a85557e3e0c847964caeb67076f4d75","9a68c0c07ae2fa71b44384a839b7b8d81662a236d4b9ac30916718f7510b1b2d","5e1c4c362065a6b95ff952c0eab010f04dcd2c3494e813b493ecfd4fcb9fc0d8","68d73b4a11549f9c0b7d352d10e91e5dca8faa3322bfb77b661839c42b1ddec7","5efce4fc3c29ea84e8928f97adec086e3dc876365e0982cc8479a07954a3efd4","feecb1be483ed332fad555aff858affd90a48ab19ba7272ee084704eb7167569","5514e54f17d6d74ecefedc73c504eadffdeda79c7ea205cf9febead32d45c4bc","1c0cdb8dc619bc549c3e5020643e7cf7ae7940058e8c7e5aefa5871b6d86f44b","886e50ef125efb7878f744e86908884c0133e7a6d9d80013f421b0cd8fb2af94",{"version":"87d693a4920d794a73384b3c779cadcb8548ac6945aa7a925832fe2418c9527a","affectsGlobalScope":true},{"version":"138fb588d26538783b78d1e3b2c2cc12d55840b97bf5e08bca7f7a174fbe2f17","affectsGlobalScope":true},{"version":"dc2df20b1bcdc8c2d34af4926e2c3ab15ffe1160a63e58b7e09833f616efff44","affectsGlobalScope":true},{"version":"4443e68b35f3332f753eacc66a04ac1d2053b8b035a0e0ac1d455392b5e243b3","affectsGlobalScope":true},{"version":"bc47685641087c015972a3f072480889f0d6c65515f12bd85222f49a98952ed7","affectsGlobalScope":true},{"version":"0dc1e7ceda9b8b9b455c3a2d67b0412feab00bd2f66656cd8850e8831b08b537","affectsGlobalScope":true},{"version":"ce691fb9e5c64efb9547083e4a34091bcbe5bdb41027e310ebba8f7d96a98671","affectsGlobalScope":true},{"version":"8d697a2a929a5fcb38b7a65594020fcef05ec1630804a33748829c5ff53640d0","affectsGlobalScope":true},{"version":"4ff2a353abf8a80ee399af572debb8faab2d33ad38c4b4474cff7f26e7653b8d","affectsGlobalScope":true},{"version":"93495ff27b8746f55d19fcbcdbaccc99fd95f19d057aed1bd2c0cafe1335fbf0","affectsGlobalScope":true},{"version":"6fc23bb8c3965964be8c597310a2878b53a0306edb71d4b5a4dfe760186bcc01","affectsGlobalScope":true},{"version":"ea011c76963fb15ef1cdd7ce6a6808b46322c527de2077b6cfdf23ae6f5f9ec7","affectsGlobalScope":true},{"version":"38f0219c9e23c915ef9790ab1d680440d95419ad264816fa15009a8851e79119","affectsGlobalScope":true},{"version":"bb42a7797d996412ecdc5b2787720de477103a0b2e53058569069a0e2bae6c7e","affectsGlobalScope":true},{"version":"4738f2420687fd85629c9efb470793bb753709c2379e5f85bc1815d875ceadcd","affectsGlobalScope":true},{"version":"2f11ff796926e0832f9ae148008138ad583bd181899ab7dd768a2666700b1893","affectsGlobalScope":true},{"version":"4de680d5bb41c17f7f68e0419412ca23c98d5749dcaaea1896172f06435891fc","affectsGlobalScope":true},{"version":"9fc46429fbe091ac5ad2608c657201eb68b6f1b8341bd6d670047d32ed0a88fa","affectsGlobalScope":true},{"version":"61c37c1de663cf4171e1192466e52c7a382afa58da01b1dc75058f032ddf0839","affectsGlobalScope":true},{"version":"b541a838a13f9234aba650a825393ffc2292dc0fc87681a5d81ef0c96d281e7a","affectsGlobalScope":true},{"version":"b20fe0eca9a4e405f1a5ae24a2b3290b37cf7f21eba6cbe4fc3fab979237d4f3","affectsGlobalScope":true},{"version":"811ec78f7fefcabbda4bfa93b3eb67d9ae166ef95f9bff989d964061cbf81a0c","affectsGlobalScope":true},{"version":"717937616a17072082152a2ef351cb51f98802fb4b2fdabd32399843875974ca","affectsGlobalScope":true},{"version":"d7e7d9b7b50e5f22c915b525acc5a49a7a6584cf8f62d0569e557c5cfc4b2ac2","affectsGlobalScope":true},{"version":"71c37f4c9543f31dfced6c7840e068c5a5aacb7b89111a4364b1d5276b852557","affectsGlobalScope":true},{"version":"576711e016cf4f1804676043e6a0a5414252560eb57de9faceee34d79798c850","affectsGlobalScope":true},{"version":"89c1b1281ba7b8a96efc676b11b264de7a8374c5ea1e6617f11880a13fc56dc6","affectsGlobalScope":true},{"version":"49ed889be54031e1044af0ad2c603d627b8bda8b50c1a68435fe85583901d072","affectsGlobalScope":true},{"version":"e93d098658ce4f0c8a0779e6cab91d0259efb88a318137f686ad76f8410ca270","affectsGlobalScope":true},{"version":"063600664504610fe3e99b717a1223f8b1900087fab0b4cad1496a114744f8df","affectsGlobalScope":true},{"version":"934019d7e3c81950f9a8426d093458b65d5aff2c7c1511233c0fd5b941e608ab","affectsGlobalScope":true},{"version":"bf14a426dbbf1022d11bd08d6b8e709a2e9d246f0c6c1032f3b2edb9a902adbe","affectsGlobalScope":true},{"version":"5e07ed3809d48205d5b985642a59f2eba47c402374a7cf8006b686f79efadcbd","affectsGlobalScope":true},{"version":"2b72d528b2e2fe3c57889ca7baef5e13a56c957b946906d03767c642f386bbc3","affectsGlobalScope":true},{"version":"8073890e29d2f46fdbc19b8d6d2eb9ea58db9a2052f8640af20baff9afbc8640","affectsGlobalScope":true},{"version":"368af93f74c9c932edd84c58883e736c9e3d53cec1fe24c0b0ff451f529ceab1","affectsGlobalScope":true},{"version":"af3dd424cf267428f30ccfc376f47a2c0114546b55c44d8c0f1d57d841e28d74","affectsGlobalScope":true},{"version":"995c005ab91a498455ea8dfb63aa9f83fa2ea793c3d8aa344be4a1678d06d399","affectsGlobalScope":true},{"version":"51e547984877a62227042850456de71a5c45e7fe86b7c975c6e68896c86fa23b","affectsGlobalScope":true},{"version":"956d27abdea9652e8368ce029bb1e0b9174e9678a273529f426df4b3d90abd60","affectsGlobalScope":true},{"version":"4fa6ed14e98aa80b91f61b9805c653ee82af3502dc21c9da5268d3857772ca05","affectsGlobalScope":true},{"version":"e6633e05da3ff36e6da2ec170d0d03ccf33de50ca4dc6f5aeecb572cedd162fb","affectsGlobalScope":true},{"version":"d8670852241d4c6e03f2b89d67497a4bbefe29ecaa5a444e2c11a9b05e6fccc6","affectsGlobalScope":true},{"version":"8444af78980e3b20b49324f4a16ba35024fef3ee069a0eb67616ea6ca821c47a","affectsGlobalScope":true},{"version":"caccc56c72713969e1cfe5c3d44e5bab151544d9d2b373d7dbe5a1e4166652be","affectsGlobalScope":true},{"version":"3287d9d085fbd618c3971944b65b4be57859f5415f495b33a6adc994edd2f004","affectsGlobalScope":true},{"version":"50d53ccd31f6667aff66e3d62adf948879a3a16f05d89882d1188084ee415bbc","affectsGlobalScope":true},{"version":"08a58483392df5fcc1db57d782e87734f77ae9eab42516028acbfe46f29a3ef7","affectsGlobalScope":true},{"version":"436aaf437562f276ec2ddbee2f2cdedac7664c1e4c1d2c36839ddd582eeb3d0a","affectsGlobalScope":true},{"version":"b1cb28af0c891c8c96b2d6b7be76bd394fddcfdb4709a20ba05a7c1605eea0f9","affectsGlobalScope":true},{"version":"13f6e6380c78e15e140243dc4be2fa546c287c6d61f4729bc2dd7cf449605471","affectsGlobalScope":true},{"version":"15b98a533864d324e5f57cd3cfc0579b231df58c1c0f6063ea0fcb13c3c74ff9","affectsGlobalScope":true},{"version":"ac77cb3e8c6d3565793eb90a8373ee8033146315a3dbead3bde8db5eaf5e5ec6","affectsGlobalScope":true},{"version":"d4b1d2c51d058fc21ec2629fff7a76249dec2e36e12960ea056e3ef89174080f","affectsGlobalScope":true},{"version":"2fef54945a13095fdb9b84f705f2b5994597640c46afeb2ce78352fab4cb3279","affectsGlobalScope":true},{"version":"33358442698bb565130f52ba79bfd3d4d484ac85fe33f3cb1759c54d18201393","affectsGlobalScope":true},{"version":"782dec38049b92d4e85c1585fbea5474a219c6984a35b004963b00beb1aab538","affectsGlobalScope":true},"55584873eae27c5607725f0a9b2123cdea9100fd47cd4bfd582b567a7c363877","5f02abbb1b17e3d1e68c5eea14adf4705696e6255e2982b010c0dc2a5417b606","6dcb89623cc070c3b2a29218f99a3501041b3ac3fc4c80ee7083b99ba320a694","dcd9523c1e55d7ddfbdc99cfe04d89b475ccad640cfeb574bf48dd6558240eb9","cf76e2f59b26aea7c923015783083b4820d6c0d85cda2fec3a0f232aabfc56c3","9ab0867560be107f6fe6396655a3056f63468d72a36af8dd1d596f553e253887",{"version":"fa998cc2cec43d6aea9d2309684c81132a5abdf56c4f6652cab4670ba92dc500","affectsGlobalScope":true},"8a8eb4ebffd85e589a1cc7c178e291626c359543403d58c9cd22b81fab5b1fb9","151cfb303a9c1805f414d8d448183edaa616474da7523023d4048ed4a3d5f91d","c0191592be8eb7906f99ac4b8798d80a585b94001ea1a5f50d6ce5b0d13a5c62","0061c087ec8109c283988a398e5155cb9894bcb3aed39b5cbbc00b6c8486c523","9c077ba346f2891d1725d6cbf1ff8bc7ca075ccff10d1ea38eda571245df0eeb",{"version":"0dc4f8dcc231c5d68e913a191530b3660c0f2e3ac51634a491af6980d9c1b273","signature":"0746be796ab0d24f92070647777fc4bad04f2152b3c32c36f1fafe51350310d5"},{"version":"41b056259082d40ea1e0be3d3a2c863689ab44b4bba00da27a2d4d150eb9ca35","signature":"a68e9d884850eef8e5fce88407dd12acf89bfaea029780c32e4fce7e6af9f57c"},{"version":"f49141065651c11d754ee88bd2a3eb1445ca7caa7e593fba441540dd51c6d18e","signature":"c8f3ddebfb82319d72a5395e20d2a57ff0a986fe4cf3607dc7b9d45796db18d1"},{"version":"98efc79e4d4886728eac419cc0ab107159c78a48cb382b5ea55e1ba914263e5f","signature":"5da339ef944d33997e84fe29c47d644c1fd57950880c909be0fbbb44b83149cf"},{"version":"b2965fbd4e33958952ebcbbb70308f0c2cac79fd24eafbdfc7e7b877a901c0cc","signature":"1627f8cc5f6348ff5af743a1f8f55370422a7d443f22aa440887370999cc4a92"},{"version":"b865a704defacff59c3bb720160484a54e289cfdd989612486e6f01be6290f7b","signature":"39d41b5a776ff01c0a42a1027da60595ebb0516275c3f7ff60bdc4a09bad8ebb"},{"version":"316ba102614e57348139a6e79eada372f493af08b3aad732778a486d715f37a8","signature":"ea2f54194f8e10a8f031fa7838ccdd9bb0247793abbf93965d0f3a9e66d4e45d"},{"version":"9679dae9dda620aeba88f0cebfb0b8b7d007eb3c17439c3f70b6ccb29504caa3","signature":"a531c03cfa02552a302a2ca8b815de555ad65e13e75307936c58611370be1612"},{"version":"c34be9c61edd3a50b59b0ca8a3ec59e6cd2d195900e94330e371c1755451330c","signature":"92c2afb5b02cb620c135cae53e545ee56884dd771c2eddda6063203c8e5bc659"},{"version":"01341f73edc7cc04e00651f053087b63a73bb8444b4bce2f75e7ee84275c856b","signature":"544c54187f2d74f69e1378460048adadf0e5a83b75e0eff28ebde5e715a47144"},{"version":"4425c46200dbdbc8205e90ba27de66d7e577d0dbd637713be867ac909f0d0d62","signature":"0cdd31c161a88c071695c17d64715aa2445a7b8ce7dacb55031c79e82c328e12"},{"version":"19a5ddf1f3c9b6fa3fa9a101e0c284e483fe872ced97aa33d5de8765f0729892","signature":"17667536f7a1fbc5d11d9ae34eddd390c135fdba6b2098a220222a3017bf2f7e"},{"version":"5dc2af6c8e885efebaade7511552ded17afc1c0743cc61df0b48cbef94d857c7","signature":"579b26bb470532cef36e56be304e17bab9533a9f74d4505b6ce41579afe8d51d"},{"version":"45d75215a88cc0c65d87e4873757fce2e4a36680513c324e1a41701614c855b3","signature":"34381759f0c10e533da298e079afdde1adcabb9f2e6317511736ec9a4371ce1d"},{"version":"a155116d9201e6f1b8639c6970f9f6bbe672b6c34d4f87ddbc57ae7ca5da738f","signature":"79b52efba7de52e36b1196573c6ca2ead2957e965aa773fabd3a6e09955b418f"},{"version":"3ea6e0165c3e6a2e9346f41378940ac1404b3499555d6f020e394fa4684d2c86","signature":"80295d98b3fbd7e5e15f8720ea14481620b8209d31565e4cedd465ee8263ac62"},{"version":"23faa85069086427eeccf6f385f08ac8b83d9ded48168041f9bcb65f5d51666b","signature":"9fb0ff2dd295a2fd1a5b18bfca837618934411614809043cedc11eeb26a487d3","affectsGlobalScope":true},{"version":"0e31fd88258ac0b9b1f865d2cddcd0495b24ea817d72e743dc785f4e290024df","signature":"1794152c57b71823a51e27efb1365ff77db6e0b6440de11f2250a467fbfc0840"},{"version":"43fd752669102d07dec55006644a406231e514beee59c74fc7c0921f529b75c8","signature":"9be663278a117f9c4e32ff380a758598f1a0e880f86d1fb304a10c24508553a9"},{"version":"4fa0b6c7e6edcda5c144e3dfdd565bb96be4238b524fd0da6d4de002cd22622d","signature":"82b632edf79a19253444e341d704fc63ff22f21371c95974be7e8071260ddb42"},{"version":"7fc0f0bf1aed641cacbfbf053873dd7bdb118e16747dad372a8d3b7da55678c9","signature":"cb3e6185a860f859006381058cb053e6d1756b5221af559c3e0bf74b518ab001"},{"version":"c786eab737522209c93caeebbc2fd0c38e901a13e897b6c736f1e74459b090a7","signature":"698cef40f46a4aa3441936fe00b474e55dede36f6877ed05bbb693583395f295"},"282f98006ed7fa9bb2cd9bdbe2524595cfc4bcd58a0bb3232e4519f2138df811","6222e987b58abfe92597e1273ad7233626285bc2d78409d4a7b113d81a83496b","cbe726263ae9a7bf32352380f7e8ab66ee25b3457137e316929269c19e18a2be","7f698624bbbb060ece7c0e51b7236520ebada74b747d7523c7df376453ed6fea",{"version":"4025a454b1ca489b179ee8c684bdd70ff8c1967e382076ade53e7e4653e1daec","affectsGlobalScope":true},{"version":"c4baf2c38b00f29adfb4e60554de4152ebf4c17f3365c0f2ff34af7f3b35ef1d","affectsGlobalScope":true},"65996936fbb042915f7b74a200fcdde7e410f32a669b1ab9597cfaa4b0faddb5"],"root":[79,[81,102],109],"options":{"composite":true,"declaration":true,"declarationDir":"./types","esModuleInterop":true,"jsx":1,"jsxImportSource":"vue","module":99,"noImplicitAny":true,"rootDir":"./src","skipLibCheck":true,"strict":true,"target":99,"useDefineForClassFields":true},"fileIdsList":[[69],[69,70,71],[72],[71],[71,74,75,77],[74,75,76],[107],[103],[104],[105,106],[73,77],[77],[78,80,87,97],[78,80,81,82,85,86,87,88,90,91,92,93,94,95,96,97],[78,80,81,82,86,88,95,97,99,100],[78,80,81,82,86,87,88,89,97],[78,80,81,88,95,97,98,102],[80,84],[80],[78,97],[78,80,86,97],[78,80,97],[78,80,82,83,85,97,102],[78,80,97,98,101],[78,80,90,97],[78,80,89,97,99],[78,80,81,82,97,102],[80,82,86,90,97,99,101,108],[80,83,85],[80,82,83],[80,82],[80,81,82,83,84],[80,81,86],[108],[110],[78,80,81,82,83,85,86,97],[81,82,83,85,86,99,111],[78,82,86,97],[81,83,85,97,102,111],[84],[111],[78,83,86,97],[82,83,85,97,102,110],[101,111],[90,111],[99,111],[81,82,83,97,110],[82,86,90,97,99,101,108],[83,85],[82,83],[82],[82,83,84],[81,86]],"referencedMap":[[70,1],[72,2],[73,3],[74,4],[75,5],[77,6],[108,7],[104,8],[105,9],[107,10],[78,11],[80,12],[87,13],[97,14],[101,15],[90,16],[99,17],[88,18],[81,19],[79,20],[96,21],[93,22],[94,23],[91,22],[100,24],[89,25],[98,26],[92,27],[102,28],[86,29],[84,30],[83,31],[85,32],[82,33],[95,22],[109,34]],"exportedModulesMap":[[70,1],[72,2],[73,3],[74,4],[75,5],[77,6],[108,7],[104,8],[105,9],[107,10],[78,11],[80,12],[87,35],[97,36],[101,37],[90,38],[99,39],[88,40],[79,41],[96,42],[94,43],[91,41],[100,44],[89,45],[98,46],[92,47],[102,48],[86,49],[84,50],[83,51],[85,52],[82,53],[95,41],[109,34]],"semanticDiagnosticsPerFile":[70,69,72,73,74,75,77,71,76,67,68,12,14,13,2,15,16,17,18,19,20,21,22,3,23,4,24,28,25,26,27,29,30,31,5,32,33,34,35,6,39,36,37,38,40,7,41,46,47,42,43,44,45,8,51,48,49,50,52,9,53,54,55,58,56,57,59,60,10,1,61,11,65,63,62,66,64,108,104,103,105,106,107,78,80,87,97,101,90,99,88,81,79,96,93,94,91,100,89,98,92,102,86,84,83,85,82,95,109],"affectedFilesPendingEmit":[[87,1],[97,1],[101,1],[90,1],[99,1],[88,1],[81,1],[96,1],[93,1],[94,1],[91,1],[100,1],[89,1],[98,1],[92,1],[102,1],[86,1],[84,1],[83,1],[85,1],[82,1],[95,1]],"latestChangedDtsFile":"./types/components/Tree.vue.d.ts"},"version":"5.4.5"} \ No newline at end of file diff --git a/types/components/Tree.vue.d.ts b/types/components/Tree.vue.d.ts index ea68465..d2403b6 100644 --- a/types/components/Tree.vue.d.ts +++ b/types/components/Tree.vue.d.ts @@ -71,6 +71,8 @@ export interface TreeProps { nodeClassName?: string | object | Array | ((node: TreeNode) => string | object | Array); /** 连接线 */ showLine?: boolean | ShowLine; + /** 是否启用过渡动画,目前仅控制展开收起 */ + animation?: boolean; /** 子节点缩进 */ nodeIndent?: number; /** 渲染节点数量,可见节点数大于此值且高度超过(容器可视高度能容纳节点数 + bufferNodeAmount)则不会渲染所有可见节点 */ @@ -232,6 +234,15 @@ declare const _default: __VLS_WithTemplateSlots, { + node?(_: { + node: TreeNode; + }): any; + node?(_: { + node: TreeNode; + }): any; + node?(_: { + node: TreeNode; + }): any; empty?(_: {}): any; loading?(_: {}): any; }>; diff --git a/types/components/TreeNode.vue.d.ts b/types/components/TreeNode.vue.d.ts index 17bf604..da55dd5 100644 --- a/types/components/TreeNode.vue.d.ts +++ b/types/components/TreeNode.vue.d.ts @@ -7,10 +7,19 @@ export type TreeNodeProps = PickedProps & { getNode: GetNodeFn; noSiblingNodeMap: Record; }; -declare const _default: import("vue").DefineComponent<__VLS_TypePropsToOption, {}, unknown, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, { +declare const _default: __VLS_WithTemplateSlots, {}, unknown, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, { [x: string]: (...args: any[]) => void; -}, string, import("vue").PublicProps, Readonly>>, {}, {}>; +}, string, import("vue").PublicProps, Readonly>>, {}, {}>, { + default?(_: { + node: TreeNode; + }): any; +}>; export default _default; +type __VLS_WithTemplateSlots = T & { + new (): { + $slots: S; + }; +}; type __VLS_NonUndefinedable = T extends undefined ? never : T; type __VLS_TypePropsToOption = { [K in keyof T]-?: {} extends Pick ? { diff --git a/types/hooks/useExpandAnimation.d.ts b/types/hooks/useExpandAnimation.d.ts new file mode 100644 index 0000000..9ca0c30 --- /dev/null +++ b/types/hooks/useExpandAnimation.d.ts @@ -0,0 +1,69 @@ +import { Ref } from "vue"; +import { TreeNode } from "../store"; +import { TreeProps } from "../components/Tree.vue"; +type IUseExpandAnimationProps = Required>; +export declare const useExpandAnimation: (renderNodesRef: Ref, props: IUseExpandAnimationProps) => { + ready: Ref; + currentExpandState: Ref; + topNodes: Ref<{ + [x: string]: any; + _level: number; + checked: boolean; + selected: boolean; + indeterminate: boolean; + disabled: boolean; + expand: boolean; + visible: boolean; + _filterVisible: boolean; + _parent: any | null; + children: any[]; + isLeaf: boolean; + _loading: boolean; + _loaded: boolean; + readonly _keyField: string; + readonly _remote: boolean; + setChildren: (children: import("../store/tree-node").ITreeNodeOptions[]) => void; + }[]>; + middleNodes: Ref<{ + [x: string]: any; + _level: number; + checked: boolean; + selected: boolean; + indeterminate: boolean; + disabled: boolean; + expand: boolean; + visible: boolean; + _filterVisible: boolean; + _parent: any | null; + children: any[]; + isLeaf: boolean; + _loading: boolean; + _loaded: boolean; + readonly _keyField: string; + readonly _remote: boolean; + setChildren: (children: import("../store/tree-node").ITreeNodeOptions[]) => void; + }[]>; + bottomNodes: Ref<{ + [x: string]: any; + _level: number; + checked: boolean; + selected: boolean; + indeterminate: boolean; + disabled: boolean; + expand: boolean; + visible: boolean; + _filterVisible: boolean; + _parent: any | null; + children: any[]; + isLeaf: boolean; + _loading: boolean; + _loaded: boolean; + readonly _keyField: string; + readonly _remote: boolean; + setChildren: (children: import("../store/tree-node").ITreeNodeOptions[]) => void; + }[]>; + updateBeforeExpand: (nodeToExpand: TreeNode) => void; + updateAfterExpand: () => void; + onExpandAnimationFinish: () => void; +}; +export {}; From 0c8eb3296981512e5cb6afa635f834b8a7f5571c Mon Sep 17 00:00:00 2001 From: ChuChencheng Date: Mon, 24 Jun 2024 01:44:46 +0800 Subject: [PATCH 12/13] doc: update README --- README.md | 22 ++++++++++++++++------ 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index eccd4cb..b60903b 100644 --- a/README.md +++ b/README.md @@ -1,17 +1,27 @@ -# Vue-Tree 3.x +# Vue-Tree 4.x -一款高性能 vue 虚拟树控件,支持搜索,定位,拖拽等。该控件是在公司业务的基础上不断打磨出来的,提供了十分丰富强大的 API,几乎能够满足你对树控件的所有需求。该控件同时支持 vue2 以及 vue3。 +一款高性能 vue 虚拟树控件,支持搜索,定位,拖拽等。该控件是在公司业务的基础上不断打磨出来的,提供了十分丰富强大的 API,几乎能够满足你对树控件的所有需求。 -> 这是原先[ctree](https://github.com/wsfe/vue-tree/tree/2.x)的升级版本,同时支持 vue2 和 vue3。 +> 这是原先 [ctree](https://github.com/wsfe/vue-tree/tree/2.x) 的升级版本 > 新版改变了包的名称和部分 export 模块名称。 ## **注意** -`@wsfe/vue-tree` 使用了 `vue-demi` 包尝试使组件在 vue 2/3 都通用。但遗憾的是 `vue-demi` 并不能完美使 vue3 组件兼容 vue2 。 +`@wsfe/vue-tree` 3.x 尝试使用 `vue-demi` 包使组件在 Vue 2/3 都通用。但遗憾的是 `vue-demi` 并不能完美使 Vue3 组件兼容 Vue2。`@wsfe/vue-tree` 4.x 将仅支持 Vue3 -`@wsfe/vue-tree` 将使用最新版 vue(3.x) 开发 +因此,建议 Vue2 用户使用 `@wsfe/ctree` 包 -因此,建议 vue2 用户使用 2.x 使用 `@wsfe/ctree` 包。 +## 从旧版迁移 + +从 `@wsfe/ctree` 或者 `@wsfe/vue-tree` 3.x 迁移到 `@wsfe/vue-tree` 4.x 需按如下步骤修改: + +1. 所有 Less 变量与 CSS 相关 class 前缀从 `ctree` 改为 `vtree` +2. 导出的包前缀从 `C` 改为 `V`,例如: + +```diff +- import CTree, { CTreeSearch, CTreeDrop } from '@wsfe/ctree' ++ import VTree, { VTreeSearch, VTreeDrop } from '@wsfe/vue-tree' +``` ## 案例 From 4cc8a91de297ab16cd4f380b5a23d10c12eeda9a Mon Sep 17 00:00:00 2001 From: ChuChencheng Date: Wed, 26 Jun 2024 00:20:11 +0800 Subject: [PATCH 13/13] feat: add v-on to expand animation tree nodes --- src/components/Tree.vue | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/components/Tree.vue b/src/components/Tree.vue index 28b031b..e8ab382 100644 --- a/src/components/Tree.vue +++ b/src/components/Tree.vue @@ -50,6 +50,7 @@ :data="node" :getNode="getNode" :noSiblingNodeMap="noSiblingNodeMap" + v-on="treeNodeListeners" :class="getNodeClassName(node)" :style="{ minHeight: `${nodeMinHeight}px`, @@ -73,6 +74,7 @@ :data="node" :getNode="getNode" :noSiblingNodeMap="noSiblingNodeMap" + v-on="treeNodeListeners" :class="getNodeClassName(node)" :style="{ minHeight: `${nodeMinHeight}px`,