@vyaz/core 0.0.10 → 0.0.14

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.
Files changed (47) hide show
  1. package/dist/compile/DocumentCompiler.d.ts +1 -0
  2. package/dist/compile/DocumentCompiler.d.ts.map +1 -0
  3. package/dist/index.browser.d.ts +19 -43
  4. package/dist/index.browser.d.ts.map +1 -0
  5. package/dist/index.browser.js +170 -43
  6. package/dist/index.d.ts +33 -48
  7. package/dist/index.d.ts.map +1 -0
  8. package/dist/index.js +141 -40
  9. package/dist/layout/AutoFitEngine.d.ts +1 -0
  10. package/dist/layout/AutoFitEngine.d.ts.map +1 -0
  11. package/dist/layout/LineBoxValidator.d.ts +1 -0
  12. package/dist/layout/LineBoxValidator.d.ts.map +1 -0
  13. package/dist/layout/ParagraphLayoutEngine.d.ts +1 -0
  14. package/dist/layout/ParagraphLayoutEngine.d.ts.map +1 -0
  15. package/dist/layout/PositioningEngine.d.ts +1 -0
  16. package/dist/layout/PositioningEngine.d.ts.map +1 -0
  17. package/dist/layout/TextFrameLayoutEngine.d.ts +1 -0
  18. package/dist/layout/TextFrameLayoutEngine.d.ts.map +1 -0
  19. package/dist/layout/estimateWidth.d.ts +1 -0
  20. package/dist/layout/estimateWidth.d.ts.map +1 -0
  21. package/dist/measure/FontEngine.d.ts +1 -0
  22. package/dist/measure/FontEngine.d.ts.map +1 -0
  23. package/dist/measure/FontMetricsProvider.d.ts +74 -15
  24. package/dist/measure/FontMetricsProvider.d.ts.map +1 -0
  25. package/dist/measure/FontNotFoundError.d.ts +1 -0
  26. package/dist/measure/FontNotFoundError.d.ts.map +1 -0
  27. package/dist/measure/SystemFontRegistry.d.ts +1 -0
  28. package/dist/measure/SystemFontRegistry.d.ts.map +1 -0
  29. package/dist/measure/canvas-polyfill.d.ts +1 -0
  30. package/dist/measure/canvas-polyfill.d.ts.map +1 -0
  31. package/dist/types/Document.d.ts +1 -0
  32. package/dist/types/Document.d.ts.map +1 -0
  33. package/dist/types/FontTypes.d.ts +1 -0
  34. package/dist/types/FontTypes.d.ts.map +1 -0
  35. package/dist/types/LayoutTypes.d.ts +1 -0
  36. package/dist/types/LayoutTypes.d.ts.map +1 -0
  37. package/dist/utils/env.d.ts +1 -0
  38. package/dist/utils/env.d.ts.map +1 -0
  39. package/dist/utils/font.d.ts +1 -0
  40. package/dist/utils/font.d.ts.map +1 -0
  41. package/dist/utils/groupLinesByParagraph.d.ts +1 -0
  42. package/dist/utils/groupLinesByParagraph.d.ts.map +1 -0
  43. package/dist/utils/list.d.ts +1 -0
  44. package/dist/utils/list.d.ts.map +1 -0
  45. package/dist/utils/textTransform.d.ts +1 -0
  46. package/dist/utils/textTransform.d.ts.map +1 -0
  47. package/package.json +3 -2
@@ -81,3 +81,4 @@ export declare function splitParagraphByHardBreaks(paragraph: Paragraph): Paragr
81
81
  * Get the full text of a paragraph (for INDEX_CONSIST checks).
82
82
  */
83
83
  export declare function getParagraphText(paragraph: Paragraph): string;
84
+ //# sourceMappingURL=DocumentCompiler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DocumentCompiler.d.ts","sourceRoot":"","sources":["../../src/compile/DocumentCompiler.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,OAAO,EAAiB,MAAM,sBAAsB,CAAC;AAM9E,eAAO,MAAM,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAe/C,CAAC;AAEF,gEAAgE;AAChE,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,GAAG,MAAM,CAI/E;AAED,yEAAyE;AACzE,wBAAgB,aAAa,CAAC,GAAG,EAAE,OAAO,EAAE,iBAAiB,EAAE,MAAM,GAAG,MAAM,CAK7E;AAED,8CAA8C;AAC9C,MAAM,WAAW,sBAAsB;IACrC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,QAAQ,GAAG,OAAO,CAAC;IAC3B,wGAAwG;IACxG,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE;QACR,gBAAgB,EAAE,MAAM,CAAC;QACzB,cAAc,EAAE,MAAM,CAAC;QACvB,iBAAiB,EAAE,MAAM,CAAC;QAC1B,KAAK,EAAE,OAAO,CAAC;QACf,YAAY,CAAC,EAAE,OAAO,CAAC,cAAc,CAAC,CAAC;KACxC,CAAC;CACH;AAcD;;;;;GAKG;AACH,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAIjE;AAED;;;;;;GAMG;AACH,wBAAgB,4BAA4B,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAMnE;AAID;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,SAAS,GAAG,sBAAsB,EAAE,CA+D/E;AAED;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,wBAAgB,0BAA0B,CAAC,SAAS,EAAE,SAAS,GAAG,SAAS,EAAE,CAoD5E;AAOD;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,SAAS,GAAG,MAAM,CAE7D"}
@@ -4,11 +4,20 @@
4
4
  * Re-exports all browser-safe APIs. Forces bundlers to inline the modules
5
5
  * by using a single `export *`/re-export style that bun build inlines.
6
6
  *
7
+ * ## Stability
8
+ *
9
+ * - **Stable**: types, layout engines, font metrics provider, compiler
10
+ * - **@beta** — may change with reasonable notice
11
+ * - **@internal** — implementation details, not for external use
12
+ *
7
13
  * ❌ NOT exported: SystemFontRegistry / systemFontRegistry — requires `node:fs`
8
14
  */
9
15
  export { ParagraphLayoutEngine, paragraphLayoutEngine } from './layout/ParagraphLayoutEngine.js';
16
+ /** @internal */
10
17
  export { positionLines } from './layout/PositioningEngine.js';
18
+ /** @internal */
11
19
  export { assertLineInvariants, linesToYAML } from './layout/LineBoxValidator.js';
20
+ export { groupLinesByParagraph } from './utils/groupLinesByParagraph.js';
12
21
  export { layoutTextFrame } from './layout/TextFrameLayoutEngine.js';
13
22
  export { applyScale, findScale } from './layout/AutoFitEngine.js';
14
23
  export { compileParagraph, getParagraphText, makeFontToken, collapseSegmentWhitespace, splitParagraphByHardBreaks } from './compile/DocumentCompiler.js';
@@ -16,48 +25,15 @@ export { FontMetricsProvider, fontMetricsProvider } from './measure/FontMetricsP
16
25
  export { createFontFace, getGlyphAdvance, computePixelMetrics, isFontEngineAvailable } from './measure/FontEngine.js';
17
26
  export { getFontBuffer } from './utils/font.js';
18
27
  export { FontNotFoundError } from './measure/FontNotFoundError.js';
19
- export declare const DEFAULT_PARAGRAPH_STYLE: {
20
- alignment: import("./index.js").TextAlignment;
21
- lineHeight: number;
22
- spaceBefore: number;
23
- spaceAfter: number;
24
- indent?: number;
25
- leftIndent?: number;
26
- rightIndent?: number;
27
- textIndent?: number;
28
- letterSpacing?: number;
29
- textAlignLast?: import("./index.js").TextAlignLast;
30
- wordBreak?: import("./index.js").WordBreak;
31
- lineBreak?: import("./index.js").LineBreak;
32
- overflowWrap?: import("./index.js").OverflowWrap;
33
- hyphens?: boolean;
34
- whiteSpace?: import("./index.js").WhiteSpace;
35
- listStyle?: import("./index.js").ListStyle;
36
- listRestart?: boolean;
37
- };
38
- export declare const DEFAULT_TEXT_STYLE: {
39
- type?: "text" | "inline-box" | undefined;
40
- text?: string | undefined;
41
- inlineWidget?: import("./index.js").InlineWidget | undefined;
42
- fontFamily?: string | undefined;
43
- fontSize?: number | undefined;
44
- fontWeight?: number | "bold" | "normal" | undefined;
45
- fontStyle?: "normal" | "italic" | undefined;
46
- color?: string | undefined;
47
- backgroundColor?: string | undefined;
48
- letterSpacing?: number | undefined;
49
- script?: import("./index.js").ScriptType | undefined;
50
- underline?: boolean | undefined;
51
- strikethrough?: boolean | undefined;
52
- overline?: boolean | undefined;
53
- textDecorationStyle?: import("./index.js").TextDecorationStyle | undefined;
54
- textDecorationColor?: string | undefined;
55
- textTransform?: import("./index.js").TextTransform | undefined;
56
- fullWidth?: boolean | undefined;
57
- fullSizeKana?: boolean | undefined;
58
- };
28
+ import type { ParagraphStyle, TextRun } from './types/Document.js';
29
+ /** @internal */
30
+ export declare const DEFAULT_PARAGRAPH_STYLE: ParagraphStyle;
31
+ /** @internal */
32
+ export declare const DEFAULT_TEXT_STYLE: Partial<TextRun>;
33
+ /** @internal */
59
34
  export { transformText } from './utils/textTransform.js';
60
- export declare const BULLET_CHARACTERS: {
61
- [x: number]: string;
62
- };
35
+ /** @internal */
36
+ export declare const BULLET_CHARACTERS: Record<number, string>;
37
+ /** @internal */
63
38
  export { formatListNumber, defaultBulletChar } from './utils/list.js';
39
+ //# sourceMappingURL=index.browser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.browser.d.ts","sourceRoot":"","sources":["../src/index.browser.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAGH,OAAO,EAAE,qBAAqB,EAAE,qBAAqB,EAAE,MAAM,mCAAmC,CAAC;AAEjG,gBAAgB;AAChB,OAAO,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAC9D,gBAAgB;AAChB,OAAO,EAAE,oBAAoB,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC;AAGjF,OAAO,EAAE,qBAAqB,EAAE,MAAM,kCAAkC,CAAC;AAGzE,OAAO,EAAE,eAAe,EAAE,MAAM,mCAAmC,CAAC;AAGpE,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AAGlE,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,aAAa,EAAE,yBAAyB,EAAE,0BAA0B,EAAE,MAAM,+BAA+B,CAAC;AAGzJ,OAAO,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,MAAM,kCAAkC,CAAC;AAC5F,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AACtH,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAGhD,OAAO,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AAOnE,OAAO,KAAK,EAAE,cAAc,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AACnE,gBAAgB;AAChB,eAAO,MAAM,uBAAuB,EAAE,cAA4B,CAAC;AACnE,gBAAgB;AAChB,eAAO,MAAM,kBAAkB,EAAE,OAAO,CAAC,OAAO,CAAe,CAAC;AAEhE,gBAAgB;AAChB,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAGzD,gBAAgB;AAChB,eAAO,MAAM,iBAAiB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAc,CAAC;AACpE,gBAAgB;AAChB,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC"}
@@ -18124,33 +18124,31 @@ function splitParagraphByHardBreaks(paragraph) {
18124
18124
  const result = [];
18125
18125
  let currentRuns = [];
18126
18126
  for (const run of paragraph.children) {
18127
- const nlIndex = run.text.indexOf(`
18127
+ const segments = run.text.split(`
18128
18128
  `);
18129
- if (nlIndex === -1) {
18129
+ if (segments.length === 1) {
18130
18130
  currentRuns.push({ ...run });
18131
18131
  continue;
18132
18132
  }
18133
- const before = run.text.slice(0, nlIndex);
18134
- const after = run.text.slice(nlIndex + 1);
18135
- const textTransform = run.textTransform;
18136
- const effectiveFontSize = computeEffFs(run);
18137
- if (before.length > 0) {
18138
- const text = ws === "pre-line" ? collapseSegmentWhitespace(before) : before;
18139
- currentRuns.push({ ...run, text: transformText(text, textTransform) });
18140
- }
18141
- result.push({ style: paragraph.style, children: currentRuns });
18142
- let afterIdx = nlIndex + 1;
18143
- while (afterIdx < run.text.length && run.text[afterIdx] === `
18144
- `) {
18145
- result.push({ style: paragraph.style, children: [] });
18146
- afterIdx++;
18147
- }
18148
- const remaining = run.text.slice(afterIdx);
18149
- if (remaining.length > 0) {
18150
- const text = ws === "pre-line" ? collapseSegmentWhitespace(remaining) : remaining;
18151
- currentRuns = [{ ...run, text: transformText(text, textTransform) }];
18152
- } else {
18153
- currentRuns = [];
18133
+ for (let i = 0;i < segments.length; i++) {
18134
+ const seg = segments[i];
18135
+ const textTransform = run.textTransform;
18136
+ const effectiveFontSize = computeEffFs(run);
18137
+ if (i === 0) {
18138
+ if (seg.length > 0) {
18139
+ const text = ws === "pre-line" ? collapseSegmentWhitespace(seg) : seg;
18140
+ currentRuns.push({ ...run, text: transformText(text, textTransform) });
18141
+ }
18142
+ } else {
18143
+ result.push({ style: paragraph.style, children: currentRuns });
18144
+ if (seg.length > 0) {
18145
+ const text = ws === "pre-line" ? collapseSegmentWhitespace(seg) : seg;
18146
+ currentRuns = [{ ...run, text: transformText(text, textTransform) }];
18147
+ } else {
18148
+ result.push({ style: paragraph.style, children: [] });
18149
+ currentRuns = [];
18150
+ }
18151
+ }
18154
18152
  }
18155
18153
  }
18156
18154
  result.push({ style: paragraph.style, children: currentRuns });
@@ -18200,12 +18198,31 @@ function normaliseWeight(weight) {
18200
18198
  return mapped;
18201
18199
  return weight;
18202
18200
  }
18203
- function cacheKey2(family, weight, style) {
18204
- return `${family}_${normaliseWeight(weight)}_${style}`;
18201
+ function weightToNumber(weight) {
18202
+ const num = parseInt(weight, 10);
18203
+ return isNaN(num) ? 400 : num;
18204
+ }
18205
+ function variantKey(weight, style) {
18206
+ return `${normaliseWeight(weight)}_${style}`;
18207
+ }
18208
+ function nearestWeight(registeredWeights, requested) {
18209
+ if (registeredWeights.length === 0)
18210
+ return null;
18211
+ let best = registeredWeights[0];
18212
+ let bestDist = Math.abs(best - requested);
18213
+ for (let i = 1;i < registeredWeights.length; i++) {
18214
+ const w = registeredWeights[i];
18215
+ const dist = Math.abs(w - requested);
18216
+ if (dist < bestDist || dist === bestDist && w > best) {
18217
+ best = w;
18218
+ bestDist = dist;
18219
+ }
18220
+ }
18221
+ return best;
18205
18222
  }
18206
18223
 
18207
18224
  class FontMetricsProvider {
18208
- cache = new Map;
18225
+ registry = new Map;
18209
18226
  metricsCache = new Map;
18210
18227
  mode = "browser";
18211
18228
  pendingRegistrations = new Set;
@@ -18229,7 +18246,7 @@ class FontMetricsProvider {
18229
18246
  this.mode = mode;
18230
18247
  this.metricsCache.clear();
18231
18248
  if (mode === "office") {
18232
- enableOfficeTextMeasure(this.cache);
18249
+ enableOfficeTextMeasure(this._flattenCache());
18233
18250
  } else {
18234
18251
  disableOfficeTextMeasure();
18235
18252
  }
@@ -18237,6 +18254,15 @@ class FontMetricsProvider {
18237
18254
  getMode() {
18238
18255
  return this.mode;
18239
18256
  }
18257
+ _flattenCache() {
18258
+ const flat = new Map;
18259
+ for (const [family, variants] of this.registry) {
18260
+ for (const [vKey, font] of variants) {
18261
+ flat.set(`${family}_${vKey}`, font);
18262
+ }
18263
+ }
18264
+ return flat;
18265
+ }
18240
18266
  async registerFont(family, options, source, sourcePath) {
18241
18267
  const promise = this._registerFontInternal(family, options, source, sourcePath);
18242
18268
  this.pendingRegistrations.add(promise);
@@ -18254,9 +18280,18 @@ class FontMetricsProvider {
18254
18280
  source = await getFontBuffer2(source);
18255
18281
  }
18256
18282
  const font = await createFontFace2(source);
18257
- const key = cacheKey2(family, options.weight || "normal", options.style || "normal");
18258
- this.cache.set(key, font);
18259
- this.metricsCache.delete(key);
18283
+ const w = options.weight || "normal";
18284
+ const s = options.style || "normal";
18285
+ const vKey = variantKey(w, s);
18286
+ if (!this.registry.has(family)) {
18287
+ this.registry.set(family, new Map);
18288
+ }
18289
+ this.registry.get(family).set(vKey, font);
18290
+ for (const key of this.metricsCache.keys()) {
18291
+ if (key.startsWith(family)) {
18292
+ this.metricsCache.delete(key);
18293
+ }
18294
+ }
18260
18295
  if (sourcePath) {
18261
18296
  registerCanvasFont2(sourcePath, family);
18262
18297
  }
@@ -18264,22 +18299,88 @@ class FontMetricsProvider {
18264
18299
  async waitForPendingRegistrations() {
18265
18300
  await Promise.all(this.pendingRegistrations);
18266
18301
  }
18302
+ getRegisteredFamilies() {
18303
+ return Array.from(this.registry.keys());
18304
+ }
18305
+ getFamilyVariants(family) {
18306
+ const variants = this.registry.get(family);
18307
+ return variants ? Array.from(variants.keys()) : [];
18308
+ }
18267
18309
  getFont(family, weight = "normal", style = "normal") {
18268
- const key = cacheKey2(family, weight, style);
18269
- return this.cache.get(key);
18310
+ const resolved = this._resolveFont(family, weight, style);
18311
+ if (!resolved)
18312
+ return;
18313
+ return resolved.font;
18314
+ }
18315
+ _resolveFont(family, weight, style) {
18316
+ const variants = this.registry.get(family);
18317
+ if (!variants || variants.size === 0)
18318
+ return null;
18319
+ const normalisedW = normaliseWeight(weight);
18320
+ const normalisedS = style;
18321
+ let key = variantKey(normalisedW, normalisedS);
18322
+ let font = variants.get(key);
18323
+ if (font)
18324
+ return { font, resolvedWeight: normalisedW, resolvedStyle: normalisedS };
18325
+ if (normalisedS === "italic") {
18326
+ key = variantKey(normalisedW, "normal");
18327
+ font = variants.get(key);
18328
+ if (font)
18329
+ return { font, resolvedWeight: normalisedW, resolvedStyle: "normal" };
18330
+ }
18331
+ const sameStyleWeights = [];
18332
+ for (const vKey of variants.keys()) {
18333
+ const [_w, _s] = vKey.split("_");
18334
+ if (_s === normalisedS) {
18335
+ sameStyleWeights.push(weightToNumber(_w));
18336
+ }
18337
+ }
18338
+ const sameStyleNearest = nearestWeight(sameStyleWeights, weightToNumber(normalisedW));
18339
+ if (sameStyleNearest !== null) {
18340
+ key = variantKey(String(sameStyleNearest), normalisedS);
18341
+ font = variants.get(key);
18342
+ if (font)
18343
+ return { font, resolvedWeight: String(sameStyleNearest), resolvedStyle: normalisedS };
18344
+ }
18345
+ if (normalisedS === "italic") {
18346
+ const normalWeights = [];
18347
+ for (const vKey of variants.keys()) {
18348
+ const [_w, _s] = vKey.split("_");
18349
+ if (_s === "normal") {
18350
+ normalWeights.push(weightToNumber(_w));
18351
+ }
18352
+ }
18353
+ const normalNearest = nearestWeight(normalWeights, weightToNumber(normalisedW));
18354
+ if (normalNearest !== null) {
18355
+ key = variantKey(String(normalNearest), "normal");
18356
+ font = variants.get(key);
18357
+ if (font)
18358
+ return { font, resolvedWeight: String(normalNearest), resolvedStyle: "normal" };
18359
+ }
18360
+ }
18361
+ const firstKey = variants.keys().next().value;
18362
+ if (firstKey) {
18363
+ font = variants.get(firstKey);
18364
+ if (font) {
18365
+ const [_w, _s] = firstKey.split("_");
18366
+ return { font, resolvedWeight: _w, resolvedStyle: _s };
18367
+ }
18368
+ }
18369
+ return null;
18270
18370
  }
18271
18371
  getMetrics(fontFamily, fontSize, weight = "normal", style = "normal") {
18272
18372
  const _process2 = typeof globalThis !== "undefined" ? globalThis.process : undefined;
18273
18373
  if (this.pendingRegistrations.size > 0 && _process2?.env?.NODE_ENV !== "production") {
18274
18374
  console.warn("[vyaz] getMetrics() called while registerFont() promises are still pending. Wait for registerFont() to resolve before layout to avoid inaccurate metrics. Use fontMetricsProvider.waitForPendingRegistrations() if needed.");
18275
18375
  }
18276
- const key = cacheKey2(fontFamily, weight, style);
18277
- const metricsKey = `${key}_${fontSize}_${this.mode}`;
18376
+ const normalisedW = normaliseWeight(weight);
18377
+ const metricsKey = `${fontFamily}_${normalisedW}_${style}_${fontSize}_${this.mode}`;
18278
18378
  const cached = this.metricsCache.get(metricsKey);
18279
18379
  if (cached)
18280
18380
  return cached;
18281
- const font = this.cache.get(key);
18282
- if (font) {
18381
+ const resolved = this._resolveFont(fontFamily, weight, style);
18382
+ if (resolved) {
18383
+ const font = resolved.font;
18283
18384
  const scale = fontSize / font.unitsPerEm;
18284
18385
  let ascent;
18285
18386
  let descent;
@@ -18303,7 +18404,7 @@ class FontMetricsProvider {
18303
18404
  this.metricsCache.set(metricsKey, metrics);
18304
18405
  return metrics;
18305
18406
  }
18306
- if (this.cache.size > 0) {
18407
+ if (this.registry.has(fontFamily)) {
18307
18408
  throw new FontNotFoundError(fontFamily, weight, style);
18308
18409
  }
18309
18410
  if (typeof document !== "undefined") {
@@ -24368,15 +24469,15 @@ function isLineStartCursor(cursor) {
24368
24469
  return cursor.segmentIndex === 0 && cursor.graphemeIndex === 0;
24369
24470
  }
24370
24471
  function getCollapsedSpaceWidth(font, letterSpacing, cache) {
24371
- const cacheKey3 = `${font}\x00${letterSpacing}`;
24372
- const cached = cache.get(cacheKey3);
24472
+ const cacheKey2 = `${font}\x00${letterSpacing}`;
24473
+ const cached = cache.get(cacheKey2);
24373
24474
  if (cached !== undefined)
24374
24475
  return cached;
24375
24476
  const options = letterSpacing === 0 ? undefined : { letterSpacing };
24376
24477
  const joinedWidth = measureNaturalWidth(prepareWithSegments("A A", font, options));
24377
24478
  const compactWidth = measureNaturalWidth(prepareWithSegments("AA", font, options));
24378
24479
  const collapsedWidth = Math.max(0, joinedWidth - compactWidth);
24379
- cache.set(cacheKey3, collapsedWidth);
24480
+ cache.set(cacheKey2, collapsedWidth);
24380
24481
  return collapsedWidth;
24381
24482
  }
24382
24483
  function prepareWholeItemLine(prepared) {
@@ -24621,11 +24722,11 @@ class ParagraphLayoutEngine {
24621
24722
  layout(paragraph, maxWidth, yOffset = 0, fontProvider, listStyle, listIndex, listMarkerWidth) {
24622
24723
  const provider = fontProvider || fontMetricsProvider;
24623
24724
  const items = compileParagraph(paragraph);
24624
- const cacheKey3 = JSON.stringify(paragraph);
24625
- let prepared = this.preparedCache.get(cacheKey3);
24725
+ const cacheKey2 = JSON.stringify(paragraph);
24726
+ let prepared = this.preparedCache.get(cacheKey2);
24626
24727
  if (!prepared) {
24627
24728
  prepared = prepareRichInline(items);
24628
- this.preparedCache.set(cacheKey3, prepared);
24729
+ this.preparedCache.set(cacheKey2, prepared);
24629
24730
  }
24630
24731
  const effectiveMaxWidth = paragraph.style.whiteSpace === "nowrap" ? Infinity : maxWidth;
24631
24732
  const pretextLines = [];
@@ -24701,6 +24802,31 @@ class ParagraphLayoutEngine {
24701
24802
  }
24702
24803
  }
24703
24804
  var paragraphLayoutEngine = new ParagraphLayoutEngine;
24805
+ // src/utils/groupLinesByParagraph.ts
24806
+ function groupLinesByParagraph(lines) {
24807
+ const map = new Map;
24808
+ for (const line of lines) {
24809
+ const idx = line.spans[0]?.pIdx ?? -1;
24810
+ let entry = map.get(idx);
24811
+ if (!entry) {
24812
+ entry = { lines: [] };
24813
+ map.set(idx, entry);
24814
+ }
24815
+ entry.lines.push(line);
24816
+ if (!entry.tag) {
24817
+ entry.tag = line.spans[0]?.tag;
24818
+ }
24819
+ }
24820
+ const groups = [];
24821
+ const sortedKeys = Array.from(map.keys()).sort((a, b) => a - b);
24822
+ for (const key of sortedKeys) {
24823
+ if (key === -1)
24824
+ continue;
24825
+ const entry = map.get(key);
24826
+ groups.push({ lines: entry.lines, pIdx: key, tag: entry.tag });
24827
+ }
24828
+ return groups;
24829
+ }
24704
24830
  // src/layout/TextFrameLayoutEngine.ts
24705
24831
  function getMarkerTextHelper(listStyle, listIndex) {
24706
24832
  if (listStyle.type === "bullet") {
@@ -24989,6 +25115,7 @@ export {
24989
25115
  linesToYAML,
24990
25116
  layoutTextFrame,
24991
25117
  isFontEngineAvailable,
25118
+ groupLinesByParagraph,
24992
25119
  getParagraphText,
24993
25120
  getGlyphAdvance,
24994
25121
  getFontBuffer,
package/dist/index.d.ts CHANGED
@@ -1,54 +1,34 @@
1
1
  /**
2
2
  * @vyaz/core — Public API.
3
3
  *
4
- * Exports input types (Logical level), output types (Physical Box Model),
5
- * layout engines, font metric providers, renderers, and utilities.
4
+ * ## Stability
5
+ *
6
+ * - **Stable**: types, layout engines, font metrics provider, compiler
7
+ * - **@beta** — may change with reasonable notice
8
+ * - **@internal** — implementation details, not for external use
9
+ *
10
+ * ## Environments
11
+ *
12
+ * - `index.ts` (Node.js / Bun) — full API including SystemFontRegistry
13
+ * - `index.browser.ts` (browser) — browser-safe subset (no node:fs)
6
14
  */
7
15
  export type { TextFrame, Paragraph, ParagraphStyle, TextRun, InlineWidget, AutofitConfig, TextAlignment, WritingMode, TextOrientation, VerticalAlignment, ScriptType, WhiteSpace, MultiColumnConfig, DominantBaseline, LineFitEdge, TextAlignLast, WordBreak, LineBreak, OverflowWrap, TextDecorationStyle, TextTransform, ListType, NumberFormat, ListStylePosition, ListStyle, } from './types/Document.js';
8
- export declare const DEFAULT_PARAGRAPH_STYLE: {
9
- alignment: import("./index.js").TextAlignment;
10
- lineHeight: number;
11
- spaceBefore: number;
12
- spaceAfter: number;
13
- indent?: number;
14
- leftIndent?: number;
15
- rightIndent?: number;
16
- textIndent?: number;
17
- letterSpacing?: number;
18
- textAlignLast?: import("./index.js").TextAlignLast;
19
- wordBreak?: import("./index.js").WordBreak;
20
- lineBreak?: import("./index.js").LineBreak;
21
- overflowWrap?: import("./index.js").OverflowWrap;
22
- hyphens?: boolean;
23
- whiteSpace?: import("./index.js").WhiteSpace;
24
- listStyle?: import("./index.js").ListStyle;
25
- listRestart?: boolean;
26
- };
27
- export declare const DEFAULT_TEXT_STYLE: {
28
- type?: "text" | "inline-box" | undefined;
29
- text?: string | undefined;
30
- inlineWidget?: import("./index.js").InlineWidget | undefined;
31
- fontFamily?: string | undefined;
32
- fontSize?: number | undefined;
33
- fontWeight?: number | "bold" | "normal" | undefined;
34
- fontStyle?: "normal" | "italic" | undefined;
35
- color?: string | undefined;
36
- backgroundColor?: string | undefined;
37
- letterSpacing?: number | undefined;
38
- script?: import("./index.js").ScriptType | undefined;
39
- underline?: boolean | undefined;
40
- strikethrough?: boolean | undefined;
41
- overline?: boolean | undefined;
42
- textDecorationStyle?: import("./index.js").TextDecorationStyle | undefined;
43
- textDecorationColor?: string | undefined;
44
- textTransform?: import("./index.js").TextTransform | undefined;
45
- fullWidth?: boolean | undefined;
46
- fullSizeKana?: boolean | undefined;
47
- };
16
+ import type { ParagraphStyle } from './types/Document.js';
17
+ /** @internal */
18
+ export declare const DEFAULT_PARAGRAPH_STYLE: ParagraphStyle;
19
+ /** @internal */
20
+ export declare const DEFAULT_TEXT_STYLE: Partial<import('./types/Document.js').TextRun>;
48
21
  export type { ParagraphLayoutResult, Line, Span, SpanFontMetrics, SemanticParagraph, SemanticLine, SemanticFragment, } from './types/LayoutTypes.js';
49
22
  export type { FontMetrics, IFontMetricsProvider, GlyphData, } from './types/FontTypes.js';
50
23
  export { ParagraphLayoutEngine, paragraphLayoutEngine } from './layout/ParagraphLayoutEngine.js';
24
+ /**
25
+ * @internal List layout positions lines within a paragraph box.
26
+ * Used internally by ParagraphLayoutEngine.
27
+ */
51
28
  export { positionLines } from './layout/PositioningEngine.js';
29
+ /**
30
+ * @internal Line box invariant checks for debugging.
31
+ */
52
32
  export { assertLineInvariants, linesToYAML } from './layout/LineBoxValidator.js';
53
33
  export type { InvariantError } from './layout/LineBoxValidator.js';
54
34
  export { layoutTextFrame } from './layout/TextFrameLayoutEngine.js';
@@ -57,13 +37,17 @@ export { applyScale, findScale } from './layout/AutoFitEngine.js';
57
37
  export type { AutoFitOptions, AutoFitResult } from './layout/AutoFitEngine.js';
58
38
  export { groupLinesByParagraph } from './utils/groupLinesByParagraph.js';
59
39
  export type { ParagraphGroup } from './utils/groupLinesByParagraph.js';
40
+ /**
41
+ * @internal Text transformation (uppercase, lowercase, capitalize).
42
+ */
60
43
  export { transformText } from './utils/textTransform.js';
61
- import { formatListNumber as _fln, defaultBulletChar as _dbc } from './utils/list.js';
62
- export declare const formatListNumber: typeof _fln;
63
- export declare const defaultBulletChar: typeof _dbc;
64
- export declare const BULLET_CHARACTERS: {
65
- [x: number]: string;
66
- };
44
+ import type { NumberFormat } from './types/Document.js';
45
+ /** @internal */
46
+ export declare const formatListNumber: (n: number, format: NumberFormat) => string;
47
+ /** @internal */
48
+ export declare const defaultBulletChar: (level: number) => string;
49
+ /** @internal */
50
+ export declare const BULLET_CHARACTERS: Record<number, string>;
67
51
  export { compileParagraph, getParagraphText, makeFontToken, splitParagraphByHardBreaks, collapseSegmentWhitespace } from './compile/DocumentCompiler.js';
68
52
  export type { PreparedRichInlineItem } from './compile/DocumentCompiler.js';
69
53
  export type { FontFace } from './measure/FontEngine.js';
@@ -72,3 +56,4 @@ export { FontMetricsProvider, fontMetricsProvider } from './measure/FontMetricsP
72
56
  export { SystemFontRegistry, systemFontRegistry } from './measure/SystemFontRegistry.js';
73
57
  export { getFontBuffer } from './utils/font.js';
74
58
  export { FontNotFoundError } from './measure/FontNotFoundError.js';
59
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAGH,YAAY,EACV,SAAS,EACT,SAAS,EACT,cAAc,EACd,OAAO,EACP,YAAY,EACZ,aAAa,EACb,aAAa,EACb,WAAW,EACX,eAAe,EACf,iBAAiB,EACjB,UAAU,EACV,UAAU,EACV,iBAAiB,EACjB,gBAAgB,EAChB,WAAW,EACX,aAAa,EACb,SAAS,EACT,SAAS,EACT,YAAY,EACZ,mBAAmB,EACnB,aAAa,EACb,QAAQ,EACR,YAAY,EACZ,iBAAiB,EACjB,SAAS,GACV,MAAM,qBAAqB,CAAC;AAK7B,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAC1D,gBAAgB;AAChB,eAAO,MAAM,uBAAuB,EAAE,cAA6B,CAAC;AACpE,gBAAgB;AAChB,eAAO,MAAM,kBAAkB,EAAE,OAAO,CAAC,OAAO,qBAAqB,EAAE,OAAO,CAAgB,CAAC;AAG/F,YAAY,EACV,qBAAqB,EACrB,IAAI,EACJ,IAAI,EACJ,eAAe,EACf,iBAAiB,EACjB,YAAY,EACZ,gBAAgB,GACjB,MAAM,wBAAwB,CAAC;AAGhC,YAAY,EACV,WAAW,EACX,oBAAoB,EACpB,SAAS,GACV,MAAM,sBAAsB,CAAC;AAG9B,OAAO,EAAE,qBAAqB,EAAE,qBAAqB,EAAE,MAAM,mCAAmC,CAAC;AAEjG;;;GAGG;AACH,OAAO,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAE9D;;GAEG;AACH,OAAO,EAAE,oBAAoB,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC;AACjF,YAAY,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAGnE,OAAO,EAAE,eAAe,EAAE,MAAM,mCAAmC,CAAC;AACpE,YAAY,EAAE,qBAAqB,EAAE,MAAM,mCAAmC,CAAC;AAG/E,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AAClE,YAAY,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAG/E,OAAO,EAAE,qBAAqB,EAAE,MAAM,kCAAkC,CAAC;AACzE,YAAY,EAAE,cAAc,EAAE,MAAM,kCAAkC,CAAC;AAEvE;;GAEG;AACH,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAIzD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACxD,gBAAgB;AAChB,eAAO,MAAM,gBAAgB,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,KAAK,MAAa,CAAC;AAClF,gBAAgB;AAChB,eAAO,MAAM,iBAAiB,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAa,CAAC;AACjE,gBAAgB;AAChB,eAAO,MAAM,iBAAiB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAe,CAAC;AAGrE,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,aAAa,EAAE,0BAA0B,EAAE,yBAAyB,EAAE,MAAM,+BAA+B,CAAC;AACzJ,YAAY,EAAE,sBAAsB,EAAE,MAAM,+BAA+B,CAAC;AAG5E,YAAY,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AACxD,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAGtH,OAAO,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,MAAM,kCAAkC,CAAC;AAG5F,OAAO,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,iCAAiC,CAAC;AAGzF,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAGhD,OAAO,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC"}
package/dist/index.js CHANGED
@@ -421,33 +421,31 @@ function splitParagraphByHardBreaks(paragraph) {
421
421
  const result = [];
422
422
  let currentRuns = [];
423
423
  for (const run of paragraph.children) {
424
- const nlIndex = run.text.indexOf(`
424
+ const segments = run.text.split(`
425
425
  `);
426
- if (nlIndex === -1) {
426
+ if (segments.length === 1) {
427
427
  currentRuns.push({ ...run });
428
428
  continue;
429
429
  }
430
- const before = run.text.slice(0, nlIndex);
431
- const after = run.text.slice(nlIndex + 1);
432
- const textTransform = run.textTransform;
433
- const effectiveFontSize = computeEffFs(run);
434
- if (before.length > 0) {
435
- const text = ws === "pre-line" ? collapseSegmentWhitespace(before) : before;
436
- currentRuns.push({ ...run, text: transformText(text, textTransform) });
437
- }
438
- result.push({ style: paragraph.style, children: currentRuns });
439
- let afterIdx = nlIndex + 1;
440
- while (afterIdx < run.text.length && run.text[afterIdx] === `
441
- `) {
442
- result.push({ style: paragraph.style, children: [] });
443
- afterIdx++;
444
- }
445
- const remaining = run.text.slice(afterIdx);
446
- if (remaining.length > 0) {
447
- const text = ws === "pre-line" ? collapseSegmentWhitespace(remaining) : remaining;
448
- currentRuns = [{ ...run, text: transformText(text, textTransform) }];
449
- } else {
450
- currentRuns = [];
430
+ for (let i = 0;i < segments.length; i++) {
431
+ const seg = segments[i];
432
+ const textTransform = run.textTransform;
433
+ const effectiveFontSize = computeEffFs(run);
434
+ if (i === 0) {
435
+ if (seg.length > 0) {
436
+ const text = ws === "pre-line" ? collapseSegmentWhitespace(seg) : seg;
437
+ currentRuns.push({ ...run, text: transformText(text, textTransform) });
438
+ }
439
+ } else {
440
+ result.push({ style: paragraph.style, children: currentRuns });
441
+ if (seg.length > 0) {
442
+ const text = ws === "pre-line" ? collapseSegmentWhitespace(seg) : seg;
443
+ currentRuns = [{ ...run, text: transformText(text, textTransform) }];
444
+ } else {
445
+ result.push({ style: paragraph.style, children: [] });
446
+ currentRuns = [];
447
+ }
448
+ }
451
449
  }
452
450
  }
453
451
  result.push({ style: paragraph.style, children: currentRuns });
@@ -497,12 +495,31 @@ function normaliseWeight(weight) {
497
495
  return mapped;
498
496
  return weight;
499
497
  }
500
- function cacheKey2(family, weight, style) {
501
- return `${family}_${normaliseWeight(weight)}_${style}`;
498
+ function weightToNumber(weight) {
499
+ const num = parseInt(weight, 10);
500
+ return isNaN(num) ? 400 : num;
501
+ }
502
+ function variantKey(weight, style) {
503
+ return `${normaliseWeight(weight)}_${style}`;
504
+ }
505
+ function nearestWeight(registeredWeights, requested) {
506
+ if (registeredWeights.length === 0)
507
+ return null;
508
+ let best = registeredWeights[0];
509
+ let bestDist = Math.abs(best - requested);
510
+ for (let i = 1;i < registeredWeights.length; i++) {
511
+ const w = registeredWeights[i];
512
+ const dist = Math.abs(w - requested);
513
+ if (dist < bestDist || dist === bestDist && w > best) {
514
+ best = w;
515
+ bestDist = dist;
516
+ }
517
+ }
518
+ return best;
502
519
  }
503
520
 
504
521
  class FontMetricsProvider {
505
- cache = new Map;
522
+ registry = new Map;
506
523
  metricsCache = new Map;
507
524
  mode = "browser";
508
525
  pendingRegistrations = new Set;
@@ -526,7 +543,7 @@ class FontMetricsProvider {
526
543
  this.mode = mode;
527
544
  this.metricsCache.clear();
528
545
  if (mode === "office") {
529
- enableOfficeTextMeasure(this.cache);
546
+ enableOfficeTextMeasure(this._flattenCache());
530
547
  } else {
531
548
  disableOfficeTextMeasure();
532
549
  }
@@ -534,6 +551,15 @@ class FontMetricsProvider {
534
551
  getMode() {
535
552
  return this.mode;
536
553
  }
554
+ _flattenCache() {
555
+ const flat = new Map;
556
+ for (const [family, variants] of this.registry) {
557
+ for (const [vKey, font] of variants) {
558
+ flat.set(`${family}_${vKey}`, font);
559
+ }
560
+ }
561
+ return flat;
562
+ }
537
563
  async registerFont(family, options, source, sourcePath) {
538
564
  const promise = this._registerFontInternal(family, options, source, sourcePath);
539
565
  this.pendingRegistrations.add(promise);
@@ -551,9 +577,18 @@ class FontMetricsProvider {
551
577
  source = await getFontBuffer2(source);
552
578
  }
553
579
  const font = await createFontFace2(source);
554
- const key = cacheKey2(family, options.weight || "normal", options.style || "normal");
555
- this.cache.set(key, font);
556
- this.metricsCache.delete(key);
580
+ const w = options.weight || "normal";
581
+ const s = options.style || "normal";
582
+ const vKey = variantKey(w, s);
583
+ if (!this.registry.has(family)) {
584
+ this.registry.set(family, new Map);
585
+ }
586
+ this.registry.get(family).set(vKey, font);
587
+ for (const key of this.metricsCache.keys()) {
588
+ if (key.startsWith(family)) {
589
+ this.metricsCache.delete(key);
590
+ }
591
+ }
557
592
  if (sourcePath) {
558
593
  registerCanvasFont2(sourcePath, family);
559
594
  }
@@ -561,22 +596,88 @@ class FontMetricsProvider {
561
596
  async waitForPendingRegistrations() {
562
597
  await Promise.all(this.pendingRegistrations);
563
598
  }
599
+ getRegisteredFamilies() {
600
+ return Array.from(this.registry.keys());
601
+ }
602
+ getFamilyVariants(family) {
603
+ const variants = this.registry.get(family);
604
+ return variants ? Array.from(variants.keys()) : [];
605
+ }
564
606
  getFont(family, weight = "normal", style = "normal") {
565
- const key = cacheKey2(family, weight, style);
566
- return this.cache.get(key);
607
+ const resolved = this._resolveFont(family, weight, style);
608
+ if (!resolved)
609
+ return;
610
+ return resolved.font;
611
+ }
612
+ _resolveFont(family, weight, style) {
613
+ const variants = this.registry.get(family);
614
+ if (!variants || variants.size === 0)
615
+ return null;
616
+ const normalisedW = normaliseWeight(weight);
617
+ const normalisedS = style;
618
+ let key = variantKey(normalisedW, normalisedS);
619
+ let font = variants.get(key);
620
+ if (font)
621
+ return { font, resolvedWeight: normalisedW, resolvedStyle: normalisedS };
622
+ if (normalisedS === "italic") {
623
+ key = variantKey(normalisedW, "normal");
624
+ font = variants.get(key);
625
+ if (font)
626
+ return { font, resolvedWeight: normalisedW, resolvedStyle: "normal" };
627
+ }
628
+ const sameStyleWeights = [];
629
+ for (const vKey of variants.keys()) {
630
+ const [_w, _s] = vKey.split("_");
631
+ if (_s === normalisedS) {
632
+ sameStyleWeights.push(weightToNumber(_w));
633
+ }
634
+ }
635
+ const sameStyleNearest = nearestWeight(sameStyleWeights, weightToNumber(normalisedW));
636
+ if (sameStyleNearest !== null) {
637
+ key = variantKey(String(sameStyleNearest), normalisedS);
638
+ font = variants.get(key);
639
+ if (font)
640
+ return { font, resolvedWeight: String(sameStyleNearest), resolvedStyle: normalisedS };
641
+ }
642
+ if (normalisedS === "italic") {
643
+ const normalWeights = [];
644
+ for (const vKey of variants.keys()) {
645
+ const [_w, _s] = vKey.split("_");
646
+ if (_s === "normal") {
647
+ normalWeights.push(weightToNumber(_w));
648
+ }
649
+ }
650
+ const normalNearest = nearestWeight(normalWeights, weightToNumber(normalisedW));
651
+ if (normalNearest !== null) {
652
+ key = variantKey(String(normalNearest), "normal");
653
+ font = variants.get(key);
654
+ if (font)
655
+ return { font, resolvedWeight: String(normalNearest), resolvedStyle: "normal" };
656
+ }
657
+ }
658
+ const firstKey = variants.keys().next().value;
659
+ if (firstKey) {
660
+ font = variants.get(firstKey);
661
+ if (font) {
662
+ const [_w, _s] = firstKey.split("_");
663
+ return { font, resolvedWeight: _w, resolvedStyle: _s };
664
+ }
665
+ }
666
+ return null;
567
667
  }
568
668
  getMetrics(fontFamily, fontSize, weight = "normal", style = "normal") {
569
669
  const _process2 = typeof globalThis !== "undefined" ? globalThis.process : undefined;
570
670
  if (this.pendingRegistrations.size > 0 && _process2?.env?.NODE_ENV !== "production") {
571
671
  console.warn("[vyaz] getMetrics() called while registerFont() promises are still pending. Wait for registerFont() to resolve before layout to avoid inaccurate metrics. Use fontMetricsProvider.waitForPendingRegistrations() if needed.");
572
672
  }
573
- const key = cacheKey2(fontFamily, weight, style);
574
- const metricsKey = `${key}_${fontSize}_${this.mode}`;
673
+ const normalisedW = normaliseWeight(weight);
674
+ const metricsKey = `${fontFamily}_${normalisedW}_${style}_${fontSize}_${this.mode}`;
575
675
  const cached = this.metricsCache.get(metricsKey);
576
676
  if (cached)
577
677
  return cached;
578
- const font = this.cache.get(key);
579
- if (font) {
678
+ const resolved = this._resolveFont(fontFamily, weight, style);
679
+ if (resolved) {
680
+ const font = resolved.font;
580
681
  const scale = fontSize / font.unitsPerEm;
581
682
  let ascent;
582
683
  let descent;
@@ -600,7 +701,7 @@ class FontMetricsProvider {
600
701
  this.metricsCache.set(metricsKey, metrics);
601
702
  return metrics;
602
703
  }
603
- if (this.cache.size > 0) {
704
+ if (this.registry.has(fontFamily)) {
604
705
  throw new FontNotFoundError(fontFamily, weight, style);
605
706
  }
606
707
  if (typeof document !== "undefined") {
@@ -1170,11 +1271,11 @@ class ParagraphLayoutEngine {
1170
1271
  layout(paragraph, maxWidth, yOffset = 0, fontProvider, listStyle, listIndex, listMarkerWidth) {
1171
1272
  const provider = fontProvider || fontMetricsProvider;
1172
1273
  const items = compileParagraph(paragraph);
1173
- const cacheKey3 = JSON.stringify(paragraph);
1174
- let prepared = this.preparedCache.get(cacheKey3);
1274
+ const cacheKey2 = JSON.stringify(paragraph);
1275
+ let prepared = this.preparedCache.get(cacheKey2);
1175
1276
  if (!prepared) {
1176
1277
  prepared = prepareRichInline(items);
1177
- this.preparedCache.set(cacheKey3, prepared);
1278
+ this.preparedCache.set(cacheKey2, prepared);
1178
1279
  }
1179
1280
  const effectiveMaxWidth = paragraph.style.whiteSpace === "nowrap" ? Infinity : maxWidth;
1180
1281
  const pretextLines = [];
@@ -42,3 +42,4 @@ export declare function findScale(doc: TextFrame, layoutFn: (scaledDoc: TextFram
42
42
  maxWidth: number;
43
43
  maxHeight: number;
44
44
  }, options?: AutoFitOptions): AutoFitResult;
45
+ //# sourceMappingURL=AutoFitEngine.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AutoFitEngine.d.ts","sourceRoot":"","sources":["../../src/layout/AutoFitEngine.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAEtD,sBAAsB;AACtB,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,qBAAqB;AACrB,MAAM,WAAW,aAAa;IAC5B,WAAW,EAAE,MAAM,CAAC;CACrB;AAED;;;;GAIG;AACH,wBAAgB,UAAU,CACxB,GAAG,EAAE,SAAS,EACd,KAAK,EAAE,MAAM,GACZ,SAAS,CAcX;AAED;;;;;;;GAOG;AACH,wBAAgB,SAAS,CACvB,GAAG,EAAE,SAAS,EACd,QAAQ,EAAE,CAAC,SAAS,EAAE,SAAS,KAAK;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,EACrE,MAAM,EAAE;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,EAC/C,OAAO,CAAC,EAAE,cAAc,GACvB,aAAa,CAoCf"}
@@ -23,3 +23,4 @@ export declare function assertLineInvariants(lines: Line[], originalText: string
23
23
  * No glyphAdvances, fontMetrics (noise), inlineWidget.
24
24
  */
25
25
  export declare function linesToYAML(lines: Line[], paragraphWidth: number, paragraphHeight: number): string;
26
+ //# sourceMappingURL=LineBoxValidator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LineBoxValidator.d.ts","sourceRoot":"","sources":["../../src/layout/LineBoxValidator.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,KAAK,EAAE,IAAI,EAA2B,MAAM,yBAAyB,CAAC;AAM7E,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,GAAG,CAAC;CACf;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,IAAI,EAAE,EACb,YAAY,EAAE,MAAM,EACpB,QAAQ,EAAE,MAAM,GACf,IAAI,CAqFN;AAYD;;;;GAIG;AACH,wBAAgB,WAAW,CACzB,KAAK,EAAE,IAAI,EAAE,EACb,cAAc,EAAE,MAAM,EACtB,eAAe,EAAE,MAAM,GACtB,MAAM,CAwBR"}
@@ -44,3 +44,4 @@ export declare class ParagraphLayoutEngine {
44
44
  }
45
45
  /** Singleton */
46
46
  export declare const paragraphLayoutEngine: ParagraphLayoutEngine;
47
+ //# sourceMappingURL=ParagraphLayoutEngine.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ParagraphLayoutEngine.d.ts","sourceRoot":"","sources":["../../src/layout/ParagraphLayoutEngine.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAGH,OAAO,+BAA+B,CAAC;AAEvC,OAAO,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAEjE,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAClE,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAqCrE,qBAAa,qBAAqB;IAChC,OAAO,CAAC,aAAa,CAAyC;IAE9D;;;;;;;OAOG;IACH,MAAM,CACJ,SAAS,EAAE,SAAS,EACpB,QAAQ,EAAE,MAAM,EAChB,OAAO,GAAE,MAAU,EACnB,YAAY,CAAC,EAAE,oBAAoB,EACnC,SAAS,CAAC,EAAE,SAAS,EACrB,SAAS,CAAC,EAAE,MAAM,EAClB,eAAe,CAAC,EAAE,MAAM,GACvB,qBAAqB;IA+HxB;;;;;OAKG;IACH,WAAW,CACT,SAAS,EAAE,SAAS,EACpB,QAAQ,EAAE,MAAM,EAChB,OAAO,GAAE,MAAU,GAClB,qBAAqB;IAIxB;;;;;OAKG;IACH,OAAO,CAAC,oBAAoB;CAoC7B;AAED,gBAAgB;AAChB,eAAO,MAAM,qBAAqB,EAAE,qBAAmD,CAAC"}
@@ -66,3 +66,4 @@ export declare function positionLines(pretextLines: PretextLine[], items: Prepar
66
66
  contentWidth: number;
67
67
  };
68
68
  export {};
69
+ //# sourceMappingURL=PositioningEngine.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PositioningEngine.d.ts","sourceRoot":"","sources":["../../src/layout/PositioningEngine.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,SAAS,EAAgB,MAAM,sBAAsB,CAAC;AACpF,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,KAAK,EAAE,IAAI,EAAyB,MAAM,yBAAyB,CAAC;AAC3E,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,gCAAgC,CAAC;AAO7E,UAAU,eAAe;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;IACtB,KAAK,EAAE;QAAE,YAAY,EAAE,MAAM,CAAC;QAAC,aAAa,EAAE,MAAM,CAAA;KAAE,CAAC;IACvD,GAAG,EAAE;QAAE,YAAY,EAAE,MAAM,CAAC;QAAC,aAAa,EAAE,MAAM,CAAA;KAAE,CAAC;CACtD;AAED,UAAU,WAAW;IACnB,SAAS,EAAE,eAAe,EAAE,CAAC;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE;QAAE,YAAY,EAAE,MAAM,CAAC;QAAC,aAAa,EAAE,MAAM,CAAA;KAAE,CAAC;CACtD;AA8CD;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,aAAa,CAC3B,YAAY,EAAE,WAAW,EAAE,EAC3B,KAAK,EAAE,sBAAsB,EAAE,EAC/B,aAAa,EAAE,CAAC,IAAI,EAAE,sBAAsB,KAAK,WAAW,EAC5D,KAAK,EAAE,cAAc,EACrB,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,YAAI,EAClB,IAAI,EAAE,SAAS,GAAG,QAAQ,YAAY,EACtC,WAAW,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,KAAK,MAAM,EACrH,GAAG,CAAC,EAAE,MAAM,EACZ,SAAS,CAAC,EAAE,SAAS,EACrB,SAAS,CAAC,EAAE,MAAM,EAClB,eAAe,CAAC,EAAE,MAAM,GACvB;IAAE,KAAK,EAAE,IAAI,EAAE,CAAC;IAAC,YAAY,EAAE,MAAM,CAAA;CAAE,CA8ezC"}
@@ -48,3 +48,4 @@ export interface TextFrameLayoutResult {
48
48
  * Layout a full TextFrame by stacking paragraphs with Y offset accumulation.
49
49
  */
50
50
  export declare function layoutTextFrame(frame: TextFrame): TextFrameLayoutResult;
51
+ //# sourceMappingURL=TextFrameLayoutEngine.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TextFrameLayoutEngine.d.ts","sourceRoot":"","sources":["../../src/layout/TextFrameLayoutEngine.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,OAAO,KAAK,EAAE,SAAS,EAA2C,MAAM,sBAAsB,CAAC;AAC/F,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,yBAAyB,CAAC;AAKpD;;;;;;GAMG;AACH,MAAM,WAAW,qBAAqB;IACpC,KAAK,EAAE,IAAI,EAAE,CAAC;IACd,2DAA2D;IAC3D,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,6DAA6D;IAC7D,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,oEAAoE;IACpE,YAAY,EAAE,MAAM,CAAC;IACrB,sDAAsD;IACtD,aAAa,EAAE,MAAM,CAAC;IACtB,qEAAqE;IACrE,aAAa,EAAE,OAAO,GAAG,SAAS,CAAC;IACnC,mEAAmE;IACnE,WAAW,EAAE,OAAO,GAAG,SAAS,CAAC;CAClC;AAmED;;GAEG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,SAAS,GAAG,qBAAqB,CAoRvE"}
@@ -34,3 +34,4 @@ export type MeasureFn = (text: string) => number;
34
34
  * @returns widths that sum to occupiedWidth (within floating point tolerance)
35
35
  */
36
36
  export declare function resolveFragmentWidths(fragments: string[], fullText: string, occupiedWidth: number, measureFn: MeasureFn): number[];
37
+ //# sourceMappingURL=estimateWidth.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"estimateWidth.d.ts","sourceRoot":"","sources":["../../src/layout/estimateWidth.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH;;;;;;;;;;;;GAYG;AACH,wBAAgB,qBAAqB,CACnC,QAAQ,EAAE,MAAM,EAAE,EAClB,aAAa,EAAE,MAAM,GACpB,MAAM,EAAE,CAUV;AAID,MAAM,MAAM,SAAS,GAAG,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAAC;AAEjD;;;;;;;;;;;;;GAaG;AACH,wBAAgB,qBAAqB,CACnC,SAAS,EAAE,MAAM,EAAE,EACnB,QAAQ,EAAE,MAAM,EAChB,aAAa,EAAE,MAAM,EACrB,SAAS,EAAE,SAAS,GACnB,MAAM,EAAE,CAaV"}
@@ -45,3 +45,4 @@ export declare function computePixelMetrics(font: FontFace, fontSize: number, mo
45
45
  * Useful for tests to verify the bundler isn't blocking fontkit.
46
46
  */
47
47
  export declare function isFontEngineAvailable(): Promise<boolean>;
48
+ //# sourceMappingURL=FontEngine.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FontEngine.d.ts","sourceRoot":"","sources":["../../src/measure/FontEngine.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAKzD,8DAA8D;AAC9D,MAAM,WAAW,QAAQ;IACvB,kEAAkE;IAClE,QAAQ,CAAC,IAAI,EAAE,GAAG,CAAC;IACnB,kDAAkD;IAClD,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,QAAQ,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;CACpC;AAkDD;;;;;GAKG;AACH,wBAAsB,cAAc,CAAC,MAAM,EAAE,WAAW,GAAG,UAAU,GAAG,OAAO,CAAC,QAAQ,CAAC,CAQxF;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAIhF;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,GAAG,QAAQ,GAAG,WAAW,CAqB7G;AAED;;;GAGG;AACH,wBAAsB,qBAAqB,IAAI,OAAO,CAAC,OAAO,CAAC,CAO9D"}
@@ -2,34 +2,66 @@
2
2
  * FontMetricsProvider.ts — isomorphic font metrics provider.
3
3
  *
4
4
  * Strategy (priority):
5
- * 1. FontEngine (fontkit) — from registered buffer
6
- * - 'browser' mode: hhea.ascender / hhea.descender
7
- * - 'office' mode: OS/2.usWinAscent / OS/2.usWinDescent
5
+ * 1. FontEngine (fontkit) — from registered buffer, with smart weight fallback
8
6
  * 2. Canvas TextMetrics (browser fallback when fontkit unavailable)
9
7
  *
10
- * Uses FontEngine as the single entry point for all fontkit operations.
8
+ * Key features:
9
+ * - Nested registry: family → variants (weight + style)
10
+ * - Smart weight fallback: if exact weight not found, picks closest
11
+ * - Style fallback: if exact style not found, falls back to 'normal'
12
+ * - Tracks pending registrations to warn about race conditions
13
+ * - Reusable off-screen canvas for Canvas TextMetrics fallback
11
14
  */
12
15
  import type { FontMetrics, IFontMetricsProvider } from '../types/FontTypes.js';
13
16
  import type { FontFace } from './FontEngine.js';
14
17
  /**
15
18
  * Factor used when a glyph is not found in the font.
16
19
  * Multiplied by fontSize to estimate the missing glyph width.
17
- * Used across all measurement code paths (ParagraphLayoutEngine, canvas-polyfill).
18
20
  */
19
21
  export declare const MISSING_GLYPH_FACTOR = 0.5;
22
+ /**
23
+ * Font metrics provider — registers, resolves, and measures fonts.
24
+ *
25
+ * Public API (stable):
26
+ * - `registerFont()`
27
+ * - `getMetrics()`
28
+ * - `getFont()`
29
+ * - `setMode()` / `getMode()`
30
+ *
31
+ * Semi-stable (@beta — may change with notice):
32
+ * - `waitForPendingRegistrations()`
33
+ * - `getRegisteredFamilies()`
34
+ * - `getFamilyVariants()`
35
+ *
36
+ * Everything else is internal.
37
+ */
20
38
  export declare class FontMetricsProvider implements IFontMetricsProvider {
21
- /** Map<string, FontFace> font engine font face cache */
22
- private cache;
39
+ /** @internal Nested registry: family variantKey FontFace */
40
+ private registry;
41
+ /** @internal Metrics cache keyed by variantKey_fontSize_mode */
23
42
  private metricsCache;
43
+ /** @internal */
24
44
  private mode;
25
- /** Set of in-flight registerFont() promises for race-condition guarding */
45
+ /** @internal Set of in-flight registerFont() promises for race-condition guarding */
26
46
  private pendingRegistrations;
47
+ /** @internal Reusable off-screen canvas for Canvas TextMetrics fallback */
27
48
  private _measureCanvas;
49
+ /** @internal */
28
50
  private _measureCtx;
29
- /** Get or create a reusable canvas context for Canvas TextMetrics. */
51
+ /** @internal Get or create a reusable canvas context */
30
52
  private _getMeasureContext;
53
+ /**
54
+ * Set measurement mode.
55
+ * - `'browser'` — hhea.ascender/descender (default)
56
+ * - `'office'` — OS/2.usWinAscent/usWinDescent
57
+ */
31
58
  setMode(mode: 'browser' | 'office'): void;
59
+ /** Get current measurement mode. */
32
60
  getMode(): 'browser' | 'office';
61
+ /**
62
+ * @internal Flatten the nested registry for office mode.
63
+ */
64
+ private _flattenCache;
33
65
  /**
34
66
  * Register a binary font for use with fontkit.
35
67
  *
@@ -37,9 +69,6 @@ export declare class FontMetricsProvider implements IFontMetricsProvider {
37
69
  * In the browser the caller must provide font bytes (e.g. fetched via
38
70
  * `getFontBuffer()` from `../utils/font.js`).
39
71
  *
40
- * Tracks pending registrations to detect race conditions where
41
- * getMetrics() is called before registration completes.
42
- *
43
72
  * @param source Font file bytes (ArrayBuffer / Uint8Array), or a URL string
44
73
  * @param sourcePath Optional filesystem path (used for @napi-rs/canvas in Node.js)
45
74
  */
@@ -47,19 +76,49 @@ export declare class FontMetricsProvider implements IFontMetricsProvider {
47
76
  weight?: string;
48
77
  style?: string;
49
78
  }, source: string | ArrayBuffer | Uint8Array, sourcePath?: string): Promise<void>;
50
- /** Internal registration logic — not tracked, exposed for direct use if needed. */
79
+ /** @internal Internal registration logic */
51
80
  private _registerFontInternal;
52
81
  /**
53
82
  * Wait for all in-flight font registrations to complete.
54
83
  * Useful after a batch of registerFont() calls before layout.
84
+ *
85
+ * @beta — may change with notice
55
86
  */
56
87
  waitForPendingRegistrations(): Promise<void>;
57
88
  /**
58
- * Get font engine FontFace object for per-character calculations.
59
- * Returns undefined if font is not registered.
89
+ * List all families registered in the provider.
90
+ *
91
+ * @beta — may change with notice
92
+ */
93
+ getRegisteredFamilies(): string[];
94
+ /**
95
+ * Get all variant keys registered for a given family.
96
+ * Returns empty array if family not found.
97
+ *
98
+ * @beta — may change with notice
99
+ */
100
+ getFamilyVariants(family: string): string[];
101
+ /**
102
+ * Get font engine FontFace for per-character calculations.
103
+ * Uses the same smart fallback logic as getMetrics().
60
104
  */
61
105
  getFont(family: string, weight?: string, style?: string): FontFace | undefined;
106
+ /**
107
+ * @internal Resolve a font request with fallback.
108
+ * Returns { font, resolvedWeight, resolvedStyle } or null.
109
+ */
110
+ private _resolveFont;
111
+ /**
112
+ * Get pixel-scale metrics for a given font family, size, weight, and style.
113
+ *
114
+ * Resolution order:
115
+ * 1. FontEngine (fontkit) from registry — with smart weight/style fallback
116
+ * 2. Canvas TextMetrics (browser fallback when fontkit unavailable)
117
+ *
118
+ * @throws FontNotFoundError when font is neither registered nor available via Canvas
119
+ */
62
120
  getMetrics(fontFamily: string, fontSize: number, weight?: string, style?: string): FontMetrics;
63
121
  }
64
122
  /** Singleton */
65
123
  export declare const fontMetricsProvider: FontMetricsProvider;
124
+ //# sourceMappingURL=FontMetricsProvider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FontMetricsProvider.d.ts","sourceRoot":"","sources":["../../src/measure/FontMetricsProvider.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAC/E,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAMhD;;;GAGG;AACH,eAAO,MAAM,oBAAoB,MAAM,CAAC;AAyExC;;;;;;;;;;;;;;;GAeG;AACH,qBAAa,mBAAoB,YAAW,oBAAoB;IAC9D,gEAAgE;IAChE,OAAO,CAAC,QAAQ,CAA4C;IAE5D,gEAAgE;IAChE,OAAO,CAAC,YAAY,CAAkC;IAEtD,gBAAgB;IAChB,OAAO,CAAC,IAAI,CAAmC;IAE/C,qFAAqF;IACrF,OAAO,CAAC,oBAAoB,CAA4B;IAExD,2EAA2E;IAC3E,OAAO,CAAC,cAAc,CAAoD;IAC1E,gBAAgB;IAChB,OAAO,CAAC,WAAW,CAA6E;IAEhG,wDAAwD;IACxD,OAAO,CAAC,kBAAkB;IAe1B;;;;OAIG;IACH,OAAO,CAAC,IAAI,EAAE,SAAS,GAAG,QAAQ,GAAG,IAAI;IAWzC,oCAAoC;IACpC,OAAO,IAAI,SAAS,GAAG,QAAQ;IAI/B;;OAEG;IACH,OAAO,CAAC,aAAa;IAYrB;;;;;;;;;OASG;IACG,YAAY,CAChB,MAAM,EAAE,MAAM,EACd,OAAO,EAAE;QAAE,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,EAC5C,MAAM,EAAE,MAAM,GAAG,WAAW,GAAG,UAAU,EACzC,UAAU,CAAC,EAAE,MAAM,GAClB,OAAO,CAAC,IAAI,CAAC;IAUhB,4CAA4C;YAC9B,qBAAqB;IAmCnC;;;;;OAKG;IACG,2BAA2B,IAAI,OAAO,CAAC,IAAI,CAAC;IAMlD;;;;OAIG;IACH,qBAAqB,IAAI,MAAM,EAAE;IAIjC;;;;;OAKG;IACH,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE;IAO3C;;;OAGG;IACH,OAAO,CACL,MAAM,EAAE,MAAM,EACd,MAAM,SAAW,EACjB,KAAK,SAAW,GACf,QAAQ,GAAG,SAAS;IAMvB;;;OAGG;IACH,OAAO,CAAC,YAAY;IAsEpB;;;;;;;;OAQG;IACH,UAAU,CACR,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,MAAM,EAChB,MAAM,SAAW,EACjB,KAAK,SAAW,GACf,WAAW;CA6Ef;AAED,gBAAgB;AAChB,eAAO,MAAM,mBAAmB,EAAE,mBAA+C,CAAC"}
@@ -4,3 +4,4 @@
4
4
  export declare class FontNotFoundError extends Error {
5
5
  constructor(family: string, weight?: string, style?: string);
6
6
  }
7
+ //# sourceMappingURL=FontNotFoundError.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FontNotFoundError.d.ts","sourceRoot":"","sources":["../../src/measure/FontNotFoundError.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,qBAAa,iBAAkB,SAAQ,KAAK;gBAExC,MAAM,EAAE,MAAM,EACd,MAAM,SAAW,EACjB,KAAK,SAAW;CAQnB"}
@@ -44,3 +44,4 @@ export declare class SystemFontRegistry {
44
44
  /** Singleton instance */
45
45
  export declare const systemFontRegistry: SystemFontRegistry;
46
46
  export {};
47
+ //# sourceMappingURL=SystemFontRegistry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SystemFontRegistry.d.ts","sourceRoot":"","sources":["../../src/measure/SystemFontRegistry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAKH,UAAU,UAAU;IAClB,2CAA2C;IAC3C,KAAK,EAAE,MAAM,CAAC;IACd,mDAAmD;IACnD,UAAU,EAAE,MAAM,CAAC;CACpB;AA4CD,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,MAAM,CAAC,SAAS,CAAqB;IAE7C,4CAA4C;IAC5C,OAAO,CAAC,UAAU,CAA2B;IAE7C,OAAO;IAEP,MAAM,KAAK,QAAQ,IAAI,kBAAkB,CAKxC;IAED;;;;;;;;OAQG;IACG,IAAI,IAAI,OAAO,CAAC,UAAU,CAAC;IA8CjC;;OAEG;IACH,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO;IAIrC;;OAEG;IACH,qBAAqB,IAAI,MAAM,EAAE;CAGlC;AAED,yBAAyB;AACzB,eAAO,MAAM,kBAAkB,EAAE,kBAAgD,CAAC"}
@@ -28,3 +28,4 @@ export declare function enableOfficeTextMeasure(fontCache: Map<string, any>): vo
28
28
  * Restore original ctx.measureText.
29
29
  */
30
30
  export declare function disableOfficeTextMeasure(): void;
31
+ //# sourceMappingURL=canvas-polyfill.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"canvas-polyfill.d.ts","sourceRoot":"","sources":["../../src/measure/canvas-polyfill.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAwLH;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAUzE;AAED;;;GAGG;AACH,wBAAgB,uBAAuB,CAAC,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,IAAI,CASzE;AAED;;GAEG;AACH,wBAAgB,wBAAwB,IAAI,IAAI,CAS/C"}
@@ -597,3 +597,4 @@ export declare const DEFAULT_PARAGRAPH_STYLE: ParagraphStyle;
597
597
  * and no `defaultStyle` is set on the `TextFrame`.
598
598
  */
599
599
  export declare const DEFAULT_TEXT_STYLE: Partial<TextRun>;
600
+ //# sourceMappingURL=Document.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Document.d.ts","sourceRoot":"","sources":["../../src/types/Document.ts"],"names":[],"mappings":"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"}
@@ -59,3 +59,4 @@ export interface GlyphData {
59
59
  advance: number;
60
60
  x: number;
61
61
  }
62
+ //# sourceMappingURL=FontTypes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FontTypes.d.ts","sourceRoot":"","sources":["../../src/types/FontTypes.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,6DAA6D;AAC7D,MAAM,WAAW,WAAW;IAC1B,0BAA0B;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,gDAAgD;IAChD,OAAO,EAAE,MAAM,CAAC;IAChB,iBAAiB;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,wCAAwC;IACxC,UAAU,EAAE,MAAM,CAAC;IACnB;;;;;;OAMG;IACH,WAAW,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,QAAQ,GAAG,UAAU,CAAC;CACvD;AAED,8CAA8C;AAC9C,MAAM,WAAW,oBAAoB;IACnC;;;;OAIG;IACH,OAAO,CAAC,IAAI,EAAE,SAAS,GAAG,QAAQ,GAAG,IAAI,CAAC;IAE1C;;OAEG;IACH,OAAO,IAAI,SAAS,GAAG,QAAQ,CAAC;IAEhC;;;;;OAKG;IACH,YAAY,CACV,MAAM,EAAE,MAAM,EACd,OAAO,EAAE;QAAE,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,EAC5C,MAAM,EAAE,MAAM,GAAG,MAAM,EACvB,UAAU,CAAC,EAAE,MAAM,GAClB,IAAI,CAAC;IAER;;OAEG;IACH,UAAU,CACR,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,MAAM,EAChB,MAAM,CAAC,EAAE,MAAM,EACf,KAAK,CAAC,EAAE,MAAM,GACb,WAAW,CAAC;CAChB;AAED,gFAAgF;AAChF,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,CAAC,EAAE,MAAM,CAAC;CACX"}
@@ -135,3 +135,4 @@ export interface SemanticParagraph {
135
135
  height: number;
136
136
  lines: SemanticLine[];
137
137
  }
138
+ //# sourceMappingURL=LayoutTypes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LayoutTypes.d.ts","sourceRoot":"","sources":["../../src/types/LayoutTypes.ts"],"names":[],"mappings":"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"}
@@ -9,3 +9,4 @@
9
9
  */
10
10
  /** `true` when running on Node.js or Bun (has `process.versions.node`) */
11
11
  export declare const isNodeLike: boolean;
12
+ //# sourceMappingURL=env.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"env.d.ts","sourceRoot":"","sources":["../../src/utils/env.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAKH,0EAA0E;AAC1E,eAAO,MAAM,UAAU,EAAE,OAGmB,CAAC"}
@@ -14,3 +14,4 @@
14
14
  * @returns Font file bytes as an ArrayBuffer
15
15
  */
16
16
  export declare function getFontBuffer(fontUrl: string): Promise<ArrayBuffer>;
17
+ //# sourceMappingURL=font.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"font.d.ts","sourceRoot":"","sources":["../../src/utils/font.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH;;;;;;;;GAQG;AACH,wBAAsB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CAWzE"}
@@ -42,3 +42,4 @@ export interface ParagraphGroup {
42
42
  * ```
43
43
  */
44
44
  export declare function groupLinesByParagraph(lines: Line[]): ParagraphGroup[];
45
+ //# sourceMappingURL=groupLinesByParagraph.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"groupLinesByParagraph.d.ts","sourceRoot":"","sources":["../../src/utils/groupLinesByParagraph.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,yBAAyB,CAAC;AAEpD;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,+BAA+B;IAC/B,KAAK,EAAE,IAAI,EAAE,CAAC;IACd,iDAAiD;IACjD,IAAI,EAAE,MAAM,CAAC;IACb,sDAAsD;IACtD,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,IAAI,EAAE,GAAG,cAAc,EAAE,CA2BrE"}
@@ -39,3 +39,4 @@ export declare function defaultBulletChar(level: number): string;
39
39
  * @see {@link https://www.w3.org/TR/css-counter-styles-3/ | CSS Counter Styles Level 3}
40
40
  */
41
41
  export declare function formatListNumber(n: number, format: NumberFormat): string;
42
+ //# sourceMappingURL=list.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../src/utils/list.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAEzD;;;;;GAKG;AACH,eAAO,MAAM,iBAAiB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAIpD,CAAC;AAKF;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAEvD;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,GAAG,MAAM,CAexE"}
@@ -30,3 +30,4 @@ import type { TextTransform } from '../types/Document.js';
30
30
  * ```
31
31
  */
32
32
  export declare function transformText(text: string, transform?: TextTransform): string;
33
+ //# sourceMappingURL=textTransform.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"textTransform.d.ts","sourceRoot":"","sources":["../../src/utils/textTransform.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAE1D;;;;;;;;;;;;;GAaG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,aAAa,GAAG,MAAM,CA8D7E"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vyaz/core",
3
- "version": "0.0.10",
3
+ "version": "0.0.14",
4
4
  "type": "module",
5
5
  "main": "./dist/index.js",
6
6
  "types": "./dist/index.d.ts",
@@ -28,7 +28,8 @@
28
28
  "child_process": false
29
29
  },
30
30
  "scripts": {
31
- "build": "bun build ./src/index.ts --outdir ./dist --target bun --external @chenglou/pretext --external js-yaml --external @napi-rs/canvas --external fontkit --external get-system-fonts && bun build ./src/index.browser.ts --outdir ./dist --outfile ./dist/index.browser.js --target browser && tsc --project tsconfig.json --emitDeclarationOnly",
31
+ "build": "bun build ./src/index.ts --outdir ./dist --target bun --external @chenglou/pretext --external js-yaml --external @napi-rs/canvas --external fontkit --external get-system-fonts && bun build ./src/index.browser.ts --outdir ./dist --outfile ./dist/index.browser.js --target browser && tsc -b",
32
+ "prepublishOnly": "bun run build",
32
33
  "test": "bun test"
33
34
  },
34
35
  "dependencies": {