asterui 0.12.25 → 0.12.27
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/Cascader.d.ts +2 -0
- package/dist/components/Descriptions.d.ts +35 -3
- package/dist/components/Empty.d.ts +10 -1
- package/dist/components/Image.d.ts +13 -1
- package/dist/components/List.d.ts +74 -8
- package/dist/components/Table.d.ts +64 -10
- package/dist/components/Tag.d.ts +16 -4
- package/dist/components/Timeline.d.ts +62 -7
- package/dist/components/Tree.d.ts +2 -0
- package/dist/index.d.ts +6 -8
- package/dist/index.js +151 -152
- package/dist/index.js.map +1 -1
- package/dist/index10.js +1 -1
- package/dist/index100.js +5 -32
- package/dist/index100.js.map +1 -1
- package/dist/index101.js +13 -5
- package/dist/index101.js.map +1 -1
- package/dist/index102.js +43 -11
- package/dist/index102.js.map +1 -1
- package/dist/index103.js +11 -44
- package/dist/index103.js.map +1 -1
- package/dist/index104.js +12 -10
- package/dist/index104.js.map +1 -1
- package/dist/index105.js +7 -14
- package/dist/index105.js.map +1 -1
- package/dist/index106.js +12 -7
- package/dist/index106.js.map +1 -1
- package/dist/index107.js +29 -11
- package/dist/index107.js.map +1 -1
- package/dist/index108.js +16 -29
- package/dist/index108.js.map +1 -1
- package/dist/index109.js +31 -16
- package/dist/index109.js.map +1 -1
- package/dist/index110.js +517 -30
- package/dist/index110.js.map +1 -1
- package/dist/index111.js +45 -515
- package/dist/index111.js.map +1 -1
- package/dist/index15.js.map +1 -1
- package/dist/index22.js +1 -1
- package/dist/index23.js +127 -93
- package/dist/index23.js.map +1 -1
- package/dist/index39.js +162 -115
- package/dist/index39.js.map +1 -1
- package/dist/index40.js +398 -40
- package/dist/index40.js.map +1 -1
- package/dist/index41.js +132 -389
- package/dist/index41.js.map +1 -1
- package/dist/index42.js +252 -91
- package/dist/index42.js.map +1 -1
- package/dist/index43.js +143 -247
- package/dist/index43.js.map +1 -1
- package/dist/index44.js +15 -154
- package/dist/index44.js.map +1 -1
- package/dist/index45.js +17 -15
- package/dist/index45.js.map +1 -1
- package/dist/index46.js +136 -16
- package/dist/index46.js.map +1 -1
- package/dist/index47.js +118 -133
- package/dist/index47.js.map +1 -1
- package/dist/index48.js +35 -13
- package/dist/index48.js.map +1 -1
- package/dist/index49.js +34 -35
- package/dist/index49.js.map +1 -1
- package/dist/index50.js +81 -34
- package/dist/index50.js.map +1 -1
- package/dist/index51.js +166 -71
- package/dist/index51.js.map +1 -1
- package/dist/index52.js +144 -167
- package/dist/index52.js.map +1 -1
- package/dist/index53.js +11 -152
- package/dist/index53.js.map +1 -1
- package/dist/index54.js +55 -10
- package/dist/index54.js.map +1 -1
- package/dist/index55.js +12 -55
- package/dist/index55.js.map +1 -1
- package/dist/index56.js +7 -14
- package/dist/index56.js.map +1 -1
- package/dist/index57.js +333 -6
- package/dist/index57.js.map +1 -1
- package/dist/index58.js +47 -334
- package/dist/index58.js.map +1 -1
- package/dist/index59.js +122 -47
- package/dist/index59.js.map +1 -1
- package/dist/index60.js +108 -120
- package/dist/index60.js.map +1 -1
- package/dist/index61.js +167 -107
- package/dist/index61.js.map +1 -1
- package/dist/index62.js +29 -167
- package/dist/index62.js.map +1 -1
- package/dist/index63.js +120 -30
- package/dist/index63.js.map +1 -1
- package/dist/index64.js +80 -116
- package/dist/index64.js.map +1 -1
- package/dist/index65.js +19 -85
- package/dist/index65.js.map +1 -1
- package/dist/index66.js +73 -19
- package/dist/index66.js.map +1 -1
- package/dist/index67.js +54 -71
- package/dist/index67.js.map +1 -1
- package/dist/index68.js +44 -56
- package/dist/index68.js.map +1 -1
- package/dist/index69.js +49 -42
- package/dist/index69.js.map +1 -1
- package/dist/index70.js +121 -50
- package/dist/index70.js.map +1 -1
- package/dist/index71.js +102 -118
- package/dist/index71.js.map +1 -1
- package/dist/index72.js +72 -105
- package/dist/index72.js.map +1 -1
- package/dist/index73.js +67 -73
- package/dist/index73.js.map +1 -1
- package/dist/index74.js +19 -66
- package/dist/index74.js.map +1 -1
- package/dist/index75.js +55 -18
- package/dist/index75.js.map +1 -1
- package/dist/index76.js +251 -55
- package/dist/index76.js.map +1 -1
- package/dist/index77.js +22 -254
- package/dist/index77.js.map +1 -1
- package/dist/index78.js +31 -22
- package/dist/index78.js.map +1 -1
- package/dist/index79.js +93 -30
- package/dist/index79.js.map +1 -1
- package/dist/index80.js +626 -86
- package/dist/index80.js.map +1 -1
- package/dist/index81.js +73 -322
- package/dist/index81.js.map +1 -1
- package/dist/index82.js +39 -79
- package/dist/index82.js.map +1 -1
- package/dist/index83.js +23 -40
- package/dist/index83.js.map +1 -1
- package/dist/index84.js +207 -23
- package/dist/index84.js.map +1 -1
- package/dist/index85.js +149 -122
- package/dist/index85.js.map +1 -1
- package/dist/index86.js +152 -147
- package/dist/index86.js.map +1 -1
- package/dist/index87.js +143 -156
- package/dist/index87.js.map +1 -1
- package/dist/index88.js +35 -65
- package/dist/index88.js.map +1 -1
- package/dist/index89.js +234 -35
- package/dist/index89.js.map +1 -1
- package/dist/index90.js +31 -231
- package/dist/index90.js.map +1 -1
- package/dist/index91.js +210 -34
- package/dist/index91.js.map +1 -1
- package/dist/index92.js +418 -187
- package/dist/index92.js.map +1 -1
- package/dist/index93.js +686 -376
- package/dist/index93.js.map +1 -1
- package/dist/index94.js +165 -738
- package/dist/index94.js.map +1 -1
- package/dist/index95.js +253 -173
- package/dist/index95.js.map +1 -1
- package/dist/index96.js +64 -256
- package/dist/index96.js.map +1 -1
- package/dist/index97.js +121 -61
- package/dist/index97.js.map +1 -1
- package/dist/index98.js +14 -126
- package/dist/index98.js.map +1 -1
- package/dist/index99.js +31 -12
- package/dist/index99.js.map +1 -1
- package/package.json +1 -1
- package/dist/components/Indicator.d.ts +0 -7
- package/dist/index112.js +0 -53
- package/dist/index112.js.map +0 -1
package/dist/index93.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index93.js","sources":["../src/components/Tree.tsx"],"sourcesContent":["import React, {\n useState,\n useCallback,\n useMemo,\n useRef,\n useContext,\n createContext,\n forwardRef,\n useEffect,\n} from 'react'\n\n// ============================================================================\n// Types\n// ============================================================================\n\nexport type TreeColor =\n | 'primary'\n | 'secondary'\n | 'accent'\n | 'neutral'\n | 'info'\n | 'success'\n | 'warning'\n | 'error'\n\nexport type TreeSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl'\n\nexport interface TreeDataNode {\n key: string\n title: React.ReactNode\n children?: TreeDataNode[]\n disabled?: boolean\n disableCheckbox?: boolean\n selectable?: boolean\n checkable?: boolean\n icon?: React.ReactNode\n isLeaf?: boolean\n}\n\nexport interface TreeProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'onSelect'> {\n /** Tree data structure (alternative to compound pattern) */\n treeData?: TreeDataNode[] | undefined\n /** Children for compound pattern */\n children?: React.ReactNode\n /** Show checkbox for each node */\n checkable?: boolean\n /** Checkbox color (DaisyUI) */\n checkboxColor?: TreeColor\n /** Checkbox size (DaisyUI) */\n checkboxSize?: TreeSize\n /** Enable node selection */\n selectable?: boolean\n /** Allow multiple selection */\n multiple?: boolean\n /** Expand all nodes by default */\n defaultExpandAll?: boolean\n /** Default expanded keys */\n defaultExpandedKeys?: string[]\n /** Controlled expanded keys */\n expandedKeys?: string[]\n /** Default selected keys */\n defaultSelectedKeys?: string[]\n /** Controlled selected keys */\n selectedKeys?: string[]\n /** Default checked keys */\n defaultCheckedKeys?: string[]\n /** Controlled checked keys */\n checkedKeys?: string[]\n /** Callback when node is expanded */\n onExpand?: (expandedKeys: string[], info: { node: TreeDataNode; expanded: boolean }) => void\n /** Callback when node is selected */\n onSelect?: (selectedKeys: string[], info: { node: TreeDataNode; selected: boolean }) => void\n /** Callback when node is checked */\n onCheck?: (checkedKeys: string[], info: { node: TreeDataNode; checked: boolean }) => void\n /** Show connecting lines */\n showLine?: boolean\n /** Show node icons */\n showIcon?: boolean\n /** Decouple parent-child checkbox relationship */\n checkStrictly?: boolean\n /** Auto expand parent nodes when expandedKeys change */\n autoExpandParent?: boolean\n /** Make node fill remaining horizontal space */\n blockNode?: boolean\n /** Custom expand/collapse icon */\n switcherIcon?: React.ReactNode | ((expanded: boolean) => React.ReactNode)\n /** Custom title render function */\n titleRender?: (node: TreeDataNode) => React.ReactNode\n /** Filter function for highlighting nodes */\n filterTreeNode?: (node: TreeDataNode) => boolean\n /** Async data loading */\n loadData?: (node: TreeDataNode) => Promise<void>\n /** Right click handler */\n onRightClick?: (info: { event: React.MouseEvent; node: TreeDataNode }) => void\n /** Custom field names for data mapping */\n fieldNames?: { key?: string; title?: string; children?: string }\n}\n\n// ============================================================================\n// Context\n// ============================================================================\n\ninterface TreeContextValue {\n checkable: boolean\n checkboxColor: TreeColor\n checkboxSize: TreeSize\n selectable: boolean\n multiple: boolean\n showLine: boolean\n showIcon: boolean\n blockNode: boolean\n checkStrictly: boolean\n expandedKeys: string[]\n selectedKeys: string[]\n checkedKeys: string[]\n loadingKeys: string[]\n switcherIcon?: React.ReactNode | ((expanded: boolean) => React.ReactNode)\n titleRender?: (node: TreeDataNode) => React.ReactNode\n filterTreeNode?: (node: TreeDataNode) => boolean\n onToggle: (key: string, node: TreeDataNode) => void\n onSelect: (key: string, node: TreeDataNode) => void\n onCheck: (key: string, node: TreeDataNode) => void\n onRightClick?: (info: { event: React.MouseEvent; node: TreeDataNode }) => void\n getCheckedState: (node: TreeDataNode) => { checked: boolean; indeterminate: boolean }\n focusedKey: string | null\n setFocusedKey: (key: string | null) => void\n flattenedNodes: TreeDataNode[]\n registerNode: (key: string, node: TreeDataNode, level: number) => void\n baseTestId: string\n}\n\nconst TreeContext = createContext<TreeContextValue | null>(null)\n\nfunction useTreeContext() {\n const context = useContext(TreeContext)\n if (!context) {\n throw new Error('Tree components must be used within a Tree')\n }\n return context\n}\n\n// ============================================================================\n// Helpers\n// ============================================================================\n\nfunction getAllKeys(data: TreeDataNode[]): string[] {\n const keys: string[] = []\n const traverse = (nodes: TreeDataNode[]) => {\n nodes.forEach((node) => {\n keys.push(node.key)\n if (node.children) {\n traverse(node.children)\n }\n })\n }\n traverse(data)\n return keys\n}\n\nfunction getDescendantKeys(node: TreeDataNode): string[] {\n const keys: string[] = []\n const traverse = (n: TreeDataNode) => {\n if (n.children) {\n n.children.forEach((child) => {\n keys.push(child.key)\n traverse(child)\n })\n }\n }\n traverse(node)\n return keys\n}\n\nfunction getParentMap(data: TreeDataNode[]): Map<string, string | null> {\n const map = new Map<string, string | null>()\n const traverse = (nodes: TreeDataNode[], parentKey: string | null) => {\n nodes.forEach((node) => {\n map.set(node.key, parentKey)\n if (node.children) {\n traverse(node.children, node.key)\n }\n })\n }\n traverse(data, null)\n return map\n}\n\nfunction findNode(data: TreeDataNode[], key: string): TreeDataNode | null {\n for (const node of data) {\n if (node.key === key) return node\n if (node.children) {\n const found = findNode(node.children, key)\n if (found) return found\n }\n }\n return null\n}\n\nfunction flattenTree(data: TreeDataNode[], expandedKeys: string[]): TreeDataNode[] {\n const result: TreeDataNode[] = []\n const traverse = (nodes: TreeDataNode[]) => {\n nodes.forEach((node) => {\n result.push(node)\n if (node.children && expandedKeys.includes(node.key)) {\n traverse(node.children)\n }\n })\n }\n traverse(data)\n return result\n}\n\nfunction getAncestorKeys(data: TreeDataNode[], key: string): string[] {\n const parentMap = getParentMap(data)\n const ancestors: string[] = []\n let currentKey: string | null | undefined = parentMap.get(key)\n while (currentKey) {\n ancestors.push(currentKey)\n currentKey = parentMap.get(currentKey)\n }\n return ancestors\n}\n\n// ============================================================================\n// TreeNode Component\n// ============================================================================\n\ninterface TreeNodeInternalProps {\n node: TreeDataNode\n level: number\n}\n\nfunction TreeNodeInternal({ node, level }: TreeNodeInternalProps) {\n const {\n checkable,\n checkboxColor,\n checkboxSize,\n selectable,\n showLine,\n showIcon,\n blockNode,\n expandedKeys,\n selectedKeys,\n loadingKeys,\n switcherIcon,\n titleRender,\n filterTreeNode,\n onToggle,\n onSelect,\n onCheck,\n onRightClick,\n getCheckedState,\n focusedKey,\n setFocusedKey,\n flattenedNodes,\n baseTestId,\n } = useTreeContext()\n\n const nodeRef = useRef<HTMLDivElement>(null)\n const hasChildren = node.children && node.children.length > 0\n const isLeaf = node.isLeaf ?? !hasChildren\n const isExpanded = expandedKeys.includes(node.key)\n const isSelected = selectedKeys.includes(node.key)\n const isLoading = loadingKeys.includes(node.key)\n const isFocused = focusedKey === node.key\n const { checked, indeterminate } = getCheckedState(node)\n const isFiltered = filterTreeNode ? filterTreeNode(node) : false\n const isDisabled = node.disabled\n\n // Focus management\n useEffect(() => {\n if (isFocused && nodeRef.current) {\n nodeRef.current.focus()\n }\n }, [isFocused])\n\n const handleToggle = (e: React.MouseEvent | React.KeyboardEvent) => {\n e.stopPropagation()\n if (!isLeaf && !isDisabled) {\n onToggle(node.key, node)\n }\n }\n\n const handleSelect = (_e: React.MouseEvent | React.KeyboardEvent) => {\n if (selectable && node.selectable !== false && !isDisabled) {\n onSelect(node.key, node)\n }\n }\n\n const handleCheck = (e: React.MouseEvent | React.ChangeEvent) => {\n e.stopPropagation()\n if (!isDisabled && !node.disableCheckbox) {\n onCheck(node.key, node)\n }\n }\n\n const handleContextMenu = (e: React.MouseEvent) => {\n if (onRightClick) {\n e.preventDefault()\n onRightClick({ event: e, node })\n }\n }\n\n const handleKeyDown = (e: React.KeyboardEvent) => {\n const currentIndex = flattenedNodes.findIndex((n) => n.key === node.key)\n\n switch (e.key) {\n case 'ArrowDown': {\n e.preventDefault()\n const nextNode = flattenedNodes[currentIndex + 1]\n if (nextNode) {\n setFocusedKey(nextNode.key)\n }\n break\n }\n case 'ArrowUp': {\n e.preventDefault()\n const prevNode = flattenedNodes[currentIndex - 1]\n if (prevNode) {\n setFocusedKey(prevNode.key)\n }\n break\n }\n case 'ArrowRight': {\n e.preventDefault()\n if (!isLeaf && !isExpanded) {\n onToggle(node.key, node)\n } else if (hasChildren && isExpanded) {\n const firstChild = node.children![0]\n setFocusedKey(firstChild.key)\n }\n break\n }\n case 'ArrowLeft': {\n e.preventDefault()\n if (!isLeaf && isExpanded) {\n onToggle(node.key, node)\n }\n break\n }\n case 'Enter':\n case ' ': {\n e.preventDefault()\n if (checkable && node.checkable !== false) {\n onCheck(node.key, node)\n } else if (selectable && node.selectable !== false) {\n onSelect(node.key, node)\n } else if (!isLeaf) {\n onToggle(node.key, node)\n }\n break\n }\n case 'Home': {\n e.preventDefault()\n const firstNode = flattenedNodes[0]\n if (firstNode) {\n setFocusedKey(firstNode.key)\n }\n break\n }\n case 'End': {\n e.preventDefault()\n const lastNode = flattenedNodes[flattenedNodes.length - 1]\n if (lastNode) {\n setFocusedKey(lastNode.key)\n }\n break\n }\n }\n }\n\n // Checkbox classes - must use static strings for Tailwind JIT\n const checkboxSizeClasses: Record<TreeSize, string> = {\n xs: 'checkbox-xs',\n sm: 'checkbox-sm',\n md: '',\n lg: 'checkbox-lg',\n xl: 'checkbox-xl',\n }\n const checkboxColorClasses: Record<TreeColor, string> = {\n primary: 'checkbox-primary',\n secondary: 'checkbox-secondary',\n accent: 'checkbox-accent',\n neutral: 'checkbox-neutral',\n info: 'checkbox-info',\n success: 'checkbox-success',\n warning: 'checkbox-warning',\n error: 'checkbox-error',\n }\n const checkboxSizeClass = checkboxSizeClasses[checkboxSize]\n const checkboxColorClass = checkboxColorClasses[checkboxColor]\n\n // Render switcher icon\n const renderSwitcher = () => {\n if (isLoading) {\n return <span className=\"loading loading-spinner loading-xs\" />\n }\n\n if (isLeaf) {\n return <span className=\"w-4 h-4\" />\n }\n\n if (switcherIcon) {\n return typeof switcherIcon === 'function' ? switcherIcon(isExpanded) : switcherIcon\n }\n\n return (\n <svg\n className={`w-4 h-4 transition-transform duration-200 ${isExpanded ? 'rotate-90' : ''}`}\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n aria-hidden=\"true\"\n >\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M9 5l7 7-7 7\" />\n </svg>\n )\n }\n\n // Render title\n const renderTitle = () => {\n if (titleRender) {\n return titleRender(node)\n }\n return node.title\n }\n\n const nodeState = isSelected ? 'selected' : isExpanded ? 'expanded' : 'collapsed'\n\n return (\n <div\n className=\"tree-node\"\n role=\"treeitem\"\n aria-expanded={!isLeaf ? isExpanded : undefined}\n aria-selected={isSelected}\n aria-checked={checkable ? (indeterminate ? 'mixed' : checked) : undefined}\n aria-disabled={isDisabled}\n aria-level={level + 1}\n data-testid={`${baseTestId}-node-${node.key}`}\n data-state={nodeState}\n data-key={node.key}\n >\n <div\n ref={nodeRef}\n className={[\n 'flex items-center py-1 px-1 rounded transition-colors outline-none',\n 'focus-visible:ring-2 focus-visible:ring-primary focus-visible:ring-offset-1',\n selectable && !isDisabled && 'cursor-pointer hover:bg-base-200',\n isSelected && 'bg-primary/10 text-primary',\n isDisabled && 'opacity-50 cursor-not-allowed',\n isFiltered && 'bg-warning/20',\n blockNode && 'w-full',\n ]\n .filter(Boolean)\n .join(' ')}\n style={{ paddingLeft: `${level * 20}px` }}\n tabIndex={isFocused ? 0 : -1}\n onClick={handleSelect}\n onContextMenu={handleContextMenu}\n onKeyDown={handleKeyDown}\n onFocus={() => setFocusedKey(node.key)}\n >\n {/* Expand/Collapse icon */}\n <span\n className={[\n 'w-5 h-5 flex items-center justify-center flex-shrink-0',\n !isLeaf && !isDisabled && 'cursor-pointer hover:bg-base-300 rounded',\n ]\n .filter(Boolean)\n .join(' ')}\n onClick={handleToggle}\n aria-hidden=\"true\"\n >\n {renderSwitcher()}\n </span>\n\n {/* Checkbox */}\n {checkable && node.checkable !== false && (\n <span className=\"mr-1 flex-shrink-0\" onClick={handleCheck}>\n <input\n type=\"checkbox\"\n className={`checkbox ${checkboxSizeClass} ${checkboxColorClass}`}\n checked={checked}\n ref={(el) => {\n if (el) el.indeterminate = indeterminate\n }}\n disabled={isDisabled || node.disableCheckbox}\n onChange={handleCheck}\n tabIndex={-1}\n aria-hidden=\"true\"\n data-state={indeterminate ? 'indeterminate' : checked ? 'checked' : 'unchecked'}\n />\n </span>\n )}\n\n {/* Custom icon */}\n {showIcon && node.icon && (\n <span className=\"mr-1 flex-shrink-0\" aria-hidden=\"true\">\n {node.icon}\n </span>\n )}\n\n {/* Title */}\n <span className=\"flex-1 truncate select-none\">{renderTitle()}</span>\n </div>\n\n {/* Children */}\n {hasChildren && isExpanded && (\n <div\n className={showLine ? 'border-l border-base-300 ml-2.5' : ''}\n role=\"group\"\n aria-label={`${node.title} children`}\n >\n {node.children!.map((child) => (\n <TreeNodeInternal key={child.key} node={child} level={level + 1} />\n ))}\n </div>\n )}\n </div>\n )\n}\n\n// ============================================================================\n// Tree.Node Component (Compound Pattern)\n// ============================================================================\n\nexport interface TreeNodeProps {\n /** Unique key for the node (uses React's key prop) */\n key: string\n /** Display title */\n title: React.ReactNode\n /** Custom icon */\n icon?: React.ReactNode\n /** Disable the node */\n disabled?: boolean\n /** Disable checkbox for this node */\n disableCheckbox?: boolean\n /** Whether node can be selected */\n selectable?: boolean\n /** Whether node shows checkbox */\n checkable?: boolean\n /** Force node to be a leaf */\n isLeaf?: boolean\n /** Child nodes */\n children?: React.ReactNode\n}\n\nfunction TreeNode(_props: TreeNodeProps): null {\n // The actual rendering is handled by the Tree component via buildTree\n return null\n}\n\n// Mark the component for identification after bundling\nTreeNode.displayName = 'Tree.Node'\n\nfunction isTreeNode(element: React.ReactElement): boolean {\n return (\n element.type === TreeNode ||\n (typeof element.type === 'function' &&\n (element.type as { displayName?: string }).displayName === 'Tree.Node')\n )\n}\n\n// ============================================================================\n// Main Tree Component\n// ============================================================================\n\nexport const Tree = Object.assign(\n forwardRef<HTMLDivElement, TreeProps>(function Tree(\n {\n treeData: treeDataProp,\n children,\n checkable = false,\n checkboxColor = 'primary',\n checkboxSize = 'sm',\n selectable = true,\n multiple = false,\n defaultExpandAll = false,\n defaultExpandedKeys = [],\n expandedKeys: controlledExpandedKeys,\n defaultSelectedKeys = [],\n selectedKeys: controlledSelectedKeys,\n defaultCheckedKeys = [],\n checkedKeys: controlledCheckedKeys,\n onExpand,\n onSelect,\n onCheck,\n showLine = false,\n showIcon = false,\n checkStrictly = false,\n autoExpandParent = true,\n blockNode = false,\n switcherIcon,\n titleRender,\n filterTreeNode,\n loadData,\n onRightClick,\n fieldNames,\n className = '',\n 'data-testid': testId,\n ...rest\n },\n ref\n ) {\n const baseTestId = testId ?? 'tree'\n // Handle compound pattern: collect nodes from children\n const registerNode = useCallback((_key: string, _node: TreeDataNode, _level: number) => {\n // Registration is handled by the buildTree function parsing children\n }, [])\n\n // Build tree data from compound children or use treeData prop\n const treeData = useMemo(() => {\n if (treeDataProp) {\n // Apply fieldNames mapping if provided\n if (fieldNames) {\n const mapNode = (node: Record<string, unknown>): TreeDataNode => {\n const key = fieldNames.key ? (node[fieldNames.key] as string) : (node.key as string)\n const title = fieldNames.title ? node[fieldNames.title] : node.title\n const children = fieldNames.children ? node[fieldNames.children] : node.children\n\n return {\n ...node,\n key,\n title: title as React.ReactNode,\n children: Array.isArray(children)\n ? children.map((child) => mapNode(child as Record<string, unknown>))\n : undefined,\n } as TreeDataNode\n }\n return (treeDataProp as unknown as Record<string, unknown>[]).map(mapNode)\n }\n return treeDataProp\n }\n\n // Build from compound pattern\n const buildTree = (nodes: React.ReactNode): TreeDataNode[] => {\n const result: TreeDataNode[] = []\n React.Children.forEach(nodes, (child) => {\n if (React.isValidElement(child) && isTreeNode(child)) {\n const props = child.props as Omit<TreeNodeProps, 'key'>\n // React's key is accessed via child.key, not child.props.key\n const key = child.key as string\n if (!key) {\n console.warn('Tree.Node requires a key prop')\n return\n }\n const node: TreeDataNode = {\n key,\n title: props.title,\n icon: props.icon,\n disabled: props.disabled,\n disableCheckbox: props.disableCheckbox,\n selectable: props.selectable,\n checkable: props.checkable,\n isLeaf: props.isLeaf,\n children: props.children ? buildTree(props.children) : undefined,\n }\n result.push(node)\n }\n })\n return result\n }\n\n return buildTree(children)\n }, [treeDataProp, children, fieldNames])\n\n // Loading state for async data\n const [loadingKeys, setLoadingKeys] = useState<string[]>([])\n\n // Initialize expanded keys\n const initialExpandedKeys = useMemo(() => {\n if (defaultExpandAll) {\n return getAllKeys(treeData)\n }\n if (autoExpandParent && defaultExpandedKeys.length > 0) {\n const allKeys = new Set(defaultExpandedKeys)\n defaultExpandedKeys.forEach((key) => {\n getAncestorKeys(treeData, key).forEach((k) => allKeys.add(k))\n })\n return Array.from(allKeys)\n }\n return defaultExpandedKeys\n }, [])\n\n const [internalExpandedKeys, setInternalExpandedKeys] = useState<string[]>(initialExpandedKeys)\n const [internalSelectedKeys, setInternalSelectedKeys] = useState<string[]>(defaultSelectedKeys)\n const [internalCheckedKeys, setInternalCheckedKeys] = useState<string[]>(defaultCheckedKeys)\n const [focusedKey, setFocusedKey] = useState<string | null>(null)\n\n const expandedKeys = controlledExpandedKeys ?? internalExpandedKeys\n const selectedKeys = controlledSelectedKeys ?? internalSelectedKeys\n const checkedKeys = controlledCheckedKeys ?? internalCheckedKeys\n\n const parentMap = useMemo(() => getParentMap(treeData), [treeData])\n\n // Flatten visible nodes for keyboard navigation\n const flattenedNodes = useMemo(() => flattenTree(treeData, expandedKeys), [treeData, expandedKeys])\n\n // Calculate checked state for each node\n const getCheckedState = useCallback(\n (node: TreeDataNode): { checked: boolean; indeterminate: boolean } => {\n if (checkStrictly) {\n return { checked: checkedKeys.includes(node.key), indeterminate: false }\n }\n\n if (!node.children || node.children.length === 0) {\n return { checked: checkedKeys.includes(node.key), indeterminate: false }\n }\n\n const descendantKeys = getDescendantKeys(node)\n const checkedDescendants = descendantKeys.filter((k) => checkedKeys.includes(k))\n\n if (checkedDescendants.length === 0) {\n return { checked: checkedKeys.includes(node.key), indeterminate: false }\n }\n\n if (checkedDescendants.length === descendantKeys.length) {\n return { checked: true, indeterminate: false }\n }\n\n return { checked: false, indeterminate: true }\n },\n [checkedKeys, checkStrictly]\n )\n\n const handleToggle = useCallback(\n async (key: string, node: TreeDataNode) => {\n const isExpanded = expandedKeys.includes(key)\n\n // Handle async loading\n if (loadData && !isExpanded && !node.isLeaf && (!node.children || node.children.length === 0)) {\n setLoadingKeys((prev) => [...prev, key])\n try {\n await loadData(node)\n } finally {\n setLoadingKeys((prev) => prev.filter((k) => k !== key))\n }\n }\n\n const newExpandedKeys = isExpanded\n ? expandedKeys.filter((k) => k !== key)\n : [...expandedKeys, key]\n\n if (controlledExpandedKeys === undefined) {\n setInternalExpandedKeys(newExpandedKeys)\n }\n\n onExpand?.(newExpandedKeys, { node, expanded: !isExpanded })\n },\n [expandedKeys, controlledExpandedKeys, onExpand, loadData]\n )\n\n const handleSelect = useCallback(\n (key: string, node: TreeDataNode) => {\n let newSelectedKeys: string[]\n\n if (multiple) {\n if (selectedKeys.includes(key)) {\n newSelectedKeys = selectedKeys.filter((k) => k !== key)\n } else {\n newSelectedKeys = [...selectedKeys, key]\n }\n } else {\n newSelectedKeys = selectedKeys.includes(key) ? [] : [key]\n }\n\n if (controlledSelectedKeys === undefined) {\n setInternalSelectedKeys(newSelectedKeys)\n }\n\n onSelect?.(newSelectedKeys, { node, selected: newSelectedKeys.includes(key) })\n },\n [selectedKeys, multiple, controlledSelectedKeys, onSelect]\n )\n\n const handleCheck = useCallback(\n (key: string, node: TreeDataNode) => {\n const isChecked = checkedKeys.includes(key)\n let newCheckedKeys = [...checkedKeys]\n\n if (checkStrictly) {\n // Simple toggle without parent-child relationship\n if (isChecked) {\n newCheckedKeys = newCheckedKeys.filter((k) => k !== key)\n } else {\n newCheckedKeys.push(key)\n }\n } else {\n // Get all descendant keys\n const descendantKeys = getDescendantKeys(node)\n\n if (isChecked) {\n // Uncheck this node and all descendants\n newCheckedKeys = newCheckedKeys.filter((k) => k !== key && !descendantKeys.includes(k))\n } else {\n // Check this node and all descendants\n newCheckedKeys.push(key)\n descendantKeys.forEach((dk) => {\n if (!newCheckedKeys.includes(dk)) {\n newCheckedKeys.push(dk)\n }\n })\n }\n\n // Update parent states\n let currentKey: string | null = parentMap.get(key) ?? null\n while (currentKey) {\n const parentNode = findNode(treeData, currentKey)\n if (parentNode && parentNode.children) {\n const allChildrenChecked = parentNode.children.every(\n (child) =>\n newCheckedKeys.includes(child.key) ||\n getDescendantKeys(child).every((dk) => newCheckedKeys.includes(dk))\n )\n\n if (allChildrenChecked) {\n if (!newCheckedKeys.includes(currentKey)) {\n newCheckedKeys.push(currentKey)\n }\n } else {\n newCheckedKeys = newCheckedKeys.filter((k) => k !== currentKey)\n }\n }\n currentKey = parentMap.get(currentKey) ?? null\n }\n }\n\n if (controlledCheckedKeys === undefined) {\n setInternalCheckedKeys(newCheckedKeys)\n }\n\n onCheck?.(newCheckedKeys, { node, checked: !isChecked })\n },\n [checkedKeys, controlledCheckedKeys, onCheck, parentMap, treeData, checkStrictly]\n )\n\n // Handle initial focus\n const handleTreeFocus = useCallback(() => {\n if (!focusedKey && flattenedNodes.length > 0) {\n setFocusedKey(flattenedNodes[0].key)\n }\n }, [focusedKey, flattenedNodes])\n\n const contextValue: TreeContextValue = {\n checkable,\n checkboxColor,\n checkboxSize,\n selectable,\n multiple,\n showLine,\n showIcon,\n blockNode,\n checkStrictly,\n expandedKeys,\n selectedKeys,\n checkedKeys,\n loadingKeys,\n switcherIcon,\n titleRender,\n filterTreeNode,\n onToggle: handleToggle,\n onSelect: handleSelect,\n onCheck: handleCheck,\n onRightClick,\n getCheckedState,\n focusedKey,\n setFocusedKey,\n flattenedNodes,\n registerNode,\n baseTestId,\n }\n\n return (\n <TreeContext.Provider value={contextValue}>\n <div\n ref={ref}\n className={`tree ${className}`}\n role=\"tree\"\n aria-multiselectable={multiple}\n data-testid={baseTestId}\n onFocus={handleTreeFocus}\n {...rest}\n >\n {treeData.map((node) => (\n <TreeNodeInternal key={node.key} node={node} level={0} />\n ))}\n </div>\n </TreeContext.Provider>\n )\n }),\n {\n Node: TreeNode,\n }\n)\n"],"names":["TreeContext","createContext","useTreeContext","context","useContext","getAllKeys","data","keys","traverse","nodes","node","getDescendantKeys","n","child","getParentMap","map","parentKey","findNode","key","found","flattenTree","expandedKeys","result","getAncestorKeys","parentMap","ancestors","currentKey","TreeNodeInternal","level","checkable","checkboxColor","checkboxSize","selectable","showLine","showIcon","blockNode","selectedKeys","loadingKeys","switcherIcon","titleRender","filterTreeNode","onToggle","onSelect","onCheck","onRightClick","getCheckedState","focusedKey","setFocusedKey","flattenedNodes","baseTestId","nodeRef","useRef","hasChildren","isLeaf","isExpanded","isSelected","isLoading","isFocused","checked","indeterminate","isFiltered","isDisabled","useEffect","handleToggle","e","handleSelect","_e","handleCheck","handleContextMenu","handleKeyDown","currentIndex","nextNode","prevNode","firstChild","firstNode","lastNode","checkboxSizeClasses","checkboxColorClasses","checkboxSizeClass","checkboxColorClass","renderSwitcher","jsx","renderTitle","nodeState","jsxs","el","TreeNode","_props","isTreeNode","element","Tree","forwardRef","treeDataProp","children","multiple","defaultExpandAll","defaultExpandedKeys","controlledExpandedKeys","defaultSelectedKeys","controlledSelectedKeys","defaultCheckedKeys","controlledCheckedKeys","onExpand","checkStrictly","autoExpandParent","loadData","fieldNames","className","testId","rest","ref","registerNode","useCallback","_key","_node","_level","treeData","useMemo","mapNode","title","buildTree","React","props","setLoadingKeys","useState","initialExpandedKeys","allKeys","k","internalExpandedKeys","setInternalExpandedKeys","internalSelectedKeys","setInternalSelectedKeys","internalCheckedKeys","setInternalCheckedKeys","checkedKeys","descendantKeys","checkedDescendants","prev","newExpandedKeys","newSelectedKeys","isChecked","newCheckedKeys","dk","parentNode","handleTreeFocus","contextValue"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index93.js","sources":["../src/components/TreeSelect.tsx"],"sourcesContent":["import React, {\n useState,\n useCallback,\n useRef,\n useEffect,\n useMemo,\n forwardRef,\n useId,\n} from 'react'\nimport type { TreeDataNode } from './Tree'\n\nexport type TreeSelectSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl'\nexport type TreeSelectColor =\n | 'primary'\n | 'secondary'\n | 'accent'\n | 'neutral'\n | 'info'\n | 'success'\n | 'warning'\n | 'error'\nexport type TreeSelectStatus = 'error' | 'warning'\nexport type TreeSelectVariant = 'outlined' | 'filled' | 'borderless'\nexport type ShowCheckedStrategy = 'SHOW_ALL' | 'SHOW_PARENT' | 'SHOW_CHILD'\n\n// Static strategy constants\nconst SHOW_ALL: ShowCheckedStrategy = 'SHOW_ALL'\nconst SHOW_PARENT: ShowCheckedStrategy = 'SHOW_PARENT'\nconst SHOW_CHILD: ShowCheckedStrategy = 'SHOW_CHILD'\n\nexport interface TreeSelectFieldNames {\n label?: string\n value?: string\n children?: string\n}\n\n/** Value type when labelInValue is true */\nexport interface LabeledValue {\n value: string\n label: React.ReactNode\n}\n\nexport interface TreeSelectProps\n extends Omit<React.HTMLAttributes<HTMLDivElement>, 'onChange' | 'defaultValue'> {\n treeData: TreeDataNode[]\n value?: string | string[] | LabeledValue | LabeledValue[]\n defaultValue?: string | string[] | LabeledValue | LabeledValue[]\n onChange?: (\n value: string | string[] | LabeledValue | LabeledValue[],\n labels: React.ReactNode[],\n extra?: { triggerValue: string; triggerNode: TreeDataNode }\n ) => void\n multiple?: boolean\n treeCheckable?: boolean\n treeCheckStrictly?: boolean\n showCheckedStrategy?: ShowCheckedStrategy\n showSearch?: boolean\n searchValue?: string\n onSearch?: (value: string) => void\n filterTreeNode?: (searchValue: string, node: TreeDataNode) => boolean\n placeholder?: string\n allowClear?: boolean\n disabled?: boolean\n treeDefaultExpandAll?: boolean\n treeDefaultExpandedKeys?: string[]\n treeExpandedKeys?: string[]\n onTreeExpand?: (expandedKeys: string[]) => void\n size?: TreeSelectSize\n color?: TreeSelectColor\n status?: TreeSelectStatus\n /** Visual variant style */\n variant?: TreeSelectVariant\n /** Ghost style with no background */\n ghost?: boolean\n /** Maximum number of tags to show (multiple/treeCheckable mode) */\n maxTagCount?: number | 'responsive'\n maxTagPlaceholder?: React.ReactNode | ((omittedValues: string[]) => React.ReactNode)\n /** Maximum number of selections allowed */\n maxCount?: number\n /** Return object with value and label instead of just value */\n labelInValue?: boolean\n /** Custom tag render function */\n tagRender?: (props: {\n label: React.ReactNode\n value: string\n closable: boolean\n onClose: () => void\n }) => React.ReactNode\n treeLine?: boolean\n /** Show tree node icon */\n treeIcon?: boolean\n loadData?: (node: TreeDataNode) => Promise<void>\n fieldNames?: TreeSelectFieldNames\n open?: boolean\n onDropdownVisibleChange?: (open: boolean) => void\n suffixIcon?: React.ReactNode\n switcherIcon?: React.ReactNode | ((props: { expanded: boolean }) => React.ReactNode)\n notFoundContent?: React.ReactNode\n dropdownRender?: (menu: React.ReactNode) => React.ReactNode\n popupClassName?: string\n 'data-testid'?: string\n}\n\n// Helper to get field value based on fieldNames\nfunction getFieldValue(\n node: TreeDataNode,\n field: 'title' | 'key' | 'children',\n fieldNames?: TreeSelectFieldNames\n): unknown {\n if (field === 'title') {\n const labelField = fieldNames?.label || 'title'\n return (node as unknown as Record<string, unknown>)[labelField]\n }\n if (field === 'key') {\n const valueField = fieldNames?.value || 'key'\n return (node as unknown as Record<string, unknown>)[valueField]\n }\n if (field === 'children') {\n const childrenField = fieldNames?.children || 'children'\n return (node as unknown as Record<string, unknown>)[childrenField]\n }\n return undefined\n}\n\n// Helper to flatten tree data for search\nfunction flattenTree(\n data: TreeDataNode[],\n parentPath: React.ReactNode[] = [],\n fieldNames?: TreeSelectFieldNames\n): Array<{ node: TreeDataNode; path: React.ReactNode[] }> {\n const result: Array<{ node: TreeDataNode; path: React.ReactNode[] }> = []\n\n data.forEach((node) => {\n const title = getFieldValue(node, 'title', fieldNames) as React.ReactNode\n const children = getFieldValue(node, 'children', fieldNames) as TreeDataNode[] | undefined\n const currentPath = [...parentPath, title]\n result.push({ node, path: currentPath })\n if (children) {\n result.push(...flattenTree(children, currentPath, fieldNames))\n }\n })\n\n return result\n}\n\n// Helper to get all keys\nfunction getAllKeys(data: TreeDataNode[], fieldNames?: TreeSelectFieldNames): string[] {\n const keys: string[] = []\n const traverse = (nodes: TreeDataNode[]) => {\n nodes.forEach((node) => {\n const key = getFieldValue(node, 'key', fieldNames) as string\n const children = getFieldValue(node, 'children', fieldNames) as TreeDataNode[] | undefined\n keys.push(key)\n if (children) traverse(children)\n })\n }\n traverse(data)\n return keys\n}\n\n// Helper to find node by key\nfunction findNode(\n data: TreeDataNode[],\n key: string,\n fieldNames?: TreeSelectFieldNames\n): TreeDataNode | null {\n for (const node of data) {\n const nodeKey = getFieldValue(node, 'key', fieldNames) as string\n const children = getFieldValue(node, 'children', fieldNames) as TreeDataNode[] | undefined\n if (nodeKey === key) return node\n if (children) {\n const found = findNode(children, key, fieldNames)\n if (found) return found\n }\n }\n return null\n}\n\n// Helper to get all descendant keys\nfunction getDescendantKeys(node: TreeDataNode, fieldNames?: TreeSelectFieldNames): string[] {\n const keys: string[] = []\n const traverse = (n: TreeDataNode) => {\n const children = getFieldValue(n, 'children', fieldNames) as TreeDataNode[] | undefined\n if (children) {\n children.forEach((child) => {\n const childKey = getFieldValue(child, 'key', fieldNames) as string\n keys.push(childKey)\n traverse(child)\n })\n }\n }\n traverse(node)\n return keys\n}\n\n// Helper to get parent keys for a node\nfunction getParentKeys(\n data: TreeDataNode[],\n targetKey: string,\n fieldNames?: TreeSelectFieldNames,\n parentKeys: string[] = []\n): string[] | null {\n for (const node of data) {\n const nodeKey = getFieldValue(node, 'key', fieldNames) as string\n const children = getFieldValue(node, 'children', fieldNames) as TreeDataNode[] | undefined\n if (nodeKey === targetKey) return parentKeys\n if (children) {\n const found = getParentKeys(children, targetKey, fieldNames, [...parentKeys, nodeKey])\n if (found) return found\n }\n }\n return null\n}\n\ninterface TreeSelectNodeProps {\n node: TreeDataNode\n level: number\n expanded: boolean\n selected: boolean\n checked: boolean\n indeterminate: boolean\n treeCheckable: boolean\n treeLine: boolean\n treeIcon: boolean\n focused: boolean\n loading: boolean\n baseTestId: string\n id: string\n fieldNames?: TreeSelectFieldNames\n switcherIcon?: React.ReactNode | ((props: { expanded: boolean }) => React.ReactNode)\n onToggle: (key: string) => void\n onSelect: (key: string, node: TreeDataNode) => void\n onCheck: (key: string, node: TreeDataNode) => void\n renderChildren: (children: TreeDataNode[], level: number) => React.ReactNode\n}\n\nfunction TreeSelectNode({\n node,\n level,\n expanded,\n selected,\n checked,\n indeterminate,\n treeCheckable,\n treeLine,\n treeIcon: showTreeIcon,\n focused,\n loading,\n baseTestId,\n id,\n fieldNames,\n switcherIcon,\n onToggle,\n onSelect,\n onCheck,\n renderChildren,\n}: TreeSelectNodeProps) {\n const children = getFieldValue(node, 'children', fieldNames) as TreeDataNode[] | undefined\n const title = getFieldValue(node, 'title', fieldNames) as React.ReactNode\n const key = getFieldValue(node, 'key', fieldNames) as string\n const nodeIcon = node.icon\n const hasChildren = children && children.length > 0\n const isLeaf = node.isLeaf ?? !hasChildren\n\n const handleToggle = (e: React.MouseEvent) => {\n e.stopPropagation()\n if (!isLeaf) {\n onToggle(key)\n }\n }\n\n const handleSelect = () => {\n if (!node.disabled) {\n if (treeCheckable) {\n onCheck(key, node)\n } else {\n onSelect(key, node)\n }\n }\n }\n\n const handleCheck = (e: React.MouseEvent) => {\n e.stopPropagation()\n if (!node.disabled) {\n onCheck(key, node)\n }\n }\n\n const handleKeyDown = (e: React.KeyboardEvent) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault()\n handleSelect()\n }\n }\n\n const renderSwitcherIcon = () => {\n if (loading) {\n return (\n <span className=\"loading loading-spinner loading-xs\" />\n )\n }\n\n if (switcherIcon) {\n if (typeof switcherIcon === 'function') {\n return switcherIcon({ expanded })\n }\n return switcherIcon\n }\n\n return (\n <svg\n className={`w-3 h-3 transition-transform ${expanded ? 'rotate-90' : ''}`}\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n aria-hidden=\"true\"\n >\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M9 5l7 7-7 7\" />\n </svg>\n )\n }\n\n return (\n <div\n className=\"tree-select-node\"\n role=\"treeitem\"\n id={id}\n aria-selected={selected || checked}\n aria-expanded={hasChildren ? expanded : undefined}\n data-testid={`${baseTestId}-option-${key}`}\n data-state={selected || checked ? 'selected' : 'unselected'}\n data-disabled={node.disabled || undefined}\n >\n <div\n className={[\n 'flex items-center py-1.5 px-2 cursor-pointer hover:bg-base-200 transition-colors outline-none',\n (selected || checked) && 'bg-primary/10 text-primary',\n node.disabled && 'opacity-50 cursor-not-allowed',\n focused && 'ring-2 ring-primary ring-inset',\n treeLine && level > 0 && 'border-l border-base-300 ml-2',\n ]\n .filter(Boolean)\n .join(' ')}\n style={{ paddingLeft: `${level * 16 + 8}px` }}\n onClick={handleSelect}\n onKeyDown={handleKeyDown}\n tabIndex={-1}\n >\n {/* Expand/Collapse icon */}\n <span\n className={[\n 'w-4 h-4 flex items-center justify-center flex-shrink-0 mr-1',\n !isLeaf && 'cursor-pointer',\n ]\n .filter(Boolean)\n .join(' ')}\n onClick={handleToggle}\n aria-hidden=\"true\"\n >\n {!isLeaf && renderSwitcherIcon()}\n </span>\n\n {/* Checkbox for treeCheckable mode */}\n {treeCheckable && (\n <span className=\"mr-2 flex-shrink-0\" onClick={handleCheck}>\n <input\n type=\"checkbox\"\n className=\"checkbox checkbox-sm checkbox-primary\"\n checked={checked}\n ref={(el) => {\n if (el) el.indeterminate = indeterminate\n }}\n disabled={node.disabled}\n onChange={handleSelect}\n aria-label={typeof title === 'string' ? title : undefined}\n tabIndex={-1}\n />\n </span>\n )}\n\n {/* Node icon */}\n {showTreeIcon && nodeIcon && (\n <span className=\"mr-1.5 flex-shrink-0 flex items-center\">{nodeIcon}</span>\n )}\n\n {/* Title */}\n <span className=\"flex-1 truncate select-none text-sm\">{title}</span>\n </div>\n\n {/* Children */}\n {hasChildren && expanded && (\n <div role=\"group\">{renderChildren(children!, level + 1)}</div>\n )}\n </div>\n )\n}\n\nconst sizeClasses: Record<TreeSelectSize, string> = {\n xs: 'min-h-6 text-xs',\n sm: 'min-h-8 text-sm',\n md: 'min-h-10 text-base',\n lg: 'min-h-12 text-lg',\n xl: 'min-h-14 text-xl',\n}\n\nconst colorClasses: Record<TreeSelectColor, string> = {\n primary: 'border-primary focus-within:border-primary',\n secondary: 'border-secondary focus-within:border-secondary',\n accent: 'border-accent focus-within:border-accent',\n neutral: 'border-neutral focus-within:border-neutral',\n info: 'border-info focus-within:border-info',\n success: 'border-success focus-within:border-success',\n warning: 'border-warning focus-within:border-warning',\n error: 'border-error focus-within:border-error',\n}\n\nconst statusClasses: Record<TreeSelectStatus, string> = {\n error: 'border-error focus-within:border-error',\n warning: 'border-warning focus-within:border-warning',\n}\n\nconst variantClasses: Record<TreeSelectVariant, string> = {\n outlined: 'border border-base-300',\n filled: 'bg-base-200 border-transparent',\n borderless: 'border-transparent',\n}\n\nexport const TreeSelect = forwardRef<HTMLDivElement, TreeSelectProps>(\n (\n {\n treeData,\n value: controlledValue,\n defaultValue = [],\n onChange,\n multiple = false,\n treeCheckable = false,\n treeCheckStrictly = false,\n showCheckedStrategy = 'SHOW_ALL',\n showSearch = false,\n searchValue: controlledSearchValue,\n onSearch,\n filterTreeNode,\n placeholder = 'Please select',\n allowClear = true,\n disabled = false,\n treeDefaultExpandAll = false,\n treeDefaultExpandedKeys = [],\n treeExpandedKeys: controlledExpandedKeys,\n onTreeExpand,\n size = 'md',\n color,\n status,\n variant = 'outlined',\n ghost = false,\n maxTagCount,\n maxTagPlaceholder,\n maxCount,\n labelInValue = false,\n tagRender,\n treeLine = false,\n treeIcon = false,\n loadData,\n fieldNames,\n open: controlledOpen,\n onDropdownVisibleChange,\n suffixIcon,\n switcherIcon,\n notFoundContent = 'No results found',\n dropdownRender,\n popupClassName = '',\n className = '',\n 'data-testid': testId,\n ...rest\n },\n ref\n ) => {\n const baseTestId = testId ?? 'treeselect'\n const instanceId = useId()\n const listboxId = `${instanceId}-listbox`\n const [isOpen, setIsOpen] = useState(false)\n const [internalSearchValue, setInternalSearchValue] = useState('')\n const [focusedKey, setFocusedKey] = useState<string | null>(null)\n const [loadingKeys, setLoadingKeys] = useState<Set<string>>(new Set())\n const containerRef = useRef<HTMLDivElement>(null)\n const inputRef = useRef<HTMLInputElement>(null)\n const triggerRef = useRef<HTMLDivElement>(null)\n\n const searchValue = controlledSearchValue ?? internalSearchValue\n const open = controlledOpen ?? isOpen\n\n // Normalize value to array - handle labelInValue format\n const normalizeValue = (val: string | string[] | LabeledValue | LabeledValue[] | undefined): string[] => {\n if (val === undefined) return []\n if (Array.isArray(val)) {\n return val.map((v) => (typeof v === 'object' && v !== null ? v.value : v))\n }\n if (typeof val === 'object' && val !== null) {\n return [(val as LabeledValue).value]\n }\n return [val as string]\n }\n\n const initialValue = normalizeValue(defaultValue)\n const [internalValue, setInternalValue] = useState<string[]>(initialValue)\n\n const value = controlledValue !== undefined ? normalizeValue(controlledValue) : internalValue\n\n // Expanded keys\n const initialExpandedKeys = useMemo(() => {\n if (treeDefaultExpandAll) return getAllKeys(treeData, fieldNames)\n return treeDefaultExpandedKeys\n }, [treeData, treeDefaultExpandAll, treeDefaultExpandedKeys, fieldNames])\n\n const [internalExpandedKeys, setInternalExpandedKeys] = useState<string[]>(initialExpandedKeys)\n const expandedKeys = controlledExpandedKeys ?? internalExpandedKeys\n\n // Get flattened visible nodes for keyboard navigation\n const visibleNodes = useMemo(() => {\n const nodes: { key: string; node: TreeDataNode }[] = []\n const traverse = (data: TreeDataNode[]) => {\n data.forEach((node) => {\n const key = getFieldValue(node, 'key', fieldNames) as string\n const children = getFieldValue(node, 'children', fieldNames) as\n | TreeDataNode[]\n | undefined\n nodes.push({ key, node })\n if (children && expandedKeys.includes(key)) {\n traverse(children)\n }\n })\n }\n traverse(treeData)\n return nodes\n }, [treeData, expandedKeys, fieldNames])\n\n const setOpen = useCallback(\n (newOpen: boolean) => {\n if (controlledOpen === undefined) {\n setIsOpen(newOpen)\n }\n onDropdownVisibleChange?.(newOpen)\n },\n [controlledOpen, onDropdownVisibleChange]\n )\n\n // Close on click outside\n useEffect(() => {\n const handleClickOutside = (e: MouseEvent) => {\n if (containerRef.current && !containerRef.current.contains(e.target as Node)) {\n setOpen(false)\n if (controlledSearchValue === undefined) {\n setInternalSearchValue('')\n }\n }\n }\n\n document.addEventListener('mousedown', handleClickOutside)\n return () => document.removeEventListener('mousedown', handleClickOutside)\n }, [setOpen, controlledSearchValue])\n\n // Focus management\n useEffect(() => {\n if (open && showSearch && inputRef.current) {\n inputRef.current.focus()\n } else if (open && triggerRef.current) {\n triggerRef.current.focus()\n }\n }, [open, showSearch])\n\n // Initialize focused key when opening\n useEffect(() => {\n if (open && visibleNodes.length > 0) {\n if (value.length > 0) {\n setFocusedKey(value[0])\n } else {\n setFocusedKey(visibleNodes[0].key)\n }\n } else if (!open) {\n setFocusedKey(null)\n }\n }, [open, visibleNodes, value])\n\n // Filter tree data based on search\n const filteredData = useMemo(() => {\n if (!searchValue) return treeData\n\n const flatNodes = flattenTree(treeData, [], fieldNames)\n const matchingKeys = new Set<string>()\n\n flatNodes.forEach(({ node }) => {\n const title = getFieldValue(node, 'title', fieldNames)\n const key = getFieldValue(node, 'key', fieldNames) as string\n\n let isMatch = false\n if (filterTreeNode) {\n isMatch = filterTreeNode(searchValue, node)\n } else {\n const titleStr = typeof title === 'string' ? title : String(title)\n isMatch = titleStr.toLowerCase().includes(searchValue.toLowerCase())\n }\n\n if (isMatch) {\n matchingKeys.add(key)\n }\n })\n\n // Include parent keys of matching nodes\n const filterTree = (nodes: TreeDataNode[]): TreeDataNode[] => {\n return nodes\n .map((node) => {\n const children = getFieldValue(node, 'children', fieldNames) as\n | TreeDataNode[]\n | undefined\n const key = getFieldValue(node, 'key', fieldNames) as string\n const hasMatchingChildren = children && filterTree(children).length > 0\n const isMatch = matchingKeys.has(key)\n\n if (isMatch || hasMatchingChildren) {\n return {\n ...node,\n children: children ? filterTree(children) : undefined,\n }\n }\n return null\n })\n .filter(Boolean) as TreeDataNode[]\n }\n\n return filterTree(treeData)\n }, [treeData, searchValue, filterTreeNode, fieldNames])\n\n const handleToggle = useCallback(\n async (key: string) => {\n const node = findNode(treeData, key, fieldNames)\n\n // Handle async loading\n if (loadData && node) {\n const children = getFieldValue(node, 'children', fieldNames) as\n | TreeDataNode[]\n | undefined\n if (!children || children.length === 0) {\n setLoadingKeys((prev) => new Set(prev).add(key))\n try {\n await loadData(node)\n } finally {\n setLoadingKeys((prev) => {\n const next = new Set(prev)\n next.delete(key)\n return next\n })\n }\n }\n }\n\n const newKeys = expandedKeys.includes(key)\n ? expandedKeys.filter((k) => k !== key)\n : [...expandedKeys, key]\n\n if (controlledExpandedKeys === undefined) {\n setInternalExpandedKeys(newKeys)\n }\n onTreeExpand?.(newKeys)\n },\n [expandedKeys, controlledExpandedKeys, onTreeExpand, loadData, treeData, fieldNames]\n )\n\n const handleSelect = useCallback(\n (key: string, triggerNode: TreeDataNode) => {\n let newValue: string[]\n\n if (multiple) {\n if (value.includes(key)) {\n newValue = value.filter((k) => k !== key)\n } else {\n // Check maxCount limit\n if (maxCount !== undefined && value.length >= maxCount) {\n return // Don't add more if at limit\n }\n newValue = [...value, key]\n }\n } else {\n newValue = [key]\n setOpen(false)\n if (controlledSearchValue === undefined) {\n setInternalSearchValue('')\n }\n }\n\n if (controlledValue === undefined) {\n setInternalValue(newValue)\n }\n\n const labels = newValue.map((k) => {\n const node = findNode(treeData, k, fieldNames)\n return node ? getFieldValue(node, 'title', fieldNames) as React.ReactNode : k\n })\n\n // Build return value based on labelInValue setting\n if (labelInValue) {\n const labeledValues: LabeledValue[] = newValue.map((k) => {\n const node = findNode(treeData, k, fieldNames)\n return {\n value: k,\n label: node ? getFieldValue(node, 'title', fieldNames) as React.ReactNode : k,\n }\n })\n onChange?.(\n multiple ? labeledValues : labeledValues[0] || { value: '', label: '' },\n labels,\n { triggerValue: key, triggerNode }\n )\n } else {\n onChange?.(multiple ? newValue : newValue[0] || '', labels, { triggerValue: key, triggerNode })\n }\n },\n [\n value,\n multiple,\n maxCount,\n controlledValue,\n onChange,\n treeData,\n setOpen,\n controlledSearchValue,\n fieldNames,\n labelInValue,\n ]\n )\n\n const handleCheck = useCallback(\n (key: string, triggerNode: TreeDataNode) => {\n const isChecked = value.includes(key)\n let newValue = [...value]\n\n if (treeCheckStrictly) {\n // No parent-child association\n if (isChecked) {\n newValue = newValue.filter((k) => k !== key)\n } else {\n // Check maxCount limit\n if (maxCount !== undefined && value.length >= maxCount) {\n return // Don't add more if at limit\n }\n newValue.push(key)\n }\n } else {\n const descendantKeys = getDescendantKeys(triggerNode, fieldNames)\n\n if (isChecked) {\n newValue = newValue.filter((k) => k !== key && !descendantKeys.includes(k))\n } else {\n // Check maxCount limit for adding multiple\n const keysToAdd = [key, ...descendantKeys.filter((dk) => !newValue.includes(dk))]\n if (maxCount !== undefined && newValue.length + keysToAdd.length > maxCount) {\n // Add only up to maxCount\n const remainingSlots = maxCount - newValue.length\n if (remainingSlots <= 0) return\n keysToAdd.slice(0, remainingSlots).forEach((k) => newValue.push(k))\n } else {\n newValue.push(key)\n descendantKeys.forEach((dk) => {\n if (!newValue.includes(dk)) newValue.push(dk)\n })\n }\n }\n }\n\n if (controlledValue === undefined) {\n setInternalValue(newValue)\n }\n\n const labels = newValue.map((k) => {\n const n = findNode(treeData, k, fieldNames)\n return n ? getFieldValue(n, 'title', fieldNames) as React.ReactNode : k\n })\n\n // Build return value based on labelInValue setting\n if (labelInValue) {\n const labeledValues: LabeledValue[] = newValue.map((k) => {\n const node = findNode(treeData, k, fieldNames)\n return {\n value: k,\n label: node ? getFieldValue(node, 'title', fieldNames) as React.ReactNode : k,\n }\n })\n onChange?.(labeledValues, labels, { triggerValue: key, triggerNode })\n } else {\n onChange?.(newValue, labels, { triggerValue: key, triggerNode })\n }\n },\n [value, controlledValue, onChange, treeData, treeCheckStrictly, fieldNames, maxCount, labelInValue]\n )\n\n const handleClear = (e: React.MouseEvent) => {\n e.stopPropagation()\n const newValue: string[] = []\n\n if (controlledValue === undefined) {\n setInternalValue(newValue)\n }\n\n if (labelInValue) {\n onChange?.(multiple || treeCheckable ? [] : { value: '', label: '' }, [])\n } else {\n onChange?.(multiple || treeCheckable ? newValue : '', [])\n }\n }\n\n const removeTag = (key: string, e: React.MouseEvent) => {\n e.stopPropagation()\n const newValue = value.filter((k) => k !== key)\n\n if (controlledValue === undefined) {\n setInternalValue(newValue)\n }\n\n const labels = newValue.map((k) => {\n const n = findNode(treeData, k, fieldNames)\n return n ? getFieldValue(n, 'title', fieldNames) as React.ReactNode : k\n })\n\n if (labelInValue) {\n const labeledValues: LabeledValue[] = newValue.map((k) => {\n const node = findNode(treeData, k, fieldNames)\n return {\n value: k,\n label: node ? getFieldValue(node, 'title', fieldNames) as React.ReactNode : k,\n }\n })\n onChange?.(\n multiple || treeCheckable ? labeledValues : labeledValues[0] || { value: '', label: '' },\n labels\n )\n } else {\n onChange?.(multiple || treeCheckable ? newValue : newValue[0] || '', labels)\n }\n }\n\n const handleSearchChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const newValue = e.target.value\n if (controlledSearchValue === undefined) {\n setInternalSearchValue(newValue)\n }\n onSearch?.(newValue)\n }\n\n const handleKeyDown = (e: React.KeyboardEvent) => {\n if (disabled) return\n\n switch (e.key) {\n case 'Enter':\n case ' ':\n if (!open) {\n e.preventDefault()\n setOpen(true)\n } else if (focusedKey) {\n e.preventDefault()\n const node = findNode(treeData, focusedKey, fieldNames)\n if (node && !node.disabled) {\n if (treeCheckable) {\n handleCheck(focusedKey, node)\n } else {\n handleSelect(focusedKey, node)\n }\n }\n }\n break\n\n case 'Escape':\n e.preventDefault()\n setOpen(false)\n if (controlledSearchValue === undefined) {\n setInternalSearchValue('')\n }\n triggerRef.current?.focus()\n break\n\n case 'ArrowDown':\n e.preventDefault()\n if (!open) {\n setOpen(true)\n } else {\n const currentIndex = visibleNodes.findIndex((n) => n.key === focusedKey)\n const nextIndex = currentIndex < visibleNodes.length - 1 ? currentIndex + 1 : 0\n setFocusedKey(visibleNodes[nextIndex]?.key || null)\n }\n break\n\n case 'ArrowUp':\n e.preventDefault()\n if (open) {\n const currentIndex = visibleNodes.findIndex((n) => n.key === focusedKey)\n const prevIndex = currentIndex > 0 ? currentIndex - 1 : visibleNodes.length - 1\n setFocusedKey(visibleNodes[prevIndex]?.key || null)\n }\n break\n\n case 'ArrowRight':\n if (open && focusedKey) {\n e.preventDefault()\n const node = findNode(treeData, focusedKey, fieldNames)\n const children = node\n ? (getFieldValue(node, 'children', fieldNames) as TreeDataNode[] | undefined)\n : undefined\n if (children && children.length > 0 && !expandedKeys.includes(focusedKey)) {\n handleToggle(focusedKey)\n }\n }\n break\n\n case 'ArrowLeft':\n if (open && focusedKey) {\n e.preventDefault()\n if (expandedKeys.includes(focusedKey)) {\n handleToggle(focusedKey)\n } else {\n // Move to parent\n const parentKeys = getParentKeys(treeData, focusedKey, fieldNames)\n if (parentKeys && parentKeys.length > 0) {\n setFocusedKey(parentKeys[parentKeys.length - 1])\n }\n }\n }\n break\n\n case 'Home':\n if (open) {\n e.preventDefault()\n setFocusedKey(visibleNodes[0]?.key || null)\n }\n break\n\n case 'End':\n if (open) {\n e.preventDefault()\n setFocusedKey(visibleNodes[visibleNodes.length - 1]?.key || null)\n }\n break\n }\n }\n\n const getCheckedState = useCallback(\n (node: TreeDataNode): { checked: boolean; indeterminate: boolean } => {\n const key = getFieldValue(node, 'key', fieldNames) as string\n const children = getFieldValue(node, 'children', fieldNames) as TreeDataNode[] | undefined\n\n if (treeCheckStrictly) {\n return { checked: value.includes(key), indeterminate: false }\n }\n\n if (!children || children.length === 0) {\n return { checked: value.includes(key), indeterminate: false }\n }\n\n const descendantKeys = getDescendantKeys(node, fieldNames)\n const checkedDescendants = descendantKeys.filter((k) => value.includes(k))\n\n if (checkedDescendants.length === 0) {\n return { checked: value.includes(key), indeterminate: false }\n }\n\n if (checkedDescendants.length === descendantKeys.length) {\n return { checked: true, indeterminate: false }\n }\n\n return { checked: false, indeterminate: true }\n },\n [value, treeCheckStrictly, fieldNames]\n )\n\n const renderNodes = useCallback(\n (nodes: TreeDataNode[], level: number): React.ReactNode => {\n return nodes.map((node) => {\n const key = getFieldValue(node, 'key', fieldNames) as string\n const { checked, indeterminate } = getCheckedState(node)\n\n return (\n <TreeSelectNode\n key={key}\n node={node}\n level={level}\n expanded={expandedKeys.includes(key)}\n selected={value.includes(key)}\n checked={checked}\n indeterminate={indeterminate}\n treeCheckable={treeCheckable}\n treeLine={treeLine}\n treeIcon={treeIcon}\n focused={focusedKey === key}\n loading={loadingKeys.has(key)}\n baseTestId={baseTestId}\n id={`${instanceId}-option-${key}`}\n fieldNames={fieldNames}\n switcherIcon={switcherIcon}\n onToggle={handleToggle}\n onSelect={handleSelect}\n onCheck={handleCheck}\n renderChildren={renderNodes}\n />\n )\n })\n },\n [\n expandedKeys,\n value,\n treeCheckable,\n treeLine,\n treeIcon,\n focusedKey,\n loadingKeys,\n baseTestId,\n instanceId,\n fieldNames,\n switcherIcon,\n handleToggle,\n handleSelect,\n handleCheck,\n getCheckedState,\n ]\n )\n\n // Display value with showCheckedStrategy\n const displayValue = useMemo(() => {\n if (value.length === 0) return null\n\n let displayKeys = value\n\n if ((treeCheckable || multiple) && showCheckedStrategy !== 'SHOW_ALL') {\n if (showCheckedStrategy === 'SHOW_PARENT') {\n // Only show parent nodes when all children are selected\n displayKeys = value.filter((key) => {\n const parentKeys = getParentKeys(treeData, key, fieldNames)\n if (!parentKeys) return true\n // Check if any parent is fully selected\n return !parentKeys.some((pk) => value.includes(pk))\n })\n } else if (showCheckedStrategy === 'SHOW_CHILD') {\n // Only show leaf nodes\n displayKeys = value.filter((key) => {\n const node = findNode(treeData, key, fieldNames)\n if (!node) return true\n const children = getFieldValue(node, 'children', fieldNames) as\n | TreeDataNode[]\n | undefined\n return !children || children.length === 0\n })\n }\n }\n\n if (multiple || treeCheckable) {\n let keysToShow = displayKeys\n let hiddenCount = 0\n\n if (maxTagCount !== undefined && maxTagCount !== 'responsive') {\n if (displayKeys.length > maxTagCount) {\n keysToShow = displayKeys.slice(0, maxTagCount)\n hiddenCount = displayKeys.length - maxTagCount\n }\n }\n\n const tags = keysToShow.map((key) => {\n const node = findNode(treeData, key, fieldNames)\n const title = node ? getFieldValue(node, 'title', fieldNames) : key\n const label = title as React.ReactNode\n const closable = !disabled\n const onClose = () => {\n const fakeEvent = { stopPropagation: () => {} } as React.MouseEvent\n removeTag(key, fakeEvent)\n }\n\n // Use custom tagRender if provided\n if (tagRender) {\n return (\n <React.Fragment key={key}>\n {tagRender({ label, value: key, closable, onClose })}\n </React.Fragment>\n )\n }\n\n return (\n <span\n key={key}\n className=\"inline-flex items-center gap-1 px-2 py-0.5 bg-base-200 rounded text-sm mr-1 mb-1\"\n data-testid={`${baseTestId}-tag-${key}`}\n >\n {label}\n {closable && (\n <button\n type=\"button\"\n className=\"hover:text-error\"\n onClick={(e) => removeTag(key, e)}\n aria-label={`Remove ${typeof title === 'string' ? title : key}`}\n >\n <svg\n className=\"w-3 h-3\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n aria-hidden=\"true\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M6 18L18 6M6 6l12 12\"\n />\n </svg>\n </button>\n )}\n </span>\n )\n })\n\n if (hiddenCount > 0) {\n const hiddenKeys = displayKeys.slice(maxTagCount as number)\n const placeholder =\n typeof maxTagPlaceholder === 'function'\n ? maxTagPlaceholder(hiddenKeys)\n : maxTagPlaceholder || `+${hiddenCount} more`\n\n tags.push(\n <span\n key=\"__more__\"\n className=\"inline-flex items-center px-2 py-0.5 bg-base-200 rounded text-sm mr-1 mb-1\"\n >\n {placeholder}\n </span>\n )\n }\n\n return tags\n }\n\n const node = findNode(treeData, value[0], fieldNames)\n const title = node ? getFieldValue(node, 'title', fieldNames) : value[0]\n return title as React.ReactNode\n }, [\n value,\n treeData,\n multiple,\n treeCheckable,\n showCheckedStrategy,\n maxTagCount,\n maxTagPlaceholder,\n baseTestId,\n fieldNames,\n disabled,\n tagRender,\n ])\n\n const borderClass = status ? statusClasses[status] : color ? colorClasses[color] : ''\n const variantClass = ghost ? 'bg-transparent border-transparent' : variantClasses[variant]\n\n const dropdownContent = (\n <div className=\"py-1\" role=\"tree\" aria-label=\"Tree options\">\n {filteredData.length > 0 ? (\n renderNodes(filteredData, 0)\n ) : (\n <div\n className=\"px-4 py-2 text-base-content/50 text-sm text-center\"\n data-testid={`${baseTestId}-empty`}\n >\n {notFoundContent}\n </div>\n )}\n </div>\n )\n\n return (\n <div\n ref={(node) => {\n containerRef.current = node\n if (typeof ref === 'function') {\n ref(node)\n } else if (ref) {\n ref.current = node\n }\n }}\n className={`relative ${className}`}\n data-testid={baseTestId}\n data-state={open ? 'open' : 'closed'}\n data-disabled={disabled || undefined}\n onKeyDown={handleKeyDown}\n {...rest}\n >\n {/* Trigger */}\n <div\n ref={triggerRef}\n role=\"combobox\"\n aria-expanded={open}\n aria-haspopup=\"tree\"\n aria-owns={open ? listboxId : undefined}\n aria-activedescendant={open && focusedKey ? `${instanceId}-option-${focusedKey}` : undefined}\n aria-disabled={disabled}\n tabIndex={disabled ? -1 : 0}\n className={[\n 'input flex items-center gap-2 cursor-pointer flex-wrap',\n sizeClasses[size],\n variantClass,\n borderClass,\n disabled && 'input-disabled opacity-50 cursor-not-allowed',\n open && !borderClass && 'border-primary',\n ]\n .filter(Boolean)\n .join(' ')}\n onClick={() => !disabled && setOpen(!open)}\n data-testid={`${baseTestId}-trigger`}\n >\n <div className=\"flex-1 flex flex-wrap items-center gap-1 min-w-0\">\n {displayValue || <span className=\"text-base-content/50\">{placeholder}</span>}\n </div>\n\n {/* Clear button */}\n {allowClear && value.length > 0 && !disabled && (\n <button\n type=\"button\"\n className=\"hover:text-error flex-shrink-0\"\n onClick={handleClear}\n aria-label=\"Clear selection\"\n data-testid={`${baseTestId}-clear`}\n >\n <svg\n className=\"w-4 h-4\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n aria-hidden=\"true\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M6 18L18 6M6 6l12 12\"\n />\n </svg>\n </button>\n )}\n\n {/* Suffix icon / Dropdown arrow */}\n {suffixIcon || (\n <svg\n className={`w-4 h-4 flex-shrink-0 transition-transform ${open ? 'rotate-180' : ''}`}\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n aria-hidden=\"true\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M19 9l-7 7-7-7\"\n />\n </svg>\n )}\n </div>\n\n {/* Dropdown */}\n {open && (\n <div\n id={listboxId}\n className={`absolute z-50 mt-1 w-full bg-base-100 border border-base-300 rounded-lg shadow-lg max-h-64 overflow-auto ${popupClassName}`}\n data-testid={`${baseTestId}-dropdown`}\n >\n {/* Search input */}\n {showSearch && (\n <div className=\"p-2 border-b border-base-300\">\n <input\n ref={inputRef}\n type=\"text\"\n className=\"input input-sm w-full\"\n placeholder=\"Search...\"\n value={searchValue}\n onChange={handleSearchChange}\n onClick={(e) => e.stopPropagation()}\n aria-label=\"Search tree options\"\n data-testid={`${baseTestId}-search`}\n />\n </div>\n )}\n\n {/* Tree */}\n {dropdownRender ? dropdownRender(dropdownContent) : dropdownContent}\n </div>\n )}\n </div>\n )\n }\n)\n\nTreeSelect.displayName = 'TreeSelect'\n\n// Attach static strategy constants to TreeSelect\nexport const TreeSelectComponent = Object.assign(TreeSelect, {\n SHOW_ALL,\n SHOW_PARENT,\n SHOW_CHILD,\n})\n\nexport { TreeSelectComponent as default }\n"],"names":["SHOW_ALL","SHOW_PARENT","SHOW_CHILD","getFieldValue","node","field","fieldNames","labelField","valueField","childrenField","flattenTree","data","parentPath","result","title","children","currentPath","getAllKeys","keys","traverse","nodes","key","findNode","nodeKey","found","getDescendantKeys","n","child","childKey","getParentKeys","targetKey","parentKeys","TreeSelectNode","level","expanded","selected","checked","indeterminate","treeCheckable","treeLine","showTreeIcon","focused","loading","baseTestId","id","switcherIcon","onToggle","onSelect","onCheck","renderChildren","nodeIcon","hasChildren","isLeaf","handleToggle","e","handleSelect","handleCheck","handleKeyDown","renderSwitcherIcon","jsx","jsxs","el","sizeClasses","colorClasses","statusClasses","variantClasses","TreeSelect","forwardRef","treeData","controlledValue","defaultValue","onChange","multiple","treeCheckStrictly","showCheckedStrategy","showSearch","controlledSearchValue","onSearch","filterTreeNode","placeholder","allowClear","disabled","treeDefaultExpandAll","treeDefaultExpandedKeys","controlledExpandedKeys","onTreeExpand","size","color","status","variant","ghost","maxTagCount","maxTagPlaceholder","maxCount","labelInValue","tagRender","treeIcon","loadData","controlledOpen","onDropdownVisibleChange","suffixIcon","notFoundContent","dropdownRender","popupClassName","className","testId","rest","ref","instanceId","useId","listboxId","isOpen","setIsOpen","useState","internalSearchValue","setInternalSearchValue","focusedKey","setFocusedKey","loadingKeys","setLoadingKeys","containerRef","useRef","inputRef","triggerRef","searchValue","open","normalizeValue","val","v","initialValue","internalValue","setInternalValue","value","initialExpandedKeys","useMemo","internalExpandedKeys","setInternalExpandedKeys","expandedKeys","visibleNodes","setOpen","useCallback","newOpen","useEffect","handleClickOutside","filteredData","flatNodes","matchingKeys","isMatch","filterTree","hasMatchingChildren","prev","next","newKeys","k","triggerNode","newValue","labels","labeledValues","isChecked","descendantKeys","keysToAdd","dk","remainingSlots","handleClear","removeTag","handleSearchChange","currentIndex","nextIndex","prevIndex","getCheckedState","checkedDescendants","renderNodes","displayValue","displayKeys","pk","keysToShow","hiddenCount","tags","label","closable","onClose","React","hiddenKeys","borderClass","variantClass","dropdownContent","TreeSelectComponent"],"mappings":"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"}
|