@superdoc-dev/cli 0.16.0-next.6 → 0.16.0-next.7

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 (2) hide show
  1. package/dist/index.js +634 -27
  2. package/package.json +8 -8
package/dist/index.js CHANGED
@@ -228922,7 +228922,7 @@ var init_remark_gfm_eZN6yzWQ_es = __esm(() => {
228922
228922
  init_remark_gfm_BhnWr3yf_es();
228923
228923
  });
228924
228924
 
228925
- // ../../packages/superdoc/dist/chunks/src-DiNnkze-.es.js
228925
+ // ../../packages/superdoc/dist/chunks/src-BuzqViEa.es.js
228926
228926
  function deleteProps(obj, propOrProps) {
228927
228927
  const props = typeof propOrProps === "string" ? [propOrProps] : propOrProps;
228928
228928
  const removeNested = (target, pathParts, index2 = 0) => {
@@ -248864,9 +248864,9 @@ function findDonorMarkerFont(abstract) {
248864
248864
  continue;
248865
248865
  if (rFontsHasSymbolFont(rFonts))
248866
248866
  continue;
248867
- const family = readRFontsFamily(rFonts);
248868
- if (family)
248869
- return family;
248867
+ const family$1 = readRFontsFamily(rFonts);
248868
+ if (family$1)
248869
+ return family$1;
248870
248870
  }
248871
248871
  }
248872
248872
  function normalizeLevelFontForNumFmt(lvlEl, newNumFmt) {
@@ -268105,6 +268105,181 @@ function renderPartialEmbeddedTable(params$1) {
268105
268105
  hasSdtContainerChrome: tableResult.hasSdtContainerChrome
268106
268106
  };
268107
268107
  }
268108
+ function isSettled(status) {
268109
+ return SETTLED_STATUSES.includes(status);
268110
+ }
268111
+ function normalizeFamilyKey$1(family$1) {
268112
+ return family$1.trim().replace(/^["']|["']$/g, "").toLowerCase();
268113
+ }
268114
+ function splitStack(cssFontFamily) {
268115
+ return cssFontFamily.split(",").map((part) => part.trim()).filter(Boolean);
268116
+ }
268117
+ function physicalFor(bareFamily) {
268118
+ const physical = BUNDLED_SUBSTITUTES[normalizeFamilyKey$1(bareFamily)];
268119
+ return physical ? {
268120
+ physical,
268121
+ mapped: true
268122
+ } : {
268123
+ physical: bareFamily,
268124
+ mapped: false
268125
+ };
268126
+ }
268127
+ function resolveFontFamily2(logicalFamily) {
268128
+ const { physical, mapped } = physicalFor(splitStack(logicalFamily)[0] ?? logicalFamily);
268129
+ return {
268130
+ logicalFamily,
268131
+ physicalFamily: physical,
268132
+ reason: mapped ? "bundled_substitute" : "as_requested"
268133
+ };
268134
+ }
268135
+ function resolvePhysicalFamily(cssFontFamily) {
268136
+ if (!cssFontFamily)
268137
+ return cssFontFamily;
268138
+ const parts = splitStack(cssFontFamily);
268139
+ if (parts.length === 0)
268140
+ return cssFontFamily;
268141
+ const { physical, mapped } = physicalFor(parts[0]);
268142
+ if (!mapped)
268143
+ return cssFontFamily;
268144
+ return [physical, ...parts.slice(1)].join(", ");
268145
+ }
268146
+ function resolvePrimaryPhysicalFamily(family$1) {
268147
+ return physicalFor(splitStack(family$1)[0] ?? family$1).physical;
268148
+ }
268149
+ function resolvePhysicalFamilies(families) {
268150
+ const out = /* @__PURE__ */ new Set;
268151
+ for (const family$1 of families)
268152
+ if (family$1)
268153
+ out.add(resolvePrimaryPhysicalFamily(family$1));
268154
+ return [...out];
268155
+ }
268156
+ function getFontConfigVersion() {
268157
+ return fontConfigVersion;
268158
+ }
268159
+ function bumpFontConfigVersion() {
268160
+ return fontConfigVersion += 1;
268161
+ }
268162
+ function fourFaces(filePrefix) {
268163
+ return [
268164
+ {
268165
+ weight: "normal",
268166
+ style: "normal",
268167
+ file: `${filePrefix}-Regular.woff2`
268168
+ },
268169
+ {
268170
+ weight: "bold",
268171
+ style: "normal",
268172
+ file: `${filePrefix}-Bold.woff2`
268173
+ },
268174
+ {
268175
+ weight: "normal",
268176
+ style: "italic",
268177
+ file: `${filePrefix}-Italic.woff2`
268178
+ },
268179
+ {
268180
+ weight: "bold",
268181
+ style: "italic",
268182
+ file: `${filePrefix}-BoldItalic.woff2`
268183
+ }
268184
+ ];
268185
+ }
268186
+ function family(name, filePrefix, license) {
268187
+ return {
268188
+ family: name,
268189
+ license,
268190
+ faces: fourFaces(filePrefix)
268191
+ };
268192
+ }
268193
+ function withTrailingSlash(base5) {
268194
+ return base5.endsWith("/") ? base5 : `${base5}/`;
268195
+ }
268196
+ function joinUrl(base5, file) {
268197
+ return `${withTrailingSlash(base5)}${file}`;
268198
+ }
268199
+ function weightToken(weight) {
268200
+ return weight === "bold" ? "700" : "400";
268201
+ }
268202
+ function bundledAssetSignature(resolve3) {
268203
+ const family$1 = BUNDLED_MANIFEST[0];
268204
+ const face = family$1?.faces[0];
268205
+ if (!family$1 || !face)
268206
+ return "";
268207
+ return resolve3({
268208
+ file: face.file,
268209
+ family: family$1.family,
268210
+ weight: weightToken(face.weight),
268211
+ style: face.style,
268212
+ source: "bundled-substitute"
268213
+ });
268214
+ }
268215
+ function installBundledSubstitutes(registry2, options = {}) {
268216
+ const resolve3 = options.resolveAssetUrl ?? ((context) => joinUrl(options.assetBaseUrl ?? defaultAssetBase, context.file));
268217
+ const signature = bundledAssetSignature(resolve3);
268218
+ const installed = installedRegistries.get(registry2);
268219
+ if (installed !== undefined) {
268220
+ if (installed !== signature)
268221
+ console.warn(`[superdoc] bundled fonts are already registered for this document from "${installed}"; a later fonts config resolving to "${signature}" is ignored. Use one fonts.assetBaseUrl / fonts.resolveAssetUrl per document.`);
268222
+ return;
268223
+ }
268224
+ installedRegistries.set(registry2, signature);
268225
+ for (const family$1 of BUNDLED_MANIFEST)
268226
+ for (const face of family$1.faces) {
268227
+ const context = {
268228
+ file: face.file,
268229
+ family: family$1.family,
268230
+ weight: weightToken(face.weight),
268231
+ style: face.style,
268232
+ source: "bundled-substitute"
268233
+ };
268234
+ registry2.register({
268235
+ family: family$1.family,
268236
+ source: `url(${resolve3(context)})`,
268237
+ descriptors: {
268238
+ weight: face.weight,
268239
+ style: face.style
268240
+ }
268241
+ });
268242
+ }
268243
+ }
268244
+ function buildFontReport(logicalFamilies, registry2) {
268245
+ const seen = /* @__PURE__ */ new Set;
268246
+ const report = [];
268247
+ for (const logical of logicalFamilies) {
268248
+ if (!logical || seen.has(logical))
268249
+ continue;
268250
+ seen.add(logical);
268251
+ const { physicalFamily, reason } = resolveFontFamily2(logical);
268252
+ const loadStatus = registry2.getStatus(physicalFamily);
268253
+ report.push({
268254
+ logicalFamily: logical,
268255
+ physicalFamily,
268256
+ reason,
268257
+ loadStatus,
268258
+ exportFamily: logical,
268259
+ missing: isSettled(loadStatus) && loadStatus !== "loaded"
268260
+ });
268261
+ }
268262
+ return report;
268263
+ }
268264
+ function quoteFamily(family$1) {
268265
+ return `"${family$1.replace(/\\/g, "\\\\").replace(/"/g, "\\\"")}"`;
268266
+ }
268267
+ function getFontRegistryFor(fontSet, FontFaceCtor) {
268268
+ if (!fontSet) {
268269
+ if (!domlessRegistry)
268270
+ domlessRegistry = new FontRegistry({});
268271
+ return domlessRegistry;
268272
+ }
268273
+ let registry2 = registriesByFontSet.get(fontSet);
268274
+ if (!registry2) {
268275
+ registry2 = new FontRegistry({
268276
+ fontSet,
268277
+ FontFaceCtor
268278
+ });
268279
+ registriesByFontSet.set(fontSet, registry2);
268280
+ }
268281
+ return registry2;
268282
+ }
268108
268283
  function isDigit(ch) {
268109
268284
  return ch >= "0" && ch <= "9";
268110
268285
  }
@@ -274903,8 +275078,8 @@ function isTextRun$3(run2) {
274903
275078
  function fontString(run2) {
274904
275079
  const textRun = isTextRun$3(run2) ? run2 : null;
274905
275080
  const size$1 = textRun?.fontSize ?? 16;
274906
- const family = textRun?.fontFamily ?? "Arial";
274907
- return `${textRun?.italic ? "italic " : ""}${textRun?.bold ? "bold " : ""}${size$1}px ${family}`.trim();
275081
+ const family$1 = textRun?.fontFamily ?? "Arial";
275082
+ return `${textRun?.italic ? "italic " : ""}${textRun?.bold ? "bold " : ""}${size$1}px ${family$1}`.trim();
274908
275083
  }
274909
275084
  function runText(run2) {
274910
275085
  if (isEmptySdtPlaceholderRun(run2))
@@ -281438,6 +281613,9 @@ function normalizeRotation(rotation) {
281438
281613
  function degToRad(degrees) {
281439
281614
  return degrees * Math.PI / 180;
281440
281615
  }
281616
+ function clearMeasurementCache() {
281617
+ cache.clear();
281618
+ }
281441
281619
  function getMeasuredTextWidth(text5, font, letterSpacing, ctx$1) {
281442
281620
  if (text5.length > 32000)
281443
281621
  text5 = text5.substring(0, 32000);
@@ -281518,6 +281696,9 @@ function getFontMetrics(ctx$1, fontInfo, mode, fonts) {
281518
281696
  fontMetricsCache.set(key2, result);
281519
281697
  return result;
281520
281698
  }
281699
+ function clearFontMetricsCache() {
281700
+ fontMetricsCache.clear();
281701
+ }
281521
281702
  function computeFixedTableColumnWidths(input2) {
281522
281703
  const gridColumnCount = Math.max(0, sanitizeColumnCount(input2.gridColumnCount), Array.isArray(input2.preferredColumnWidths) ? input2.preferredColumnWidths.length : 0);
281523
281704
  const preferredTableWidth = sanitizeOptionalWidth$1(input2.preferredTableWidth);
@@ -282583,6 +282764,10 @@ function isSlightlyUnderPreferredTableWidth(totalColumnWidth, preferredTableWidt
282583
282764
  return false;
282584
282765
  return preferredTableWidth - totalColumnWidth <= preferredTableWidth * 0.05;
282585
282766
  }
282767
+ function clearTableAutoFitMeasurementCaches() {
282768
+ tableCellMetricsCache.clear();
282769
+ autoFitTableResultCache.clear();
282770
+ }
282586
282771
  function buildTableCellContentMetricsCacheKey(cell2, options) {
282587
282772
  return stableSerialize({
282588
282773
  maxWidth: Math.max(1, Math.round(options.maxWidth)),
@@ -282920,6 +283105,12 @@ function stableSerialize(value) {
282920
283105
  function isWordCharacter(value) {
282921
283106
  return /[A-Za-z0-9]/.test(value);
282922
283107
  }
283108
+ function clearTextMeasurementCaches() {
283109
+ clearMeasurementCache();
283110
+ clearFontMetricsCache();
283111
+ clearTableAutoFitMeasurementCaches();
283112
+ canvasContext = null;
283113
+ }
282923
283114
  function getTableBorderWidthPx(value) {
282924
283115
  if (value == null)
282925
283116
  return 0;
@@ -282960,13 +283151,14 @@ function buildFontString(run2) {
282960
283151
  if (run2.bold)
282961
283152
  parts.push("bold");
282962
283153
  parts.push(`${run2.fontSize}px`);
283154
+ const physicalFamily = resolvePhysicalFamily(run2.fontFamily);
282963
283155
  if (measurementConfig.mode === "deterministic")
282964
283156
  parts.push(measurementConfig.fonts.fallbackStack.length > 0 ? measurementConfig.fonts.fallbackStack.join(", ") : measurementConfig.fonts.deterministicFamily);
282965
283157
  else
282966
- parts.push(run2.fontFamily);
283158
+ parts.push(physicalFamily);
282967
283159
  return {
282968
283160
  font: parts.join(" "),
282969
- fontFamily: run2.fontFamily
283161
+ fontFamily: physicalFamily
282970
283162
  };
282971
283163
  }
282972
283164
  function measureText(text5, font, ctx$1, _fontFamily, _letterSpacing) {
@@ -285290,6 +285482,48 @@ function ensureEndnoteMarker(blocks2, id2, endnoteNumberById, endnoteNumberForma
285290
285482
  }
285291
285483
  runs2.unshift(markerRun);
285292
285484
  }
285485
+ function normalizeFamilyKey(family$1) {
285486
+ return family$1.trim().replace(/^["']|["']$/g, "").toLowerCase();
285487
+ }
285488
+ function summarize(results) {
285489
+ const summary = emptySummary();
285490
+ summary.results = results;
285491
+ for (const result of results)
285492
+ if (result.status === "loaded")
285493
+ summary.loaded += 1;
285494
+ else if (result.status === "failed")
285495
+ summary.failed += 1;
285496
+ else if (result.status === "timed_out")
285497
+ summary.timedOut += 1;
285498
+ else if (result.status === "fallback_used")
285499
+ summary.fallbackUsed += 1;
285500
+ return summary;
285501
+ }
285502
+ function emptySummary() {
285503
+ return {
285504
+ loaded: 0,
285505
+ failed: 0,
285506
+ timedOut: 0,
285507
+ fallbackUsed: 0,
285508
+ results: []
285509
+ };
285510
+ }
285511
+ function defaultFontEnvironment() {
285512
+ const doc$12 = globalThis.document ?? null;
285513
+ const view = doc$12?.defaultView ?? null;
285514
+ const fontSet = doc$12?.fonts ?? null;
285515
+ const ctor = view?.FontFace ?? (typeof FontFace !== "undefined" ? FontFace : null);
285516
+ if (!fontSet || !ctor)
285517
+ return null;
285518
+ return {
285519
+ fontSet,
285520
+ FontFaceCtor: ctor
285521
+ };
285522
+ }
285523
+ function defaultInvalidate() {
285524
+ clearTextMeasurementCaches();
285525
+ measureCache.clear();
285526
+ }
285293
285527
  function buildSemanticFootnoteBlocks(input2, footnotesMode) {
285294
285528
  if (!input2 || input2.refs.length === 0 || input2.blocksById.size === 0)
285295
285529
  return [];
@@ -308423,7 +308657,143 @@ menclose::after {
308423
308657
  const visualTextEndOffset = lineEl.dir === "rtl" || lineEl.style.direction === "rtl" ? alignmentOffset : alignmentOffset + lineWidth;
308424
308658
  mark2.style.left = `${Math.max(0, leftOffsetPx + visualTextEndOffset)}px`;
308425
308659
  lineEl.appendChild(mark2);
308426
- }, DEFAULT_SUPERSCRIPT_RAISE_RATIO = 0.33, DEFAULT_SUBSCRIPT_LOWER_RATIO = 0.14, hasVerticalPositioning = (run2) => normalizeBaselineShift(run2.baselineShift) != null || run2.vertAlign === "superscript" || run2.vertAlign === "subscript", applyRunVerticalPositioning = (element3, run2) => {
308660
+ }, SETTLED_STATUSES, BUNDLED_SUBSTITUTES, fontConfigVersion = 0, BUNDLED_MANIFEST, defaultAssetBase = "/fonts/", installedRegistries, DEFAULT_FONT_LOAD_TIMEOUT_MS = 3000, DEFAULT_PROBE_SIZE = "16px", FontRegistry = class {
308661
+ #fontSet;
308662
+ #FontFaceCtor;
308663
+ #probeSize;
308664
+ #scheduleTimeout;
308665
+ #cancelTimeout;
308666
+ #managed = /* @__PURE__ */ new Map;
308667
+ #status = /* @__PURE__ */ new Map;
308668
+ #sources = /* @__PURE__ */ new Map;
308669
+ #warnedFailures = /* @__PURE__ */ new Set;
308670
+ #inflight = /* @__PURE__ */ new Map;
308671
+ constructor(options = {}) {
308672
+ this.#fontSet = options.fontSet ?? null;
308673
+ this.#FontFaceCtor = options.FontFaceCtor ?? null;
308674
+ this.#probeSize = options.probeSize ?? DEFAULT_PROBE_SIZE;
308675
+ this.#scheduleTimeout = options.scheduleTimeout ?? ((cb, ms) => globalThis.setTimeout(cb, ms));
308676
+ this.#cancelTimeout = options.cancelTimeout ?? ((handle3) => globalThis.clearTimeout(handle3));
308677
+ }
308678
+ register(descriptor) {
308679
+ const { family: family$1, source, descriptors: descriptors2 } = descriptor;
308680
+ if (this.#FontFaceCtor && this.#fontSet) {
308681
+ const face = new this.#FontFaceCtor(family$1, source, descriptors2);
308682
+ this.#fontSet.add(face);
308683
+ this.#managed.set(family$1, face);
308684
+ }
308685
+ if (typeof source === "string") {
308686
+ const list5 = this.#sources.get(family$1) ?? [];
308687
+ if (!list5.includes(source))
308688
+ list5.push(source);
308689
+ this.#sources.set(family$1, list5);
308690
+ }
308691
+ if (!this.#status.has(family$1))
308692
+ this.#status.set(family$1, "unloaded");
308693
+ return {
308694
+ family: family$1,
308695
+ status: this.#status.get(family$1) ?? "unloaded"
308696
+ };
308697
+ }
308698
+ isManaged(family$1) {
308699
+ return this.#managed.has(family$1);
308700
+ }
308701
+ getStatus(family$1) {
308702
+ return this.#status.get(family$1) ?? "unloaded";
308703
+ }
308704
+ isAvailable(family$1) {
308705
+ if (!this.#fontSet)
308706
+ return false;
308707
+ try {
308708
+ return this.#fontSet.check(`${this.#probeSize} ${quoteFamily(family$1)}`);
308709
+ } catch {
308710
+ return false;
308711
+ }
308712
+ }
308713
+ awaitFace(family$1, timeoutMs = DEFAULT_FONT_LOAD_TIMEOUT_MS) {
308714
+ if (this.#status.get(family$1) === "loaded")
308715
+ return Promise.resolve({
308716
+ family: family$1,
308717
+ status: "loaded"
308718
+ });
308719
+ const existing = this.#inflight.get(family$1);
308720
+ if (existing)
308721
+ return existing;
308722
+ const probe = this.#loadOne(family$1, timeoutMs).finally(() => {
308723
+ this.#inflight.delete(family$1);
308724
+ });
308725
+ this.#inflight.set(family$1, probe);
308726
+ return probe;
308727
+ }
308728
+ async awaitFaces(families, options = {}) {
308729
+ const unique$2 = [...new Set(families)];
308730
+ const timeoutMs = options.timeoutMs ?? 3000;
308731
+ return Promise.all(unique$2.map((family$1) => this.awaitFace(family$1, timeoutMs)));
308732
+ }
308733
+ getRequiredFaces(families, timeoutMs = DEFAULT_FONT_LOAD_TIMEOUT_MS) {
308734
+ return [...new Set(families)].map((family$1) => ({
308735
+ family: family$1,
308736
+ status: this.getStatus(family$1),
308737
+ ready: this.awaitFace(family$1, timeoutMs)
308738
+ }));
308739
+ }
308740
+ getStates() {
308741
+ return [...this.#status.entries()].map(([family$1, status]) => ({
308742
+ family: family$1,
308743
+ status
308744
+ }));
308745
+ }
308746
+ async#loadOne(family$1, timeoutMs) {
308747
+ const fontSet = this.#fontSet;
308748
+ if (!fontSet) {
308749
+ this.#status.set(family$1, "fallback_used");
308750
+ return {
308751
+ family: family$1,
308752
+ status: "fallback_used"
308753
+ };
308754
+ }
308755
+ this.#status.set(family$1, "loading");
308756
+ const probe = `${this.#probeSize} ${quoteFamily(family$1)}`;
308757
+ const TIMEOUT = Symbol("timeout");
308758
+ let handle3;
308759
+ const timeout$1 = new Promise((resolve3) => {
308760
+ handle3 = this.#scheduleTimeout(() => resolve3(TIMEOUT), timeoutMs);
308761
+ });
308762
+ try {
308763
+ const settled = await Promise.race([fontSet.load(probe), timeout$1]);
308764
+ if (settled === TIMEOUT) {
308765
+ this.#status.set(family$1, "timed_out");
308766
+ return {
308767
+ family: family$1,
308768
+ status: "timed_out"
308769
+ };
308770
+ }
308771
+ const status = settled.length > 0 ? "loaded" : "fallback_used";
308772
+ this.#status.set(family$1, status);
308773
+ return {
308774
+ family: family$1,
308775
+ status
308776
+ };
308777
+ } catch {
308778
+ this.#status.set(family$1, "failed");
308779
+ this.#warnLoadFailureOnce(family$1);
308780
+ return {
308781
+ family: family$1,
308782
+ status: "failed"
308783
+ };
308784
+ } finally {
308785
+ this.#cancelTimeout(handle3);
308786
+ }
308787
+ }
308788
+ #warnLoadFailureOnce(family$1) {
308789
+ if (this.#warnedFailures.has(family$1))
308790
+ return;
308791
+ this.#warnedFailures.add(family$1);
308792
+ const sources = this.#sources.get(family$1);
308793
+ const detail = sources && sources.length ? ` from ${sources.join(", ")}` : "";
308794
+ console.warn(`[superdoc] font asset failed to load for "${family$1}"${detail}. Check fonts.assetBaseUrl / fonts.resolveAssetUrl so the bundled .woff2 are served.`);
308795
+ }
308796
+ }, registriesByFontSet, domlessRegistry = null, DEFAULT_SUPERSCRIPT_RAISE_RATIO = 0.33, DEFAULT_SUBSCRIPT_LOWER_RATIO = 0.14, hasVerticalPositioning = (run2) => normalizeBaselineShift(run2.baselineShift) != null || run2.vertAlign === "superscript" || run2.vertAlign === "subscript", applyRunVerticalPositioning = (element3, run2) => {
308427
308797
  if (hasVerticalPositioning(run2))
308428
308798
  element3.style.lineHeight = "1";
308429
308799
  const explicitBaselineShift = normalizeBaselineShift(run2.baselineShift);
@@ -308446,7 +308816,7 @@ menclose::after {
308446
308816
  }, applyRunStyles = (element3, run2, _isLink = false) => {
308447
308817
  if (run2.kind === "tab" || run2.kind === "image" || run2.kind === "lineBreak" || run2.kind === "break" || run2.kind === "fieldAnnotation" || run2.kind === "math")
308448
308818
  return;
308449
- element3.style.fontFamily = run2.fontFamily;
308819
+ element3.style.fontFamily = resolvePhysicalFamily(run2.fontFamily);
308450
308820
  element3.style.fontSize = `${run2.fontSize}px`;
308451
308821
  if (run2.bold)
308452
308822
  element3.style.fontWeight = "bold";
@@ -312612,6 +312982,7 @@ menclose::after {
312612
312982
  return [
312613
312983
  textRun.text ?? "",
312614
312984
  textRun.fontFamily,
312985
+ getFontConfigVersion(),
312615
312986
  textRun.fontSize,
312616
312987
  textRun.bold ? 1 : 0,
312617
312988
  textRun.italic ? 1 : 0,
@@ -313816,8 +314187,8 @@ menclose::after {
313816
314187
  return typeof width === "number" ? width : 0;
313817
314188
  }, isLineBreakRun$1 = (run2) => run2.kind === "lineBreak" || run2.kind === "break" && run2.breakType === "line", markerFontString = (run2) => {
313818
314189
  const size$1 = run2?.fontSize ?? 16;
313819
- const family = run2?.fontFamily ?? "Arial";
313820
- return `${run2?.italic ? "italic " : ""}${run2?.bold ? "bold " : ""}${size$1}px ${family}`.trim();
314190
+ const family$1 = run2?.fontFamily ?? "Arial";
314191
+ return `${run2?.italic ? "italic " : ""}${run2?.bold ? "bold " : ""}${size$1}px ${family$1}`.trim();
313821
314192
  }, buildTabStopsPx$1 = (indent2, tabs, tabIntervalTwips) => {
313822
314193
  const paragraphIndentTwips = {
313823
314194
  left: pxToTwips$1(sanitizeIndent$1(indent2?.left)),
@@ -321048,7 +321419,134 @@ menclose::after {
321048
321419
  }
321049
321420
  }
321050
321421
  }
321051
- }, ENDNOTE_MARKER_DATA_ATTR = "data-sd-endnote-number", DEFAULT_MARKER_FONT_FAMILY = "Arial", DEFAULT_MARKER_FONT_SIZE = 12, DEFAULT_SEMANTIC_FOOTNOTE_HEADING_STYLE, NATIVE_SELECTION_STYLES = `
321422
+ }, ENDNOTE_MARKER_DATA_ATTR = "data-sd-endnote-number", DEFAULT_MARKER_FONT_FAMILY = "Arial", DEFAULT_MARKER_FONT_SIZE = 12, FontReadinessGate = class {
321423
+ #getDocumentFonts;
321424
+ #resolveFamilies;
321425
+ #requestReflow;
321426
+ #getFontEnvironment;
321427
+ #registryOverride;
321428
+ #onRegistryResolved;
321429
+ #timeoutMs;
321430
+ #invalidateCaches;
321431
+ #context = null;
321432
+ #fontConfigVersion = 0;
321433
+ #requiredSignature = "";
321434
+ #requiredFamilies = /* @__PURE__ */ new Set;
321435
+ #seenAvailable = /* @__PURE__ */ new Set;
321436
+ #lastSummary = null;
321437
+ #loadingDoneHandler = null;
321438
+ constructor(options) {
321439
+ this.#getDocumentFonts = options.getDocumentFonts;
321440
+ this.#resolveFamilies = options.resolveFamilies ?? ((families) => families);
321441
+ this.#requestReflow = options.requestReflow;
321442
+ this.#getFontEnvironment = options.getFontEnvironment ?? defaultFontEnvironment;
321443
+ this.#registryOverride = options.registry ?? null;
321444
+ this.#onRegistryResolved = options.onRegistryResolved ?? null;
321445
+ this.#timeoutMs = options.timeoutMs ?? 3000;
321446
+ this.#invalidateCaches = options.invalidateCaches ?? defaultInvalidate;
321447
+ }
321448
+ get fontConfigVersion() {
321449
+ return this.#fontConfigVersion;
321450
+ }
321451
+ getDiagnostics() {
321452
+ return this.#lastSummary;
321453
+ }
321454
+ getReport() {
321455
+ let logical = [];
321456
+ try {
321457
+ logical = this.#getDocumentFonts();
321458
+ } catch {
321459
+ return [];
321460
+ }
321461
+ return buildFontReport(logical, this.#resolveContext().registry);
321462
+ }
321463
+ async ensureReadyForMeasure() {
321464
+ const registry2 = this.#resolveContext().registry;
321465
+ let required;
321466
+ try {
321467
+ required = [...new Set(this.#resolveFamilies(this.#getDocumentFonts()).filter(Boolean))];
321468
+ } catch {
321469
+ return this.#lastSummary ?? emptySummary();
321470
+ }
321471
+ const signature = required.slice().sort().join("|");
321472
+ if (signature === this.#requiredSignature && required.every((family$1) => registry2.getStatus(family$1) === "loaded") && this.#lastSummary)
321473
+ return this.#lastSummary;
321474
+ this.#requiredSignature = signature;
321475
+ this.#requiredFamilies = new Set(required);
321476
+ this.#ensureSubscribed();
321477
+ let results = [];
321478
+ try {
321479
+ results = required.length ? await registry2.awaitFaces(required, { timeoutMs: this.#timeoutMs }) : [];
321480
+ } catch {
321481
+ results = [];
321482
+ }
321483
+ for (const result of results)
321484
+ if (result.status === "loaded")
321485
+ this.#seenAvailable.add(result.family);
321486
+ this.#lastSummary = summarize(results);
321487
+ return this.#lastSummary;
321488
+ }
321489
+ notifyFontConfigChanged() {
321490
+ this.#fontConfigVersion += 1;
321491
+ bumpFontConfigVersion();
321492
+ this.#seenAvailable.clear();
321493
+ this.#requiredSignature = "";
321494
+ this.#invalidateCaches();
321495
+ this.#requestReflow();
321496
+ }
321497
+ dispose() {
321498
+ const fontSet = this.#context?.fontSet ?? null;
321499
+ if (fontSet && this.#loadingDoneHandler && typeof fontSet.removeEventListener === "function")
321500
+ fontSet.removeEventListener("loadingdone", this.#loadingDoneHandler);
321501
+ this.#loadingDoneHandler = null;
321502
+ }
321503
+ #resolveContext() {
321504
+ if (this.#context && this.#context.fontSet)
321505
+ return this.#context;
321506
+ const env2 = this.#getFontEnvironment();
321507
+ const fontSet = env2?.fontSet ?? null;
321508
+ const registry2 = this.#registryOverride ?? getFontRegistryFor(fontSet, env2?.FontFaceCtor ?? null);
321509
+ this.#context = {
321510
+ fontSet,
321511
+ registry: registry2
321512
+ };
321513
+ if (fontSet && this.#onRegistryResolved)
321514
+ try {
321515
+ this.#onRegistryResolved(registry2);
321516
+ } catch {}
321517
+ return this.#context;
321518
+ }
321519
+ #ensureSubscribed() {
321520
+ if (this.#loadingDoneHandler)
321521
+ return;
321522
+ const fontSet = this.#resolveContext().fontSet;
321523
+ if (!fontSet || typeof fontSet.addEventListener !== "function")
321524
+ return;
321525
+ const handler2 = (event) => this.#onLoadingDone(event);
321526
+ fontSet.addEventListener("loadingdone", handler2);
321527
+ this.#loadingDoneHandler = handler2;
321528
+ }
321529
+ #onLoadingDone(event) {
321530
+ const loadedKeys = new Set((event?.fontfaces ?? []).map((face) => normalizeFamilyKey(face.family)));
321531
+ if (loadedKeys.size === 0)
321532
+ return;
321533
+ let changed = false;
321534
+ for (const family$1 of this.#requiredFamilies) {
321535
+ if (this.#seenAvailable.has(family$1))
321536
+ continue;
321537
+ if (loadedKeys.has(normalizeFamilyKey(family$1))) {
321538
+ this.#seenAvailable.add(family$1);
321539
+ changed = true;
321540
+ }
321541
+ }
321542
+ if (!changed)
321543
+ return;
321544
+ this.#fontConfigVersion += 1;
321545
+ bumpFontConfigVersion();
321546
+ this.#invalidateCaches();
321547
+ this.#requestReflow();
321548
+ }
321549
+ }, DEFAULT_SEMANTIC_FOOTNOTE_HEADING_STYLE, NATIVE_SELECTION_STYLES = `
321052
321550
  /* Hide native browser selection on layout engine content.
321053
321551
  * We render our own selection overlay via PresentationEditor's #localSelectionLayer
321054
321552
  * for precise control over selection geometry across pages and zoom levels. */
@@ -321125,7 +321623,7 @@ menclose::after {
321125
321623
  return;
321126
321624
  console.log(...args$1);
321127
321625
  }, HEADER_FOOTER_INIT_BUDGET_MS = 200, MAX_ZOOM_WARNING_THRESHOLD = 10, MAX_SELECTION_RECTS_PER_USER = 100, SEMANTIC_RESIZE_DEBOUNCE_MS = 120, MIN_SEMANTIC_CONTENT_WIDTH_PX = 1, GLOBAL_PERFORMANCE, PresentationEditor, ICONS, TEXTS, tableActionsOptions, TRACKED_MARK_NAMES;
321128
- var init_src_DiNnkze_es = __esm(() => {
321626
+ var init_src_BuzqViEa_es = __esm(() => {
321129
321627
  init_rolldown_runtime_Bg48TavK_es();
321130
321628
  init_SuperConverter_b2GjELX4_es();
321131
321629
  init_jszip_C49i9kUs_es();
@@ -345591,6 +346089,8 @@ function print() { __p += __j.call(arguments, '') }
345591
346089
  this.on("comment-positions", this.options.onCommentLocationsUpdate);
345592
346090
  this.on("list-definitions-change", this.options.onListDefinitionsChange);
345593
346091
  this.on("fonts-resolved", this.options.onFontsResolved);
346092
+ if (this.options.onFontsChanged)
346093
+ this.on("fonts-changed", this.options.onFontsChanged);
345594
346094
  this.on("exception", this.options.onException);
345595
346095
  this.on("pointerDown", this.options.onPointerDown);
345596
346096
  this.#trackContentControlPointer();
@@ -345811,6 +346311,8 @@ function print() { __p += __j.call(arguments, '') }
345811
346311
  this.on("comment-positions", this.options.onCommentLocationsUpdate);
345812
346312
  this.on("list-definitions-change", this.options.onListDefinitionsChange);
345813
346313
  this.on("fonts-resolved", this.options.onFontsResolved);
346314
+ if (this.options.onFontsChanged)
346315
+ this.on("fonts-changed", this.options.onFontsChanged);
345814
346316
  this.on("exception", this.options.onException);
345815
346317
  this.on("pointerDown", this.options.onPointerDown);
345816
346318
  this.#trackContentControlPointer();
@@ -347844,6 +348346,28 @@ function print() { __p += __j.call(arguments, '') }
347844
348346
  "sdtDocpartId",
347845
348347
  "sdtDocpartInstruction"
347846
348348
  ];
348349
+ SETTLED_STATUSES = [
348350
+ "loaded",
348351
+ "failed",
348352
+ "timed_out",
348353
+ "fallback_used"
348354
+ ];
348355
+ BUNDLED_SUBSTITUTES = Object.freeze({
348356
+ calibri: "Carlito",
348357
+ cambria: "Caladea",
348358
+ arial: "Liberation Sans",
348359
+ "times new roman": "Liberation Serif",
348360
+ "courier new": "Liberation Mono"
348361
+ });
348362
+ BUNDLED_MANIFEST = Object.freeze([
348363
+ family("Carlito", "Carlito", "OFL-1.1"),
348364
+ family("Caladea", "Caladea", "Apache-2.0"),
348365
+ family("Liberation Sans", "LiberationSans", "OFL-1.1"),
348366
+ family("Liberation Serif", "LiberationSerif", "OFL-1.1"),
348367
+ family("Liberation Mono", "LiberationMono", "OFL-1.1")
348368
+ ]);
348369
+ installedRegistries = /* @__PURE__ */ new WeakMap;
348370
+ registriesByFontSet = /* @__PURE__ */ new WeakMap;
347847
348371
  OPERATOR_CHARS = new Set([
347848
348372
  "+",
347849
348373
  "-",
@@ -349001,6 +349525,9 @@ function print() { __p += __j.call(arguments, '') }
349001
349525
  #pendingMapping = null;
349002
349526
  #isRerendering = false;
349003
349527
  #selectionSync = new SelectionSyncCoordinator;
349528
+ #fontGate = null;
349529
+ #lastFontsChangedKey = null;
349530
+ #lastFontsChangedPayload = null;
349004
349531
  #shouldScrollSelectionIntoView = false;
349005
349532
  #suppressSelectionScrollUntilRaf = false;
349006
349533
  #dragDropIndicatorPos = null;
@@ -349277,6 +349804,36 @@ function print() { __p += __j.call(arguments, '') }
349277
349804
  this.#editor.presentationEditor = this;
349278
349805
  this.#editor._presentationEditor = this;
349279
349806
  this.#syncHiddenEditorA11yAttributes();
349807
+ this.#fontGate = new FontReadinessGate({
349808
+ getDocumentFonts: () => {
349809
+ return this.#editor.converter?.getDocumentFonts?.() ?? [];
349810
+ },
349811
+ requestReflow: () => {
349812
+ this.#layoutState = {
349813
+ ...this.#layoutState,
349814
+ blocks: [],
349815
+ measures: [],
349816
+ layout: null
349817
+ };
349818
+ this.#pendingDocChange = true;
349819
+ this.#scheduleRerender();
349820
+ },
349821
+ resolveFamilies: resolvePhysicalFamilies,
349822
+ onRegistryResolved: (registry2) => installBundledSubstitutes(registry2, {
349823
+ assetBaseUrl: this.#options.fontAssets?.assetBaseUrl,
349824
+ resolveAssetUrl: this.#options.fontAssets?.resolveAssetUrl
349825
+ }),
349826
+ getFontEnvironment: () => {
349827
+ const ownerDoc = this.#visibleHost?.ownerDocument ?? (typeof document !== "undefined" ? document : null);
349828
+ const view = ownerDoc?.defaultView ?? (typeof window !== "undefined" ? window : null);
349829
+ const fontSet = ownerDoc?.fonts ?? null;
349830
+ const FontFaceCtor = view?.FontFace ?? (typeof FontFace !== "undefined" ? FontFace : null);
349831
+ return fontSet && FontFaceCtor ? {
349832
+ fontSet,
349833
+ FontFaceCtor
349834
+ } : null;
349835
+ }
349836
+ });
349280
349837
  if (typeof this.#options.disableContextMenu === "boolean")
349281
349838
  this.setContextMenuDisabled(this.#options.disableContextMenu);
349282
349839
  this.#setupHeaderFooterSession();
@@ -350211,6 +350768,50 @@ function print() { __p += __j.call(arguments, '') }
350211
350768
  sectionMetadata: this.#sectionMetadata
350212
350769
  };
350213
350770
  }
350771
+ getFontReport() {
350772
+ return this.#fontGate?.getReport() ?? [];
350773
+ }
350774
+ getMissingFonts() {
350775
+ return this.getFontReport().filter((record) => record.missing).map((record) => record.logicalFamily);
350776
+ }
350777
+ #emitFontsChangedIfChanged(summary) {
350778
+ const gate = this.#fontGate;
350779
+ if (!gate)
350780
+ return;
350781
+ const version$1 = gate.fontConfigVersion;
350782
+ const key2 = `${version$1}|${summary ? summary.results.map((result) => `${result.family}:${result.status}`).sort().join(",") : ""}`;
350783
+ if (key2 === this.#lastFontsChangedKey)
350784
+ return;
350785
+ const isInitial = this.#lastFontsChangedKey === null;
350786
+ this.#lastFontsChangedKey = key2;
350787
+ let resolutions;
350788
+ try {
350789
+ resolutions = gate.getReport();
350790
+ } catch {
350791
+ return;
350792
+ }
350793
+ const payload = {
350794
+ documentFonts: resolutions.map((record) => record.logicalFamily),
350795
+ resolutions,
350796
+ missingFonts: resolutions.filter((record) => record.missing).map((record) => record.logicalFamily),
350797
+ loadSummary: summary ?? {
350798
+ loaded: 0,
350799
+ failed: 0,
350800
+ timedOut: 0,
350801
+ fallbackUsed: 0,
350802
+ results: []
350803
+ },
350804
+ source: isInitial ? "initial" : "late-load",
350805
+ version: version$1
350806
+ };
350807
+ this.#lastFontsChangedPayload = payload;
350808
+ try {
350809
+ this.#editor.emit("fonts-changed", payload);
350810
+ } catch {}
350811
+ }
350812
+ getLastFontsChangedPayload() {
350813
+ return this.#lastFontsChangedPayload;
350814
+ }
350214
350815
  getLayoutOptions() {
350215
350816
  return { ...this.#layoutOptions };
350216
350817
  }
@@ -351078,6 +351679,8 @@ function print() { __p += __j.call(arguments, '') }
351078
351679
  this.#postPaintPipeline.destroy();
351079
351680
  this.#proofingManager?.dispose();
351080
351681
  this.#proofingManager = null;
351682
+ this.#fontGate?.dispose();
351683
+ this.#fontGate = null;
351081
351684
  if (this.#cursorUpdateTimer !== null) {
351082
351685
  clearTimeout(this.#cursorUpdateTimer);
351083
351686
  this.#cursorUpdateTimer = null;
@@ -352560,6 +353163,10 @@ function print() { __p += __j.call(arguments, '') }
352560
353163
  let extraMeasures;
352561
353164
  let resolveBlocks = blocksForLayout;
352562
353165
  let resolveMeasures = previousMeasures;
353166
+ try {
353167
+ const fontSummary = await this.#fontGate?.ensureReadyForMeasure() ?? null;
353168
+ this.#emitFontsChangedIfChanged(fontSummary);
353169
+ } catch {}
352563
353170
  const headerFooterInput = this.#buildHeaderFooterInput();
352564
353171
  try {
352565
353172
  const incrementalLayoutStart = perfNow();
@@ -355380,7 +355987,7 @@ var init_zipper_yaJVJ4z9_es = __esm(() => {
355380
355987
 
355381
355988
  // ../../packages/superdoc/dist/super-editor.es.js
355382
355989
  var init_super_editor_es = __esm(() => {
355383
- init_src_DiNnkze_es();
355990
+ init_src_BuzqViEa_es();
355384
355991
  init_SuperConverter_b2GjELX4_es();
355385
355992
  init_jszip_C49i9kUs_es();
355386
355993
  init_xml_js_CqGKpaft_es();
@@ -404149,8 +404756,8 @@ function mapInvokeError(operationId, error4, context) {
404149
404756
  if (error4 instanceof CliError)
404150
404757
  return error4;
404151
404758
  const code7 = extractErrorCode(error4);
404152
- const family = resolveOperationFamily(operationId);
404153
- return FAMILY_MAPPERS[family](operationId, error4, code7, context);
404759
+ const family2 = resolveOperationFamily(operationId);
404760
+ return FAMILY_MAPPERS[family2](operationId, error4, code7, context);
404154
404761
  }
404155
404762
  function isReceiptLike(value2) {
404156
404763
  if (typeof value2 !== "object" || value2 == null)
@@ -404163,7 +404770,7 @@ function mapFailedReceipt(operationId, result2, context) {
404163
404770
  if (result2.success)
404164
404771
  return null;
404165
404772
  const failure2 = result2.failure;
404166
- const family = resolveOperationFamily(operationId);
404773
+ const family2 = resolveOperationFamily(operationId);
404167
404774
  if (!failure2) {
404168
404775
  return new CliError("COMMAND_FAILED", `${operationId}: operation failed.`, { operationId });
404169
404776
  }
@@ -404172,7 +404779,7 @@ function mapFailedReceipt(operationId, result2, context) {
404172
404779
  if (failureCode && PLAN_ENGINE_PASSTHROUGH_CODES.has(failureCode)) {
404173
404780
  return new CliError(failureCode, failureMessage, { operationId, failure: failure2 });
404174
404781
  }
404175
- if (family === "trackChanges") {
404782
+ if (family2 === "trackChanges") {
404176
404783
  if (operationId === "trackChanges.decide" && failureCode === "TARGET_NOT_FOUND") {
404177
404784
  if (isTrackChangesReviewHelper(operationId, context)) {
404178
404785
  return new CliError("TRACK_CHANGE_NOT_FOUND", failureMessage, { operationId, failure: failure2 });
@@ -404187,7 +404794,7 @@ function mapFailedReceipt(operationId, result2, context) {
404187
404794
  }
404188
404795
  return new CliError("COMMAND_FAILED", failureMessage, { operationId, failure: failure2 });
404189
404796
  }
404190
- if (family === "comments") {
404797
+ if (family2 === "comments") {
404191
404798
  if (failureCode === "TARGET_NOT_FOUND") {
404192
404799
  return new CliError("TARGET_NOT_FOUND", failureMessage, { operationId, failure: failure2 });
404193
404800
  }
@@ -404196,7 +404803,7 @@ function mapFailedReceipt(operationId, result2, context) {
404196
404803
  }
404197
404804
  return new CliError("COMMAND_FAILED", failureMessage, { operationId, failure: failure2 });
404198
404805
  }
404199
- if (family === "lists") {
404806
+ if (family2 === "lists") {
404200
404807
  if (failureCode === "INVALID_TARGET") {
404201
404808
  return new CliError("INVALID_TARGET", failureMessage, { operationId, failure: failure2 });
404202
404809
  }
@@ -404205,7 +404812,7 @@ function mapFailedReceipt(operationId, result2, context) {
404205
404812
  }
404206
404813
  return new CliError("COMMAND_FAILED", failureMessage, { operationId, failure: failure2 });
404207
404814
  }
404208
- if (family === "textMutation") {
404815
+ if (family2 === "textMutation") {
404209
404816
  if (failureCode === "TRACK_CHANGE_COMMAND_UNAVAILABLE" || failureCode === "CAPABILITY_UNAVAILABLE") {
404210
404817
  return new CliError("TRACK_CHANGE_COMMAND_UNAVAILABLE", failureMessage, { operationId, failure: failure2 });
404211
404818
  }
@@ -404214,13 +404821,13 @@ function mapFailedReceipt(operationId, result2, context) {
404214
404821
  }
404215
404822
  return new CliError("COMMAND_FAILED", failureMessage, { operationId, failure: failure2 });
404216
404823
  }
404217
- if (family === "blocks") {
404824
+ if (family2 === "blocks") {
404218
404825
  if (failureCode === "INVALID_TARGET") {
404219
404826
  return new CliError("INVALID_ARGUMENT", failureMessage, { operationId, failure: failure2 });
404220
404827
  }
404221
404828
  return new CliError("COMMAND_FAILED", failureMessage, { operationId, failure: failure2 });
404222
404829
  }
404223
- if (family === "create") {
404830
+ if (family2 === "create") {
404224
404831
  if (failureCode === "TRACK_CHANGE_COMMAND_UNAVAILABLE") {
404225
404832
  return new CliError("TRACK_CHANGE_COMMAND_UNAVAILABLE", failureMessage, { operationId, failure: failure2 });
404226
404833
  }
@@ -404229,7 +404836,7 @@ function mapFailedReceipt(operationId, result2, context) {
404229
404836
  }
404230
404837
  return new CliError("COMMAND_FAILED", failureMessage, { operationId, failure: failure2 });
404231
404838
  }
404232
- if (family === "toc") {
404839
+ if (family2 === "toc") {
404233
404840
  if (failureCode === "TARGET_NOT_FOUND") {
404234
404841
  return new CliError("TARGET_NOT_FOUND", failureMessage, { operationId, failure: failure2 });
404235
404842
  }
@@ -404244,7 +404851,7 @@ function mapFailedReceipt(operationId, result2, context) {
404244
404851
  }
404245
404852
  return new CliError("COMMAND_FAILED", failureMessage, { operationId, failure: failure2 });
404246
404853
  }
404247
- if (family === "images") {
404854
+ if (family2 === "images") {
404248
404855
  if (failureCode === "TARGET_NOT_FOUND") {
404249
404856
  return new CliError("TARGET_NOT_FOUND", failureMessage, { operationId, failure: failure2 });
404250
404857
  }
@@ -404253,7 +404860,7 @@ function mapFailedReceipt(operationId, result2, context) {
404253
404860
  }
404254
404861
  return new CliError("COMMAND_FAILED", failureMessage, { operationId, failure: failure2 });
404255
404862
  }
404256
- if (family === "tables") {
404863
+ if (family2 === "tables") {
404257
404864
  if (failureCode === "TARGET_NOT_FOUND") {
404258
404865
  return new CliError("TARGET_NOT_FOUND", failureMessage, { operationId, failure: failure2 });
404259
404866
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@superdoc-dev/cli",
3
- "version": "0.16.0-next.6",
3
+ "version": "0.16.0-next.7",
4
4
  "type": "module",
5
5
  "bin": {
6
6
  "superdoc": "./dist/index.js"
@@ -24,20 +24,20 @@
24
24
  "@types/node": "22.19.2",
25
25
  "@types/ws": "^8.5.13",
26
26
  "typescript": "^5.9.2",
27
- "@superdoc/super-editor": "0.0.1",
28
27
  "@superdoc/document-api": "0.0.1",
29
- "superdoc": "1.38.0"
28
+ "superdoc": "1.38.0",
29
+ "@superdoc/super-editor": "0.0.1"
30
30
  },
31
31
  "module": "src/index.ts",
32
32
  "publishConfig": {
33
33
  "access": "public"
34
34
  },
35
35
  "optionalDependencies": {
36
- "@superdoc-dev/cli-darwin-arm64": "0.16.0-next.6",
37
- "@superdoc-dev/cli-darwin-x64": "0.16.0-next.6",
38
- "@superdoc-dev/cli-linux-arm64": "0.16.0-next.6",
39
- "@superdoc-dev/cli-linux-x64": "0.16.0-next.6",
40
- "@superdoc-dev/cli-windows-x64": "0.16.0-next.6"
36
+ "@superdoc-dev/cli-darwin-x64": "0.16.0-next.7",
37
+ "@superdoc-dev/cli-darwin-arm64": "0.16.0-next.7",
38
+ "@superdoc-dev/cli-linux-x64": "0.16.0-next.7",
39
+ "@superdoc-dev/cli-windows-x64": "0.16.0-next.7",
40
+ "@superdoc-dev/cli-linux-arm64": "0.16.0-next.7"
41
41
  },
42
42
  "scripts": {
43
43
  "predev": "node scripts/ensure-superdoc-build.js",