@mantine/core
Version:
React components library focused on usability, accessibility and developer experience
122 lines (118 loc) • 3.39 kB
JavaScript
'use client';
;
var jsxRuntime = require('react/jsx-runtime');
var React = require('react');
var hooks = require('@mantine/hooks');
var getSize = require('../../core/utils/get-size/get-size.cjs');
var createVarsResolver = require('../../core/styles-api/create-vars-resolver/create-vars-resolver.cjs');
require('clsx');
require('../../core/MantineProvider/Mantine.context.cjs');
require('../../core/MantineProvider/default-theme.cjs');
require('../../core/MantineProvider/MantineProvider.cjs');
require('../../core/MantineProvider/MantineThemeProvider/MantineThemeProvider.cjs');
var useProps = require('../../core/MantineProvider/use-props/use-props.cjs');
require('../../core/MantineProvider/MantineCssVariables/MantineCssVariables.cjs');
var useStyles = require('../../core/styles-api/use-styles/use-styles.cjs');
var Box = require('../../core/Box/Box.cjs');
var factory = require('../../core/factory/factory.cjs');
require('../../core/DirectionProvider/DirectionProvider.cjs');
var TreeNode = require('./TreeNode.cjs');
var useTree = require('./use-tree.cjs');
var Tree_module = require('./Tree.module.css.cjs');
function getFlatValues(data) {
return data.reduce((acc, item) => {
acc.push(item.value);
if (item.children) {
acc.push(...getFlatValues(item.children));
}
return acc;
}, []);
}
const defaultProps = {
expandOnClick: true,
allowRangeSelection: true,
expandOnSpace: true
};
const varsResolver = createVarsResolver.createVarsResolver((_theme, { levelOffset }) => ({
root: {
"--level-offset": getSize.getSpacing(levelOffset)
}
}));
const Tree = factory.factory((_props, ref) => {
const props = useProps.useProps("Tree", defaultProps, _props);
const {
classNames,
className,
style,
styles,
unstyled,
vars,
data,
expandOnClick,
tree,
renderNode,
selectOnClick,
clearSelectionOnOutsideClick,
allowRangeSelection,
expandOnSpace,
levelOffset,
checkOnSpace,
...others
} = props;
const defaultController = useTree.useTree();
const controller = tree || defaultController;
const getStyles = useStyles.useStyles({
name: "Tree",
classes: Tree_module,
props,
className,
style,
classNames,
styles,
unstyled,
vars,
varsResolver
});
const clickOutsideRef = hooks.useClickOutside(
() => clearSelectionOnOutsideClick && controller.clearSelected()
);
const mergedRef = hooks.useMergedRef(ref, clickOutsideRef);
const flatValues = React.useMemo(() => getFlatValues(data), [data]);
React.useEffect(() => {
controller.initialize(data);
}, [data]);
const nodes = data.map((node, index) => /* @__PURE__ */ jsxRuntime.jsx(
TreeNode.TreeNode,
{
node,
getStyles,
rootIndex: index,
expandOnClick,
selectOnClick,
controller,
renderNode,
flatValues,
allowRangeSelection,
expandOnSpace,
checkOnSpace
},
node.value
));
return /* @__PURE__ */ jsxRuntime.jsx(
Box.Box,
{
component: "ul",
ref: mergedRef,
...getStyles("root"),
...others,
role: "tree",
"aria-multiselectable": controller.multiple,
"data-tree-root": true,
children: nodes
}
);
});
Tree.displayName = "@mantine/core/Tree";
Tree.classes = Tree_module;
exports.Tree = Tree;
//# sourceMappingURL=Tree.cjs.map