@darksnow-ui/node-tree-react
Version:
Ready-to-use React component for node-tree-headless
94 lines (87 loc) • 3.6 kB
text/typescript
import * as react_jsx_runtime from 'react/jsx-runtime';
import { Node, NodeRow } from '@darksnow-ui/node-tree-headless';
import { MenuItemConfig } from '@darksnow-ui/menus';
export { MenuItemConfig } from '@darksnow-ui/menus';
import * as React$1 from 'react';
import React__default from 'react';
interface NodeTreeProps {
className?: string;
style?: React.CSSProperties;
renderNode?: (props: {
row: any;
}) => React.ReactNode;
renderEmptyState?: () => React.ReactNode;
onContextMenuAction?: (action: string, nodeId: string) => void;
indentSize?: number;
showContextMenu?: boolean;
contextMenuClassName?: string;
contextMenuItems?: MenuItemConfig[] | ((nodeId: string) => MenuItemConfig[]);
emptyStateClassName?: string;
showRootDropArea?: boolean;
rootDropAreaClassName?: string;
renderRootDropArea?: (isDragOver: boolean) => React.ReactNode;
resolveIcon?: (node: Node, isExpanded: boolean) => string;
}
declare function NodeTree({ className, style, renderNode, renderEmptyState, onContextMenuAction, indentSize, showContextMenu, contextMenuClassName, contextMenuItems, emptyStateClassName, showRootDropArea, rootDropAreaClassName, renderRootDropArea, resolveIcon, }: NodeTreeProps): react_jsx_runtime.JSX.Element;
interface EnhancedNodeRow extends NodeRow {
node: Node;
selected: boolean;
expanded: boolean;
visible: boolean;
isCursor?: boolean;
isFocus?: boolean;
}
interface TreeNodeProps {
row: EnhancedNodeRow;
renderLabel?: (node: Node) => React.ReactNode;
renderIcon?: (node: Node, isExpanded: boolean) => React.ReactNode;
indentSize?: number;
}
interface TreeNodeProps {
row: EnhancedNodeRow;
renderLabel?: (node: Node) => React.ReactNode;
resolveIcon?: (node: Node, isExpanded: boolean) => string;
indentSize?: number;
}
declare function TreeNode({ row, renderLabel, resolveIcon, indentSize, }: TreeNodeProps): react_jsx_runtime.JSX.Element;
interface NodeMenuContext {
nodeId: string;
node: Node | null;
isRoot: boolean;
isExpanded: boolean;
controller: any;
services: any;
}
interface UseNodeTreeMenuItemsOptions {
onAction?: (action: string, nodeId: string) => void;
customItems?: MenuItemConfig<NodeMenuContext>[] | ((context: NodeMenuContext) => MenuItemConfig<NodeMenuContext>[]);
}
/**
* Hook para converter os items do menu do node-tree para o formato do @darksnow-ui/menus
*/
declare function useNodeTreeMenuItems(nodeId: string, options?: UseNodeTreeMenuItemsOptions): {
items: MenuItemConfig<NodeMenuContext>[];
context: NodeMenuContext;
};
interface ContextMenuProps {
x: number;
y: number;
nodeId: string;
containerElementRef?: React__default.RefObject<HTMLDivElement>;
onClose: () => void;
className?: string;
onAction?: (action: string, nodeId: string) => void;
items?: MenuItemConfig<NodeMenuContext>[];
useDefaultItems?: boolean;
}
/**
* Wrapper para o ContextMenu que integra com o node-tree
*/
declare function ContextMenu({ x, y, nodeId, containerElementRef, onClose, className, onAction, items, useDefaultItems, }: ContextMenuProps): react_jsx_runtime.JSX.Element | null;
interface NodeWrapperProps {
id: string;
children: React.ReactNode;
className?: string;
}
declare const NodeWrapper: React$1.MemoExoticComponent<({ id, children, className }: NodeWrapperProps) => react_jsx_runtime.JSX.Element>;
export { ContextMenu, type ContextMenuProps, type NodeMenuContext, NodeTree, type NodeTreeProps, NodeWrapper, TreeNode, useNodeTreeMenuItems };