@e280/quay
Version:
File-browser and outliner UI for the web
21 lines (20 loc) • 938 B
TypeScript
import { Permission } from "./permissions.js";
import { Codex } from "./aspects/codex/codex.js";
import { Schema } from "./aspects/codex/parts/types.js";
import { CodexItem } from "./aspects/codex/parts/codex-item.js";
import { Content } from "@benev/slate";
export type SearchFn<Sc extends Schema> = (item: CodexItem<Sc>) => boolean;
export type SortFn<Sc extends Schema> = (a: CodexItem<Sc>, b: CodexItem<Sc>) => number;
export interface GroupConfig<Sc extends Schema> {
codex: Codex<Sc>;
root: CodexItem<Sc>;
defaultFilter: string;
filters: Map<string, SearchFn<Sc>>;
defaultSort: string;
sorts: Map<string, SortFn<Sc>>;
search: (terms: string[], item: CodexItem<Sc>) => boolean;
renderIcon: (item: CodexItem<Sc>, opened: boolean) => Content;
renderLabel: (item: CodexItem<Sc>) => Content;
renderPreview: (item: CodexItem<Sc>) => Content;
permissions: (item: CodexItem<Sc>) => Permission;
}