import { Provider } from 'react'; import { AnyActorRef, SnapshotFrom, MachineSnapshot, ActorRefFromLogic } from 'xstate'; import { DiagramApi } from '../likec4diagram/state/diagram-api'; import { DiagramActorRef, DiagramContext } from '../likec4diagram/state/types'; import { DiagramEvents } from '../custom'; import { OverlaysActorRef, OverlaysActorLogic } from '../overlays/overlaysActor'; import { SearchActorRef, SearchActorLogic } from '../search/searchActor'; import { BaseEditorActorRef } from '../editor/actor/setup'; import { NavigationPanelActorRef, NavigationPanelActorLogic } from '../navigationpanel/actor'; import { HotkeyActorLogic } from '../likec4diagram/state/hotkeyActor'; import { MediaPrintActorLogic } from '../likec4diagram/state/mediaPrintActor'; import { EditorActorLogic } from '../editor'; export declare const DiagramApiContextProvider: Provider; export declare function useDiagram(): DiagramApi; /** * Tuple type for selector and compare function pair */ type SelectAndCompare = [ selector: (snapshot: A) => B, compare: (a: B, b: B) => boolean ]; type SafeContextForActor = { /** * The React context provider for this actor */ ContextProvider: Provider; /** * Hook to get the actor ref from context */ useActorRef: () => A; /** * @param select - Function to extract a value from the actor's snapshot * @param compare - Optional comparison function. If not provided, shallow equality is used. * The comparison function receives the selected value from the previous snapshot () * and the selected value from the current snapshot. If the comparison returns true, * the component will not re-render. */ selectSnapshot(select: (state: Snapshot) => T, compare?: (old: NoInfer, next: NoInfer) => boolean): SelectAndCompare; /** * @param select - Function to extract a value from the actor's context * @param compare - Optional comparison function. If not provided, shallow equality is used. */ selectContext(select: (state: Context) => T, compare?: (old: NoInfer, next: NoInfer) => boolean): SelectAndCompare; useActorSelector(select: (state: Snapshot) => T): T; useActorSelector(selectorCompare: SelectAndCompare): T; useActorSelector(...selectorCompare: SelectAndCompare): T; }; /** * Helper to create a safe context for an actor * @example * ```tsx * const { * ContextProvider: MyActorContext, * useActorRef, * selectSnapshot, * useActorSelector * } = createSafeContextForActor() * * const select = selectSnapshot( * s => ...., * (a, b) => a === b * ) * * // Later in component: * const value = useActorSelector(select) * ``` */ export declare function createSafeContextForActor, Context = Snapshot extends { context: infer C; } ? C : never>(name: string): SafeContextForActor; export declare const DiagramActorContextProvider: Provider, selectDiagramSnapshot: (select: (state: MachineSnapshot | undefined; overlays: ActorRefFromLogic | undefined; search: ActorRefFromLogic | undefined; mediaPrint: ActorRefFromLogic | undefined; editor: ActorRefFromLogic | undefined; navigationPanel: ActorRefFromLogic | undefined; }, "search" | "overlays" | "editor" | "navigationPanel">, "final" | "isReady" | "navigating" | "ready" | "initializing" | { ready?: NonNullable<"idle" | "walkthrough" | "focused" | "printing">; }, never, never, never, never>) => T, compare?: ((old: NoInfer, next: NoInfer) => boolean) | undefined) => SelectAndCompare< MachineSnapshot | undefined; overlays: ActorRefFromLogic | undefined; search: ActorRefFromLogic | undefined; mediaPrint: ActorRefFromLogic | undefined; editor: ActorRefFromLogic | undefined; navigationPanel: ActorRefFromLogic | undefined; }, "search" | "overlays" | "editor" | "navigationPanel">, "final" | "isReady" | "navigating" | "ready" | "initializing" | { ready?: NonNullable<"idle" | "walkthrough" | "focused" | "printing">; }, never, never, never, never>, T>, selectDiagramContext: (select: (state: DiagramContext) => T, compare?: ((old: NoInfer, next: NoInfer) => boolean) | undefined) => SelectAndCompare< MachineSnapshot | undefined; overlays: ActorRefFromLogic | undefined; search: ActorRefFromLogic | undefined; mediaPrint: ActorRefFromLogic | undefined; editor: ActorRefFromLogic | undefined; navigationPanel: ActorRefFromLogic | undefined; }, "search" | "overlays" | "editor" | "navigationPanel">, "final" | "isReady" | "navigating" | "ready" | "initializing" | { ready?: NonNullable<"idle" | "walkthrough" | "focused" | "printing">; }, never, never, never, never>, T>, useDiagramSelector: { (select: (state: MachineSnapshot | undefined; overlays: ActorRefFromLogic | undefined; search: ActorRefFromLogic | undefined; mediaPrint: ActorRefFromLogic | undefined; editor: ActorRefFromLogic | undefined; navigationPanel: ActorRefFromLogic | undefined; }, "search" | "overlays" | "editor" | "navigationPanel">, "final" | "isReady" | "navigating" | "ready" | "initializing" | { ready?: NonNullable<"idle" | "walkthrough" | "focused" | "printing">; }, never, never, never, never>) => T): T; (selectorCompare: SelectAndCompare< MachineSnapshot | undefined; overlays: ActorRefFromLogic | undefined; search: ActorRefFromLogic | undefined; mediaPrint: ActorRefFromLogic | undefined; editor: ActorRefFromLogic | undefined; navigationPanel: ActorRefFromLogic | undefined; }, "search" | "overlays" | "editor" | "navigationPanel">, "final" | "isReady" | "navigating" | "ready" | "initializing" | { ready?: NonNullable<"idle" | "walkthrough" | "focused" | "printing">; }, never, never, never, never>, T>): T; (selector: (snapshot: MachineSnapshot | undefined; overlays: ActorRefFromLogic | undefined; search: ActorRefFromLogic | undefined; mediaPrint: ActorRefFromLogic | undefined; editor: ActorRefFromLogic | undefined; navigationPanel: ActorRefFromLogic | undefined; }, "search" | "overlays" | "editor" | "navigationPanel">, "final" | "isReady" | "navigating" | "ready" | "initializing" | { ready?: NonNullable<"idle" | "walkthrough" | "focused" | "printing">; }, never, never, never, never>) => T, compare: (a: T, b: T) => boolean): T; }, useDiagramActorRef: () => DiagramActorRef; export {};