export type ThemeMode = 'light' | 'dark';
export type BorderRadiusSize = 'none' | 'small' | 'medium' | 'large' | 'xlarge' | 'xxlarge';
export type ItemPaletteKey = 'neutral' | 'ocean' | 'forest' | 'sunset' | 'lavender' | 'rose';
export interface ItemPaletteColors {
    light: string;
    medium: string;
    dark: string;
    border: string;
}
export interface BorderRadiusConfig {
    card: BorderRadiusSize;
    button: BorderRadiusSize;
    badge: BorderRadiusSize;
    input: BorderRadiusSize;
    modal: BorderRadiusSize;
    menuItem: BorderRadiusSize;
}
export interface ColorShades {
    50: string;
    100: string;
    200: string;
    300: string;
    400: string;
    500: string;
    600: string;
    700: string;
    800: string;
    900: string;
    950: string;
}
export interface StatusColor {
    bg: string;
    text: string;
    border: string;
    dot: string;
}
export interface BackgroundColors {
    app: string;
    primary: string;
    secondary: string;
    tertiary: string;
    card: string;
    hover: string;
    active: string;
}
export interface TextColors {
    primary: string;
    secondary: string;
    tertiary: string;
    muted: string;
    inverse: string;
}
export interface BorderColors {
    default: string;
    subtle: string;
    strong: string;
}
export interface StatusColors {
    success: StatusColor;
    warning: StatusColor;
    error: StatusColor;
    info: StatusColor;
}
export interface AccentColors {
    bg: string;
    text: string;
    border: string;
}
export interface ColorPalette {
    name: string;
    primary: ColorShades;
    accent: ColorShades;
    backgrounds: BackgroundColors;
    text: TextColors;
    border: BorderColors;
    status: StatusColors;
    accentTransparent: AccentColors;
}
export type BackgroundMode = 'default' | 'uniform' | 'intensity' | 'tinted' | 'custom';
export type BackgroundIntensity = 'crisp' | 'neutral' | 'muted';
/**
 * Optional per-theme override for the 4 background slots (app / primary / secondary / card).
 * When absent, the mode's default palette backgrounds are used (legacy behavior).
 */
export interface BackgroundOverride {
    mode: BackgroundMode;
    /** Single flat color applied to all 4 slots (mode = 'uniform'). */
    uniform?: string;
    /** Preset intensity shift (mode = 'intensity'). */
    intensity?: BackgroundIntensity;
    /** Accent blend ratio 0..1 (mode = 'tinted'). */
    tint?: number;
    /** Optional hex color used as the tint source (mode = 'tinted'). When absent,
     *  the theme's accent color is used as a fallback. */
    tintColor?: string;
    /** Explicit colors per slot (mode = 'custom'). */
    custom?: {
        app: string;
        primary: string;
        secondary: string;
        card: string;
    };
}
export interface ThemeConfig {
    mode: ThemeMode;
    borderRadius: BorderRadiusConfig;
    colors: {
        light: ColorPalette;
        dark: ColorPalette;
    };
    accentColorKey: string;
    itemPaletteKey: ItemPaletteKey;
    backgroundOverride?: BackgroundOverride | null;
}
export interface ThemePreset {
    id: string;
    name: string;
    description: string;
    icon: string;
    config: Partial<ThemeConfig>;
}
export declare const BORDER_RADIUS_VALUES: Record<BorderRadiusSize, string>;
export declare const BORDER_RADIUS_LABELS: Record<BorderRadiusSize, string>;
export declare const ITEM_PALETTE_LABELS: Record<ItemPaletteKey, string>;
export type UiThemeScope = 'Platform' | 'Tenant';
/**
 * Data-visualisation palette — dedicated to dashboards, KPI cards and charts. Kept separate
 * from the UI accent and the status colours so dashboards have their own semantic without
 * detourning success/warning/error/info tokens.
 *
 * - `surface` / `surfaceElevated`: KPI card and chart backgrounds (typically neutral).
 * - `accent`: identification colour for primary KPIs (may differ from the UI accent).
 * - `trendUp` / `trendDown` / `trendNeutral`: KPI change indicators. ALWAYS pair with an
 *   icon (↑↓→) — colour alone is not WCAG 1.4.1 compliant.
 * - `categorical`: 8 ordered colours for chart series. Order is significant — series N
 *   always renders with `categorical[N % 8]`. Colourblind-safe by default.
 * - `sequential`: 3 stops for heatmaps / intensity gradients.
 */
export interface DataVizColors {
    surface: string;
    surfaceElevated: string;
    accent: string;
    trendUp: string;
    trendDown: string;
    trendNeutral: string;
    categorical: string[];
    sequential: {
        low: string;
        mid: string;
        high: string;
    };
}
/** Single triplet (bg / text / border) consumed by category badges. */
export interface CategoryColor {
    bg: string;
    text: string;
    border: string;
}
/**
 * Category palette — semantic slots for role categories, application badges and
 * other taxonomic UI elements. Distinct from status tokens so badges don't
 * inherit the alert semantics of `--info-*` / `--success-*` / etc.
 *
 * The 6 keys mirror the `RoleCategory` enum in the backend. New categories
 * (e.g. for `NavigationApplication`) can be added as the model grows.
 */
export interface CategoryColors {
    global: CategoryColor;
    admin: CategoryColor;
    manager: CategoryColor;
    contributor: CategoryColor;
    viewer: CategoryColor;
    custom: CategoryColor;
}
/** Structural theme — defines the visual foundations (bg, text, border, status). */
export interface UiTheme {
    id: string;
    name: string;
    description: string | null;
    icon: string | null;
    scope: UiThemeScope;
    tenantId: string | null;
    isBuiltin: boolean;
    isDisabled: boolean;
    /** Visibility flag. True = visible to all tenants; false = restricted to tenants
     *  listed in the publication table (managed by the Access tab). Built-ins are always public. */
    isPublic: boolean;
    sortOrder: number;
    /** Raw JSON strings — parse on demand. */
    backgroundsJson: string;
    textColorsJson: string;
    borderColorsJson: string;
    statusColorsJson: string;
    /** JSON shape: see {@link DataVizColors}. Always present (defaults to "{}"). */
    dataVizColorsJson: string;
    /** JSON shape: see {@link CategoryColors}. Always present (defaults to "{}"). */
    categoryColorsJson: string;
    defaultTypographyJson: string;
    defaultBorderRadiusJson: string;
    defaultItemPaletteKey: string;
    defaultAccentColorKey: string;
    /** JSON snapshot of the seed inputs from the "Generate from..." card. Null if the
     *  user never used the generator. Shape: { accent, background?, text?, prefersDark }. */
    generatorSeedJson: string | null;
    /** Optional per-theme branding overrides (null = fall back to tenant/platform). */
    logoUrl: string | null;
    faviconUrl: string | null;
    logoWidth: number | null;
    logoHeight: number | null;
    faviconWidth: number | null;
    faviconHeight: number | null;
}
/** Stylistic preset — belongs to a parent UiTheme, overrides accent + optionally everything else. */
export interface UiPreset {
    id: string;
    themeId: string;
    scope: UiThemeScope;
    tenantId: string | null;
    name: string;
    description: string | null;
    icon: string | null;
    isBuiltin: boolean;
    isDisabled: boolean;
    sortOrder: number;
    accentColorKey: string;
    itemPaletteKey: string | null;
    typographyJson: string | null;
    borderRadiusJson: string | null;
    backgroundOverrideJson: string | null;
    /** Null = inherit parent theme's data-viz palette. When set (full or partial JSON of
     *  {@link DataVizColors}), each key overrides the parent value. */
    dataVizColorsJson: string | null;
    /** Null = inherit parent theme's category palette. When set (full or partial JSON of
     *  {@link CategoryColors}), each key overrides the parent value. */
    categoryColorsJson: string | null;
}
/** Permissions in effect for the current user (cascade Platform -> Tenant). */
export interface UserUiPermissions {
    canUsersChangeTheme: boolean;
    canUsersChangePreset: boolean;
    canUsersCreatePresets: boolean;
    /** null = all themes allowed. */
    allowedThemeIds: string[] | null;
    /** null = all presets allowed. */
    allowedPresetIds: string[] | null;
    allowUserCustomization: boolean;
}
/** Fully-resolved effective configuration for the current user/tenant. */
export interface EffectiveThemeConfig {
    logoUrl: string | null;
    faviconUrl: string | null;
    displayName: string;
    selectedTheme: UiTheme;
    selectedPreset: UiPreset | null;
    availableThemes: UiTheme[];
    availablePresets: UiPreset[];
    permissions: UserUiPermissions;
    customAccentColors: Array<{
        key: string;
        name: string;
        baseHex: string;
    }>;
}
//# sourceMappingURL=theme.d.ts.map