UNPKG

frogpot

Version:

A library to work with directed graphs that can be projected into trees.

271 lines (260 loc) 10.3 kB
import * as react from 'react'; import react__default from 'react'; import MiniSearch, { SearchOptions, SearchResult } from 'minisearch'; import Highlighter, { HighlighterProps } from 'react-highlight-words'; import * as z from 'zod'; type GraphNode = { uri: string; label: string | null; synonyms: Array<{ value: string; }>; definitions: Array<{ value: string; }>; children: Record<string, Array<string>>; parents: Record<string, Array<string>>; }; declare class Path { steps: Array<string>; constructor(steps: Array<string>); get key(): string; static fromKey(k: string): Path; depth(): number; startsWith(other: Path): boolean; isAncestorOf(other: Path): boolean; equals(other: Path): boolean; parent(): Path | null; child(uri: string): Path; leaf(): string; } type Relation = { to: string; predicate: string; inverse: boolean; }; declare class Graph<T extends GraphNode> { roots: Array<T>; nodes: Array<T>; nodesByURI: Record<string, T>; childrenByURI: Record<string, Relation[]>; parentsByURI: Record<string, Relation[]>; constructor(nodes: Array<T>); items(): T[]; getHierarchy(rootURI: string): Hierarchy<T>; getRootHierarchies(): Map<string, Hierarchy<T>>; getItem(uri: string): T; findAllParents(item: T): T[]; findAllChildren(item: T): T[]; } type FlatViewOptions = { showPaths?: Array<Path>; expandPaths?: Array<Path>; }; type HierarchyRow<T extends GraphNode> = { item: T; relToParent: string | null; depth: number; path: Path; }; declare class Hierarchy<T extends GraphNode> { root: T; graph: Graph<T>; nodesByURI: Map<string, T>; nodesByPathKey: Map<string, T>; pathsByURI: Map<string, Path[]>; constructor(root: T, graph: Graph<T>); getNode(node: string | T | Path): T; items(): T[]; getPathsForNode(node: string | T): Path[]; projectFlatView(opts?: FlatViewOptions): HierarchyRow<T>[]; } type HierarchyTreeProps<T extends GraphNode = GraphNode> = { hierarchy: Hierarchy<T>; rootURI: string; itemURI?: string; preferredPaths?: Array<string>; width?: number; onSelectNode?: (node: T) => void; }; type HierarchyTreeHandle = { openAndFocusNode: (uri: string) => void; }; declare const _default: react__default.ForwardRefExoticComponent<HierarchyTreeProps<GraphNode> & react__default.RefAttributes<HierarchyTreeHandle>>; type SearchResultWithNode<T extends GraphNode> = SearchResult & { node: T; }; declare class SearchEngine<T extends GraphNode> { items: Array<T>; itemsByURI: Map<string, T>; miniSearch: MiniSearch; constructor(items: Array<T>); search(text: string, options?: SearchOptions): Array<SearchResultWithNode<T>>; buildIndex(): void; } declare function useNodeSearch<T extends GraphNode>(nodes: Array<T>): { engine: SearchEngine<T>; results: SearchResultWithNode<T>[] | null; query: string; setQuery: react.Dispatch<react.SetStateAction<string>>; highlightText: (text: string, props?: Omit<HighlighterProps, "searchWords" | "textToHighlight">) => react.CElement<HighlighterProps, Highlighter>; }; declare const OBOMeta: z.ZodObject<{ definition: z.ZodOptional<z.ZodObject<{ val: z.ZodString; pred: z.ZodOptional<z.ZodString>; xrefs: z.ZodOptional<z.ZodArray<z.ZodString>>; meta: z.ZodOptional<typeof OBOMeta>; }, z.core.$strip>>; comments: z.ZodOptional<z.ZodArray<z.ZodString>>; subsets: z.ZodOptional<z.ZodArray<z.ZodString>>; synonyms: z.ZodOptional<z.ZodArray<z.ZodObject<{ synonymType: z.ZodOptional<z.ZodString>; pred: z.ZodOptional<z.ZodString>; val: z.ZodString; xrefs: z.ZodOptional<z.ZodArray<z.ZodString>>; meta: z.ZodOptional<typeof OBOMeta>; }, z.core.$strip>>>; xrefs: z.ZodOptional<z.ZodArray<z.ZodObject<{ lbl: z.ZodOptional<z.ZodString>; pred: z.ZodOptional<z.ZodString>; val: z.ZodString; xrefs: z.ZodOptional<z.ZodArray<z.ZodString>>; meta: z.ZodOptional<typeof OBOMeta>; }, z.core.$strip>>>; basicPropertyValues: z.ZodOptional<z.ZodArray<z.ZodObject<{ pred: z.ZodString; val: z.ZodString; xrefs: z.ZodOptional<z.ZodArray<z.ZodString>>; meta: z.ZodOptional<typeof OBOMeta>; }, z.core.$strip>>>; version: z.ZodOptional<z.ZodString>; deprecatd: z.ZodOptional<z.ZodBoolean>; }, z.core.$strip>; declare const OBOGraph: z.ZodObject<{ id: z.ZodString; lbl: z.ZodOptional<z.ZodString>; meta: z.ZodOptional<z.ZodObject<{ definition: z.ZodOptional<z.ZodObject<{ val: z.ZodString; pred: z.ZodOptional<z.ZodString>; xrefs: z.ZodOptional<z.ZodArray<z.ZodString>>; meta: z.ZodOptional<typeof OBOMeta>; }, z.core.$strip>>; comments: z.ZodOptional<z.ZodArray<z.ZodString>>; subsets: z.ZodOptional<z.ZodArray<z.ZodString>>; synonyms: z.ZodOptional<z.ZodArray<z.ZodObject<{ synonymType: z.ZodOptional<z.ZodString>; pred: z.ZodOptional<z.ZodString>; val: z.ZodString; xrefs: z.ZodOptional<z.ZodArray<z.ZodString>>; meta: z.ZodOptional<typeof OBOMeta>; }, z.core.$strip>>>; xrefs: z.ZodOptional<z.ZodArray<z.ZodObject<{ lbl: z.ZodOptional<z.ZodString>; pred: z.ZodOptional<z.ZodString>; val: z.ZodString; xrefs: z.ZodOptional<z.ZodArray<z.ZodString>>; meta: z.ZodOptional<typeof OBOMeta>; }, z.core.$strip>>>; basicPropertyValues: z.ZodOptional<z.ZodArray<z.ZodObject<{ pred: z.ZodString; val: z.ZodString; xrefs: z.ZodOptional<z.ZodArray<z.ZodString>>; meta: z.ZodOptional<typeof OBOMeta>; }, z.core.$strip>>>; version: z.ZodOptional<z.ZodString>; deprecatd: z.ZodOptional<z.ZodBoolean>; }, z.core.$strip>>; nodes: z.ZodArray<z.ZodObject<{ id: z.ZodString; lbl: z.ZodOptional<z.ZodString>; type: z.ZodLiteral<"CLASS" | "INDIVIDUAL" | "PROPERTY">; propertyType: z.ZodOptional<z.ZodLiteral<"ANNOTATION" | "OBJECT" | "DATA">>; meta: z.ZodOptional<z.ZodObject<{ definition: z.ZodOptional<z.ZodObject<{ val: z.ZodString; pred: z.ZodOptional<z.ZodString>; xrefs: z.ZodOptional<z.ZodArray<z.ZodString>>; meta: z.ZodOptional<typeof OBOMeta>; }, z.core.$strip>>; comments: z.ZodOptional<z.ZodArray<z.ZodString>>; subsets: z.ZodOptional<z.ZodArray<z.ZodString>>; synonyms: z.ZodOptional<z.ZodArray<z.ZodObject<{ synonymType: z.ZodOptional<z.ZodString>; pred: z.ZodOptional<z.ZodString>; val: z.ZodString; xrefs: z.ZodOptional<z.ZodArray<z.ZodString>>; meta: z.ZodOptional<typeof OBOMeta>; }, z.core.$strip>>>; xrefs: z.ZodOptional<z.ZodArray<z.ZodObject<{ lbl: z.ZodOptional<z.ZodString>; pred: z.ZodOptional<z.ZodString>; val: z.ZodString; xrefs: z.ZodOptional<z.ZodArray<z.ZodString>>; meta: z.ZodOptional<typeof OBOMeta>; }, z.core.$strip>>>; basicPropertyValues: z.ZodOptional<z.ZodArray<z.ZodObject<{ pred: z.ZodString; val: z.ZodString; xrefs: z.ZodOptional<z.ZodArray<z.ZodString>>; meta: z.ZodOptional<typeof OBOMeta>; }, z.core.$strip>>>; version: z.ZodOptional<z.ZodString>; deprecatd: z.ZodOptional<z.ZodBoolean>; }, z.core.$strip>>; }, z.core.$strip>>; edges: z.ZodArray<z.ZodObject<{ sub: z.ZodString; pred: z.ZodString; obj: z.ZodString; meta: z.ZodOptional<z.ZodObject<{ definition: z.ZodOptional<z.ZodObject<{ val: z.ZodString; pred: z.ZodOptional<z.ZodString>; xrefs: z.ZodOptional<z.ZodArray<z.ZodString>>; meta: z.ZodOptional<typeof OBOMeta>; }, z.core.$strip>>; comments: z.ZodOptional<z.ZodArray<z.ZodString>>; subsets: z.ZodOptional<z.ZodArray<z.ZodString>>; synonyms: z.ZodOptional<z.ZodArray<z.ZodObject<{ synonymType: z.ZodOptional<z.ZodString>; pred: z.ZodOptional<z.ZodString>; val: z.ZodString; xrefs: z.ZodOptional<z.ZodArray<z.ZodString>>; meta: z.ZodOptional<typeof OBOMeta>; }, z.core.$strip>>>; xrefs: z.ZodOptional<z.ZodArray<z.ZodObject<{ lbl: z.ZodOptional<z.ZodString>; pred: z.ZodOptional<z.ZodString>; val: z.ZodString; xrefs: z.ZodOptional<z.ZodArray<z.ZodString>>; meta: z.ZodOptional<typeof OBOMeta>; }, z.core.$strip>>>; basicPropertyValues: z.ZodOptional<z.ZodArray<z.ZodObject<{ pred: z.ZodString; val: z.ZodString; xrefs: z.ZodOptional<z.ZodArray<z.ZodString>>; meta: z.ZodOptional<typeof OBOMeta>; }, z.core.$strip>>>; version: z.ZodOptional<z.ZodString>; deprecatd: z.ZodOptional<z.ZodBoolean>; }, z.core.$strip>>; }, z.core.$strip>>; }, z.core.$strip>; type OBOGraph = z.infer<typeof OBOGraph>; declare abstract class GraphLoader<T, U extends GraphNode> { abstract parseGraph(graph: T): Graph<U>; abstract loadGraphFromString(str: string): T; fromString(str: string): Graph<U>; fromURI(uri: string, options?: RequestInit): Promise<Graph<U>>; } type OBOGraphNode = GraphNode & { meta?: OBOGraph["meta"]; edges: OBOGraph["edges"]; }; declare class OBOGraphLoader extends GraphLoader<OBOGraph, OBOGraphNode> { parseGraph(graph: OBOGraph): Graph<OBOGraphNode>; loadGraphFromString(str: string): OBOGraph; } export { Graph, type GraphNode, Hierarchy, _default as HierarchyTree, OBOGraphLoader, type OBOGraphNode, Path, useNodeSearch };