framework7io/framework7 · error · Error
`tertiaryDim` color is undefined prior to 2025 spec.
Error message
`tertiaryDim` color is undefined prior to 2025 spec.
What it means
tertiaryDim, like the other *Dim roles, is defined only in the 2025 spec. Accessing it on a scheme built for an earlier spec yields undefined from colors.tertiaryDim() and the getter throws, rather than returning an invalid ARGB.
Source
Thrown at src/core/shared/material-color-utils.js:2326
}
get secondaryFixed() {
return this.getArgb(this.colors.secondaryFixed());
}
get secondaryFixedDim() {
return this.getArgb(this.colors.secondaryFixedDim());
}
get onSecondaryFixed() {
return this.getArgb(this.colors.onSecondaryFixed());
}
get onSecondaryFixedVariant() {
return this.getArgb(this.colors.onSecondaryFixedVariant());
}
get tertiary() {
return this.getArgb(this.colors.tertiary());
}
get tertiaryDim() {
const tertiaryDim = this.colors.tertiaryDim();
if (void 0 === tertiaryDim) throw new Error("`tertiaryDim` color is undefined prior to 2025 spec.");
return this.getArgb(tertiaryDim);
}
get onTertiary() {
return this.getArgb(this.colors.onTertiary());
}
get tertiaryContainer() {
return this.getArgb(this.colors.tertiaryContainer());
}
get onTertiaryContainer() {
return this.getArgb(this.colors.onTertiaryContainer());
}
get tertiaryFixed() {
return this.getArgb(this.colors.tertiaryFixed());
}
get tertiaryFixedDim() {
return this.getArgb(this.colors.tertiaryFixedDim());
}
get onTertiaryFixed() {View on GitHub (pinned to 6557591266)
Solutions
- Construct the scheme with specVersion 2025.
- Guard with a specVersion check and fall back to tertiary for legacy schemes.
- Update the whole color pipeline consistently to the 2025 spec instead of mixing versions.
Example fix
// before
const c = scheme.tertiaryDim; // throws on 2021 scheme
// after
const scheme = new DynamicScheme({ ..., specVersion: SpecVersion.SPEC_2025 });
const c = scheme.tertiaryDim; Defensive patterns
Strategy: type-guard
Validate before calling
if (String(scheme.specVersion).includes('2025')) {
use(scheme.tertiaryDim);
} else {
use(scheme.tertiary);
} Type guard
function supports2025Roles(scheme) {
return scheme && scheme.specVersion === '2025';
} Try / catch
try {
argb = scheme.tertiaryDim;
} catch (err) {
if (err.message.includes('`tertiaryDim` color is undefined')) {
argb = scheme.tertiary;
} else throw err;
} Prevention
- Keep a single util like getRole(scheme, 'tertiaryDim') that handles spec fallbacks.
- Migrate scheme creation and role consumption together when adopting the 2025 spec.
- Assert specVersion in tests for any code path touching *Dim roles.
When it happens
Trigger: Reading scheme.tertiaryDim on a DynamicScheme whose specVersion is not 2025.
Common situations: Mixing old scheme constructors with new role getters; theme-extraction code upgraded to reference 2025 roles while scheme creation still defaults to the 2021 spec.
Related errors
- `primaryDim` color is undefined prior to 2025 spec.
- `secondaryDim` color is undefined prior to 2025 spec.
- Attempting to extend color ${originalColor.name} with color
- Attempting to extend color ${originalColor.name} as a ${orig
- Color ${name} has secondBackgrounddefined, but background is
AI-assisted analysis of framework7io/framework7@6557591266 (2026-09-02).
Data as JSON: /api/errors/93a8b54d5dcd6a63.
Report an issue: GitHub.