@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 CHANGED
@@ -644,21 +644,25 @@ var FAMILY_CLASS_MAP = {
644
644
  7: "serif",
645
645
  8: "sans-serif"
646
646
  };
647
- function detectFontCategory(font) {
648
- var _a, _b;
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 = ((_b = (_a = font._tables) == null ? void 0 : _a["OS/2"]) == null ? void 0 : _b.sFamilyClass) ?? 0;
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
- function detectFontCategory(font) {
558
- var _a, _b;
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 = ((_b = (_a = font._tables) == null ? void 0 : _a["OS/2"]) == null ? void 0 : _b.sFamilyClass) ?? 0;
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.17",
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
- /** Detects font category from the OS/2 sFamilyClass field; returns a key into FALLBACK_STACKS */
88
- function detectFontCategory(font) {
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
- const familyClass = font._tables?.['OS/2']?.sFamilyClass ?? 0;
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) {