import type { CSSProperties, ReactNode } from "react"; import type { Token } from "../../expressions/lexer/types.js"; export type CompletionItem = { label: string; kind: string; id: string; value?: string; }; export type KeybindingConfig = { accept?: string[]; dismiss?: string[]; navigateUp?: string[]; navigateDown?: string[]; }; export type CompletionAction = { type: "navigate"; direction: "up" | "down"; } | { type: "accept"; } | { type: "dismiss"; } | { type: "none"; }; export type WordAtCursor = { word: string; start: number; end: number; }; export type CursorCoordinates = { top: number; left: number; lineHeight: number; }; export type ExpressionEditorProps = { value: string; onChange: (value: string) => void; tokenize: (value: string) => Token[]; highlight?: (props: { token: Token; }) => ReactNode; completionProvider?: (tokens: Token[], index: number) => CompletionItem[] | Promise; placeholder?: string; disabled?: boolean; readOnly?: boolean; className?: string; style?: CSSProperties; };