UNPKG

element-plus

Version:

A Component Library for Vue 3

59 lines (58 loc) 2.04 kB
import type { ComponentInternalInstance, ExtractPropTypes, ExtractPublicPropTypes, SetupContext } from 'vue'; import type { treeEmits, treeProps } from './virtual-tree'; export type TreeNodeData = Record<string, any>; export type TreeData = TreeNodeData[]; export type TreeKey = string | number; export interface TreeOptionProps { children?: string; label?: string; value?: string; disabled?: string; class?: (data: TreeNodeData, node: TreeNode) => string | { [key: string]: boolean; }; } export type TreeProps = ExtractPropTypes<typeof treeProps>; export type TreePropsPublic = ExtractPublicPropTypes<typeof treeProps>; export interface TreeNode { key: TreeKey; level: number; parent?: TreeNode; children?: TreeNode[]; data: TreeNodeData; disabled?: boolean; label?: string; isLeaf?: boolean; expanded?: boolean; /** * Determines whether the current tree node is effectively checked. * * Rules: * 1. A disabled leaf node is always considered checked. * 2. A non-disabled leaf node reflects its actual checked state. * 3. A non-leaf node is considered checked only when: * - All of its child nodes are effectively checked, and * - Each child follows the same evaluation rules: * - Disabled leaf nodes follow rule #1. * - Non-leaf child nodes are recursively evaluated under this rule (#3). */ isEffectivelyChecked?: boolean; } export interface TreeContext { ctx: Omit<SetupContext<typeof treeEmits>, 'expose' | 'attrs'>; instance: ComponentInternalInstance; props: TreeProps; } export interface Tree { treeNodeMap: Map<TreeKey, TreeNode>; levelTreeNodeMap: Map<number, TreeNode[]>; treeNodes: TreeNode[]; maxLevel: number; } export type FilterMethod = (query: string, data: TreeNodeData, node: TreeNode) => boolean; export interface CheckedInfo { checkedKeys: TreeKey[]; checkedNodes: TreeData; halfCheckedKeys: TreeKey[]; halfCheckedNodes: TreeData; }