framework7io/framework7 · error · Error
Unsupported variant: ${variant}
Error message
Unsupported variant: ${variant} What it means
`getPrimaryPalette` maps each supported Variant (CONTENT, FIDELITY, VIBRANT, EXPRESSIVE, etc.) to a TonalPalette construction. Any variant value outside the switch cases falls to `default` and throws this error. It signals that an unrecognized or unsupported Variant enum value was passed into palette construction.
Source
Thrown at src/core/shared/material-color-utils.js:2400
return TonalPalette.fromHueAndChroma(sourceColorHct.hue, 0);
case Variant.NEUTRAL:
return TonalPalette.fromHueAndChroma(sourceColorHct.hue, 12);
case Variant.RAINBOW:
return TonalPalette.fromHueAndChroma(sourceColorHct.hue, 48);
case Variant.TONAL_SPOT:
return TonalPalette.fromHueAndChroma(sourceColorHct.hue, 36);
case Variant.EXPRESSIVE:
return TonalPalette.fromHueAndChroma(sanitizeDegreesDouble(sourceColorHct.hue + 240), 40);
case Variant.VIBRANT:
return TonalPalette.fromHueAndChroma(sourceColorHct.hue, 200);
default:
throw new Error(`Unsupported variant: ${variant}`);
}
}
getSecondaryPalette(variant, sourceColorHct, isDark, platform, contrastLevel) {
switch (variant) {
case Variant.CONTENT:
case Variant.FIDELITY:
return TonalPalette.fromHueAndChroma(sourceColorHct.hue, Math.max(sourceColorHct.chroma - 32, .5 * sourceColorHct.chroma));
case Variant.FRUIT_SALAD:
return TonalPalette.fromHueAndChroma(sanitizeDegreesDouble(sourceColorHct.hue - 50), 36);
case Variant.MONOCHROME:
return TonalPalette.fromHueAndChroma(sourceColorHct.hue, 0);
case Variant.NEUTRAL:
return TonalPalette.fromHueAndChroma(sourceColorHct.hue, 8);
case Variant.RAINBOW:View on GitHub (pinned to 6557591266)
Solutions
- Log/inspect the incoming variant value and map it to a valid Variant enum member before calling.
- Use `Variant.VIBRANT` or another documented Variant constant instead of raw numbers/strings.
- If a 2025-only variant is needed, ensure the 2025 palette delegate/scheme is used rather than the 2021 one.
- Add a default fallback variant when parsing user-supplied theme config.
Example fix
// before const palette = getPrimaryPalette(theme.variant, hct, dark, platform, contrast); // theme.variant = 'vibrant' (string) // after const variant = Variant[theme.variant] ?? Variant.TONAL_SPOT; // coerce to enum with fallback const palette = getPrimaryPalette(variant, hct, dark, platform, contrast);
Defensive patterns
Strategy: validation
Validate before calling
const VALID_VARIANTS = new Set(Object.values(Variant));
function assertValidVariant(v) {
if (!VALID_VARIANTS.has(v)) throw new RangeError(`variant must be a Variant enum value, got ${v}`);
}
assertValidVariant(variant); // before getPrimaryPalette Type guard
const isValidVariant = (v) => v != null && Object.values(Variant).includes(v);
Try / catch
let palette;
try {
palette = getPrimaryPalette(variant, hct, dark, platform, contrast);
} catch (e) {
if (e.message.startsWith('Unsupported variant')) {
console.warn('Unknown variant, falling back to TONAL_SPOT', variant);
palette = getPrimaryPalette(Variant.TONAL_SPOT, hct, dark, platform, contrast);
} else throw e;
} Prevention
- Always use Variant enum constants, never raw numbers or strings.
- Validate theme config variant fields at parse time.
- When upgrading the library, re-map persisted variant ids against the new enum.
- Default unknown variants to TONAL_SPOT at the config boundary.
When it happens
Trigger: Calling `getPrimaryPalette(variant, ...)` (directly or via a DynamicScheme) with a variant not handled by the switch — e.g. an out-of-range number, undefined/null, or a 2025-only variant like EXPRESSIVE/VIBRANT passed where unsupported.
Common situations: Typo'd or hand-rolled variant constants; deserializing a saved theme whose variant enum value changed between library versions; forwarding user config into DynamicScheme without validating the variant.
Understand the failure class
Background: Invalid enum value errors: "Unknown type", "Invalid scope", "must be one of" — when a string is not on the library's allowed list — this error's family across 23 libraries.
Related errors
AI-assisted analysis of framework7io/framework7@6557591266 (2026-09-02).
Data as JSON: /api/errors/86597df52d656c8f.
Report an issue: GitHub.