UNPKG

goobs-frontend

Version:

A comprehensive React-based libary for building modern web applications

156 lines 6.95 kB
import { default as React, ReactNode, FC } from 'react'; import { TreeViewStyles } from '../../theme'; import { getTreeItemStyles } from '../../theme/treeview'; export type TreeViewItemId = string; export interface TreeViewItem { id: TreeViewItemId; label: string; children?: TreeViewItem[]; disabled?: boolean; [key: string]: any; } export interface TreeViewSelectionPropagation { descendants?: boolean; parents?: boolean; } export interface TreeViewApiRef { focusItem: (itemId: TreeViewItemId) => void; getItem: (itemId: TreeViewItemId) => TreeViewItem | null; getItemDOMElement: (itemId: TreeViewItemId) => HTMLElement | null; getItemOrderedChildrenIds: (itemId: TreeViewItemId) => TreeViewItemId[]; getItemTree: () => TreeViewItem[]; getParentId: (itemId: TreeViewItemId) => TreeViewItemId | null; setItemExpansion: (params: { itemId: TreeViewItemId; isExpanded?: boolean; event?: React.SyntheticEvent; }) => void; setItemSelection: (params: { itemId: TreeViewItemId; shouldBeSelected?: boolean; keepExistingSelection?: boolean; event?: React.SyntheticEvent; }) => void; setIsItemDisabled: (params: { itemId: TreeViewItemId; shouldBeDisabled?: boolean; }) => void; } export interface TreeViewProps { /** The items to display in the tree */ items?: TreeViewItem[]; /** Function to extract the item ID */ getItemId?: (item: TreeViewItem) => TreeViewItemId; /** Function to extract the item label */ getItemLabel?: (item: TreeViewItem) => string; /** Function to extract the item children */ getItemChildren?: (item: TreeViewItem) => TreeViewItem[] | undefined; /** Function to determine if an item is disabled */ isItemDisabled?: (item: TreeViewItem) => boolean; /** Selected item IDs (controlled) */ selectedItems?: TreeViewItemId[] | TreeViewItemId; /** Default selected item IDs (uncontrolled) */ defaultSelectedItems?: TreeViewItemId[] | TreeViewItemId; /** Expanded item IDs (controlled) */ expandedItems?: TreeViewItemId[]; /** Default expanded item IDs (uncontrolled) */ defaultExpandedItems?: TreeViewItemId[]; /** Enable multi-selection */ multiSelect?: boolean; /** Enable checkbox selection */ checkboxSelection?: boolean; /** Disable selection entirely */ disableSelection?: boolean; /** Allow focusing disabled items */ disabledItemsFocusable?: boolean; /** Selection propagation settings */ selectionPropagation?: TreeViewSelectionPropagation; /** What triggers expansion: content click or icon click only */ expansionTrigger?: 'content' | 'iconContainer'; /** Horizontal indentation between item and children */ itemChildrenIndentation?: string | number; /** Callback when selected items change */ onSelectedItemsChange?: (event: React.SyntheticEvent, itemIds: TreeViewItemId[] | TreeViewItemId) => void; /** Callback when a single item selection changes */ onItemSelectionToggle?: (event: React.SyntheticEvent, itemId: TreeViewItemId, isSelected: boolean) => void; /** Callback when expanded items change */ onExpandedItemsChange?: (event: React.SyntheticEvent, itemIds: TreeViewItemId[]) => void; /** Callback when a single item expansion changes */ onItemExpansionToggle?: (event: React.SyntheticEvent | null, itemId: TreeViewItemId, isExpanded: boolean) => void; /** Callback when an item is clicked */ onItemClick?: (event: React.MouseEvent, itemId: TreeViewItemId) => void; /** Callback when an item is focused */ onItemFocus?: (event: React.SyntheticEvent | null, itemId: TreeViewItemId) => void; /** API reference for imperative operations */ apiRef?: React.MutableRefObject<TreeViewApiRef | undefined>; /** Component styling */ styles?: TreeViewStyles; /** Component children (for SimpleTreeView style usage) */ children?: ReactNode; /** HTML id attribute */ id?: string; /** Additional props */ [key: string]: any; } export interface TreeItemProps { /** Item data */ item: TreeViewItem; /** Nesting level */ level?: number; /** Whether item is selected */ isSelected?: boolean; /** Whether item is expanded */ isExpanded?: boolean; /** Whether item is focused */ isFocused?: boolean; /** Whether item has children */ hasChildren?: boolean; /** Component styling */ styles?: TreeViewStyles; /** Click handlers */ onClick?: (event: React.MouseEvent, itemId: TreeViewItemId) => void; onToggleExpansion?: (event: React.SyntheticEvent, itemId: TreeViewItemId) => void; onToggleSelection?: (event: React.SyntheticEvent, itemId: TreeViewItemId) => void; onFocus?: (event: React.FocusEvent, itemId: TreeViewItemId) => void; /** Checkbox selection enabled */ checkboxSelection?: boolean; /** Multi-select enabled */ multiSelect?: boolean; /** Expansion trigger mode */ expansionTrigger?: 'content' | 'iconContainer'; /** Disabled items focusable */ disabledItemsFocusable?: boolean; } interface TreeViewContextValue { selectedItems: Set<TreeViewItemId>; expandedItems: Set<TreeViewItemId>; focusedItem: TreeViewItemId | null; disabledItems: Set<TreeViewItemId>; itemMap: Map<TreeViewItemId, TreeViewItem>; parentMap: Map<TreeViewItemId, TreeViewItemId>; childrenMap: Map<TreeViewItemId, TreeViewItemId[]>; multiSelect: boolean; checkboxSelection: boolean; disableSelection: boolean; disabledItemsFocusable: boolean; selectionPropagation: TreeViewSelectionPropagation; expansionTrigger: 'content' | 'iconContainer'; styles: TreeViewStyles; getItemId: (item: TreeViewItem) => TreeViewItemId; getItemLabel: (item: TreeViewItem) => string; getItemChildren: (item: TreeViewItem) => TreeViewItem[] | undefined; isItemDisabled: (item: TreeViewItem) => boolean; onItemClick?: (event: React.MouseEvent, itemId: TreeViewItemId) => void; onItemFocus?: (event: React.SyntheticEvent | null, itemId: TreeViewItemId) => void; onToggleExpansion: (event: React.SyntheticEvent, itemId: TreeViewItemId) => void; onToggleSelection: (event: React.SyntheticEvent, itemId: TreeViewItemId) => void; setFocusedItem: (itemId: TreeViewItemId | null) => void; apiRef?: React.MutableRefObject<TreeViewApiRef | undefined>; } declare const useTreeViewContext: () => TreeViewContextValue; declare const useTreeViewApiRef: () => React.MutableRefObject<TreeViewApiRef | undefined>; declare const TreeItem: FC<TreeItemProps>; declare const TreeView: React.ForwardRefExoticComponent<Omit<TreeViewProps, "ref"> & React.RefAttributes<HTMLDivElement>>; export default TreeView; export { TreeView, TreeItem, useTreeViewContext, useTreeViewApiRef, getTreeItemStyles, }; //# sourceMappingURL=index.d.ts.map