import { AndCondition } from '@jsonforms/core'; import { BaseEdgeProps } from '@xyflow/react'; import { ComponentProps } from 'react'; import { ComponentType } from 'react'; import { Connection } from '@xyflow/react'; import { ControlElement as ControlElement_2 } from '@jsonforms/core'; import { default as default_2 } from 'react'; import { Edge } from '@xyflow/react'; import { EdgeProps } from '@xyflow/react'; import { EdgeTypes } from '@xyflow/react'; import { ErrorObject } from 'ajv'; import { FooterVariant } from '@synergycodes/overflow-ui'; import { HandleType } from '@xyflow/react'; import { InputProps } from '@synergycodes/overflow-ui'; import { ItemSize } from '@synergycodes/overflow-ui'; import { JsonFormsCellRendererRegistryEntry } from '@jsonforms/core'; import * as JsonFormsCore from '@jsonforms/core'; import * as JsonFormsReact from '@jsonforms/react'; import { JsonFormsRendererRegistryEntry } from '@jsonforms/core'; import { JSX } from 'react/jsx-runtime'; import { KeyCode } from '@xyflow/react'; import { LabelElement as LabelElement_2 } from '@jsonforms/core'; import { Layout as Layout_2 } from '@jsonforms/core'; import { LeafCondition } from '@jsonforms/core'; import { MemoExoticComponent } from 'react'; import { Modal } from '@synergycodes/overflow-ui'; import { MouseEvent as MouseEvent_2 } from 'react'; import { Node as Node_2 } from '@xyflow/react'; import { NodeChange } from '@xyflow/react'; import { OnConnect } from '@xyflow/react'; import { OnEdgesChange } from '@xyflow/react'; import { OnNodeDrag } from '@xyflow/react'; import { OnNodesChange } from '@xyflow/react'; import { OnSelectionChangeParams } from '@xyflow/react'; import { OrCondition } from '@jsonforms/core'; import { PropsWithChildren } from 'react'; import { ReactElement } from 'react'; import { ReactFlowInstance } from '@xyflow/react'; import { ReactFlowJsonObject } from '@xyflow/react'; import { ReactFlowProps } from '@xyflow/react'; import { RuleEffect as RuleEffect_2 } from '@jsonforms/core'; import { SchemaBasedCondition } from '@jsonforms/core'; import { StoreApi } from 'zustand'; import { TextAreaProps } from '@synergycodes/overflow-ui'; import { TranslationKey } from './features/i18n/i18next'; import { UseBoundStore } from 'zustand'; import { UseBoundStoreWithEqualityFn } from 'zustand/traditional'; declare type AccordionLayoutElement = Override; /** * Subscribe to node changes (drag, resize, select, remove). The listener * receives xyflow's raw `NodeChange[]` for every emitted change — useful * for analytics, autosave, change-tracking plugins, etc. * * The registry is module-global and persists across `` * remounts — the SDK does not clear it automatically. **Plugins must call * {@link removeNodeChangedListener} themselves in their cleanup** (e.g. * `useEffect` teardown) to avoid stacking zombie listeners across mount * cycles. See `apps/demo/src/app/plugins/avoid-nodes-edges/providers/avoid-nodes-edges-provider.tsx` * for the canonical pattern. * * @returns Nothing. Call {@link removeNodeChangedListener} with the same * reference to unsubscribe. * * @category Listeners */ export declare function addNodeChangedListener(listener: NodeChangedListener): void; /** * Subscribe to "node drag started" events. The listener receives xyflow's * `OnNodeDrag` callback shape `(event, draggedNode, allNodes)` — fires * once at the start of every drag interaction, not on subsequent drag * frames. * * Useful for plugins that need to capture pre-drag state for snapping, * visual previews, or undo entries. * * The registry is module-global and persists across `` * remounts — the SDK does not clear it automatically. **Plugins must call * {@link removeNodeDragStartListener} themselves in their cleanup** (e.g. * `useEffect` teardown) to avoid stacking zombie listeners across mount * cycles. * * @category Listeners */ export declare function addNodeDragStartListener(listener: OnNodeDrag): void; declare type AiToolsControlElement = Override; /** * Combines testers — matches when all match. * @category Forms */ export declare const and: (...testers: JsonFormsCore.Tester[]) => JsonFormsCore.Tester; declare type ArrayFieldSchema = BaseFieldSchema & { type: 'array'; items: { type: 'object'; properties: Record; }; }; /** Compiles only when `A extends B`. Fails the build if an owned key stops being a real ReactFlow prop (`Omit` doesn't validate keys). */ declare type AssertAssignable = A; declare type BaseControlElement = Override; declare type BaseFieldSchema = { label?: string; placeholder?: string; }; declare type BaseLayoutElement = Override; declare type BaseNodeProperties = { label?: string; description?: string; errors?: FlatError[] | undefined; customErrors?: ErrorObject[] | undefined; }; declare type BaseNodePropertiesSchema = { label: { type: 'string'; }; description: { type: 'string'; }; }; declare type BooleanFieldSchema = BaseFieldSchema & { type: 'boolean'; }; export declare type CallbackAfter = (params: { params: unknown[]; returnValue: unknown; }) => void | { replacedReturn: unknown; }; declare type CallbackBefore = (params: { params: unknown[]; }) => void | { replacedParams: unknown[]; }; /** * Props injected into a custom cell renderer. * @category Forms */ export declare type CellProps = JsonFormsCore.CellProps; declare type ChangesTrackerStore = { lastChangeName: string; lastChangeParams: object; lastChangeTimestamp: number; }; export declare type ComparisonOperator = (typeof comparisonsOperators)[number]; /** * String literal union of comparison operators recognised by the * dynamic-conditions / decision-branches controls (`'isEqual'`, * `'isGreaterThan'`, `'isContaining'`, …). * * @category Forms */ declare const comparisonsOperators: readonly ["isEqual", "isNotEqual", "isGreaterThan", "isLessThan", "isLessThanOrEqual", "isGreaterThanOrEqual", "isContaining", "isNotContaining", "isBefore", "isAfter"]; /** * Options accepted by {@link registerComponentDecorator}. Two shapes: * * - With `content`: mount a React component into a named slot — `'before'`, * `'after'`, or as a `'wrapper'` around the host component. * - Without `content`: only `modifyProps` runs, transforming props passed to * the host component without rendering extra UI. * * `priority` controls the relative order when multiple plugins decorate the * same slot (higher runs first; default `0`). `name` is used to deduplicate * registrations — passing the same `name` twice replaces the earlier entry. * * @category Plugins */ export declare type ComponentDecoratorOptions = DecoratorWithContent | DecoratorWithNoContent; declare type ConditionalSchema = { properties: Record; }; declare type ConnectionBeingDragged = { handleId: string; nodeId: string; }; /** * A uischema control element. * @category Forms */ export declare type ControlElement = JsonFormsCore.ControlElement; /** * Props injected into a custom control renderer. * @category Forms */ export declare type ControlProps = JsonFormsCore.ControlProps; declare type Convert = T extends PrimitiveFieldType ? TypeMap[T] : unknown; declare type DateFieldSchema = BaseFieldSchema & { type: 'string'; }; declare type DatePickerControlElement = Override; declare type DecisionBranchesControlElement = Override; declare type DecoratorOptionsAfter = { place: 'after'; callback: CallbackAfter; } & SharedDecoratorOptions_2; declare type DecoratorOptionsBefore = { place?: 'before'; callback: CallbackBefore; } & SharedDecoratorOptions_2; declare type DecoratorWithContent = { place?: 'before' | 'after' | 'wrapper'; content: default_2.ElementType; } & SharedDecoratorOptions; declare type DecoratorWithNoContent = SharedDecoratorOptions; /** * Recursive `Partial`: every nested object property becomes optional * all the way down. Use it when a value is built up incrementally and * intermediate states are never fully populated. * * @category Utilities */ export declare type DeepPartial = T extends object ? { [P in keyof T]?: DeepPartial; } : T; /** * Erases the per-schema `P` parameter from a typed node template so it can * be stored in a {@link NodeTemplatesMap} without consumer-side casts. * * The cast is safe in practice: SDK only mounts a template for a node * whose palette schema produces `P`. The pair (palette item, template) * carries the runtime guarantee; TypeScript cannot express that link, so * we erase the parameter here in one well-documented spot. * * @example * ```ts * type MultiPortProperties = NodeDataProperties; * * export const MultiPortNodeTemplate = defineNodeTemplate( * memo(({ data }: WorkflowNodeTemplateProps) => { * const status = data?.properties.status ?? 'active'; * return ; * }), * ); * ``` * * @category Components */ export declare function defineNodeTemplate

(template: ComponentType>): ComponentType; /** * Props accepted by {@link DiagramContainer}. Use this when typing a * `registerComponentDecorator('DiagramContainer', …)` * call. * * @category Components */ export declare type DiagramContainerProps = { /** * Extra edge types forwarded to ReactFlow alongside the built-in `'labelEdge'` * and any Root-level `edgeTemplates`. Merged last, so a key here intentionally * overrides those (this is the direct-mount escape hatch, hence no collision * warning); prefer `` for app-wide edges. */ edgeTypes?: EdgeTypes; }; declare type DiagramDataModificationState = { onNodesChange: OnNodesChange; onEdgesChange: OnEdgesChange; setNodeProperties: (nodeId: string, properties: NodeData['properties']) => void; setNodeData: (nodeId: string, data: T) => void; setEdgeData: (edgeId: string, data: EdgeData) => void; removeElements: (elements: { nodes?: WorkflowBuilderNode[]; edges?: WorkflowBuilderEdge[]; }) => void; }; /** * Persistable shape of a complete diagram: name, layout direction, and * xyflow's serialised viewport + nodes + edges JSON. The format used by * built-in templates and the integration layer. * * @category Types */ export declare type DiagramModel = { name: string; layoutDirection: LayoutDirection; diagram: ReactFlowJsonObject; }; declare type DiagramSelectionState = { hoveredElement: string | null; selectedNodesIds: string[]; selectedEdgesIds: string[]; onEdgeMouseEnter: (_event: MouseEvent_2, edge: WorkflowBuilderEdge) => void; onEdgeMouseLeave: (_event: MouseEvent_2, edge: WorkflowBuilderEdge) => void; onSelectionChange: (event: WorkflowBuilderOnSelectionChangeParams) => void; }; declare type DiagramState = { nodes: WorkflowBuilderNode[]; edges: WorkflowBuilderEdge[]; reactFlowInstance: WorkflowBuilderReactFlowInstance | null; documentName: string | null; globalVariables: VariablesIndex; isReadOnlyMode: boolean; layoutDirection: LayoutDirection; onConnect: OnConnect; onInit: (instance: WorkflowBuilderReactFlowInstance) => void; setDocumentName: (name: string) => void; setDiagramModel: (model?: DiagramModel, options?: { skipIfNotEmpty?: boolean; }) => void; setToggleReadOnlyMode: (value?: boolean) => void; setLayoutDirection: (value: LayoutDirection) => void; setConnectionBeingDragged: (nodeId: string | null, handleId: string | null) => void; connectionBeingDragged: ConnectionBeingDragged | null; draggedSegmentDestinationId: string | null; setDraggedSegmentDestinationId: (id: string | null) => void; getNodes: () => Node_2[]; }; /** * Resolution of a save attempt — three documented values: `'success'` * (committed), `'error'` (failed), `'alreadyStarted'` (a save was * already in flight and the new request was coalesced). * * Today's runtime treats every non-empty resolution as "the save * finished" and surfaces the success-style snackbar — so all three * variants currently look identical at the UI layer. Throw from the * save callback (rather than resolving to `'error'`) if you need an * error snackbar specifically. * * @category Integration */ export declare type DidSaveStatus = 'error' | 'success' | 'alreadyStarted'; declare type DraggingItem = { type: string; }; /** * One row in a dynamic-conditions control — two operands (`x`, `y`), a * comparison ({@link ComparisonOperator}), and a logical operator that * joins this condition with the next (`'AND'` / `'OR'`). * * Operand strings can be literal values or `{{path}}` template * placeholders that resolve against upstream node outputs. * * @category Forms */ export declare type DynamicCondition = { x: string; comparisonOperator: ComparisonOperator; y: string; logicalOperator: LogicalOperator; }; declare type DynamicConditionsControlElement = Override; /** * Corner radius (px) used at every bend of a smooth-step edge. * * @category Constants */ export declare const EDGE_CURVE_RADIUS = 16; /** * Pixel gap between an edge endpoint and the connected node's bounding * box. Tunes the smooth-step routing used by {@link LabelEdge}. * * @category Constants */ export declare const EDGE_OFFSET = 20; declare type EdgeData = { label?: string; icon?: IconType; }; /** * Renders a label (text or icon) at fixed canvas coordinates, used by edge * components to attach descriptive content along their path. Built on top * of xyflow's `` and styled via overflow-ui's * `` primitive so hover / selected states match the rest of * the editor. * * @category Components */ export declare function EdgeLabel({ id, labelX, labelY, content, hovered, selected, onMouseEnter, onMouseLeave, centeringTransform, }: EdgeLabelProps): JSX.Element; declare type EdgeLabelProps = { id: string; labelX: number; labelY: number; content: React.ReactNode; hovered: boolean; selected?: boolean; icon?: string; onMouseEnter: () => void; onMouseLeave: () => void; centeringTransform?: string; }; /** * Drop-in replacement for xyflow's `` that paints a transparent * thicker stroke underneath the visible path. The transparent overlay * widens the edge's hover / click target without altering its visual * appearance — useful for thin edges that would otherwise be hard to grab. * * Use it inside a custom edge component the same way you'd use `BaseEdge`. * * @category Components */ export declare function EnhancedBaseEdge({ id, path, ...rest }: EnhancedBaseEdgeProps): JSX.Element; declare type EnhancedBaseEdgeProps = BaseEdgeProps; /** * Opt-in schema fragment exposing the runner's `errorPolicy` as a * Select. Spread alongside {@link sharedProperties} on node types that * should surface the choice in the properties panel; omit it elsewhere — * the runner defaults to `'fail'` when the field is absent. * * @category Utilities */ export declare const errorPolicyProperty: { readonly errorPolicy: { readonly type: "string"; readonly options: { label: string; value: "fail" | "continue" | "errorRoute"; }[]; }; }; declare type ExtractProperties = T extends { properties: infer P; } ? { [K in keyof P]: ExtractProperties; } : T extends { type: 'array'; items: infer I; } ? ExtractProperties[] : T extends { type: infer X; } ? Convert : unknown; declare type FieldSchema = PrimitiveFieldSchema | ArrayFieldSchema | ObjectFieldSchema | DateFieldSchema; declare type FieldValidationSchema = ObjectFieldValidationSchema | StringFieldValidationSchema | NumberFieldValidationSchema; declare type FlatError = { keyword: string; instancePath: string; schemaPath: string; schema?: string[]; message?: string; }; /** * Tester matching by the bound schema's `format`. * @category Forms */ export declare const formatIs: (expectedFormat: string) => JsonFormsCore.Tester; /** * Wraps an arbitrary form control (input, select, etc.) with a positioned * `

= (props: P) => P; /** * Callback signature for {@link addNodeChangedListener}. Receives every * node change xyflow emits (position, dimensions, selection, …) before * the store updates. * * @category Listeners */ export declare type NodeChangedListener = (changes: NodeChange[]) => void; /** * Per-node data attached to every {@link WorkflowBuilderNode}. The `properties` * field carries the node's user-editable values (typed by `T`); `type` * matches the corresponding `NodeDefinition.type`; `icon` is the icon shown * in palette and on the diagram canvas. * * Generic over `T` so concrete node types can refine `properties` to their * own schema-driven shape (typically via `NodeDataProperties`). * * @category Types */ export declare type NodeData> = { segments?: []; templateType?: NodeType; properties: T; icon: IconType; type: string; }; /** * Derives a TypeScript type for a node's `data.properties` directly from * its {@link NodeSchema}. Each property is optional (matching the * runtime, where partial form-state is normal). * * @example * ```ts * const schema = { type: 'object', properties: { count: { type: 'number' } } } as const; * type Props = NodeDataProperties; // { count?: number } * ``` * * @category Types */ export declare type NodeDataProperties = MakePropertiesOptional>; declare type NodeDefinition = { schema: T; /** default values of schema based properties */ defaultPropertiesData: NodeDataProperties; /** describes how the form looks like and to which fields data properties should be mapped */ uischema?: UISchema; /** describes the output properties this node produces, used by the variable picker */ outputSchema?: NodeOutputSchema; } & Required> & Pick; declare type NodeEntityId = string; declare type NodeOutputSchema = NodeOutputSchemaDefault | NodeOutputSchemaVariant; declare type NodeOutputSchemaDefault = { type: 'default'; properties: OutputPropertiesIndex; }; declare type NodeOutputSchemaVariant = { type: 'variant'; variants: { [variantName: string]: OutputVariant | undefined; }; }; declare type NodePropertiesSchema = BaseNodePropertiesSchema & Record; /** * JSON-schema-like description of a node type's editable properties. * * Drives three things at runtime: * * 1. **Validation** — values are checked against this shape; failures bubble * into `NodeData.properties.errors` for UI display. * 2. **Rendering** — JsonForms uses the schema (combined with an optional * {@link UISchema}) to render the property panel. * 3. **Type inference** — `NodeDataProperties` extracts a precise * TypeScript type for a node's `properties`. * * @category Types */ export declare type NodeSchema = ObjectFieldRequiredValidationSchema & { properties: NodePropertiesSchema; allOf?: IfThenElseSchema[]; }; /** * Visually-grouped container used inside custom node bodies — renders a * header label above its children with the editor's section spacing and * border tokens. * * Reach for it when authoring a node template that needs to split its * content into named sub-blocks (e.g. "Inputs", "Settings"). * * @category Components */ export declare function NodeSection({ label, children }: Props_2): JSX.Element; /** * Built-in template categories the editor recognises. Drives diagram * validation rules (e.g. exactly one start node, decision branches), * the variable picker's traversal, and rendering choices in the default * node template. * * Custom node types declare their template type via this enum so the * editor can apply the matching rules. * * @category Types */ export declare enum NodeType { Node = "node", StartNode = "start-node", AiNode = "ai-node", DecisionNode = "decision-node" } /** * Negates a tester. * @category Forms */ export declare const not: (tester: JsonFormsCore.Tester) => JsonFormsCore.Tester; declare type NumberFieldSchema = BaseFieldSchema & NumberFieldValidationSchema; declare type NumberFieldValidationSchema = { type: 'number'; minimum?: number; maximum?: number; exclusiveMinimum?: number; exclusiveMaximum?: number; multipleOf?: number; }; declare type ObjectFieldRequiredValidationSchema = { type?: 'object'; required?: string[]; }; declare type ObjectFieldSchema = BaseFieldSchema & ObjectFieldRequiredValidationSchema & { type: 'object'; properties: Record; }; declare type ObjectFieldValidationSchema = ObjectFieldRequiredValidationSchema & { properties: Record; }; /** * Save callback shape the host supplies under the `'props'` integration * strategy. The editor calls it with the current diagram payload and * expects a {@link DidSaveStatus} resolution. * * @category Integration */ export declare type OnSaveExternal = (data: IntegrationDataFormat, savingParams?: OnSaveParams) => Promise; /** * Optional metadata passed to save callbacks. Today only `isAutoSave` * exists — the host can use it to suppress UI feedback on autosaves. * * @category Integration */ export declare type OnSaveParams = { isAutoSave?: boolean; }; /** * Open a modal dialog with the given content + optional title / icon / * footer. Resolves through the editor's modal registry (one modal at a * time; calling `openModal` while one is already visible replaces it). * * Use it from a plugin to render a confirmation dialog, a settings * picker, or any custom UI gated behind a button. * * @category Store */ export declare function openModal({ isCloseButtonVisible, footerVariant, ...restProps }: ModalProps): void; /** * Single entry in a Select control's option list — either an item * (label + value, optionally an icon) or a visual separator. * * @category Types */ declare type Option_2 = ItemOption | SeparatorOption; export { Option_2 as Option } /** * Plugin slot mounted inside every node body. By default renders its * children unchanged; plugins can attach extra UI here via * {@link registerComponentDecorator} keyed `'OptionalNodeContent'`. * * The slot receives `nodeId` so decorators can scope their content to * specific nodes (e.g. show a status badge only on certain types). * * @category Components */ export declare const OptionalNodeContent: MemoExoticComponent<(props: PropsWithChildren) => JSX.Element>; /** * Tester matching by a uischema element `options` value. * @category Forms */ export declare const optionIs: (optionName: string, optionValue: any) => JsonFormsCore.Tester; declare type Options = { withControlOrMeta?: boolean; skipTarget?: boolean; }; /** * Combines testers — matches when any match. * @category Forms */ export declare const or: (...testers: JsonFormsCore.Tester[]) => JsonFormsCore.Tester; declare type OuterHandleId = HandleType; declare type OutputPropertiesIndex = Record; declare type OutputProperty = { type: VariableType; label: string; description?: string; }; declare type OutputVariant = { variantRule: undefined | { dataPropertyName: string; dataPropertyValue: string; }; properties: OutputPropertiesIndex; }; declare type Override = Omit & B; declare type PaletteGroup = { label: string; groupItems: PaletteItem[]; isOpen?: boolean; }; /** * One entry in the editor's left-hand palette — equivalent to a full * node definition (schema, default values, icon, type id). Drag onto * the canvas to instantiate the corresponding node. * * @category Types */ export declare type PaletteItem = NodeDefinition; /** * Either a single {@link PaletteItem} or a labelled group of them * (`PaletteGroup`). `` accepts a * mixed array of both forms. * * @category Types */ export declare type PaletteItemOrGroup = PaletteItem | PaletteGroup; declare type PaletteState = { isSidebarExpanded: boolean; data: PaletteItemOrGroup[]; fetchDataStatus: StatusType; draggedItem: DraggingItem | null; toggleSidebar: (value?: boolean) => void; fetchData: () => void; setDraggedItem: (item: DraggingItem | null) => void; getNodeDefinition: (nodeType: string) => PaletteItem | undefined; }; /** * i18next-shaped resource bundle accepted by * {@link registerPluginTranslation}. Every plugin's strings live under * `translation.plugins.` to namespace away from SDK keys. * * @category Plugins */ export declare type PluginTranslationResource = { [lang: string]: { translation: { [key: string]: { [key: string]: string | { [key: string]: string; }; }; }; }; }; /** * Forces TypeScript to flatten an intersection / mapped type into a * single object literal. Doesn't change semantics — only what TS shows * in tooltips and error messages. * * @category Utilities */ export declare type Prettify = { [K in keyof T]: T[K]; } & {}; declare type PrimitiveFieldSchema = (StringFieldSchema | NumberFieldSchema | BooleanFieldSchema) & { options?: Option_2[]; }; declare type PrimitiveFieldType = 'string' | 'number' | 'boolean'; /* Excluded from this release type: ProjectSelection */ /** * Props accepted by {@link ProjectSelection}. Use this when typing a * `registerComponentDecorator('ProjectSelection', …)` * call. * * @category Components */ export declare type ProjectSelectionProps = { /** * Optional handler for the kebab menu's "Duplicate to Drafts" item. The item * is rendered only when this is provided — omit it and the item is absent. */ onDuplicateClick?: () => void; }; /* Excluded from this release type: PropertiesBar */ declare type PropertiesBarBaseProps = { selection: SingleSelectedElement | null; selectedTab: string; }; declare type PropertiesBarItem = { when: (props: PropertiesBarSelection) => boolean; component: (props: PropertiesBarSelection) => React.ReactNode; }; /** * Props accepted by {@link PropertiesBar}. * * Provide localized labels (`headerLabel`, `deleteNodeLabel`, * `deleteEdgeLabel`), the active tab + change handler, the delete handler, * and an optional `tabs` array for extra tabs alongside the default * "Properties" tab. * * @category Components */ export declare type PropertiesBarProps = PropertiesBarBaseProps & { headerLabel: string; deleteNodeLabel: string; deleteEdgeLabel: string; tabs?: PropertiesBarTab[]; onTabChange: (tab: string) => void; onMenuHeaderClick?: () => void; onDeleteClick: () => void; }; declare type PropertiesBarSelection = Omit & { selection: SingleSelectedElement; }; declare type PropertiesBarTab = { label: string; value: string; components: PropertiesBarItem[]; }; declare type PropertyPath = T extends object ? { [K in keyof T]: K extends string ? T[K] extends Array ? K : T[K] extends object ? // If property is an object, allow deeper paths K | `${K}.${PropertyPath}` : K : never; }[keyof T] : never; declare type Props = { label: string; className?: string; required?: boolean; size?: ItemSize; }; declare type Props_2 = PropsWithChildren<{ label: string; }>; declare type Props_3 = { nodeId: string; }; /** * A tester paired with its rank, as returned by {@link rankWith}. * @category Forms */ export declare type RankedTester = JsonFormsCore.RankedTester; /** * Assigns a priority to a tester; rank above the built-ins to override a control. * @category Forms */ export declare const rankWith: (rank: number, tester: JsonFormsCore.Tester) => (uischema: JsonFormsCore.UISchemaElement, schema: JsonFormsCore.JsonSchema, context: JsonFormsCore.TesterContext) => number; /** * Decorate a named slot — add UI before/after/around it or transform its props. * * Slots are mount points the SDK exposes for plugins to inject custom UI * without forking the editor. Common slots include `'OptionalAppBarControls'`, * `'OptionalNodeContent'`, and others — see the * [Build a plugin](/docs/guides/build-a-plugin/) guide for the authoritative * list. * * Safe to call more than once; pass `plugin.name` to deduplicate. * * @param componentName - Slot identifier (e.g. `'OptionalAppBarControls'`). * @param plugin - Decorator configuration. See {@link ComponentDecoratorOptions}. * * @example * ```ts * registerComponentDecorator('OptionalAppBarControls', { * content: MyButton, * place: 'after', * name: 'analytics-button', * }); * ``` * * @category Plugins */ export declare function registerComponentDecorator

(componentName: string, plugin: ComponentDecoratorOptions

): void; /** * Decorate a named SDK function — observe its calls or transform its * arguments / return value without forking. * * Common decoration targets: `'trackFutureChange'` (state-mutation tracking), * diagram-listener emitters, save callbacks. See the * [Build a plugin](/docs/guides/build-a-plugin/) guide for the authoritative * list of decoratable functions. * * Safe to call more than once; pass `plugin.name` to deduplicate. * * @example * ```ts * registerFunctionDecorator('trackFutureChange', { * place: 'after', * callback: ({ params }) => auditLog(params), * name: 'audit-log', * }); * ``` * * @category Plugins */ export declare function registerFunctionDecorator(functionName: string, plugin: FunctionDecoratorOptions): void; /** * Merge plugin translations into the SDK's i18next instance. * * Resources follow the i18next shape `{ [lang]: { translation: { plugins: {...} } } }` * — every plugin's strings live under the `plugins` namespace, scoped by * plugin name to avoid key collisions. * * Safe to call more than once and at any time relative to i18next init: each * call also issues `i18n.addResourceBundle(...)` so newly registered strings * surface live, even when the plugin registers after the SDK has already * initialised i18next. * * @example * ```ts * registerPluginTranslation({ * en: { translation: { plugins: { myPlugin: { hello: 'Hello' } } } }, * pl: { translation: { plugins: { myPlugin: { hello: 'Cześć' } } } }, * }); * ``` * * @category Plugins */ export declare function registerPluginTranslation(pluginResourceToAdd: Resource): void; /** * Remove a previously-registered node-change listener. * * @category Listeners */ export declare function removeNodeChangedListener(listener: NodeChangedListener): void; /** * Remove a previously-registered node-drag-start listener. * * @category Listeners */ export declare function removeNodeDragStartListener(listener: OnNodeDrag): void; /** * Clear all node + edge selection. The diagram updates to the * unselected visual state on next render. * * @category Store */ export declare function resetStoreSelection(): void; declare type Resource = { [lang: string]: { translation: { [key: string]: { [key: string]: string | { [key: string]: string; }; }; }; }; }; declare type RichTextElement = Override; /** * Rule effect for conditional uischema rules (`SHOW`, `HIDE`, `ENABLE`, `DISABLE`). * @category Forms */ export declare const RuleEffect: typeof JsonFormsCore.RuleEffect; export declare type RuleEffect = JsonFormsCore.RuleEffect; declare type SchemaCondition = { properties: Record; }; /** * Tester matching when the bound schema fragment satisfies a predicate. * @category Forms */ export declare const schemaMatches: (predicate: (schema: JsonFormsCore.JsonSchema, rootSchema: JsonFormsCore.JsonSchema) => boolean) => JsonFormsCore.Tester; /** * Tester matching by the bound schema's `type`. * @category Forms */ export declare const schemaTypeIs: (expectedType: string) => JsonFormsCore.Tester; /** * Tester matching when the control's `scope` ends with a fragment. * @category Forms */ export declare const scopeEndsWith: (expected: string) => JsonFormsCore.Tester; /** * ReactFlow props the SDK sets itself (spread last in `diagram.tsx`, so they win * over `reactFlowProps`) and omits from {@link WorkflowBuilderReactFlowProps}. * The `diagram.spec` precedence test enforces each one stays owned. Internal: * exported for that test only. */ declare type SdkManagedReactFlowKey = 'nodes' | 'edges' | 'nodeTypes' | 'edgeTypes' | 'onConnect' | 'onConnectStart' | 'onConnectEnd' | 'onNodesChange' | 'onEdgesChange' | 'onSelectionChange' | 'onInit' | 'onBeforeDelete' | 'onNodeDragStart' | 'onNodeDragStop' | 'onEdgeMouseEnter' | 'onEdgeMouseLeave' | 'onDragOver' | 'onDrop' | 'connectionLineComponent' | 'nodesConnectable' | 'nodesDraggable' | 'isValidConnection'; /** Every ReactFlow key the escape hatch must not expose. */ declare type SdkOwnedReactFlowKey = SdkManagedReactFlowKey | SdkReservedReactFlowKey; /** * ReactFlow props omitted from {@link WorkflowBuilderReactFlowProps} but not * re-set in `diagram.tsx`. `default*` are no-ops under the SDK's controlled * `nodes` / `edges`; `colorMode` would clash with the SDK theme. Type-level guard * only (a JS / `as`-cast consumer can still smuggle them; worst case is cosmetic). */ declare type SdkReservedReactFlowKey = 'defaultNodes' | 'defaultEdges' | 'colorMode'; declare type SelectControlElement = Override; /** * Vertical distance (px) between the source node's top edge and the * apex of a self-connecting edge's loop. Also drives where the edge's * label sits on a self-connecting edge. * * @category Constants */ export declare const SELF_CONNECTING_EDGE_LABEL_OFFSET = 100; /** * Edge that loops above the source node when source and target are the * same node (a "self-connecting" or "back-to-self" edge). Draws a * rounded-corner path that arches over the node so the loop stays visible * regardless of the node's size. * * Used internally by {@link LabelEdge}; expose only when you author a * custom edge type and want to reuse the same loop geometry. * * @category Components */ export declare function SelfConnectingEdge({ id, sourceX, sourceY, targetX, targetY, selected, hovered, nodeHeight, }: SelfConnectingEdgeProps): JSX.Element; declare type SelfConnectingEdgeProps = EdgeProps & { nodeHeight?: number; hovered: boolean; }; declare type SeparatorOption = { type: 'separator'; }; /** * Replace all edges in the store with the given list. * * @category Store */ export declare function setStoreEdges(edges: WorkflowBuilderEdge[]): void; /** * Set the diagram layout direction. Re-rendering picks up the new * direction without recomputing the layout — call your auto-layout helper * after this if positions need to update. * * @category Store */ export declare function setStoreLayoutDirection(layoutDirection: LayoutDirection): void; /** * Replace all nodes in the store with the given list. Each node is * re-validated against its schema before committing — `properties.errors` * on the resulting nodes reflects the new validation state. * * @category Store */ export declare function setStoreNodes(nodes: WorkflowBuilderNode[]): void; declare type SharedDecoratorOptions = { modifyProps?: ModifyProps; priority?: number; name?: string; }; declare type SharedDecoratorOptions_2 = { priority?: number; name?: string; }; /** * Reusable schema fragment for the properties every node carries by default: * `label` and `description`. Spread this into a custom * `NodeSchema['properties']` to avoid redeclaring them per node type. * * @category Utilities */ export declare const sharedProperties: BaseNodePropertiesSchema; declare type SingleSelectedElement = { node: WorkflowBuilderNode | null; edge: WorkflowBuilderEdge | null; }; declare type Size = 'extra-large' | 'large' | 'medium' | 'small'; /** * Canonical option set for the node-status select control: `active`, * `draft`, `disabled`. Each option ships its `label`, `value`, and the * matching status icon name. * * @category Utilities */ export declare const statusOptions: { readonly active: { readonly label: "Active"; readonly value: "active"; readonly icon: "StatusActive"; }; readonly draft: { readonly label: "Draft"; readonly value: "draft"; readonly icon: "StatusDraft"; }; readonly disabled: { readonly label: "Disabled"; readonly value: "disabled"; readonly icon: "StatusDisabled"; }; }; declare enum StatusType { Idle = "idle", Loading = "loading", Success = "success", Error = "error" } declare type StringFieldSchema = BaseFieldSchema & StringFieldValidationSchema; declare type StringFieldValidationSchema = { type: 'string'; minLength?: number; maxLength?: number; pattern?: string; format?: string; }; declare type SwitchControlElement = Override; /** * Code-editor input with syntax highlighting. Lazy-loads the heavy * `ace-builds` chunk — until it arrives, falls back to a plain `