UNPKG

@mantine/core

Version:

React components library focused on usability, accessibility and developer experience

103 lines (102 loc) 4.01 kB
"use client"; require("../../_virtual/_rolldown/runtime.cjs"); const require_find_element_ancestor = require("../../core/utils/find-element-ancestor/find-element-ancestor.cjs"); const require_Tree_module = require("./Tree.module.cjs"); let react = require("react"); let react_jsx_runtime = require("react/jsx-runtime"); //#region packages/@mantine/core/src/components/Tree/FlatTreeNode.tsx const FlatTreeNode = (0, react.memo)(function FlatTreeNode({ node, level, parent, hasChildren, expanded, tree, expandOnClick = true, selectOnClick, expandOnSpace = true, checkOnSpace, renderNode, style, tabIndex = -1 }) { const ref = (0, react.useRef)(null); const isLoading = tree.isNodeLoading(node.value); const loadError = tree.getNodeLoadError(node.value); const selected = tree.selectedState.includes(node.value); const handleClick = (event) => { event.stopPropagation(); if (expandOnClick && hasChildren) tree.toggleExpanded(node.value); if (selectOnClick) tree.select(node.value); ref.current?.focus(); }; const handleKeyDown = (event) => { if (event.nativeEvent.code === "ArrowRight") { event.stopPropagation(); event.preventDefault(); if (expanded && hasChildren) { const root = require_find_element_ancestor.findElementAncestor(event.currentTarget, "[data-tree-root]"); const nodes = root ? Array.from(root.querySelectorAll("[role=treeitem]")).filter((treeNode) => treeNode.style.display !== "none") : []; const index = nodes.indexOf(event.currentTarget); if (index !== -1) nodes[index + 1]?.focus(); } else if (hasChildren) tree.expand(node.value); } if (event.nativeEvent.code === "ArrowLeft") { event.stopPropagation(); event.preventDefault(); if (expanded && hasChildren) tree.collapse(node.value); else if (parent) (require_find_element_ancestor.findElementAncestor(event.currentTarget, "[data-tree-root]")?.querySelector(`[role=treeitem][data-value="${CSS.escape(parent)}"]`))?.focus(); } if (event.nativeEvent.code === "ArrowDown" || event.nativeEvent.code === "ArrowUp") { const root = require_find_element_ancestor.findElementAncestor(event.currentTarget, "[data-tree-root]"); if (!root) return; event.stopPropagation(); event.preventDefault(); const nodes = Array.from(root.querySelectorAll("[role=treeitem]")).filter((treeNode) => treeNode.style.display !== "none"); const index = nodes.indexOf(event.currentTarget); if (index === -1) return; nodes[event.nativeEvent.code === "ArrowDown" ? index + 1 : index - 1]?.focus(); } if (event.nativeEvent.code === "Space") { if (expandOnSpace) { event.stopPropagation(); event.preventDefault(); tree.toggleExpanded(node.value); } if (checkOnSpace) { event.stopPropagation(); event.preventDefault(); if (tree.isNodeChecked(node.value)) tree.uncheckNode(node.value); else tree.checkNode(node.value); } } }; const elementProps = { className: require_Tree_module.default.label, style: {}, onClick: handleClick, "data-selected": selected || void 0, "data-value": node.value }; return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", { ref, className: require_Tree_module.default.node, style: { "--label-offset": `calc(var(--level-offset, var(--mantine-spacing-lg)) * ${level - 1})`, ...style }, role: "treeitem", "aria-selected": selected, "aria-expanded": hasChildren ? expanded : void 0, "data-value": node.value, "data-selected": selected || void 0, "data-level": level, tabIndex, onKeyDown: handleKeyDown, children: typeof renderNode === "function" ? renderNode({ node, level, selected, tree, expanded, hasChildren, isLoading, loadError, elementProps, dragHandleProps: void 0 }) : /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", { ...elementProps, children: node.label }) }); }); FlatTreeNode.displayName = "@mantine/core/FlatTreeNode"; //#endregion exports.FlatTreeNode = FlatTreeNode; //# sourceMappingURL=FlatTreeNode.cjs.map