import type { AppManifest, AuthOAuthProviderConfig, ComponentDataBindingRegistry, DataSourceRegistry, NavigatorSpec, NavigatorType, RouteDefinition, ScreenSpec, ThemeConfig, UiNode } from '@ankhorage/contracts'; import type { NodePlacement, StudioComponentMetaRegistry, StudioIdGenerator, StudioManifest, ThemeUpdates } from './index'; export interface ScreenRouteEntry { route: RouteDefinition; screenId: string; parentPath: string[]; routePath: string[]; } export interface ScreenRouteGroup { id: string; parentPath: string[]; entries: ScreenRouteEntry[]; } export interface StudioManifestScreenMutationResult { manifest: StudioManifest; activeScreenId: string | null; } export type StudioScreenNavigationDiagnosticCode = 'ambiguous-route-target' | 'ambiguous-screen-route-reference' | 'duplicate-screen-id' | 'duplicate-sibling-route-name' | 'empty-navigator' | 'invalid-initial-route' | 'missing-route-target' | 'missing-screen-reference' | 'screen-registry-key-mismatch'; export interface StudioScreenNavigationDiagnostic { code: StudioScreenNavigationDiagnosticCode; message: string; parentPath: string[]; routeName?: string; screenId?: string; } export interface StudioScreenRouteReference { route: RouteDefinition; parentPath: string[]; routePath: string[]; pathnamePattern: string; siblingIndex: number; navigatorType: NavigatorType; isPrimaryNavigatorMember: boolean; showInPrimaryNavigation: boolean; isPrimaryInitialRoute: boolean; } export interface StudioScreenNavigationEntry { screenId: string; screen: ScreenSpec; routeReferences: StudioScreenRouteReference[]; } export interface StudioScreenNavigationModel { primaryNavigatorPath: string[]; primaryNavigator: NavigatorSpec; screens: StudioScreenNavigationEntry[]; diagnostics: StudioScreenNavigationDiagnostic[]; } export interface StudioManifestNodeInsertResult { manifest: StudioManifest; insertedNodeId: string; } export interface StudioManifestNodeMoveResult { manifest: StudioManifest; movedNodeId: string; } export declare const DEFAULT_STUDIO_SCREEN_TEMPLATE: UiNode; export declare const generateManifestStateId: StudioIdGenerator; export declare function createStudioManifestFingerprint(manifest: StudioManifest | null): string; export declare function pathToKey(path: string[]): string; export declare function isRouteGroupSegment(segment: string): boolean; export declare function collectScreenRouteEntries(routes: RouteDefinition[], parentPath?: string[], routePathPrefix?: string[]): ScreenRouteEntry[]; export declare function groupScreenRouteEntries(entries: ScreenRouteEntry[]): ScreenRouteGroup[]; /** * Verifies the Studio manifest invariant that route registry keys and stable * ScreenSpec identities are the same unique value. */ export declare function hasCanonicalStudioScreenRegistryIdentity(screens: StudioManifest['screens']): boolean; /** * Derives the complete package-neutral screen/navigation authoring model from * the manifest without flattening its navigator tree. */ export declare function deriveStudioScreenNavigationModel(manifest: StudioManifest): StudioScreenNavigationModel; /** * Returns a concrete canonical app pathname only when a screen has one route * reference and that route does not require runtime parameters. */ export declare function resolveStudioScreenAppPath(model: StudioScreenNavigationModel, screenId: string): string | null; export declare function listScreenIdsInRouteOrder(routes: RouteDefinition[]): string[]; /** * Resolves the initial leaf screen selected by a nested navigator tree. * Each navigator's initial route is preferred, with unusable routes falling * back to the first route that reaches an available screen. */ export declare function resolveInitialScreenId(navigator: NavigatorSpec, screens?: AppManifest['screens']): string | null; export declare function resolveInitialActiveScreenId(manifest: StudioManifest | null): string | null; export declare function resolveActiveRootNode(manifest: StudioManifest | null, activeScreenId: string | null): UiNode | null; export declare function findNodeInManifest(root: UiNode, id: string): UiNode | null; export declare function resolveSafeSelectedNodeId(rootNode: UiNode | null, selectedNodeId: string | null): string | null; export declare function findScreenIdForNode(manifest: StudioManifest, nodeId: string): string | null; export declare function updateStudioManifestNode(manifest: StudioManifest, activeScreenId: string | null, nodeId: string, newProps: Record): StudioManifest; export declare function deleteStudioManifestNode(manifest: StudioManifest, activeScreenId: string | null, nodeId: string): StudioManifest; export declare function insertStudioManifestNodeAtPlacement(args: { manifest: StudioManifest; activeScreenId: string | null; placement: NodePlacement; newNode: UiNode; componentMeta: StudioComponentMetaRegistry; }): StudioManifestNodeInsertResult | null; export declare function moveStudioManifestNodeToPlacement(args: { manifest: StudioManifest; activeScreenId: string | null; nodeId: string; placement: NodePlacement; componentMeta: StudioComponentMetaRegistry; }): StudioManifestNodeMoveResult | null; export declare function updateStudioManifestDataBindings(manifest: StudioManifest, dataBindings: ComponentDataBindingRegistry): StudioManifest; export declare function updateStudioManifestDataSources(manifest: StudioManifest, dataSources: DataSourceRegistry): StudioManifest; export declare function createDefaultThemeConfig(themeIndex: number, id?: string): ThemeConfig; export declare function addStudioManifestTheme(manifest: StudioManifest, theme?: ThemeConfig): StudioManifest; export declare function updateStudioManifestTheme(manifest: StudioManifest, themeId: string, updates: ThemeUpdates): StudioManifest; export declare function deleteStudioManifestTheme(manifest: StudioManifest, themeId: string): StudioManifest; export declare function setStudioManifestActiveThemeId(manifest: StudioManifest, activeThemeId: string): StudioManifest; export declare function setStudioManifestActiveThemeMode(manifest: StudioManifest, activeThemeMode: NonNullable): StudioManifest; export declare function updateStudioManifestOAuthProviders(manifest: StudioManifest, providers: AuthOAuthProviderConfig[]): StudioManifest; export declare function getPrimaryNavigatorPath(routes: RouteDefinition[]): string[]; export declare function findParentPathForScreenId(routes: RouteDefinition[], screenId: string, parentPath?: string[], routePathPrefix?: string[]): string[] | null; export declare function findRoutesAtParentPath(routes: RouteDefinition[], parentPath: string[]): RouteDefinition[] | null; export declare function insertRouteAtParentPath(routes: RouteDefinition[], parentPath: string[], newRoute: RouteDefinition): RouteDefinition[]; export declare function findNavigatorAtPath(navigator: NavigatorSpec, parentPath: string[]): NavigatorSpec | null; export declare function updateNavigatorAtPath(navigator: NavigatorSpec, parentPath: string[], updater: (current: NavigatorSpec) => NavigatorSpec): NavigatorSpec; export declare function setStudioManifestNavigatorType(manifest: StudioManifest, type: NavigatorType): StudioManifest; export declare function setStudioManifestNavigatorInitialRoute(manifest: StudioManifest, routeName: string): StudioManifest; export declare function setStudioManifestRoutePrimaryNavigationVisibility(args: { manifest: StudioManifest; parentPath: string[]; routeName: string; showInPrimaryNavigation: boolean; }): StudioManifest; export declare function moveStudioManifestRoute(args: { manifest: StudioManifest; parentPath: string[]; routeName: string; toIndex: number; }): StudioManifest; export declare function addStudioManifestScreen(args: { manifest: StudioManifest; name: string; activeScreenId: string | null; parentPath?: string[]; createId?: StudioIdGenerator; screenTemplate?: UiNode; }): StudioManifestScreenMutationResult; export declare function deleteStudioManifestScreen(manifest: StudioManifest, screenId: string, activeScreenId: string | null): StudioManifestScreenMutationResult; export declare function removeScreenIdFromRoutes(routes: RouteDefinition[], screenId: string): RouteDefinition[]; export declare function makeUniqueSiblingRouteName(base: string, siblingRoutes: RouteDefinition[]): string; export declare function toCanonicalRoutePattern(routePath: string[]): string; export declare function makeUniqueRouteNameForParent(baseRouteName: string, siblingRoutes: RouteDefinition[], parentPath: string[], existingPatterns: Set): string; //# sourceMappingURL=manifestState.d.ts.map