import React from "react"; import { BinaryNode, PathNode, LiteralNode, BlockNode, ConditionNode, VariableNode, ObjectUnaryNode, ArrayUnaryNode, FunctionNode, ApplyNode, BindNode } from "jsonata-ui-core"; import { ParsingState, Mode, AST, NodeEditorProps, SchemaProvider } from "./Types"; declare type Callback = () => void; declare type OnChange = (val: T) => void; declare type Children = JSX.Element[]; declare type Comp = React.ComponentType; export declare type Theme = { Base: Comp; RootNodeEditor: Comp; IDETextarea: Comp; ComparisonEditor: Comp; CombinerEditor: Comp; BlockEditor: Comp; ConditionEditor: Comp; ObjectUnaryEditor: Comp; ArrayUnaryEditor: Comp; ApplyEditor: Comp; FunctionEditor: Comp; BindEditor: Comp; VariableEditor: Comp; LeafValueEditor: Comp; PathEditor: Comp; MathEditor: Comp; }; export interface IDETextareaProps { textChange: OnChange; text: string; parsing: ParsingState; } export declare type ChildNodeProps = { editor: JSX.Element; ast: NodeEditorProps["ast"]; onChange: NodeEditorProps["onChange"]; }; export declare type CombinerEditorProps = NodeEditorProps & { addNew: Callback; removeLast: Callback; combinerOperators: { [key: string]: string; }; children: JSX.Element[]; childNodes: ChildNodeProps[]; }; export declare type BlockEditorProps = NodeEditorProps & { children: Children; childNodes: ChildNodeProps[]; }; export declare type ObjectUnaryEditorProps = NodeEditorProps & { addNew: Callback; removeLast: Callback; children: { key: JSX.Element; value: JSX.Element; remove: Callback; keyProps: NodeEditorProps; valueProps: NodeEditorProps; }[]; }; export declare type VariableEditorProps = NodeEditorProps & { boundVariables: string[]; }; export declare type ArrayUnaryEditorProps = NodeEditorProps & { children: (ChildNodeProps & { remove: Callback; })[]; addNew: Callback; removeLast: Callback; }; export declare type LeafValueEditorProps = NodeEditorProps & { text: string; onChangeText: OnChange; changeType: Callback; }; export declare type PathEditorProps = NodeEditorProps & { changeType: Callback; schemaProvider?: SchemaProvider; }; export declare type BaseEditorProps = { toggleMode: Callback; toggleBlock: string | null; mode: Mode; editor: JSX.Element; }; export declare type RootNodeEditorProps = NodeEditorProps & { editor: JSX.Element; }; export declare type ConditionEditorProps = NodeEditorProps & { addNew: Callback; removeLast: Callback; elseEditor?: JSX.Element; children: { Then: JSX.Element; Condition: JSX.Element; remove: Callback; ast: NodeEditorProps["ast"]; onChange: NodeEditorProps["onChange"]; }[]; }; export declare type ComparisonEditorProps = NodeEditorProps & { lhs: JSX.Element; rhs: JSX.Element; lhsProps: NodeEditorProps; rhsProps: NodeEditorProps; changeOperator: OnChange; }; export declare type ApplyEditorProps = NodeEditorProps & { lhs: JSX.Element; children: Children; lhsProps: NodeEditorProps; childNodes: ChildNodeProps[]; }; export declare type FunctionEditorProps = NodeEditorProps & { args: Children; argumentNodes: ChildNodeProps[]; changeProcedure: OnChange; }; export declare type BindEditorProps = NodeEditorProps & { lhs: JSX.Element; rhs: JSX.Element; lhsProps: NodeEditorProps; rhsProps: NodeEditorProps; }; export declare type MathEditorProps = NodeEditorProps & { text: string; children: MathPart[]; changeType: Callback; } & IDETextareaProps; export declare type MathPart = ({ type: "ast"; children?: MathPart[]; } & ChildNodeProps) | { type: "operator"; operator: string; onChangeOperator: OnChange; }; export {};