import { type ReactNode } from 'react'; import { type FunnelChoiceCompletion } from '../steps/choice-contract.js'; import { type FunnelChoiceOption, type FunnelEmojiChoiceOption } from '../steps/step-contract.js'; import type { FunnelStepMeta } from '../steps/types.js'; import { type FunnelContractDiagnostic } from '../validation/funnel-contract-diagnostics.js'; type ChoiceOptions = readonly (FunnelChoiceOption | FunnelEmojiChoiceOption)[]; type ChoiceResult = FunnelChoiceCompletion | FunnelContractDiagnostic; type ChoiceCommit = (stepMeta: FunnelStepMeta, result: ChoiceResult) => void; export type FunnelStepChoices = { selectSingle: (optionId: string) => void; completeMulti: (optionIds: readonly string[]) => void; }; export declare const createStepChoiceActions: (stepMeta: FunnelStepMeta, options: ChoiceOptions, commit: ChoiceCommit) => FunnelStepChoices; export declare const registerInternalChoiceCommit: (carrier: object, commit: ChoiceCommit) => void; export declare const FunnelChoiceCommitProvider: ({ carrier, children, }: { carrier: object; children: ReactNode; }) => import("react").FunctionComponentElement>; export declare const useStepChoices: (stepMeta: FunnelStepMeta, options: ChoiceOptions) => FunnelStepChoices; export type AtomicChoiceCommitResult = 'committed' | 'ignored' | 'quarantined' | 'record-failed'; export declare const consumeChoiceCompletionMarker: (marker: string | null, previousStepId: string) => { consumed: boolean; nextMarker: string | null; }; type AtomicChoiceCommitInput = { activeStepId: StepId; activeStepMeta: FunnelStepMeta | undefined; stepMeta: FunnelStepMeta; result: ChoiceResult; environment: 'development' | 'production' | 'test'; getAttributes: () => Record; writeAttributes: (attributes: Record) => void; isInFlight: () => boolean; beginCommit: () => void; cancelCommit: () => void; recordCompletion: (input: { selected?: Record; metadata?: Record; }) => boolean; markCompletedBeforeNavigation: () => void; clearCompletedBeforeNavigation: (markerWasInstalled: boolean) => void; resolveNext: (attributes: Record) => StepId; navigate: (stepId: StepId) => void; reportDiagnostic: (diagnostic: FunnelContractDiagnostic) => void; }; export declare const runAtomicChoiceCommit: (input: AtomicChoiceCommitInput) => AtomicChoiceCommitResult; type ChoiceBypassOperation = 'setAnswer' | 'setAttribute' | 'goChoice' | 'completeStep'; export declare const enforceChoiceBypassGuard: (input: { operation: ChoiceBypassOperation; activeStepId: string; sourceStepId?: string; key?: string; stepById: Record; stepContractVersion: number; environment: "development" | "production" | "test"; reportDiagnostic: (diagnostic: FunnelContractDiagnostic) => void; }) => boolean; export {};