Rocky_Mountain_Vending/.pnpm-store/v10/files/83/38c6e129d4aee05eae4f8e841ab2ca9a8a65d6e91d07c05ae52fa5b16f4e27f468fa0e18b67deaf9e343fa6c225f3dd99abc1d80c58c09a3fa9f5ec9d86764
DMleadgen 46d973904b
Initial commit: Rocky Mountain Vending website
Next.js website for Rocky Mountain Vending company featuring:
- Product catalog with Stripe integration
- Service areas and parts pages
- Admin dashboard with Clerk authentication
- SEO optimized pages with JSON-LD structured data

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-12 16:22:15 -07:00

154 lines
No EOL
6.3 KiB
Text

import postcss from 'postcss';
/**
* The next/font postcss plugin receives the @font-face declarations returned from the next/font loaders.
*
* It hashes the font-family name to make it unguessable, it shouldn't be globally accessible.
* If it were global, we wouldn't be able to tell which pages are using which fonts when generating preload tags.
*
* If the font loader returned fallback metrics, generate a fallback @font-face.
*
* If the font loader returned a variable name, add a CSS class that declares a variable containing the font and fallback fonts.
*
* Lastly, it adds the font-family to the exports object.
* This enables you to access the actual font-family name, not just through the CSS class.
* e.g:
* const inter = Inter({ subsets: ['latin'] })
* inter.style.fontFamily // => '__Inter_123456'
*/ const postcssNextFontPlugin = ({ exports, fallbackFonts = [], adjustFontFallback, variable, weight, style })=>{
return {
postcssPlugin: 'postcss-next-font',
Once (root) {
let fontFamily;
const normalizeFamily = (family)=>{
return family.replace(/['"]/g, '');
};
const formatFamily = (family)=>{
return `'${family}'`;
};
// Hash font-family names
for (const node of root.nodes){
if (node.type === 'atrule' && node.name === 'font-face') {
const familyNode = node.nodes.find((decl)=>decl.prop === 'font-family');
if (!familyNode) {
continue;
}
if (!fontFamily) {
fontFamily = normalizeFamily(familyNode.value);
}
familyNode.value = formatFamily(fontFamily);
}
}
if (!fontFamily) {
throw Object.defineProperty(new Error("Font loaders must return one or more @font-face's"), "__NEXT_ERROR_CODE", {
value: "E428",
enumerable: false,
configurable: true
});
}
// Add fallback @font-face with the provided override values
let adjustFontFallbackFamily;
if (adjustFontFallback) {
adjustFontFallbackFamily = formatFamily(`${fontFamily} Fallback`);
const fallbackFontFace = postcss.atRule({
name: 'font-face'
});
const { fallbackFont, ascentOverride, descentOverride, lineGapOverride, sizeAdjust } = adjustFontFallback;
fallbackFontFace.nodes = [
new postcss.Declaration({
prop: 'font-family',
value: adjustFontFallbackFamily
}),
new postcss.Declaration({
prop: 'src',
value: `local("${fallbackFont}")`
}),
...ascentOverride ? [
new postcss.Declaration({
prop: 'ascent-override',
value: ascentOverride
})
] : [],
...descentOverride ? [
new postcss.Declaration({
prop: 'descent-override',
value: descentOverride
})
] : [],
...lineGapOverride ? [
new postcss.Declaration({
prop: 'line-gap-override',
value: lineGapOverride
})
] : [],
...sizeAdjust ? [
new postcss.Declaration({
prop: 'size-adjust',
value: sizeAdjust
})
] : []
];
root.nodes.push(fallbackFontFace);
}
// Variable fonts can define ranges of values
const isRange = (value)=>value.trim().includes(' ');
// Format the font families to be used in the CSS
const formattedFontFamilies = [
formatFamily(fontFamily),
...adjustFontFallbackFamily ? [
adjustFontFallbackFamily
] : [],
...fallbackFonts
].join(', ');
// Add class with family, weight and style
const classRule = new postcss.Rule({
selector: '.className'
});
classRule.nodes = [
new postcss.Declaration({
prop: 'font-family',
value: formattedFontFamilies
}),
// If the font only has one weight or style, we can set it on the class
...weight && !isRange(weight) ? [
new postcss.Declaration({
prop: 'font-weight',
value: weight
})
] : [],
...style && !isRange(style) ? [
new postcss.Declaration({
prop: 'font-style',
value: style
})
] : []
];
root.nodes.push(classRule);
// Add CSS class that defines a variable with the font families
if (variable) {
const varialbeRule = new postcss.Rule({
selector: '.variable'
});
varialbeRule.nodes = [
new postcss.Declaration({
prop: variable,
value: formattedFontFamilies
})
];
root.nodes.push(varialbeRule);
}
// Export @font-face values as is
exports.push({
name: 'style',
value: {
fontFamily: formattedFontFamilies,
fontWeight: !Number.isNaN(Number(weight)) ? Number(weight) : undefined,
fontStyle: style && !isRange(style) ? style : undefined
}
});
}
};
};
postcssNextFontPlugin.postcss = true;
export default postcssNextFontPlugin;
//# sourceMappingURL=postcss-next-font.js.map