import React from "react"; import { type Href } from "expo-router"; import { type ImageStyle, type StyleProp, type ViewStyle } from "react-native"; /** * Per-app route map consumed by the entropy-ui auth screens / hooks. * Apps supply this so the shared screens can navigate without hard-coding * vault- or bootstrap-specific paths. */ export interface AppRoutes { welcome: Href; login: Href; register: Href; forgotPassword: Href; resetPassword: Href; verifyEmail: Href; mfaChallenge: Href; mfaEnroll: Href; termsOfService: Href; privacyPolicy: Href; serverConfig: Href; importData: Href; /** Where to land authenticated users with no pending onboarding step. */ home: Href; } export type LogoComponent = React.ComponentType<{ width?: number; height?: number; /** * Ink colour for a monochrome mark. The auth screen passes the resolved * theme foreground, so a single-colour logo inverts with the theme instead * of each logo having to resolve the colour scheme for itself. */ color?: string; style?: StyleProp | StyleProp; /** * Render the mark flush to its box, without whatever internal padding it * normally carries. * * A mark usually bakes in breathing room so it drops into arbitrary layouts * safely. In a lockup that padding fights the layout instead: the caller is * already controlling the gap, and the baked margin makes the mark read as * smaller than the text it is supposed to match. Logos that have no internal * padding can ignore this. */ bleed?: boolean; }>; export interface AppConfig { /** User-facing brand name. Renders in headings, toasts, MFA issuer, etc. */ appName: string; /** Brand logo as a React component (SVG / Image). */ Logo: LogoComponent; /** Per-app route map. */ routes: AppRoutes; /** * Tagline rendered under the brand on the welcome screen. Defaults to * a generic "An Entropy Softworks platform". */ tagline?: string; /** * How to set the tagline against the app name. Omit for the default: stacked * centred underneath, no rule. * * "inline" — same line, pipe-separated: `Vault | Password Manager` * "ruled" — under the name, hairline rule between the two * "lockup" — logo to the LEFT of the name and tagline stacked, with the * mark sized to the height of those two lines together. The * conventional app lockup, and the tidiest option when the * tagline is a short category label. * * `"inline"` and `"lockup"` both need an app-name text to set against, so a * `logoIsWordmark` mark — which renders alone at its natural width — falls * back to `"ruled"`. */ taglineLayout?: "inline" | "ruled" | "lockup"; /** * Optional terms-of-service markdown / plain text. Welcome screen and * the dedicated terms screen render this. When omitted, the screens * render a generic stub. */ termsText?: string; /** Optional privacy-policy markdown / plain text. */ privacyText?: string; /** * The logo already spells the product name (a wordmark rather than a glyph). * * When true the auth screen renders the mark on its own, at its natural * aspect ratio, instead of pairing a square glyph with the app name — which * would otherwise print the name twice and squash a wide mark into a square. */ logoIsWordmark?: boolean; /** * Rendered width of a wordmark logo, in px. Defaults to 160. Only consulted * when `logoIsWordmark` is set; a glyph logo keeps its square 72px pairing. */ logoWidth?: number; } export declare function AppConfigProvider({ config, children, }: { config: AppConfig; children: React.ReactNode; }): React.JSX.Element; export declare function useAppConfig(): AppConfig; //# sourceMappingURL=AppConfigContext.d.ts.map