import * as React from 'react'; import { EventHandlers } from '@mui/base/utils'; import { TreeViewModel } from './treeView'; import type { TreeViewContextValue } from '../TreeViewProvider'; import type { MergePluginsProperty } from './helpers'; import { TreeViewEventLookupElement } from './events'; import type { TreeViewCorePluginsSignature } from '../corePlugins'; export interface TreeViewPluginOptions { instance: TreeViewUsedInstance; params: TreeViewUsedDefaultizedParams; state: TreeViewUsedState; models: TreeViewUsedModels; setState: React.Dispatch>>; rootRef: React.RefObject; } type TreeViewModelsInitializer = { [TControlled in keyof TSignature['models']]: { controlledProp: TControlled; defaultProp: keyof TSignature['params']; }; }; interface TreeViewResponse { getRootProps?: (otherHandlers: TOther) => React.HTMLAttributes; contextValue?: TreeViewContextValue; } export type TreeViewPluginSignature = { params: TParams; defaultizedParams: TDefaultizedParams; instance: TInstance; state: TState; models: { [TControlled in TModelNames]-?: TreeViewModel>; }; events: TEvents; dependantPlugins: TDependantPlugins; }; export type TreeViewAnyPluginSignature = { state: any; instance: any; params: any; defaultizedParams: any; dependantPlugins: any; events: any; models: any; }; type TreeViewUsedPlugins = [ TreeViewCorePluginsSignature, ...TSignature['dependantPlugins'] ]; type TreeViewUsedParams = TSignature['params'] & MergePluginsProperty, 'params'>; type TreeViewUsedDefaultizedParams = TSignature['defaultizedParams'] & MergePluginsProperty, 'defaultizedParams'>; export type TreeViewUsedInstance = TSignature['instance'] & MergePluginsProperty, 'instance'> & { /** * Private property only defined in TypeScript to be able to access the plugin signature from the instance object. */ $$signature: TSignature; }; type TreeViewUsedState = TSignature['state'] & MergePluginsProperty, 'state'>; export type TreeViewUsedModels = TSignature['models'] & MergePluginsProperty, 'models'>; export type TreeViewUsedEvents = TSignature['events'] & MergePluginsProperty, 'events'>; export type TreeViewPlugin = { (options: TreeViewPluginOptions): void | TreeViewResponse; getDefaultizedParams?: (params: TreeViewUsedParams) => TSignature['defaultizedParams']; getInitialState?: (params: TreeViewUsedDefaultizedParams) => TSignature['state']; models?: TreeViewModelsInitializer; }; export {};