import { CustomProductBrand } from './custom-product-defaults.js';
import { P as Product } from '../app-store-B5t8W1GX.js';
import 'zustand/middleware';
import 'zustand';

/**
 * Product brand registry — single source of truth for wordmark + mark colors.
 *
 * Adding a new product brand:
 *
 * ```ts
 * const exxatPulse = defineProductBrand({
 *   id: "exxat-pulse",
 *   prefix: "Exxat",
 *   suffix: "Pulse",
 *   brandColor: "#00A8E8",
 *   markGradient: ["#0083C7", "#3FC6FF"],
 * })
 * registerProductBrand(exxatPulse)
 * ```
 */

interface ProductBrandConfig {
    /** Stable identifier — matches `Product` for the built-in brands. */
    id: string;
    /** Word before the suffix in the wordmark. Defaults to "Exxat". */
    prefix?: string;
    /**
     * Product suffix — rendered in Ivy Presto italic with `brandColor`.
     * Should read as a single word; the wordmark renders it inline after
     * `prefix` with a small em-based gap.
     */
    suffix: string;
    /**
     * Primary brand color (any CSS color). Drives the suffix text fill and the
     * mark's flat fill. When `markGradient` is provided, the gradient overrides
     * the mark fill but the suffix text still uses `brandColor`.
     */
    brandColor: string;
    /** Optional logo suffix fill when product theme color differs from the logo art. */
    wordmarkColor?: string;
    /** Use the circular Exxat mark + suffix only when the full wordmark would crowd the shell. */
    compactLogo?: boolean;
    /**
     * Optional 2-stop linear gradient for the circular mark. Two CSS color
     * strings — first is the upper-left stop, second is the lower-right stop.
     * Defaults to `[brandColor, brandColor]` (flat fill).
     */
    markGradient?: [string, string];
    /**
     * Darker tone for the inner cut-out behind the "E" glyph on the mark.
     * Defaults to `brandColor` darkened by ~12 % (or you can pass an explicit
     * color for finer control over contrast).
     */
    markShadow?: string;
    /**
     * Optional accessible name override. Defaults to `"${prefix} ${suffix}"`.
     * The wordmark itself stays `aria-hidden`; this name is used by parent
     * affordances (logo links, switcher triggers) via {@link productBrandLabel}.
     */
    label?: string;
}
/** Human-readable label for a brand — used in aria-labels and dropdown copy. */
declare function productBrandLabel(config: ProductBrandConfig): string;
/**
 * Author-friendly factory — same signature as the type, plus runtime
 * normalisation (trims strings, defaults `prefix` to "Exxat").
 */
declare function defineProductBrand(input: ProductBrandConfig): ProductBrandConfig;
declare const EXXAT_ONE_SCHOOLS_BRAND: ProductBrandConfig;
declare const EXXAT_ONE_SITES_BRAND: ProductBrandConfig;
declare const EXXAT_PRISM_BRAND: ProductBrandConfig;
/**
 * Build a `ProductBrandConfig` for the `exxat-custom` slot from the tenant's
 * configured suffix + brand colour.
 */
declare function customProductBrandConfig(customBrand?: CustomProductBrand | null | undefined): ProductBrandConfig;
/** Pale preview surfaces for Settings → Add product (mirrors theme-custom tints). */
declare function brandPreviewPanelSurfaces(brandColor: string, dark: boolean): {
    background: string;
    borderColor: string;
};
/**
 * Apply a per-product brand color override to a base config — only `brandColor`
 * is overridden; wordmark / mark stay pinned to the Exxat brand pink.
 */
declare function applyBrandColorOverride(config: ProductBrandConfig, color: string | undefined | null): ProductBrandConfig;
/** Register a brand. Idempotent — re-registering overrides the existing entry. */
declare function registerProductBrand(config: ProductBrandConfig): void;
/** Look up a brand by id. Returns `undefined` if not registered. */
declare function getProductBrand(id: string): ProductBrandConfig | undefined;
/** All registered brands in insertion order. */
declare function listProductBrands(): ProductBrandConfig[];
/**
 * Convenience helper for the existing `Product` union — resolves to the
 * Exxat-branded config, falling back to {@link EXXAT_PRISM_BRAND}.
 */
declare function brandForProduct(product: Product, customBrand?: CustomProductBrand | null, productBrandColors?: Partial<Record<Product, string>>): ProductBrandConfig;

export { EXXAT_ONE_SCHOOLS_BRAND, EXXAT_ONE_SITES_BRAND, EXXAT_PRISM_BRAND, type ProductBrandConfig, applyBrandColorOverride, brandForProduct, brandPreviewPanelSurfaces, customProductBrandConfig, defineProductBrand, getProductBrand, listProductBrands, productBrandLabel, registerProductBrand };
