@liiift-studio/sanity-font-manager 2.3.17 → 2.3.18
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.js +10 -6
- package/dist/index.mjs +10 -6
- package/package.json +1 -1
- package/src/utils/generateCssFile.js +14 -6
package/dist/index.js
CHANGED
|
@@ -644,21 +644,25 @@ var FAMILY_CLASS_MAP = {
|
|
|
644
644
|
7: "serif",
|
|
645
645
|
8: "sans-serif"
|
|
646
646
|
};
|
|
647
|
-
|
|
648
|
-
|
|
647
|
+
var SERIF_NAMES = /jubilat|corundum|dapifer|birra|daith/i;
|
|
648
|
+
var SANS_NAMES = /halyard|gamay|omnes|kit/i;
|
|
649
|
+
function detectFontCategory(font, fontName) {
|
|
650
|
+
var _a;
|
|
651
|
+
if (fontName && SERIF_NAMES.test(fontName)) return "serif";
|
|
652
|
+
if (fontName && SANS_NAMES.test(fontName)) return "sans-serif";
|
|
649
653
|
try {
|
|
650
|
-
const familyClass = ((
|
|
654
|
+
const familyClass = ((_a = font["OS/2"]) == null ? void 0 : _a.sFamilyClass) ?? 0;
|
|
651
655
|
const highByte = familyClass >> 8 & 255;
|
|
652
656
|
return FAMILY_CLASS_MAP[highByte] ?? "default";
|
|
653
657
|
} catch {
|
|
654
658
|
return "default";
|
|
655
659
|
}
|
|
656
660
|
}
|
|
657
|
-
function calcFallbackData(arrayBuffer) {
|
|
661
|
+
function calcFallbackData(arrayBuffer, fontName) {
|
|
658
662
|
try {
|
|
659
663
|
let font = fontkit2.create(import_buffer.Buffer.from(arrayBuffer));
|
|
660
664
|
let upm = font.unitsPerEm;
|
|
661
|
-
let category = detectFontCategory(font);
|
|
665
|
+
let category = detectFontCategory(font, fontName);
|
|
662
666
|
return {
|
|
663
667
|
fallbackSrc: FALLBACK_STACKS[category],
|
|
664
668
|
ascentOverride: `${(font.ascent / upm * 100).toFixed(2)}%`,
|
|
@@ -690,7 +694,7 @@ async function generateCssFile({
|
|
|
690
694
|
let arrayBuffer = await woff2File.arrayBuffer();
|
|
691
695
|
let b64 = _arrayBufferToBase64(arrayBuffer);
|
|
692
696
|
let fontkitFont = fontkit2.create(import_buffer.Buffer.from(arrayBuffer));
|
|
693
|
-
let { fallbackSrc, ascentOverride, descentOverride, lineGapOverride } = calcFallbackData(arrayBuffer);
|
|
697
|
+
let { fallbackSrc, ascentOverride, descentOverride, lineGapOverride } = calcFallbackData(arrayBuffer, fontName);
|
|
694
698
|
let cssString;
|
|
695
699
|
if (variableFont) {
|
|
696
700
|
let { descriptors, skipped } = buildVFDescriptors(fontkitFont);
|
package/dist/index.mjs
CHANGED
|
@@ -554,21 +554,25 @@ var FAMILY_CLASS_MAP = {
|
|
|
554
554
|
7: "serif",
|
|
555
555
|
8: "sans-serif"
|
|
556
556
|
};
|
|
557
|
-
|
|
558
|
-
|
|
557
|
+
var SERIF_NAMES = /jubilat|corundum|dapifer|birra|daith/i;
|
|
558
|
+
var SANS_NAMES = /halyard|gamay|omnes|kit/i;
|
|
559
|
+
function detectFontCategory(font, fontName) {
|
|
560
|
+
var _a;
|
|
561
|
+
if (fontName && SERIF_NAMES.test(fontName)) return "serif";
|
|
562
|
+
if (fontName && SANS_NAMES.test(fontName)) return "sans-serif";
|
|
559
563
|
try {
|
|
560
|
-
const familyClass = ((
|
|
564
|
+
const familyClass = ((_a = font["OS/2"]) == null ? void 0 : _a.sFamilyClass) ?? 0;
|
|
561
565
|
const highByte = familyClass >> 8 & 255;
|
|
562
566
|
return FAMILY_CLASS_MAP[highByte] ?? "default";
|
|
563
567
|
} catch {
|
|
564
568
|
return "default";
|
|
565
569
|
}
|
|
566
570
|
}
|
|
567
|
-
function calcFallbackData(arrayBuffer) {
|
|
571
|
+
function calcFallbackData(arrayBuffer, fontName) {
|
|
568
572
|
try {
|
|
569
573
|
let font = fontkit2.create(Buffer.from(arrayBuffer));
|
|
570
574
|
let upm = font.unitsPerEm;
|
|
571
|
-
let category = detectFontCategory(font);
|
|
575
|
+
let category = detectFontCategory(font, fontName);
|
|
572
576
|
return {
|
|
573
577
|
fallbackSrc: FALLBACK_STACKS[category],
|
|
574
578
|
ascentOverride: `${(font.ascent / upm * 100).toFixed(2)}%`,
|
|
@@ -600,7 +604,7 @@ async function generateCssFile({
|
|
|
600
604
|
let arrayBuffer = await woff2File.arrayBuffer();
|
|
601
605
|
let b64 = _arrayBufferToBase64(arrayBuffer);
|
|
602
606
|
let fontkitFont = fontkit2.create(Buffer.from(arrayBuffer));
|
|
603
|
-
let { fallbackSrc, ascentOverride, descentOverride, lineGapOverride } = calcFallbackData(arrayBuffer);
|
|
607
|
+
let { fallbackSrc, ascentOverride, descentOverride, lineGapOverride } = calcFallbackData(arrayBuffer, fontName);
|
|
604
608
|
let cssString;
|
|
605
609
|
if (variableFont) {
|
|
606
610
|
let { descriptors, skipped } = buildVFDescriptors(fontkitFont);
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@liiift-studio/sanity-font-manager",
|
|
3
|
-
"version": "2.3.
|
|
3
|
+
"version": "2.3.18",
|
|
4
4
|
"description": "Sanity Studio plugin — full font management suite with batch upload, format conversion, metadata extraction, CSS generation, collection/pair generation, and script variant support. Supports Sanity v3, v4, and v5.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"author": "Liiift Studio",
|
|
@@ -84,10 +84,18 @@ const FAMILY_CLASS_MAP = {
|
|
|
84
84
|
8: 'sans-serif',
|
|
85
85
|
};
|
|
86
86
|
|
|
87
|
-
|
|
88
|
-
|
|
87
|
+
// Darden Studio fonts have sFamilyClass: 0 (No Classification) in their OS/2 table,
|
|
88
|
+
// so name-based matching is used as the primary signal.
|
|
89
|
+
const SERIF_NAMES = /jubilat|corundum|dapifer|birra|daith/i;
|
|
90
|
+
const SANS_NAMES = /halyard|gamay|omnes|kit/i;
|
|
91
|
+
|
|
92
|
+
/** Detects font category from the font name first, then OS/2 sFamilyClass as fallback */
|
|
93
|
+
function detectFontCategory(font, fontName) {
|
|
94
|
+
if (fontName && SERIF_NAMES.test(fontName)) return 'serif';
|
|
95
|
+
if (fontName && SANS_NAMES.test(fontName)) return 'sans-serif';
|
|
89
96
|
try {
|
|
90
|
-
|
|
97
|
+
// fontkit v2: font['OS/2'] exposes the parsed OS/2 table directly
|
|
98
|
+
const familyClass = font['OS/2']?.sFamilyClass ?? 0;
|
|
91
99
|
const highByte = (familyClass >> 8) & 0xFF;
|
|
92
100
|
return FAMILY_CLASS_MAP[highByte] ?? 'default';
|
|
93
101
|
} catch {
|
|
@@ -96,11 +104,11 @@ function detectFontCategory(font) {
|
|
|
96
104
|
}
|
|
97
105
|
|
|
98
106
|
/** Extracts metric override percentages and detects the category fallback stack from a font ArrayBuffer */
|
|
99
|
-
function calcFallbackData(arrayBuffer) {
|
|
107
|
+
function calcFallbackData(arrayBuffer, fontName) {
|
|
100
108
|
try {
|
|
101
109
|
let font = fontkit.create(Buffer.from(arrayBuffer));
|
|
102
110
|
let upm = font.unitsPerEm;
|
|
103
|
-
let category = detectFontCategory(font);
|
|
111
|
+
let category = detectFontCategory(font, fontName);
|
|
104
112
|
return {
|
|
105
113
|
fallbackSrc: FALLBACK_STACKS[category],
|
|
106
114
|
ascentOverride: `${(font.ascent / upm * 100).toFixed(2)}%`,
|
|
@@ -134,7 +142,7 @@ export default async function generateCssFile({
|
|
|
134
142
|
let arrayBuffer = await woff2File.arrayBuffer();
|
|
135
143
|
let b64 = _arrayBufferToBase64(arrayBuffer);
|
|
136
144
|
let fontkitFont = fontkit.create(Buffer.from(arrayBuffer));
|
|
137
|
-
let { fallbackSrc, ascentOverride, descentOverride, lineGapOverride } = calcFallbackData(arrayBuffer);
|
|
145
|
+
let { fallbackSrc, ascentOverride, descentOverride, lineGapOverride } = calcFallbackData(arrayBuffer, fontName);
|
|
138
146
|
|
|
139
147
|
let cssString;
|
|
140
148
|
if (variableFont) {
|