asterui 0.12.49 → 0.12.51
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/Alert.js +18 -18
- package/dist/components/Alert.js.map +1 -1
- package/dist/components/Autocomplete.js +115 -114
- package/dist/components/Autocomplete.js.map +1 -1
- package/dist/components/Avatar.js +33 -32
- package/dist/components/Avatar.js.map +1 -1
- package/dist/components/Badge.js +99 -99
- package/dist/components/Badge.js.map +1 -1
- package/dist/components/Breadcrumb.js +12 -11
- package/dist/components/Breadcrumb.js.map +1 -1
- package/dist/components/Browser.js +10 -10
- package/dist/components/Browser.js.map +1 -1
- package/dist/components/Button.js +80 -79
- package/dist/components/Button.js.map +1 -1
- package/dist/components/Card.d.ts +2 -0
- package/dist/components/Card.js +111 -110
- package/dist/components/Card.js.map +1 -1
- package/dist/components/Carousel.js +59 -59
- package/dist/components/Carousel.js.map +1 -1
- package/dist/components/Cascader.js +175 -174
- package/dist/components/Cascader.js.map +1 -1
- package/dist/components/Chat.js +27 -27
- package/dist/components/Chat.js.map +1 -1
- package/dist/components/Checkbox.js +98 -97
- package/dist/components/Checkbox.js.map +1 -1
- package/dist/components/Code.js +11 -11
- package/dist/components/Code.js.map +1 -1
- package/dist/components/Collapse.js +46 -46
- package/dist/components/Collapse.js.map +1 -1
- package/dist/components/ColorPicker.d.ts +1 -1
- package/dist/components/ColorPicker.js +93 -91
- package/dist/components/ColorPicker.js.map +1 -1
- package/dist/components/Command.js +120 -120
- package/dist/components/Command.js.map +1 -1
- package/dist/components/ConfigProvider.d.ts +1 -1
- package/dist/components/ConfigProvider.js +9 -9
- package/dist/components/ConfigProvider.js.map +1 -1
- package/dist/components/ContextMenu.js +33 -33
- package/dist/components/ContextMenu.js.map +1 -1
- package/dist/components/CopyButton.js +74 -73
- package/dist/components/CopyButton.js.map +1 -1
- package/dist/components/Countdown.js +60 -59
- package/dist/components/Countdown.js.map +1 -1
- package/dist/components/DatePicker.d.ts +1 -1
- package/dist/components/DatePicker.js +54 -53
- package/dist/components/DatePicker.js.map +1 -1
- package/dist/components/Diff.js +10 -10
- package/dist/components/Diff.js.map +1 -1
- package/dist/components/Divider.js +21 -20
- package/dist/components/Divider.js.map +1 -1
- package/dist/components/Dock.js +28 -27
- package/dist/components/Dock.js.map +1 -1
- package/dist/components/Drawer.js +43 -43
- package/dist/components/Drawer.js.map +1 -1
- package/dist/components/Dropdown.js +127 -127
- package/dist/components/Dropdown.js.map +1 -1
- package/dist/components/Empty.js +16 -15
- package/dist/components/Empty.js.map +1 -1
- package/dist/components/Fieldset.js +11 -10
- package/dist/components/Fieldset.js.map +1 -1
- package/dist/components/FileInput.js +30 -29
- package/dist/components/FileInput.js.map +1 -1
- package/dist/components/Filter.d.ts +1 -1
- package/dist/components/Filter.js +32 -30
- package/dist/components/Filter.js.map +1 -1
- package/dist/components/FloatButton.js +83 -83
- package/dist/components/FloatButton.js.map +1 -1
- package/dist/components/Footer.js +14 -13
- package/dist/components/Footer.js.map +1 -1
- package/dist/components/Form.js +133 -132
- package/dist/components/Form.js.map +1 -1
- package/dist/components/Hero.js +12 -11
- package/dist/components/Hero.js.map +1 -1
- package/dist/components/HoverGallery.js +7 -7
- package/dist/components/HoverGallery.js.map +1 -1
- package/dist/components/Image.js +40 -40
- package/dist/components/Image.js.map +1 -1
- package/dist/components/Input.js +171 -169
- package/dist/components/Input.js.map +1 -1
- package/dist/components/InputNumber.js +84 -83
- package/dist/components/InputNumber.js.map +1 -1
- package/dist/components/Join.js +11 -10
- package/dist/components/Join.js.map +1 -1
- package/dist/components/Kbd.js +15 -15
- package/dist/components/Kbd.js.map +1 -1
- package/dist/components/List.d.ts +1 -1
- package/dist/components/List.js +75 -72
- package/dist/components/List.js.map +1 -1
- package/dist/components/Loading.d.ts +1 -1
- package/dist/components/Loading.js +31 -29
- package/dist/components/Loading.js.map +1 -1
- package/dist/components/Mask.js +31 -31
- package/dist/components/Mask.js.map +1 -1
- package/dist/components/Mention.js +61 -61
- package/dist/components/Mention.js.map +1 -1
- package/dist/components/Menu.js +84 -84
- package/dist/components/Menu.js.map +1 -1
- package/dist/components/Message.js +30 -29
- package/dist/components/Message.js.map +1 -1
- package/dist/components/Modal.js +117 -116
- package/dist/components/Modal.js.map +1 -1
- package/dist/components/MonthCalendar.d.ts +31 -0
- package/dist/components/MonthCalendar.js +205 -0
- package/dist/components/MonthCalendar.js.map +1 -0
- package/dist/components/Navbar.js +25 -25
- package/dist/components/Navbar.js.map +1 -1
- package/dist/components/Notification.js +56 -55
- package/dist/components/Notification.js.map +1 -1
- package/dist/components/OTPInput.js +69 -68
- package/dist/components/OTPInput.js.map +1 -1
- package/dist/components/Pagination.d.ts +1 -1
- package/dist/components/Pagination.js +60 -58
- package/dist/components/Pagination.js.map +1 -1
- package/dist/components/Phone.js +10 -10
- package/dist/components/Phone.js.map +1 -1
- package/dist/components/Popconfirm.js +60 -60
- package/dist/components/Popconfirm.js.map +1 -1
- package/dist/components/Progress.js +17 -17
- package/dist/components/Progress.js.map +1 -1
- package/dist/components/QRCode.js +23 -23
- package/dist/components/QRCode.js.map +1 -1
- package/dist/components/RadialProgress.js +17 -17
- package/dist/components/RadialProgress.js.map +1 -1
- package/dist/components/Radio.js +41 -40
- package/dist/components/Radio.js.map +1 -1
- package/dist/components/Range.d.ts +1 -1
- package/dist/components/Range.js +39 -37
- package/dist/components/Range.js.map +1 -1
- package/dist/components/Rating.js +79 -78
- package/dist/components/Rating.js.map +1 -1
- package/dist/components/ResponsiveDrawer.js +27 -27
- package/dist/components/ResponsiveDrawer.js.map +1 -1
- package/dist/components/RichTextEditor.d.ts +32 -0
- package/dist/components/RichTextEditor.js +335 -0
- package/dist/components/RichTextEditor.js.map +1 -0
- package/dist/components/Segmented.d.ts +1 -1
- package/dist/components/Segmented.js +48 -46
- package/dist/components/Segmented.js.map +1 -1
- package/dist/components/Select.js +55 -54
- package/dist/components/Select.js.map +1 -1
- package/dist/components/Skeleton.js +9 -9
- package/dist/components/Skeleton.js.map +1 -1
- package/dist/components/Splitter.js +1 -3
- package/dist/components/Splitter.js.map +1 -1
- package/dist/components/Stat.js +17 -16
- package/dist/components/Stat.js.map +1 -1
- package/dist/components/Status.js +29 -29
- package/dist/components/Status.js.map +1 -1
- package/dist/components/Steps.js +61 -61
- package/dist/components/Steps.js.map +1 -1
- package/dist/components/Table.js +256 -256
- package/dist/components/Table.js.map +1 -1
- package/dist/components/Tabs.js +65 -65
- package/dist/components/Tabs.js.map +1 -1
- package/dist/components/Tag.js +147 -147
- package/dist/components/Tag.js.map +1 -1
- package/dist/components/TextRotate.js +6 -6
- package/dist/components/TextRotate.js.map +1 -1
- package/dist/components/Textarea.js +35 -34
- package/dist/components/Textarea.js.map +1 -1
- package/dist/components/ThemeController.d.ts +1 -1
- package/dist/components/ThemeController.js +71 -68
- package/dist/components/ThemeController.js.map +1 -1
- package/dist/components/TimePicker.d.ts +1 -1
- package/dist/components/TimePicker.js +133 -129
- package/dist/components/TimePicker.js.map +1 -1
- package/dist/components/Timeline.js +79 -79
- package/dist/components/Timeline.js.map +1 -1
- package/dist/components/Toggle.js +33 -32
- package/dist/components/Toggle.js.map +1 -1
- package/dist/components/Tooltip.js +25 -25
- package/dist/components/Tooltip.js.map +1 -1
- package/dist/components/Tour.js +126 -126
- package/dist/components/Tour.js.map +1 -1
- package/dist/components/Transfer.js +93 -92
- package/dist/components/Transfer.js.map +1 -1
- package/dist/components/Tree.js +200 -200
- package/dist/components/Tree.js.map +1 -1
- package/dist/components/TreeSelect.js +255 -254
- package/dist/components/TreeSelect.js.map +1 -1
- package/dist/components/Typography.js +71 -70
- package/dist/components/Typography.js.map +1 -1
- package/dist/components/Upload.js +81 -81
- package/dist/components/Upload.js.map +1 -1
- package/dist/components/WeekCalendar.d.ts +35 -0
- package/dist/components/WeekCalendar.js +204 -0
- package/dist/components/WeekCalendar.js.map +1 -0
- package/dist/components/Window.js +7 -7
- package/dist/components/Window.js.map +1 -1
- package/dist/editor.d.ts +1 -0
- package/dist/editor.js +5 -0
- package/dist/editor.js.map +1 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.js +211 -207
- package/dist/index.js.map +1 -1
- package/package.json +30 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Tree.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 /** Test ID for the component */\n 'data-testid'?: 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":"Tree.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// DaisyUI classes\nconst dCheckbox = 'checkbox'\nconst dCheckboxXs = 'checkbox-xs'\nconst dCheckboxSm = 'checkbox-sm'\nconst dCheckboxLg = 'checkbox-lg'\nconst dCheckboxXl = 'checkbox-xl'\nconst dCheckboxPrimary = 'checkbox-primary'\nconst dCheckboxSecondary = 'checkbox-secondary'\nconst dCheckboxAccent = 'checkbox-accent'\nconst dCheckboxNeutral = 'checkbox-neutral'\nconst dCheckboxInfo = 'checkbox-info'\nconst dCheckboxSuccess = 'checkbox-success'\nconst dCheckboxWarning = 'checkbox-warning'\nconst dCheckboxError = 'checkbox-error'\nconst dLoading = 'loading'\nconst dLoadingSpinner = 'loading-spinner'\nconst dLoadingXs = 'loading-xs'\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 /** Test ID for the component */\n 'data-testid'?: 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: dCheckboxXs,\n sm: dCheckboxSm,\n md: '',\n lg: dCheckboxLg,\n xl: dCheckboxXl,\n }\n const checkboxColorClasses: Record<TreeColor, string> = {\n primary: dCheckboxPrimary,\n secondary: dCheckboxSecondary,\n accent: dCheckboxAccent,\n neutral: dCheckboxNeutral,\n info: dCheckboxInfo,\n success: dCheckboxSuccess,\n warning: dCheckboxWarning,\n error: dCheckboxError,\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={`${dLoading} ${dLoadingSpinner} ${dLoadingXs}`} />\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={`${dCheckbox} ${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":["dCheckbox","dCheckboxXs","dCheckboxSm","dCheckboxLg","dCheckboxXl","dCheckboxPrimary","dCheckboxSecondary","dCheckboxAccent","dCheckboxNeutral","dCheckboxInfo","dCheckboxSuccess","dCheckboxWarning","dCheckboxError","dLoading","dLoadingSpinner","dLoadingXs","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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"}
|