import { z } from 'zod'; /** * Types shared by the node pipeline and the browser app. This file ships as source, next to * `src/app`, so both halves agree on the shape of the virtual modules. */ declare const FEATURES: readonly ["navigation.instant.prefetch", "navigation.instant.preview", "navigation.footer", "navigation.top", "navigation.path", "navigation.sections", "navigation.prune", "toc.follow", "toc.integrate", "content.code.copy", "content.action.edit", "content.edit", "content.image.zoom", "search.suggest", "search.highlight", "social.cards"]; type Feature = (typeof FEATURES)[number]; /** What a user writes in `features`: the flags they are changing, each set on or off. */ type FeatureMap = Partial>; /** @deprecated The array form, where a `!` prefix means off. Write {@link FeatureMap} instead. */ type FeatureFlag = Feature | `!${Feature}`; type ResolvedFeatures = Record; /** The payload of `virtual:seemore/config`. */ /** * The actions a page-actions button can hold, by id. Presence in the `actions` array is * what enables an action; the array order is the menu order. */ declare const ACTION_IDS: readonly ["copy-markdown", "export-html"]; type ActionId = (typeof ACTION_IDS)[number]; /** The CSS presets fumadocs-ui ships. We do not invent a token system. */ declare const THEMES: readonly ["neutral", "black", "catppuccin", "dusk", "ocean", "purple", "ruby", "solar", "aspen", "emerald", "vitepress", "shadcn"]; type Theme = (typeof THEMES)[number]; interface NavItem { text: string; link?: string; items?: NavItem[]; } declare const searchSchema: z.ZodUnion, z.ZodObject<{ provider: z.ZodLiteral<"static">; }, z.core.$strip>, z.ZodObject<{ provider: z.ZodLiteral<"orama-cloud">; endpoint: z.ZodString; apiKey: z.ZodString; }, z.core.$strip>, z.ZodObject<{ provider: z.ZodLiteral<"algolia">; appId: z.ZodString; apiKey: z.ZodString; indexName: z.ZodString; }, z.core.$strip>]>; declare const configSchema: z.ZodObject<{ title: z.ZodOptional; description: z.ZodOptional; favicon: z.ZodOptional; base: z.ZodOptional; url: z.ZodOptional; theme: z.ZodDefault>; css: z.ZodOptional; features: z.ZodDefault & z.core.$partial, z.ZodBoolean>, unknown>>; nav: z.ZodOptional>>>; footer: z.ZodOptional; links: z.ZodOptional>>; }, z.core.$strip>>; editLink: z.ZodOptional; }, z.core.$strip>>; search: z.ZodDefault, z.ZodObject<{ provider: z.ZodLiteral<"static">; }, z.core.$strip>, z.ZodObject<{ provider: z.ZodLiteral<"orama-cloud">; endpoint: z.ZodString; apiKey: z.ZodString; }, z.core.$strip>, z.ZodObject<{ provider: z.ZodLiteral<"algolia">; appId: z.ZodString; apiKey: z.ZodString; indexName: z.ZodString; }, z.core.$strip>]>>; pageActions: z.ZodDefault>>; exclude: z.ZodDefault>; include: z.ZodDefault>; auth: z.ZodPreprocess; remember: z.ZodOptional; }, z.core.$strict>>, unknown>; }, z.core.$strip>; /** What a user writes in `seemore.config.ts`. */ type SeemoreConfig = Omit, 'features' | 'theme' | 'search' | 'auth'> & { /** An array of {@link FeatureFlag} also works, but the map is the documented form. */ features?: FeatureMap | FeatureFlag[]; theme?: Theme; search?: z.input; /** * Password protection: `seemore build` encrypts the site, and visitors unlock it with the * password. The password itself comes from `SEEMORE_PASSWORD` at build time, never from here. */ auth?: boolean | AuthOptions; }; interface AuthOptions { /** * A stable name the key is derived from; defaults to `title`. Set it if you expect to * rename the site, so visitors stay unlocked. Changing it logs everyone out. */ id?: string; /** How long a visitor stays unlocked after their last visit: `'12h'` or `'7d'`. Default `'1d'`. */ remember?: `${number}h` | `${number}d`; } type SearchConfig = { provider: 'static'; } | { provider: 'orama-cloud'; endpoint: string; apiKey: string; } | { provider: 'algolia'; appId: string; apiKey: string; indexName: string; }; /** What the rest of seemore consumes: every optional filled in, every path absolute. */ interface ResolvedSeemoreConfig { title: string; description?: string; favicon?: string; /** Always normalised to leading + trailing slash. */ base: string; /** Origin only, no trailing slash. Present when the author set `url`. */ url?: string; theme: Theme; /** Absolute path, resolved against the config file's directory. */ css?: string; features: ResolvedFeatures; nav?: NavItem[]; footer?: { text?: string; links?: { text: string; link: string; }[]; }; editLink?: { base: string; text: string; }; search: SearchConfig; pageActions: ActionId[]; exclude: string[]; include: string[]; /** Present when the site is password-protected. Nothing here is ever sent to the browser. */ auth?: { id: string; remember: number; }; /** Directory the config was resolved from — relative paths in it hang off this. */ root: string; /** Absolute path of the config file, when there is one. */ configFile?: string; } /** * Frontmatter is validated, not restricted: unknown keys pass through so that a corpus * written for another tool still builds. Only the keys seemore acts on are typed. */ declare const frontmatterSchema: z.ZodObject<{ title: z.ZodOptional; description: z.ZodOptional; icon: z.ZodOptional; order: z.ZodOptional; draft: z.ZodOptional; }, z.core.$loose>; type FrontmatterData = z.output & Record; /** * The file names seemore looks for as a site's config, in the order it tries them. * * Its own module, free of imports, so a host (the editor extension, the desktop app) can * read the list from the package entry without pulling in the loader and its dependencies. */ declare const CONFIG_NAMES: readonly string[]; export { CONFIG_NAMES, type Feature, type FeatureFlag, type FeatureMap, type FrontmatterData, type NavItem, type ResolvedSeemoreConfig, type SearchConfig, type SeemoreConfig, type Theme };