interface CollectionSearchState { keysSoFar: string; timer: number; } interface CollectionSearchOptions { state: CollectionSearchState; currentValue: string | null; timeout?: number | undefined; } type CollectionItem = any; interface CollectionMethods { /** * The value of the item */ itemToValue: (item: T) => string; /** * The label of the item */ itemToString: (item: T) => string; /** * Whether the item is disabled */ isItemDisabled: (item: T) => boolean; } interface CollectionOptions extends Partial> { /** * The options of the select */ items: Iterable | Readonly>; /** * Function to group items */ groupBy?: ((item: T, index: number) => string) | undefined; /** * Function to sort items */ groupSort?: ((a: string, b: string) => number) | string[] | "asc" | "desc" | undefined; } type IndexPath = number[]; type ValuePath = string[]; interface TreeCollectionMethods { isNodeDisabled: (node: T) => boolean; nodeToValue: (node: T) => string; nodeToString: (node: T) => string; nodeToChildren: (node: T) => any[]; nodeToChildrenCount: (node: T) => number | undefined; } interface TreeCollectionOptions extends Partial> { rootNode: T; } type TreeNode = any; type FilePathTreeNode = T & { children?: FilePathTreeNode[] | undefined; }; interface FlatTreeNodeMeta { _children: number[] | undefined; _parent: number | undefined; _index: number; } type FlatTreeNode = T & FlatTreeNodeMeta; interface TreeSkipFnArgs { value: string; node: T; indexPath: number[]; } type TreeSkipFn = (args: TreeSkipFnArgs) => boolean | void; interface TreeSkipOptions { skip?: TreeSkipFn | undefined; } interface DescendantOptions { withBranch?: boolean; } export type { CollectionItem, CollectionMethods, CollectionOptions, CollectionSearchOptions, CollectionSearchState, DescendantOptions, FilePathTreeNode, FlatTreeNode, FlatTreeNodeMeta, IndexPath, TreeCollectionMethods, TreeCollectionOptions, TreeNode, TreeSkipFn, TreeSkipFnArgs, TreeSkipOptions, ValuePath };