import { ReactNode } from 'react'; import { Brand, ThemeMode, Density, Typography, GlassIntensity } from './shell/ThemeProvider'; import { TranslationDictionary } from './shell/I18nProvider'; import { BurdenoffEventName } from '../events'; export interface AppShellConfig { /** Product display name (e.g., "VibeControls", "FluidGrids") */ productName: string; /** Product slug (e.g., "vibecontrols", "fluidgrids") */ productSlug?: string; /** Product tagline */ tagline?: string; /** Product domain (e.g., "vibecontrols.com") */ domain?: string; /** Product ID for i18n translations service */ i18nProductId: string; /** Resolved gateway URLs */ gatewayUrls: { workspaceBaseUrl: string; globalBaseUrl: string; }; /** Auth bridge configuration */ authBridge?: { url?: string; allowedOrigins?: string; debug?: boolean; }; /** Default theme brand (per-product accent) */ defaultBrand?: Brand; /** Per-product default theme mode (e.g. a product can default to dark/midnight). */ defaultMode?: ThemeMode; /** Per-product default density. */ defaultDensity?: Density; /** Per-product default typography scale. */ defaultTypography?: Typography; /** Per-product default glass intensity. */ defaultGlass?: GlassIntensity; /** Enable PWA install banner */ enablePWA?: boolean; /** Brand initial for PWA banner icon */ brandInitial?: string; /** Default gateway for top-level ApolloProvider */ defaultGateway?: 'workspace' | 'global'; /** Enable GraphQL subscriptions */ enableSubscriptions?: boolean; /** Static fallback translations (keyed by locale) */ fallbackTranslations?: Record; /** QueryClient options override */ queryClientOptions?: { staleTime?: number; retry?: number | false; refetchOnWindowFocus?: boolean; }; /** Toaster position */ toasterPosition?: 'top-left' | 'top-center' | 'top-right' | 'bottom-left' | 'bottom-center' | 'bottom-right'; /** Frontend telemetry sinks. MFEs emit to the shell event bus only. */ observability?: AppShellObservabilityConfig; /** Require explicit opt-in before loading optional analytics in this shell. */ privacyConsent?: boolean; /** * Extra routes on which the analytics-consent prompt must NOT render (BOFF-6373). * * Already suppressed on every COMMON_SHELL_LESS_ROUTES path (auth, OAuth callbacks, * embed/print). This is the escape hatch for a shell's OWN public routes, which fe-libs cannot * know about: HealthyBowl serves anonymous portals at `/b/:slug` and `/s/:slug`. * * Return true to suppress. A consent card is a login-form-sized obstacle on a page whose whole * purpose is that a stranger can read it. */ consentRouteDenylist?: (pathname: string) => boolean; /** * Maps a pathname to the tour `pageId` used when looking up tours. * * Tours are matched on `productId` + `moduleId` + `pageId`, and by default the * `pageId` is the first path segment. Shells whose routes nest below that * segment (FluidGrids serves its list, builder and runs screens all under * `/workflows/…`) need this to tell those screens apart. Return `undefined` * for any path the shell does not want to name, and the default applies. */ tourPageIdFromPath?: (pathname: string) => string | undefined; } export interface AppShellObservabilityConfig { enabled?: boolean; appVersion?: string; appEnv?: 'dev' | 'alpha' | 'prod'; devtools?: boolean; broadcast?: boolean; rybbit?: { enabled?: boolean; siteId?: string; scriptUrl?: string; allowlist?: BurdenoffEventName[]; identifyOn?: BurdenoffEventName; rename?: Partial>; }; otel?: { enabled?: boolean; endpoint?: string; serviceName?: string; flushInterval?: number; }; backendAudit?: { enabled?: boolean; endpoint?: string; }; } export interface AppShellObservabilityEnv { DEV?: boolean; PROD?: boolean; MODE?: string; VITE_DEPLOY_ENV?: string; VITE_APP_VERSION?: string; VITE_ENABLE_ANALYTICS?: string; VITE_DISABLE_ANALYTICS?: string; VITE_RYBBIT_SITE_ID?: string; VITE_RYBBIT_SCRIPT_URL?: string; VITE_OTEL_HTTP_ENDPOINT?: string; VITE_BACKEND_AUDIT_ENDPOINT?: string; } export declare function resolveAppShellObservabilityConfig(productSlug: string, env: AppShellObservabilityEnv): AppShellObservabilityConfig; export interface AppShellProviderProps { config: AppShellConfig; children: ReactNode; /** Optional callback to clear external auth stores (e.g., microfe-auth's zustand store) */ clearAuthStore?: () => void; } export declare function AppShellProvider({ config, children, clearAuthStore }: AppShellProviderProps): import("react/jsx-runtime").JSX.Element; //# sourceMappingURL=AppShellProvider.d.ts.map