@zag-js/collection
Version:
Utilities to manage a collection of items.
75 lines (73 loc) • 2.34 kB
text/typescript
interface CollectionSearchState {
keysSoFar: string;
timer: number;
}
interface CollectionSearchOptions {
state: CollectionSearchState;
currentValue: string | null;
timeout?: number | undefined;
}
type CollectionItem = any;
interface CollectionMethods<T extends CollectionItem = CollectionItem> {
/**
* 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<T extends CollectionItem = CollectionItem> extends Partial<CollectionMethods<T>> {
/**
* The options of the select
*/
items: Iterable<T> | Readonly<Iterable<T>>;
/**
* 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<T> {
isNodeDisabled: (node: T) => boolean;
nodeToValue: (node: T) => string;
nodeToString: (node: T) => string;
nodeToChildren: (node: T) => any[];
nodeToChildrenCount: (node: T) => number | undefined;
}
interface TreeCollectionOptions<T> extends Partial<TreeCollectionMethods<T>> {
rootNode: T;
}
type TreeNode = any;
type FilePathTreeNode<T = TreeNode> = T & {
children?: FilePathTreeNode<T>[] | undefined;
};
interface FlatTreeNodeMeta {
_children: number[] | undefined;
_parent: number | undefined;
_index: number;
}
type FlatTreeNode<T = TreeNode> = T & FlatTreeNodeMeta;
interface TreeSkipFnArgs<T> {
value: string;
node: T;
indexPath: number[];
}
type TreeSkipFn<T> = (args: TreeSkipFnArgs<T>) => boolean | void;
interface TreeSkipOptions<T> {
skip?: TreeSkipFn<T> | undefined;
}
interface DescendantOptions {
withBranch?: boolean;
}
export type { CollectionItem, CollectionMethods, CollectionOptions, CollectionSearchOptions, CollectionSearchState, DescendantOptions, FilePathTreeNode, FlatTreeNode, FlatTreeNodeMeta, IndexPath, TreeCollectionMethods, TreeCollectionOptions, TreeNode, TreeSkipFn, TreeSkipFnArgs, TreeSkipOptions, ValuePath };