@loworbitstudio/visor-theme-engine 0.18.0 → 0.20.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.ts CHANGED
@@ -1,5 +1,5 @@
1
- import { F as FontResolveOptions, a as FontResolution, V as VisorTypography, b as FontDisplayStrategy, T as ThemeFontResult, G as GoogleFontEntry, c as VisorBrand, B as BrandSlot, d as BrandSource, e as BrandResolution, C as ColorScheme, f as ThemeBrandResult, g as BrandStrategy, h as BrandStrategyContext, i as BrandStrategyIssue, j as BrandStrategyValidationResult, S as SerializedBrandStrategy, R as ResolvedThemeConfig, k as GeneratedPrimitives, l as ThemeOutput, m as ThemeData, n as VisorThemeConfig, o as FullShadeScale, p as ColorRole, q as SelectiveShadeScale, r as RGB, P as ParsedColor, O as OKLCH, s as SemanticTokens, t as ShadeStep } from './types-Cvm7vFwe.js';
2
- export { u as BRAND_VARIANTS, v as BRAND_VISIBILITIES, w as BrandAccessibility, x as BrandArchetype, y as BrandBoilerplate, z as BrandColorPairing, A as BrandColorUsage, D as BrandContrastTarget, E as BrandGoverns, H as BrandLexiconEntry, I as BrandMessaging, J as BrandPersonalityTrait, K as BrandPillar, L as BrandPositioning, M as BrandStrategyIssueSeverity, N as BrandToneEntry, Q as BrandVariant, U as BrandVisibility, W as BrandVoice, X as BrandVoiceTrait, Y as ColorFormat, Z as DEFAULT_BRAND_STRATEGY_SURFACES, _ as DEFAULT_BRAND_STRATEGY_TONE_STATES, $ as FontSource, a0 as GOVERNS_WILDCARD, a1 as RGBA, a2 as SemanticTokenValue } from './types-Cvm7vFwe.js';
1
+ import { F as FontResolveOptions, a as FontResolution, V as VisorTypography, b as FontDisplayStrategy, T as ThemeFontResult, G as GoogleFontEntry, c as VisorBrand, B as BrandSlot, d as BrandSource, e as BrandResolution, C as ColorScheme, f as ThemeBrandResult, g as BrandStrategy, h as BrandStrategyContext, i as BrandStrategyIssue, j as BrandStrategyValidationResult, S as SerializedBrandStrategy, R as ResolvedThemeConfig, k as GeneratedPrimitives, l as ThemeOutput, m as ThemeData, n as VisorThemeConfig, o as FullShadeScale, p as ColorRole, q as SelectiveShadeScale, r as RGB, P as ParsedColor, O as OKLCH, s as SemanticTokens, t as ShadeStep } from './types-BG-YT4JW.js';
2
+ export { u as BRAND_VARIANTS, v as BRAND_VISIBILITIES, w as BrandAccessibility, x as BrandArchetype, y as BrandBoilerplate, z as BrandColorPairing, A as BrandColorUsage, D as BrandContrastTarget, E as BrandGoverns, H as BrandLexiconEntry, I as BrandMessaging, J as BrandPersonalityTrait, K as BrandPillar, L as BrandPositioning, M as BrandStrategyIssueSeverity, N as BrandToneEntry, Q as BrandVariant, U as BrandVisibility, W as BrandVoice, X as BrandVoiceTrait, Y as COMPONENT_TOKEN_FAMILIES, Z as COMPONENT_TOKEN_FAMILY_BY_NAME, _ as ColorFormat, $ as ComponentTokenBinding, a0 as ComponentTokenBindings, a1 as ComponentTokenConsumer, a2 as ComponentTokenFamily, a3 as ComponentTokenSpec, a4 as DEFAULT_BRAND_STRATEGY_SURFACES, a5 as DEFAULT_BRAND_STRATEGY_TONE_STATES, a6 as FontSource, a7 as GOVERNS_WILDCARD, a8 as RGBA, a9 as ResolvedComponentTokens, aa as SemanticTokenValue, ab as allComponentTokenNames, ac as componentTokenName, ad as hasComponentBindings, ae as resolveComponentBindings, af as validateComponentBindings } from './types-BG-YT4JW.js';
3
3
 
4
4
  /**
5
5
  * Font resolver — maps font family names to loadable font resources.
@@ -585,7 +585,7 @@ var properties = {
585
585
  },
586
586
  scale: {
587
587
  type: "number",
588
- description: "Type scale multiplier applied to the font-size ramp. Default: 1."
588
+ description: "Type scale multiplier applied to the font-size ramp: every --font-size-* step is multiplied by it, and the page inherits the scaled --font-size-base. Default: 1. CSS adapters only — the Flutter adapter emits Material 3 slot sizes verbatim and ignores this field."
589
589
  },
590
590
  "text-on-light": {
591
591
  type: "string",
@@ -1025,6 +1025,125 @@ var properties = {
1025
1025
  }
1026
1026
  }
1027
1027
  },
1028
+ components: {
1029
+ type: "object",
1030
+ description: "Component-scoped theme bindings for the admin-UI families (VI-625). Keyed by family, then by token key; the value is a string (both modes) or { light, dark }. Every token falls back to its Tier-1 expression, so omitting this block renders exactly as before. Key names are validated against the contract in component-tokens.ts.",
1031
+ additionalProperties: false,
1032
+ properties: {
1033
+ table: {
1034
+ type: "object",
1035
+ description: "Table head, row and cell treatment. The retro measured the same header cell rendered four ways across one admin app; binding this family pins it once. Keys: font-size, text-color, head-height, head-padding-x, head-font-family, head-font-size, head-font-weight, head-letter-spacing, head-text-transform, head-color, head-bg, row-border, row-hover-bg, row-selected-bg, cell-padding, cell-font-size, cell-color, cell-bg, cell-border-top, footer-bg, caption-color.",
1036
+ additionalProperties: {
1037
+ $ref: "#/$defs/componentTokenBinding"
1038
+ }
1039
+ },
1040
+ "data-table": {
1041
+ type: "object",
1042
+ description: "The admin-ui Tier-2 data-table surface stack (D3). Shared between the Table primitive and the DataTable shell so a list page and its table read as one surface. Keys: header-bg, row-bg, container-radius, container-shadow, row-py, cell-px, header-font-size.",
1043
+ additionalProperties: {
1044
+ $ref: "#/$defs/componentTokenBinding"
1045
+ }
1046
+ },
1047
+ chip: {
1048
+ type: "object",
1049
+ description: "Chip / filter-pill treatment. The retro found the same mono status chip at 8.5 / 9 / 9.5 / 10 / 11px with tracking .03–.14em across nine implementations; this family is the single dial. Keys: radius, border, bg, text-color, font-family, font-weight, letter-spacing, text-transform, sm-height, sm-padding-x, sm-font-size, md-height, md-padding-x, md-font-size, lg-height, lg-padding-x, lg-font-size, selected-bg, selected-border-color, selected-text-color.",
1050
+ additionalProperties: {
1051
+ $ref: "#/$defs/componentTokenBinding"
1052
+ }
1053
+ },
1054
+ badge: {
1055
+ type: "object",
1056
+ description: "Badge treatment — the D3 Tier-2 `--badge-text-transform` / `-letter-spacing` / `-font-size` / `-font-weight` set, promoted from the admin-ui audit to a bindable contract. Keys: radius, border, font-family, font-weight, text-transform, letter-spacing, font-size, md-padding, md-gap.",
1057
+ additionalProperties: {
1058
+ $ref: "#/$defs/componentTokenBinding"
1059
+ }
1060
+ },
1061
+ "status-badge": {
1062
+ type: "object",
1063
+ description: "Status-badge indicator dot and the mono readout label. Chrome is inherited from the Badge family. Keys: dot-size, dot-radius, mono-font-family, mono-font-size, mono-letter-spacing.",
1064
+ additionalProperties: {
1065
+ $ref: "#/$defs/componentTokenBinding"
1066
+ }
1067
+ },
1068
+ "filter-bar": {
1069
+ type: "object",
1070
+ description: "The operator's named case: \"the filter bar above the table in many admin pages was pretty different from one to the next; that should be streamlined.\" Keys: bg, border, radius, padding, gap, text-color, dense-padding, dense-gap, control-radius, results-font-size, results-color.",
1071
+ additionalProperties: {
1072
+ $ref: "#/$defs/componentTokenBinding"
1073
+ }
1074
+ },
1075
+ "page-header": {
1076
+ type: "object",
1077
+ description: "Page-header lockup. The retro found the page title rendered five ways across one app. Keys: gap, text-color, leading-gap, eyebrow-font-size, eyebrow-font-weight, eyebrow-letter-spacing, eyebrow-text-transform, eyebrow-color, title-family, title-size, title-leading, title-font-size, title-font-weight, title-letter-spacing, title-color, description-font-size, description-color, actions-gap.",
1078
+ additionalProperties: {
1079
+ $ref: "#/$defs/componentTokenBinding"
1080
+ }
1081
+ },
1082
+ "empty-state": {
1083
+ type: "object",
1084
+ description: "Empty-state placard — surface, icon chip and copy scale. Keys: radius, text-color, gap, padding, bg, border, icon-size, icon-radius, icon-bg, icon-color, heading-font-family, heading-font-size, heading-font-weight, heading-color, description-font-size, description-color, actions-gap.",
1085
+ additionalProperties: {
1086
+ $ref: "#/$defs/componentTokenBinding"
1087
+ }
1088
+ },
1089
+ banner: {
1090
+ type: "object",
1091
+ description: "Full-width notice bar. The retro found six separate banner systems across ~180 instances in one app; binding this family collapses them to one. Keys: padding, gap, font-size, radius, border-width, shadow, title-font-weight, description-font-size, info-bg, info-text-color, info-border-color, warning-bg, warning-text-color, warning-border-color, error-bg, error-text-color, error-border-color, success-bg, success-text-color, success-border-color.",
1092
+ additionalProperties: {
1093
+ $ref: "#/$defs/componentTokenBinding"
1094
+ }
1095
+ },
1096
+ sidebar: {
1097
+ type: "object",
1098
+ description: "Sidebar chrome and nav-item treatment. The palette roles (`bg`, `text`, `border`, `accent-*`) already ship defaults from visor-core's `visor-semantic` layer and are read bare; the structural roles below are new in VI-625. Keys: bg, text, text-muted, border, accent-bg, accent-text, header-padding, footer-padding, content-padding, menu-gap, group-label-height, group-label-font-size, group-label-font-weight, group-label-letter-spacing, group-label-text-transform, item-radius, item-gap, item-font-size, item-font-weight, item-letter-spacing, item-text-transform, item-height, item-padding, item-active-font-weight.",
1099
+ additionalProperties: {
1100
+ $ref: "#/$defs/componentTokenBinding"
1101
+ }
1102
+ },
1103
+ tabs: {
1104
+ type: "object",
1105
+ description: "Tab rail and trigger treatment, for both the segmented (`default`) and underlined (`line`) variants. Keys: list-radius, list-height, list-padding, list-color, list-bg, line-border-bottom, trigger-radius, trigger-padding, trigger-font-size, trigger-font-weight, trigger-letter-spacing, trigger-text-transform, trigger-color, trigger-active-bg, trigger-active-color, trigger-active-shadow, indicator-height, indicator-color.",
1106
+ additionalProperties: {
1107
+ $ref: "#/$defs/componentTokenBinding"
1108
+ }
1109
+ },
1110
+ skeleton: {
1111
+ type: "object",
1112
+ description: "Loading-placeholder shimmer and the content-shape geometry the admin list/table/detail skeletons use. Keys: from, to, radius, duration, logo-width, logo-height, pill-width, pill-height, line-h1-height, line-heading-height, line-body-height, avatar-size, avatar-lg-size, badge-width, badge-height, row-gap, row-padding, row-border-bottom.",
1113
+ additionalProperties: {
1114
+ $ref: "#/$defs/componentTokenBinding"
1115
+ }
1116
+ },
1117
+ spinner: {
1118
+ type: "object",
1119
+ description: "Inline loading ring — track, leading edge, per-size geometry and cycle length. Keys: track-color, edge-color, primary-edge-color, radius, duration, xs-size, xs-border-width, sm-size, sm-border-width, md-size, md-border-width.",
1120
+ additionalProperties: {
1121
+ $ref: "#/$defs/componentTokenBinding"
1122
+ }
1123
+ },
1124
+ checkbox: {
1125
+ type: "object",
1126
+ description: "Control sizing — the D3 Tier-2 `--checkbox-size` / `-radius` / `-bg` / `-border` set, promoted from the admin-ui audit to a bindable contract. Keys: size, radius, bg, border, bg-checked, border-checked.",
1127
+ additionalProperties: {
1128
+ $ref: "#/$defs/componentTokenBinding"
1129
+ }
1130
+ },
1131
+ surface: {
1132
+ type: "object",
1133
+ description: "The D3 Tier-2 surface-scale extremes. `elev` is the elevated control tier the chip family already reads; `screen` is the deepest chrome tier consumed by admin pattern shells (`design-prototypes/admin-ui/tokens.css`) rather than by a Visor component. Keys: elev, screen.",
1134
+ additionalProperties: {
1135
+ $ref: "#/$defs/componentTokenBinding"
1136
+ }
1137
+ },
1138
+ "admin-ui": {
1139
+ type: "object",
1140
+ description: "Structural roles the admin-ui pattern owns. `marquee-family` is the display face for KPI hero figures and marquee page titles — the role the admin-ui portability audit named as the one piece of ENTR brand coupling a new theme must rebind. Keys: marquee-family.",
1141
+ additionalProperties: {
1142
+ $ref: "#/$defs/componentTokenBinding"
1143
+ }
1144
+ }
1145
+ }
1146
+ },
1028
1147
  migrate: {
1029
1148
  type: "object",
1030
1149
  description: "Migration metadata consumed by `visor migrate` commands. Does not affect CSS generation or theme application.",
@@ -1041,6 +1160,26 @@ var properties = {
1041
1160
  }
1042
1161
  };
1043
1162
  var $defs = {
1163
+ componentTokenBinding: {
1164
+ description: "A component-token binding: one string for both modes, or per-mode values.",
1165
+ oneOf: [
1166
+ {
1167
+ type: "string"
1168
+ },
1169
+ {
1170
+ type: "object",
1171
+ additionalProperties: false,
1172
+ properties: {
1173
+ light: {
1174
+ type: "string"
1175
+ },
1176
+ dark: {
1177
+ type: "string"
1178
+ }
1179
+ }
1180
+ }
1181
+ ]
1182
+ },
1044
1183
  cssColor: {
1045
1184
  type: "string",
1046
1185
  description: "CSS color value. Accepts hex (#RGB, #RRGGBB, #RRGGBBAA), rgb()/rgba(), hsl()/hsla(), or oklch() formats.",
@@ -1783,6 +1922,135 @@ declare function generateDarkCss(tokens: SemanticTokens, options?: {
1783
1922
  }): string;
1784
1923
  declare function generateFullBundleCss(primitives: GeneratedPrimitives, tokens: SemanticTokens, config: ResolvedThemeConfig): string;
1785
1924
 
1925
+ /**
1926
+ * Font-weight resolution (VI-639).
1927
+ *
1928
+ * The named weight ramp used to be three literals and one role leak:
1929
+ *
1930
+ * ```
1931
+ * --font-weight-normal: <body.weight>
1932
+ * --font-weight-medium: 500 // literal
1933
+ * --font-weight-semibold: <heading.weight> // a different concept entirely
1934
+ * --font-weight-bold: 700 // literal
1935
+ * ```
1936
+ *
1937
+ * `semibold` is not a heading. Pinning it there collapsed it onto `medium` on
1938
+ * every theme whose heading weight is 500 (the Blacklight family), onto
1939
+ * `normal` where it is 400 (knowmentum), and inverted the ramp where it is
1940
+ * above `bold` (strata emitted `semibold: 800` over `bold: 700`). Meanwhile the
1941
+ * literals ignored the `weights` array a theme actually loaded, so a theme
1942
+ * declaring `[200, 400, 600, 900]` got tokens pointing at faces it never
1943
+ * fetched — which the browser then silently substituted.
1944
+ *
1945
+ * Resolution here follows the CSS font-matching algorithm's weight-selection
1946
+ * order (CSS Fonts 4 §5.2) rather than naive nearest-numeric. The browser is
1947
+ * already performing exactly this substitution at render time, so an emitted
1948
+ * token becomes the weight that was *already rendering* — which is what makes
1949
+ * this change visually neutral everywhere except where the token was wrong.
1950
+ */
1951
+ /** Canonical targets for the named ramp above `normal`. */
1952
+ declare const WEIGHT_RAMP_TARGETS: {
1953
+ readonly medium: 500;
1954
+ readonly semibold: 600;
1955
+ readonly bold: 700;
1956
+ };
1957
+ /** The typography slots that can declare a family, weight and weights array. */
1958
+ declare const SLOTS: readonly ["heading", "display", "body", "mono"];
1959
+ type WeightedSlot = {
1960
+ weight?: number;
1961
+ weights?: number[];
1962
+ } | undefined;
1963
+ type SlottedTypography = Partial<Record<(typeof SLOTS)[number], WeightedSlot>>;
1964
+ /**
1965
+ * The weights a theme actually loads: each slot's explicit `weights` array, or
1966
+ * its single `weight` when it declares none — mirroring how the font pipeline
1967
+ * resolves the set it fetches.
1968
+ */
1969
+ declare function loadedWeights(typography: SlottedTypography): number[];
1970
+ /**
1971
+ * Whether any slot declares an explicit `weights` array.
1972
+ *
1973
+ * Resolution is gated on this. A theme that declares one has told us what it
1974
+ * loads, so we can hold every emitted token to that set. A theme that hasn't
1975
+ * keeps the historical emission untouched — snapping against a set inferred
1976
+ * from three `weight` fields would move tokens on a claim the theme never made
1977
+ * (and says nothing at all about a system font stack, which has whatever the OS
1978
+ * has). `validateFontWeights` warns about those instead.
1979
+ */
1980
+ declare function declaresWeights(typography: SlottedTypography): boolean;
1981
+ /**
1982
+ * Pick the weight a browser would actually use for `desired`, given the faces
1983
+ * the theme loaded — CSS Fonts 4 §5.2 weight-matching order:
1984
+ *
1985
+ * - exact match wins;
1986
+ * - desired 400–500: heavier faces up to 500 ascending, then lighter descending,
1987
+ * then heavier than 500 ascending;
1988
+ * - desired below 400: lighter descending, then heavier ascending;
1989
+ * - desired above 500: heavier ascending, then lighter descending.
1990
+ *
1991
+ * Returns `desired` unchanged when the theme loads nothing (nothing to match
1992
+ * against, and the system font has its own ideas).
1993
+ */
1994
+ declare function matchLoadedWeight(desired: number, loaded: readonly number[]): number;
1995
+ /** The four named ramp steps a theme emits, resolved against what it loaded. */
1996
+ interface ResolvedWeightRamp {
1997
+ normal: number;
1998
+ medium: number;
1999
+ semibold: number;
2000
+ bold: number;
2001
+ }
2002
+ /**
2003
+ * Resolve the named ramp.
2004
+ *
2005
+ * `normal` tracks the theme's body weight rather than a hard 400 — it is the
2006
+ * ramp's zero point, and Blacklight's `body.weight: 300` is a deliberate
2007
+ * choice, not a rounding error. It is still coerced to a loaded face (strata
2008
+ * declares `body.weight: 450` and loads `[400, 700, 900]`).
2009
+ *
2010
+ * `medium / semibold / bold` resolve the canonical 500 / 600 / 700 targets.
2011
+ * Names can still share a value on a family that cannot separate them — two
2012
+ * loaded faces cannot back four distinct names — but the result is now the
2013
+ * truth about what renders rather than a number nothing will honour.
2014
+ */
2015
+ declare function resolveWeightRamp(typography: SlottedTypography & {
2016
+ body?: WeightedSlot;
2017
+ }): ResolvedWeightRamp;
2018
+ /**
2019
+ * Resolve a role weight (`--weight-heading`, `--weight-body`,
2020
+ * `--weight-display`) to a loaded face. Roles carry theme intent — what this
2021
+ * theme's headings weigh — and are the channel components should read when they
2022
+ * mean "the heading weight" rather than "a step above medium".
2023
+ */
2024
+ declare function resolveRoleWeight(declared: number, typography: SlottedTypography): number;
2025
+ /**
2026
+ * Emit the shared weight declarations: the named ramp, the role tokens, and the
2027
+ * discrete ladder.
2028
+ *
2029
+ * The ladder (`--font-weight-300` … `--font-weight-800`, one per loaded face)
2030
+ * is what makes the `weights` array authoritative instead of decorative. Before
2031
+ * it, a theme could load five faces and reach four of them by name at best —
2032
+ * Blacklight's 800 was unreachable from CSS, so BL-987 had to write a literal.
2033
+ * It follows the `--text-N` / `--space-N` discrete-alias precedent from VI-451.
2034
+ */
2035
+ declare function generateFontWeightDecls(typography: {
2036
+ heading: {
2037
+ weight: number;
2038
+ weights?: number[];
2039
+ };
2040
+ display: {
2041
+ weight: number;
2042
+ weights?: number[];
2043
+ };
2044
+ body: {
2045
+ weight: number;
2046
+ weights?: number[];
2047
+ };
2048
+ mono: {
2049
+ weight?: number;
2050
+ weights?: number[];
2051
+ };
2052
+ }): string[];
2053
+
1786
2054
  /**
1787
2055
  * Theme Extraction Engine
1788
2056
  *
@@ -1858,4 +2126,4 @@ declare function cleanFontValue(val: string): string;
1858
2126
  */
1859
2127
  declare function extractFromCSS(files: CSSFile[], name?: string): ExtractionResult;
1860
2128
 
1861
- export { type BrandPassthrough, BrandResolution, BrandSlot, BrandSource, BrandStrategy, BrandStrategyContext, BrandStrategyIssue, BrandStrategyValidationResult, type CSSFile, ColorRole, type Confidence, DEFAULT_VISOR_BRAND, type ExtractedToken, type ExtractionResult, FONT_WEIGHT_ALIASES, type FontCoverageError, type FontCoverageResult, FontDisplayStrategy, type FontFaceDeclaration, FontResolution, FontResolveOptions, FullShadeScale, GeneratedPrimitives, GoogleFontEntry, OKLCH, ParsedColor, RGB, ResolvedThemeConfig, SEMANTIC_MAP, SelectiveShadeScale, SemanticTokens, SerializedBrandStrategy, ShadeStep, TAILWIND_GRAY, ThemeBrandResult, ThemeData, ThemeFontResult, ThemeOutput, type ThemeValidationResult, VISOR_BRANDS_CDN, VISOR_DEFAULT_BRAND_PATH, VISOR_FONTS_CDN, type ValidateOptions, type ValidationIssue, type ValidationSeverity, VisorBrand, VisorThemeConfig, VisorTypography, applyOverrides, assignSemanticTokens, buildVisorBrandUrl, buildVisorFontUrl, checkBrandStrategyCoherence, checkBrandStrategyStructure, clampToSrgb, cleanFontValue, collectBrandPassthrough, compositeOverBackground, exportTheme, extractFromCSS, formatFontCoverageError, generateDarkCss, generateFullBundleCss, generateLightCss, generatePreloadLinks, generatePrimitives, generatePrimitivesCss, generateSemanticCss, generateShadeScale, generateStylesheetLinks, generateTheme, generateThemeData, generateThemeDataFromConfig, generateThemeFromConfig, getContrastRatio, getKnownTokenRefs, getLuminance, googleFontsCatalog, hasBrandPassthrough, hexToOklch, hexToRgb, isValidColor, isValidHex, isVisorThemeConfig, lookupFontWeightAlias, lookupGoogleFont, normalizeHex, oklchToHex, parseCSSDeclarations, parseColor, parseConfig, parseFontFaceDeclarations, parseHex, parseHsla, parseOklch, parseRgba, resolveBrandSlot, resolveBrandSource, resolveConfig, resolveFont, resolveThemeBrand, resolveThemeFonts, rgbToHex, serializeBrandStrategy, serializeColor, validate, validateBrandStrategy, validateConfig, validateFontCoverage, visorTheme_schema as visorThemeSchema };
2129
+ export { type BrandPassthrough, BrandResolution, BrandSlot, BrandSource, BrandStrategy, BrandStrategyContext, BrandStrategyIssue, BrandStrategyValidationResult, type CSSFile, ColorRole, type Confidence, DEFAULT_VISOR_BRAND, type ExtractedToken, type ExtractionResult, FONT_WEIGHT_ALIASES, type FontCoverageError, type FontCoverageResult, FontDisplayStrategy, type FontFaceDeclaration, FontResolution, FontResolveOptions, FullShadeScale, GeneratedPrimitives, GoogleFontEntry, OKLCH, ParsedColor, RGB, ResolvedThemeConfig, type ResolvedWeightRamp, SEMANTIC_MAP, SelectiveShadeScale, SemanticTokens, SerializedBrandStrategy, ShadeStep, TAILWIND_GRAY, ThemeBrandResult, ThemeData, ThemeFontResult, ThemeOutput, type ThemeValidationResult, VISOR_BRANDS_CDN, VISOR_DEFAULT_BRAND_PATH, VISOR_FONTS_CDN, type ValidateOptions, type ValidationIssue, type ValidationSeverity, VisorBrand, VisorThemeConfig, VisorTypography, WEIGHT_RAMP_TARGETS, applyOverrides, assignSemanticTokens, buildVisorBrandUrl, buildVisorFontUrl, checkBrandStrategyCoherence, checkBrandStrategyStructure, clampToSrgb, cleanFontValue, collectBrandPassthrough, compositeOverBackground, declaresWeights, exportTheme, extractFromCSS, formatFontCoverageError, generateDarkCss, generateFontWeightDecls, generateFullBundleCss, generateLightCss, generatePreloadLinks, generatePrimitives, generatePrimitivesCss, generateSemanticCss, generateShadeScale, generateStylesheetLinks, generateTheme, generateThemeData, generateThemeDataFromConfig, generateThemeFromConfig, getContrastRatio, getKnownTokenRefs, getLuminance, googleFontsCatalog, hasBrandPassthrough, hexToOklch, hexToRgb, isValidColor, isValidHex, isVisorThemeConfig, loadedWeights, lookupFontWeightAlias, lookupGoogleFont, matchLoadedWeight, normalizeHex, oklchToHex, parseCSSDeclarations, parseColor, parseConfig, parseFontFaceDeclarations, parseHex, parseHsla, parseOklch, parseRgba, resolveBrandSlot, resolveBrandSource, resolveConfig, resolveFont, resolveRoleWeight, resolveThemeBrand, resolveThemeFonts, resolveWeightRamp, rgbToHex, serializeBrandStrategy, serializeColor, validate, validateBrandStrategy, validateConfig, validateFontCoverage, visorTheme_schema as visorThemeSchema };