import { DisposableCollection } from '@difizen/mana-common'; import { BaseView, SelectionService } from '@difizen/mana-core'; import type { StatefulView, ViewSize } from '@difizen/mana-core'; import type { MenuPath } from '@difizen/mana-core'; import type PerfectScrollbar from 'perfect-scrollbar'; import * as React from 'react'; import type { ScrollParams } from 'react-virtualized'; import { CellMeasurerCache } from 'react-virtualized'; import type { MeasuredCellParent } from 'react-virtualized/dist/es/CellMeasurer'; import { LabelProvider } from '../../label'; import type { ModifierAwareEvent, NodeRow } from '../tree'; import { TreeNode } from '../tree'; import { TreeDecoratorService } from '../tree-decorator'; import { ExpandableTreeNode } from '../tree-expansion'; import { TreeModel } from '../tree-model'; import type { NodeProps } from '../tree-protocol'; import { TreeProps } from '../tree-protocol'; import { SelectableTreeNode } from '../tree-selection'; import type { TreeViewDecoration } from '../tree-view-decoration'; import { TreeViewDecorator } from './tree-view-decorator'; import './index.less'; /** * Representation of the tree view properties. */ export type ViewProps = { /** * The width property. */ width: number; /** * The height property. */ height: number; /** * The scroll to row value. */ scrollToRow?: number; /** * The list of node rows. */ rows: NodeRow[]; handleScroll: (info: ScrollParams) => void; renderNodeRow: (row: NodeRow) => React.ReactNode; }; export interface TreeViewRowProps { rowKey: string; index?: number | undefined; parent: MeasuredCellParent; style?: React.CSSProperties | undefined; row?: NodeRow; cache: CellMeasurerCache; } export declare const TreeViewRow: (props: TreeViewRowProps) => import("react/jsx-runtime").JSX.Element | null; export declare function TreeViewContent(): import("react/jsx-runtime").JSX.Element; export declare const TreeViewComponent: React.ForwardRefExoticComponent>; export declare const TreeViewFactoryId = "tree-view-factory"; export declare class TreeView extends BaseView implements StatefulView { /** * Row index to ensure visibility. * - Used to forcefully scroll if necessary. */ scrollToRow: number | undefined; id: string; view: React.ForwardRefExoticComponent>; rows: Map; contextMenuData: any; scrollOptions: PerfectScrollbar.Options; protected toDispose: DisposableCollection; protected shouldScrollToRow: boolean; readonly contextMenuPath: MenuPath; readonly props: TreeProps; readonly model: TreeModel; readonly treeViewDecorator: TreeViewDecorator; readonly selectionService: SelectionService; readonly lableProvider: LabelProvider; readonly treeRowComponent: (props: TreeViewRowProps) => import("react/jsx-runtime").JSX.Element | null; protected readonly decoratorService: TreeDecoratorService; constructor(props: TreeProps, model: TreeModel, treeViewDecorator: TreeViewDecorator, selectionService: SelectionService, lableProvider: LabelProvider, decoratorService: TreeDecoratorService); offsetWidth?: number | undefined; offsetHeight?: number | undefined; onViewResize: (size: ViewSize) => void; protected init(): void; protected updateRows: () => void; protected doUpdateRows(): void; /** * Create the node class names. * @param node the tree node. * @param _props the node properties. * * @returns the list of tree node class names. */ protected createNodeClassNames(node: TreeNode, _props: NodeProps): string[]; /** * Create node attributes for the tree node given the node properties. * @param node the tree node. * @param props the node properties. */ createNodeAttributes(node: TreeNode, props: NodeProps): React.Attributes & React.HTMLAttributes; /** * Create the container attributes for the widget. */ createContainerAttributes(): React.HTMLAttributes; /** * Get the container tree node. * * @returns the tree node for the container if available. */ getContainerTreeNode(): TreeNode | undefined; /** * Handle the context menu click event. * - The context menu click event is triggered by the right-click. * @param node the tree node if available. * @param event the right-click mouse event. */ handleContextMenuEvent: (event: React.MouseEvent, tree: TreeView | undefined, n: TreeNode | TreeView | undefined) => void; /** * Convert the tree node to context menu arguments. * @param _node the selectable tree node. */ setContextMenuArgs: (node: TreeNode | undefined, tree?: TreeView | undefined) => any; /** * Actually focus the tree node. */ protected doFocus(): void; /** * Get the tree node to focus. * * @returns the node to focus if available. */ protected getNodeToFocus(): SelectableTreeNode | undefined; updateGlobalSelection(): void; /** * Update the `scrollToRow`. * @param updateOptions the tree widget force update options. */ protected updateScrollToRow(): void; /** * Handle the scroll event. */ readonly handleScroll: (info: ScrollParams) => void; /** * Get the `scrollToRow`. * * @returns the `scrollToRow` if available. */ protected getScrollToRow(): number | undefined; protected shouldDisplayNode(node: TreeNode): boolean; /** * Toggle the node. */ readonly toggle: (event: React.MouseEvent) => void; protected findNodeAttr(domNode: (EventTarget & HTMLElement) | null): string | undefined; /** * Actually toggle the tree node. * @param event the mouse click event. */ protected doToggle(event: React.MouseEvent): void; /** * Determine if the tree modifier aware event has a `ctrlcmd` mask. * @param event the tree modifier aware event. * * @returns `true` if the tree modifier aware event contains the `ctrlcmd` mask. */ protected hasCtrlCmdMask(event: ModifierAwareEvent): boolean; /** * Determine if the tree modifier aware event has a `shift` mask. * @param event the tree modifier aware event. * * @returns `true` if the tree modifier aware event contains the `shift` mask. */ protected hasShiftMask(event: ModifierAwareEvent): boolean; /** * Handle the single-click mouse event. * @param node the tree node if available. * @param event the mouse single-click event. */ handleClickEvent(maybeProxyNode: TreeNode | undefined, event: React.MouseEvent): void; /** * Handle the double-click mouse event. * @param node the tree node if available. * @param event the double-click mouse event. */ handleDblClickEvent(node: TreeNode | undefined, event: React.MouseEvent): void; /** * Determine the classes to use for an icon * - Assumes a Font Awesome name when passed a single string, otherwise uses the passed string array * @param iconName the icon name or list of icon names. * @param additionalClasses additional CSS classes. * * @returns the icon class name. */ getIconClass(iconName: string | string[], additionalClasses?: string[]): string; /** * Apply font styles to the tree. * @param original the original css properties. * @param fontData the optional `fontData`. */ applyFontStyles(original: React.CSSProperties, fontData: TreeViewDecoration.FontData | undefined): React.CSSProperties; isExpandable(node: TreeNode): node is ExpandableTreeNode; needsActiveIndentGuideline(node: TreeNode): boolean; toNodeIcon(node: TreeNode): string; toNodeName(node: TreeNode): string; toNodeDescription(node: TreeNode): string; /** * Create the tree node style. * @param node the tree node. * @param props the node properties. */ createNodeStyle(node: TreeNode, props: NodeProps): React.CSSProperties | undefined; /** * Decorate the node style. * @param node the tree node. * @param style the optional CSS properties. * * @returns the CSS styles if available. */ protected decorateNodeStyle(node: TreeNode, style: React.CSSProperties | undefined): React.CSSProperties | undefined; /** * Get the default node style. * @param node the tree node. * @param props the node properties. * * @returns the CSS properties if available. */ protected getDefaultNodeStyle(node: TreeNode, props: NodeProps): React.CSSProperties | undefined; protected getPaddingLeft(node: TreeNode, props: NodeProps): number; /** * If the node is a composite, a toggle will be rendered. * Otherwise we need to add the width and the left, right padding => 18px */ protected needsExpansionTogglePadding(node: TreeNode): boolean; /** * Deflate the tree node for storage. * @param node the tree node. */ protected deflateForStorage(node: TreeNode): object; /** * Inflate the tree node from storage. * @param node the tree node. * @param parent the optional tree node. */ protected inflateFromStorage(node: any, parent?: TreeNode): TreeNode; /** * Store the tree state. */ storeState(): object; /** * Restore the state. * @param oldState the old state object. */ restoreState(oldState: object): void; } export type TreeViewSelection = readonly Readonly[] & { source: TreeView; }; export declare namespace TreeViewSelection { function isSource(selection: Record | undefined, source: TreeView): boolean; function getSource(selection: Record | undefined): TreeView | undefined; function is(selection: Record | undefined): selection is TreeViewSelection; function create(source: TreeView): TreeViewSelection; } //# sourceMappingURL=tree-view.d.ts.map