{"version":3,"file":"virtual-tree.mjs","sources":["../../../../../packages/components/tree/src/virtual-tree.ts"],"sourcesContent":["import type { EmitFn } from '@element-ultra/utils'\nimport type { InjectionKey, PropType } from 'vue'\nimport type { TreeNodeData } from './types'\nimport type {\n  TreeNode,\n  TreeKey,\n  TreeData,\n  TreeOptionProps,\n  FilterMethod,\n  CheckedInfo,\n  TreeContext\n} from './types'\n\n// constants\nexport const ROOT_TREE_INJECTION_KEY: InjectionKey<TreeContext> = Symbol()\nconst EMPTY_NODE = {\n  key: -1,\n  level: -1,\n  data: {}\n} as const\n\n// enums\nexport enum TreeOptionsEnum {\n  KEY = 'value',\n  LABEL = 'label',\n  CHILDREN = 'children',\n  DISABLED = 'disabled'\n}\n\nexport const enum SetOperationEnum {\n  ADD = 'add',\n  DELETE = 'delete'\n}\n\n// props\nexport const treeProps = {\n  data: {\n    type: Array as PropType<TreeData>,\n    default: () => []\n  },\n  itemClass: {\n    type: [String, Object],\n    default: ''\n  },\n  itemSize: {\n    type: Number,\n    default: 32\n  },\n  emptyText: {\n    type: String,\n    default: '暂无数据'\n  },\n  height: {\n    type: [Number, String],\n    default: 200\n  },\n  props: {\n    type: Object as PropType<TreeOptionProps>,\n    default: () => ({\n      children: TreeOptionsEnum.CHILDREN,\n      label: TreeOptionsEnum.LABEL,\n      disabled: TreeOptionsEnum.DISABLED,\n      value: TreeOptionsEnum.KEY\n    })\n  },\n  highlightCurrent: {\n    type: Boolean,\n    default: false\n  },\n  showCheckbox: {\n    type: Boolean,\n    default: false\n  },\n  defaultCheckedKeys: {\n    type: Array as PropType<TreeKey[]>,\n    default: () => []\n  },\n  // Whether checked state of a node not affects its father and\n  // child nodes when show-checkbox is true\n  checkStrictly: {\n    type: Boolean,\n    default: false\n  },\n  defaultExpandedKeys: {\n    type: Array as PropType<TreeKey[]>\n  },\n  defaultExpandAll: {\n    type: Boolean\n  },\n  indent: {\n    type: Number,\n    default: 16\n  },\n  icon: {\n    type: String\n  },\n  expandOnClickNode: {\n    type: Boolean,\n    default: true\n  },\n  checkOnClickNode: {\n    type: Boolean,\n    default: false\n  },\n  currentNodeKey: {\n    type: [String, Number] as PropType<TreeKey>\n  },\n  // TODO need to optimization\n  accordion: {\n    type: Boolean,\n    default: false\n  },\n  filterMethod: {\n    type: Function as PropType<FilterMethod>\n  },\n  // Performance mode will increase memory usage, but scrolling will be smoother\n  perfMode: {\n    type: Boolean,\n    default: true\n  },\n  selectable: {\n    type: Function as PropType<(node: any) => boolean>\n  }\n}\n\nexport const treeNodeProps = {\n  node: {\n    type: Object as PropType<TreeNode>,\n    default: () => EMPTY_NODE\n  },\n  expanded: {\n    type: Boolean,\n    default: false\n  },\n  checked: {\n    type: Boolean,\n    default: false\n  },\n  indeterminate: {\n    type: Boolean,\n    default: false\n  },\n  showCheckbox: {\n    type: Boolean,\n    default: false\n  },\n  disabled: {\n    type: Boolean,\n    default: false\n  },\n  current: {\n    type: Boolean,\n    default: false\n  },\n  hiddenExpandIcon: {\n    type: Boolean,\n    default: false\n  }\n} as const\n\nexport const treeNodeContentProps = {\n  node: {\n    type: Object as PropType<TreeNode>,\n    required: true\n  }\n} as const\n\n// emits\nexport const NODE_CLICK = 'node-click'\nexport const NODE_EXPAND = 'node-expand'\nexport const NODE_COLLAPSE = 'node-collapse'\nexport const CURRENT_CHANGE = 'current-change'\nexport const NODE_CHECK = 'check'\nexport const NODE_CHECK_CHANGE = 'check-change'\nexport const NODE_CONTEXTMENU = 'node-contextmenu'\n\nexport const treeEmits = {\n  [NODE_CLICK]: (data: TreeNodeData, node: TreeNode, e: MouseEvent) => data && node && e,\n  [NODE_EXPAND]: (data: TreeNodeData, node: TreeNode) => data && node,\n  [NODE_COLLAPSE]: (data: TreeNodeData, node: TreeNode) => data && node,\n  [CURRENT_CHANGE]: (data?: TreeNodeData, node?: TreeNode) => true,\n  [NODE_CHECK]: (data: TreeNodeData, checkedInfo: CheckedInfo) => data && checkedInfo,\n  [NODE_CHECK_CHANGE]: (data: TreeNodeData, checked: boolean) =>\n    data && typeof checked === 'boolean',\n  [NODE_CONTEXTMENU]: (event: Event, data: TreeNodeData, node: TreeNode) => event && data && node\n}\n\nexport const treeNodeEmits = {\n  click: (node: TreeNode, e: MouseEvent) => !!(node && e),\n  toggle: (node: TreeNode) => !!node,\n  check: (node: TreeNode, checked: boolean) => node && typeof checked === 'boolean'\n}\n\n\nexport type TreeEmit = EmitFn<typeof treeEmits>\n"],"names":["TreeOptionsEnum","SetOperationEnum"],"mappings":"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"}