UNPKG

@e280/quay

Version:

File-browser and outliner UI for the web

34 lines (29 loc) 1.35 kB
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 } // export interface GroupActions<Sc extends Schema> { // newFolder: (parent: CodexItem<Sc>) => Promise<void> // move: (item: CodexItem<Sc>, target: CodexItem<Sc>) => Promise<void> // delete: (item: CodexItem<Sc>) => Promise<void> // rename: (item: CodexItem<Sc>, newName: string) => Promise<void> // upload: (files: File[], target: CodexItem<Sc>) => Promise<void> // search: (terms: string[]) => Promise<CodexItem<Sc>[]> // refresh: () => Promise<void> // }