@worm-vue3-print/core 1.3.6 → 1.3.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.
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * @worm-vue3-print/core v1.3.6
2
+ * @worm-vue3-print/core v1.3.7
3
3
  * Copyright (c) 2026 worm <liu_long_qqcom@qq.com>
4
4
  * SPDX-FileCopyrightText: 2026 worm <liu_long_qqcom@qq.com>
5
5
  * SPDX-License-Identifier: MIT
@@ -242,7 +242,7 @@ type TemplateElement$1 = PrintElementData;
242
242
  /** 元素类型 */
243
243
  type ElementType = 'text' | 'image' | 'longText' | 'table' | 'hline' | 'vline' | 'rect' | 'oval' | 'barcode' | 'qrcode' | 'html' | 'pageNumber';
244
244
  /** 对齐方式 */
245
- type TextAlign = 'left' | 'center' | 'right';
245
+ type TextAlign = 'left' | 'center' | 'right' | 'justify';
246
246
  /**
247
247
  * 文字超出可用空间时的显示形式(文本类元素与表格单元格共用):
248
248
  * - `clip`:截断,超出部分不显示;不换行(`wordWrap=false`)时以省略号收尾
@@ -310,6 +310,7 @@ interface TableCell {
310
310
  cellType?: TableCellType;
311
311
  barcodeType?: string;
312
312
  qrCodeLevel?: string;
313
+ qrQuietZone?: number;
313
314
  showBarcodeText?: boolean;
314
315
  /**
315
316
  * 打印机分辨率(点/英寸,常见 203/300/600),仅 cellType='barcode' 时生效:
@@ -340,6 +341,7 @@ interface TableCell {
340
341
  /** 自动缩小(textFit='shrink')的下限字号(pt);缺省 6pt */
341
342
  shrinkMinFontSize?: number;
342
343
  fit?: 'contain' | 'cover' | 'fill' | 'none' | 'scale-down';
344
+ objectPosition?: string;
343
345
  maxWidth?: number;
344
346
  maxHeight?: number;
345
347
  }
@@ -421,9 +423,18 @@ interface ElementOptions {
421
423
  */
422
424
  printerDpi?: number;
423
425
  qrCodeLevel?: string;
426
+ /**
427
+ * 二维码静区(白边)宽度,单位「模块」:图形四周留出的空白格数,缺省 0。
428
+ * 0 表示不留白边,码面即整张图、等比铺满元素框——此时扫码所需的静区由元素框外的白纸充当;
429
+ * 要合规静区(ISO/IEC 18004 推荐 4 模块)请显式写 4。
430
+ * 值越大码面在框内占比越小(21 模块时:0→100%、2→84%、4→72.4%)。
431
+ */
432
+ qrQuietZone?: number;
424
433
  src?: string;
425
434
  /** 内容缩放模式(image/qrcode):contain | cover | fill | none | scale-down。条形码不接受拉伸——尺寸已由结算确定 */
426
435
  fit?: string;
436
+ /** 裁剪锚点(image):CSS object-position 值透传,如 'center 20%';含 ; 引号 url() 等非法字符则整条丢弃;缺省不输出,按 50% 50% 居中 */
437
+ objectPosition?: string;
427
438
  /** 内容最大宽度(mm,image/barcode/qrcode);缺省不限制 */
428
439
  maxWidth?: number;
429
440
  /** 内容最大高度(mm,image/barcode/qrcode);缺省不限制 */
@@ -451,8 +462,6 @@ interface ElementOptions {
451
462
  styler?: string;
452
463
  rowStyler?: string;
453
464
  longTextIndent?: number;
454
- leftSpaceRemoved?: boolean;
455
- lHeight?: number;
456
465
  }
457
466
  /** 元素类型元数据 */
458
467
  interface PrintElementTypeMeta {
@@ -656,12 +665,16 @@ interface RenderCell {
656
665
  barcodeType?: string;
657
666
  /** 二维码纠错级别 L/M/Q/H,仅 cellType='qrcode' 时生效 */
658
667
  qrCodeLevel?: string;
668
+ /** 二维码静区(白边)宽度(模块),仅 cellType='qrcode' 时生效;缺省 0 = 码面铺满单元格 */
669
+ qrQuietZone?: number;
659
670
  /** 条形码下方是否显示文本,仅 cellType='barcode' 时生效 */
660
671
  showBarcodeText?: boolean;
661
672
  /** 打印机分辨率(点/英寸),仅 cellType='barcode' 时生效:给出后条码尺寸优先适配打印机点阵 */
662
673
  printerDpi?: number;
663
674
  /** 图片缩放模式,仅 cellType='image' 时生效 */
664
675
  fit?: string;
676
+ /** 裁剪锚点(CSS object-position 值),仅 cellType=image 生效;含非法字符则整条不输出 */
677
+ objectPosition?: string;
665
678
  /** 图片最大宽度(mm),仅 cellType='image' 时生效 */
666
679
  maxWidth?: number;
667
680
  /** 图片最大高度(mm),仅 cellType='image' 时生效 */
@@ -698,6 +711,8 @@ interface CodeRenderOptions {
698
711
  barcodeType?: string;
699
712
  /** 二维码纠错级别 L/M/Q/H,仅 qrcode 类型使用 */
700
713
  qrCodeLevel?: string;
714
+ /** 二维码静区(白边)宽度,单位「模块」,仅 qrcode 类型使用;缺省 0 = 无白边,码面即整张图 */
715
+ qrQuietZone?: number;
701
716
  /** 条形码下方是否显示文本 */
702
717
  showText?: boolean;
703
718
  /** 条码模块宽度倍率;决定每模块的首选物理宽度(倍率/2 × 0.25mm),给 dpi 后吸附到最近整数点 */
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * @worm-vue3-print/core v1.3.6
2
+ * @worm-vue3-print/core v1.3.7
3
3
  * Copyright (c) 2026 worm <liu_long_qqcom@qq.com>
4
4
  * SPDX-FileCopyrightText: 2026 worm <liu_long_qqcom@qq.com>
5
5
  * SPDX-License-Identifier: MIT
@@ -242,7 +242,7 @@ type TemplateElement$1 = PrintElementData;
242
242
  /** 元素类型 */
243
243
  type ElementType = 'text' | 'image' | 'longText' | 'table' | 'hline' | 'vline' | 'rect' | 'oval' | 'barcode' | 'qrcode' | 'html' | 'pageNumber';
244
244
  /** 对齐方式 */
245
- type TextAlign = 'left' | 'center' | 'right';
245
+ type TextAlign = 'left' | 'center' | 'right' | 'justify';
246
246
  /**
247
247
  * 文字超出可用空间时的显示形式(文本类元素与表格单元格共用):
248
248
  * - `clip`:截断,超出部分不显示;不换行(`wordWrap=false`)时以省略号收尾
@@ -310,6 +310,7 @@ interface TableCell {
310
310
  cellType?: TableCellType;
311
311
  barcodeType?: string;
312
312
  qrCodeLevel?: string;
313
+ qrQuietZone?: number;
313
314
  showBarcodeText?: boolean;
314
315
  /**
315
316
  * 打印机分辨率(点/英寸,常见 203/300/600),仅 cellType='barcode' 时生效:
@@ -340,6 +341,7 @@ interface TableCell {
340
341
  /** 自动缩小(textFit='shrink')的下限字号(pt);缺省 6pt */
341
342
  shrinkMinFontSize?: number;
342
343
  fit?: 'contain' | 'cover' | 'fill' | 'none' | 'scale-down';
344
+ objectPosition?: string;
343
345
  maxWidth?: number;
344
346
  maxHeight?: number;
345
347
  }
@@ -421,9 +423,18 @@ interface ElementOptions {
421
423
  */
422
424
  printerDpi?: number;
423
425
  qrCodeLevel?: string;
426
+ /**
427
+ * 二维码静区(白边)宽度,单位「模块」:图形四周留出的空白格数,缺省 0。
428
+ * 0 表示不留白边,码面即整张图、等比铺满元素框——此时扫码所需的静区由元素框外的白纸充当;
429
+ * 要合规静区(ISO/IEC 18004 推荐 4 模块)请显式写 4。
430
+ * 值越大码面在框内占比越小(21 模块时:0→100%、2→84%、4→72.4%)。
431
+ */
432
+ qrQuietZone?: number;
424
433
  src?: string;
425
434
  /** 内容缩放模式(image/qrcode):contain | cover | fill | none | scale-down。条形码不接受拉伸——尺寸已由结算确定 */
426
435
  fit?: string;
436
+ /** 裁剪锚点(image):CSS object-position 值透传,如 'center 20%';含 ; 引号 url() 等非法字符则整条丢弃;缺省不输出,按 50% 50% 居中 */
437
+ objectPosition?: string;
427
438
  /** 内容最大宽度(mm,image/barcode/qrcode);缺省不限制 */
428
439
  maxWidth?: number;
429
440
  /** 内容最大高度(mm,image/barcode/qrcode);缺省不限制 */
@@ -451,8 +462,6 @@ interface ElementOptions {
451
462
  styler?: string;
452
463
  rowStyler?: string;
453
464
  longTextIndent?: number;
454
- leftSpaceRemoved?: boolean;
455
- lHeight?: number;
456
465
  }
457
466
  /** 元素类型元数据 */
458
467
  interface PrintElementTypeMeta {
@@ -656,12 +665,16 @@ interface RenderCell {
656
665
  barcodeType?: string;
657
666
  /** 二维码纠错级别 L/M/Q/H,仅 cellType='qrcode' 时生效 */
658
667
  qrCodeLevel?: string;
668
+ /** 二维码静区(白边)宽度(模块),仅 cellType='qrcode' 时生效;缺省 0 = 码面铺满单元格 */
669
+ qrQuietZone?: number;
659
670
  /** 条形码下方是否显示文本,仅 cellType='barcode' 时生效 */
660
671
  showBarcodeText?: boolean;
661
672
  /** 打印机分辨率(点/英寸),仅 cellType='barcode' 时生效:给出后条码尺寸优先适配打印机点阵 */
662
673
  printerDpi?: number;
663
674
  /** 图片缩放模式,仅 cellType='image' 时生效 */
664
675
  fit?: string;
676
+ /** 裁剪锚点(CSS object-position 值),仅 cellType=image 生效;含非法字符则整条不输出 */
677
+ objectPosition?: string;
665
678
  /** 图片最大宽度(mm),仅 cellType='image' 时生效 */
666
679
  maxWidth?: number;
667
680
  /** 图片最大高度(mm),仅 cellType='image' 时生效 */
@@ -698,6 +711,8 @@ interface CodeRenderOptions {
698
711
  barcodeType?: string;
699
712
  /** 二维码纠错级别 L/M/Q/H,仅 qrcode 类型使用 */
700
713
  qrCodeLevel?: string;
714
+ /** 二维码静区(白边)宽度,单位「模块」,仅 qrcode 类型使用;缺省 0 = 无白边,码面即整张图 */
715
+ qrQuietZone?: number;
701
716
  /** 条形码下方是否显示文本 */
702
717
  showText?: boolean;
703
718
  /** 条码模块宽度倍率;决定每模块的首选物理宽度(倍率/2 × 0.25mm),给 dpi 后吸附到最近整数点 */
package/dist/index.cjs CHANGED
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * @worm-vue3-print/core v1.3.6
2
+ * @worm-vue3-print/core v1.3.7
3
3
  * Copyright (c) 2026 worm <liu_long_qqcom@qq.com>
4
4
  * SPDX-FileCopyrightText: 2026 worm <liu_long_qqcom@qq.com>
5
5
  * SPDX-License-Identifier: MIT
@@ -1189,9 +1189,11 @@ function makeRenderRow(row, resolve, keepRaw = false) {
1189
1189
  cellType: cell.cellType,
1190
1190
  barcodeType: cell.barcodeType,
1191
1191
  qrCodeLevel: cell.qrCodeLevel,
1192
+ qrQuietZone: cell.qrQuietZone,
1192
1193
  showBarcodeText: cell.showBarcodeText,
1193
1194
  printerDpi: cell.printerDpi,
1194
1195
  fit: cell.fit,
1196
+ objectPosition: cell.objectPosition,
1195
1197
  maxWidth: cell.maxWidth,
1196
1198
  maxHeight: cell.maxHeight,
1197
1199
  rowspan: cell.rowspan ?? 1,
@@ -2537,12 +2539,26 @@ function textStyle(opts) {
2537
2539
  if (opts.lineHeight) parts.push(`line-height:${opts.lineHeight}pt`);
2538
2540
  if (opts.letterSpacing) parts.push(`letter-spacing:${opts.letterSpacing}pt`);
2539
2541
  if (opts.verticalAlign) {
2540
- parts.push(`display:flex;align-items:${V_ALIGN_FLEX[opts.verticalAlign] ?? "flex-start"}`);
2541
- parts.push(`justify-content:${H_ALIGN_FLEX[opts.textAlign ?? "left"] ?? "flex-start"}`);
2542
+ if (opts.textAlign === "justify") {
2543
+ parts.push(`display:flex;flex-direction:column;justify-content:${V_ALIGN_FLEX[opts.verticalAlign] ?? "flex-start"}`);
2544
+ } else {
2545
+ parts.push(`display:flex;align-items:${V_ALIGN_FLEX[opts.verticalAlign] ?? "flex-start"}`);
2546
+ parts.push(`justify-content:${H_ALIGN_FLEX[opts.textAlign ?? "left"] ?? "flex-start"}`);
2547
+ }
2542
2548
  }
2543
2549
  if (opts.textAlign) parts.push(`text-align:${opts.textAlign}`);
2550
+ if (opts.textAlign === "justify") parts.push("text-align-last:justify");
2544
2551
  return parts.length ? parts.join(";") + ";" : "";
2545
2552
  }
2553
+ function indentStyle(opts) {
2554
+ return opts.longTextIndent ? `text-indent:${opts.longTextIndent}em;` : "";
2555
+ }
2556
+ var OBJECT_POSITION_UNSAFE = /[;"'<>\\(){}\[\]@!#]/;
2557
+ function positionStyle(objectPosition) {
2558
+ const v = (objectPosition ?? "").trim();
2559
+ if (!v || v.length > 64 || OBJECT_POSITION_UNSAFE.test(v)) return "";
2560
+ return `object-position:${escapeInlineStyleValue(v)};`;
2561
+ }
2546
2562
  function elementFitStyle(fit, opts) {
2547
2563
  if (fit === "autoHeight") return "overflow:visible;";
2548
2564
  if (opts.wordWrap === false) return "white-space:nowrap;text-overflow:ellipsis;";
@@ -2581,7 +2597,7 @@ function renderElement(el, isMeasure, containerStyle, overrideTop, ctx) {
2581
2597
  return renderTableElement(el, isMeasure, measureAttr, ctx);
2582
2598
  case "image":
2583
2599
  return `<div class="print-element" style="${style}"${measureAttr}>
2584
- <img src="${esc(opts.src ?? "")}" style="width:100%;height:100%;object-fit:contain;" />
2600
+ <img src="${esc(opts.src ?? "")}" style="width:100%;height:100%;object-fit:${opts.fit || "contain"};${positionStyle(opts.objectPosition)}" />
2585
2601
  </div>`;
2586
2602
  case "barcode":
2587
2603
  case "qrcode": {
@@ -2608,7 +2624,7 @@ function renderElement(el, isMeasure, containerStyle, overrideTop, ctx) {
2608
2624
  case "oval":
2609
2625
  return `<div class="print-element" style="${style};border:${opts.borderWidth || 1}pt ${opts.borderStyle || "solid"} ${opts.borderColor || "#333"};border-radius:50%;"${measureAttr}></div>`;
2610
2626
  case "longText":
2611
- return `<div class="print-element" style="${style}${textStyle(opts)}${elementFitStyle(fit, opts)}"${measureAttr}${fitAttr}>${esc(opts.formatter ?? opts.testData ?? "")}</div>`;
2627
+ return `<div class="print-element" style="${style}${textStyle(opts)}${indentStyle(opts)}${elementFitStyle(fit, opts)}"${measureAttr}${fitAttr}>${esc(opts.formatter ?? opts.testData ?? "")}</div>`;
2612
2628
  case "html":
2613
2629
  return `<div class="print-element" style="${style}"${measureAttr}>${opts.testData ?? opts.title ?? ""}</div>`;
2614
2630
  default:
@@ -2623,6 +2639,8 @@ function codeImgHtml(value, cellType, opts, io) {
2623
2639
  const svg = codeRenderer.render(value, cellType, {
2624
2640
  barcodeType: opts.barcodeType,
2625
2641
  qrCodeLevel: opts.qrCodeLevel != null ? String(opts.qrCodeLevel) : void 0,
2642
+ // 0 是合法档(无白边),必须用 typeof 判定而非 or/?? 之类假值判断
2643
+ qrQuietZone: typeof opts.qrQuietZone === "number" ? opts.qrQuietZone : void 0,
2626
2644
  showText: opts.hideTitle !== void 0 ? !opts.hideTitle : opts.showBarcodeText,
2627
2645
  barWidth: typeof opts.barWidth === "number" ? opts.barWidth : void 0,
2628
2646
  fontSize: typeof opts.fontSize === "number" ? opts.fontSize : void 0,
@@ -2633,10 +2651,8 @@ function codeImgHtml(value, cellType, opts, io) {
2633
2651
  if (isBarcode && /^<svg[\s>]/i.test(svg)) return inlineCodeSvgHtml(svg);
2634
2652
  const src = `data:image/svg+xml;charset=utf-8,${encodeURIComponent(svg)}`;
2635
2653
  const styleParts = [];
2636
- styleParts.push("max-width:100%", "max-height:100%", "display:block", "margin:auto");
2637
- if (fit) {
2638
- styleParts.push(`object-fit:${fit}`);
2639
- }
2654
+ styleParts.push("width:100%", "height:100%", "max-width:100%", "max-height:100%", "display:block", "margin:auto");
2655
+ styleParts.push(`object-fit:${fit || "contain"}`);
2640
2656
  if (maxWidth) {
2641
2657
  styleParts.push(`max-width:${maxWidth}mm`);
2642
2658
  }
@@ -2664,6 +2680,7 @@ function matrixCellStyle(cell, opts) {
2664
2680
  if (color) parts.push(`color:${color}`);
2665
2681
  if (cell.backgroundColor) parts.push(`background-color:${cell.backgroundColor}`);
2666
2682
  parts.push(`text-align:${cell.align ?? "left"}`);
2683
+ if (cell.align === "justify") parts.push("text-align-last:justify");
2667
2684
  parts.push(`vertical-align:${cell.valign ?? "middle"}`);
2668
2685
  parts.push(`padding:${padding}mm`);
2669
2686
  parts.push(cell.wordWrap === false ? "white-space:nowrap;overflow:hidden" : "word-break:break-all");
@@ -2703,7 +2720,7 @@ function renderMatrixRows(renderRows, start, end, opts, withRowIndex, ctx, fitOw
2703
2720
  const fit = cell.fit || "contain";
2704
2721
  const maxWidth = cell.maxWidth ? `max-width:${cell.maxWidth}mm;` : "max-width:100%;";
2705
2722
  const maxHeight = cell.maxHeight ? `max-height:${cell.maxHeight}mm;` : "max-height:100%;";
2706
- inner = `<div style="width:100%;height:100%;display:flex;align-items:center;justify-content:center;overflow:hidden;"><img src="${esc(resolveCellContent(cell, ctx))}" style="object-fit:${fit};${maxWidth}${maxHeight}display:block;" /></div>`;
2723
+ inner = `<div style="width:100%;height:100%;display:flex;align-items:center;justify-content:center;overflow:hidden;"><img src="${esc(resolveCellContent(cell, ctx))}" style="object-fit:${fit};${positionStyle(cell.objectPosition)}${maxWidth}${maxHeight}display:block;" /></div>`;
2707
2724
  } else {
2708
2725
  inner = renderTextCellInner(renderRows, r, colIndex, cell, opts, fitOwner, defaultPadding, ctx);
2709
2726
  }
@@ -3046,7 +3063,8 @@ function codeSpecKey(value, cellType, opts = {}) {
3046
3063
  opts.qrCodeLevel ?? null,
3047
3064
  opts.showText ?? null,
3048
3065
  opts.barWidth ?? null,
3049
- opts.fontSize ?? null
3066
+ opts.fontSize ?? null,
3067
+ opts.qrQuietZone ?? null
3050
3068
  ]);
3051
3069
  }
3052
3070
  function createMapCodeRenderer(map) {
package/dist/index.d.cts CHANGED
@@ -1,13 +1,13 @@
1
1
  /*!
2
- * @worm-vue3-print/core v1.3.6
2
+ * @worm-vue3-print/core v1.3.7
3
3
  * Copyright (c) 2026 worm <liu_long_qqcom@qq.com>
4
4
  * SPDX-FileCopyrightText: 2026 worm <liu_long_qqcom@qq.com>
5
5
  * SPDX-License-Identifier: MIT
6
6
  */
7
- import { T as TemplateData, C as CodeRenderer, P as PageLayout, J as MeasuredElement, K as TemplateElement, W as WatermarkOptions, L as PaperMm, N as ViewportPx, O as HeightSource, Q as MarginsMm, S as PdfTargetSpec, R as RawMeasurement, a as CodeSpec, X as CodeRenderOptions, D as DriverFactory, Y as ExecutorBundle, Z as TileLayout, _ as PrintJob, $ as PreparedDocument, a0 as RenderPdfResult, M as MultiPageTemplateData, a1 as PrintFontDeclaration } from './driver-CFm0C_yX.cjs';
8
- export { a2 as ContinuousPaperSize, a3 as EXECUTOR_TARGETS, a4 as ExecutorMethod, a5 as ExecutorTargetKind, a6 as FALLBACK_FONT_STACK, a7 as MAX_BATCH_COPIES, a8 as NormalizedPrintData, a9 as PAPER_DIMENSIONS, aa as PageDriver, ab as PageSection, ac as PaperSize, ad as PrintDataInput, ae as PrintFontFile, af as RenderCell, ag as RenderRequest, ah as RenderRow, ai as SheetPaperSize, aj as TILE_DEFAULTS, H as TextFit, ak as TilingError, al as TilingIssue, am as TilingIssueCode, an as TilingOptions, ao as TilingResolveOptions, ap as TilingTemplateInput, aq as buildFontFaceCss, ar as computeMaxColumns, as as computeTileLayout, at as escapeInlineStyleValue, au as getPaperDimensions, av as isContinuousPaper, aw as isContinuousPaperSize, ax as normalizePrintData, ay as normalizeTilingOptions, az as resolveSheetMm, aA as roundMm, aB as tilePosition, aC as toFontFamilyStack, aD as validateTiling } from './driver-CFm0C_yX.cjs';
9
- import { F as FitFontSize, P as PrintRuntime } from './ports-BXYcHExa.cjs';
10
- export { C as CellFitRowKind, h as DEFAULT_READINESS_MS, D as DEFAULT_SHRINK_MIN_FONT_SIZE_PT, i as DEFAULT_TIMEOUT_MS, M as MIN_SHRINK_FONT_SIZE_PT, j as MeasureResult, k as PrintSession, S as SessionBudget, c as cellFitCapMm, a as cellFitKey, f as floorFontSize, p as parseCellFitKey, r as resolveCellTextFit, d as resolveElementTextFit, e as resolveShrinkMinFontSize, g as roundFontSize } from './ports-BXYcHExa.cjs';
7
+ import { T as TemplateData, C as CodeRenderer, P as PageLayout, J as MeasuredElement, K as TemplateElement, W as WatermarkOptions, L as PaperMm, N as ViewportPx, O as HeightSource, Q as MarginsMm, S as PdfTargetSpec, R as RawMeasurement, a as CodeSpec, X as CodeRenderOptions, D as DriverFactory, Y as ExecutorBundle, Z as TileLayout, _ as PrintJob, $ as PreparedDocument, a0 as RenderPdfResult, M as MultiPageTemplateData, a1 as PrintFontDeclaration } from './driver-Dzr2Aikx.cjs';
8
+ export { a2 as ContinuousPaperSize, a3 as EXECUTOR_TARGETS, a4 as ExecutorMethod, a5 as ExecutorTargetKind, a6 as FALLBACK_FONT_STACK, a7 as MAX_BATCH_COPIES, a8 as NormalizedPrintData, a9 as PAPER_DIMENSIONS, aa as PageDriver, ab as PageSection, ac as PaperSize, ad as PrintDataInput, ae as PrintFontFile, af as RenderCell, ag as RenderRequest, ah as RenderRow, ai as SheetPaperSize, aj as TILE_DEFAULTS, H as TextFit, ak as TilingError, al as TilingIssue, am as TilingIssueCode, an as TilingOptions, ao as TilingResolveOptions, ap as TilingTemplateInput, aq as buildFontFaceCss, ar as computeMaxColumns, as as computeTileLayout, at as escapeInlineStyleValue, au as getPaperDimensions, av as isContinuousPaper, aw as isContinuousPaperSize, ax as normalizePrintData, ay as normalizeTilingOptions, az as resolveSheetMm, aA as roundMm, aB as tilePosition, aC as toFontFamilyStack, aD as validateTiling } from './driver-Dzr2Aikx.cjs';
9
+ import { F as FitFontSize, P as PrintRuntime } from './ports-Bin4xmo0.cjs';
10
+ export { C as CellFitRowKind, h as DEFAULT_READINESS_MS, D as DEFAULT_SHRINK_MIN_FONT_SIZE_PT, i as DEFAULT_TIMEOUT_MS, M as MIN_SHRINK_FONT_SIZE_PT, j as MeasureResult, k as PrintSession, S as SessionBudget, c as cellFitCapMm, a as cellFitKey, f as floorFontSize, p as parseCellFitKey, r as resolveCellTextFit, d as resolveElementTextFit, e as resolveShrinkMinFontSize, g as roundFontSize } from './ports-Bin4xmo0.cjs';
11
11
 
12
12
  type TokenType = 'num' | 'str' | 'bool' | 'ident' | 'punc';
13
13
  interface Token {
package/dist/index.d.ts CHANGED
@@ -1,13 +1,13 @@
1
1
  /*!
2
- * @worm-vue3-print/core v1.3.6
2
+ * @worm-vue3-print/core v1.3.7
3
3
  * Copyright (c) 2026 worm <liu_long_qqcom@qq.com>
4
4
  * SPDX-FileCopyrightText: 2026 worm <liu_long_qqcom@qq.com>
5
5
  * SPDX-License-Identifier: MIT
6
6
  */
7
- import { T as TemplateData, C as CodeRenderer, P as PageLayout, J as MeasuredElement, K as TemplateElement, W as WatermarkOptions, L as PaperMm, N as ViewportPx, O as HeightSource, Q as MarginsMm, S as PdfTargetSpec, R as RawMeasurement, a as CodeSpec, X as CodeRenderOptions, D as DriverFactory, Y as ExecutorBundle, Z as TileLayout, _ as PrintJob, $ as PreparedDocument, a0 as RenderPdfResult, M as MultiPageTemplateData, a1 as PrintFontDeclaration } from './driver-CFm0C_yX.js';
8
- export { a2 as ContinuousPaperSize, a3 as EXECUTOR_TARGETS, a4 as ExecutorMethod, a5 as ExecutorTargetKind, a6 as FALLBACK_FONT_STACK, a7 as MAX_BATCH_COPIES, a8 as NormalizedPrintData, a9 as PAPER_DIMENSIONS, aa as PageDriver, ab as PageSection, ac as PaperSize, ad as PrintDataInput, ae as PrintFontFile, af as RenderCell, ag as RenderRequest, ah as RenderRow, ai as SheetPaperSize, aj as TILE_DEFAULTS, H as TextFit, ak as TilingError, al as TilingIssue, am as TilingIssueCode, an as TilingOptions, ao as TilingResolveOptions, ap as TilingTemplateInput, aq as buildFontFaceCss, ar as computeMaxColumns, as as computeTileLayout, at as escapeInlineStyleValue, au as getPaperDimensions, av as isContinuousPaper, aw as isContinuousPaperSize, ax as normalizePrintData, ay as normalizeTilingOptions, az as resolveSheetMm, aA as roundMm, aB as tilePosition, aC as toFontFamilyStack, aD as validateTiling } from './driver-CFm0C_yX.js';
9
- import { F as FitFontSize, P as PrintRuntime } from './ports-Bdst9MWJ.js';
10
- export { C as CellFitRowKind, h as DEFAULT_READINESS_MS, D as DEFAULT_SHRINK_MIN_FONT_SIZE_PT, i as DEFAULT_TIMEOUT_MS, M as MIN_SHRINK_FONT_SIZE_PT, j as MeasureResult, k as PrintSession, S as SessionBudget, c as cellFitCapMm, a as cellFitKey, f as floorFontSize, p as parseCellFitKey, r as resolveCellTextFit, d as resolveElementTextFit, e as resolveShrinkMinFontSize, g as roundFontSize } from './ports-Bdst9MWJ.js';
7
+ import { T as TemplateData, C as CodeRenderer, P as PageLayout, J as MeasuredElement, K as TemplateElement, W as WatermarkOptions, L as PaperMm, N as ViewportPx, O as HeightSource, Q as MarginsMm, S as PdfTargetSpec, R as RawMeasurement, a as CodeSpec, X as CodeRenderOptions, D as DriverFactory, Y as ExecutorBundle, Z as TileLayout, _ as PrintJob, $ as PreparedDocument, a0 as RenderPdfResult, M as MultiPageTemplateData, a1 as PrintFontDeclaration } from './driver-Dzr2Aikx.js';
8
+ export { a2 as ContinuousPaperSize, a3 as EXECUTOR_TARGETS, a4 as ExecutorMethod, a5 as ExecutorTargetKind, a6 as FALLBACK_FONT_STACK, a7 as MAX_BATCH_COPIES, a8 as NormalizedPrintData, a9 as PAPER_DIMENSIONS, aa as PageDriver, ab as PageSection, ac as PaperSize, ad as PrintDataInput, ae as PrintFontFile, af as RenderCell, ag as RenderRequest, ah as RenderRow, ai as SheetPaperSize, aj as TILE_DEFAULTS, H as TextFit, ak as TilingError, al as TilingIssue, am as TilingIssueCode, an as TilingOptions, ao as TilingResolveOptions, ap as TilingTemplateInput, aq as buildFontFaceCss, ar as computeMaxColumns, as as computeTileLayout, at as escapeInlineStyleValue, au as getPaperDimensions, av as isContinuousPaper, aw as isContinuousPaperSize, ax as normalizePrintData, ay as normalizeTilingOptions, az as resolveSheetMm, aA as roundMm, aB as tilePosition, aC as toFontFamilyStack, aD as validateTiling } from './driver-Dzr2Aikx.js';
9
+ import { F as FitFontSize, P as PrintRuntime } from './ports-B8MFq_Yo.js';
10
+ export { C as CellFitRowKind, h as DEFAULT_READINESS_MS, D as DEFAULT_SHRINK_MIN_FONT_SIZE_PT, i as DEFAULT_TIMEOUT_MS, M as MIN_SHRINK_FONT_SIZE_PT, j as MeasureResult, k as PrintSession, S as SessionBudget, c as cellFitCapMm, a as cellFitKey, f as floorFontSize, p as parseCellFitKey, r as resolveCellTextFit, d as resolveElementTextFit, e as resolveShrinkMinFontSize, g as roundFontSize } from './ports-B8MFq_Yo.js';
11
11
 
12
12
  type TokenType = 'num' | 'str' | 'bool' | 'ident' | 'punc';
13
13
  interface Token {
package/dist/index.js CHANGED
@@ -1,12 +1,12 @@
1
1
  /*!
2
- * @worm-vue3-print/core v1.3.6
2
+ * @worm-vue3-print/core v1.3.7
3
3
  * Copyright (c) 2026 worm <liu_long_qqcom@qq.com>
4
4
  * SPDX-FileCopyrightText: 2026 worm <liu_long_qqcom@qq.com>
5
5
  * SPDX-License-Identifier: MIT
6
6
  */
7
7
  import {
8
8
  TemplateEngine
9
- } from "./chunk-GLNQXOMO.js";
9
+ } from "./chunk-WLGEOVFK.js";
10
10
  import {
11
11
  DEFAULT_READINESS_MS,
12
12
  DEFAULT_SHRINK_MIN_FONT_SIZE_PT,
@@ -125,7 +125,7 @@ import {
125
125
  tokenize,
126
126
  validateTiling,
127
127
  withTimeout
128
- } from "./chunk-JQUJ7AF3.js";
128
+ } from "./chunk-TCI5XQKI.js";
129
129
  export {
130
130
  DEFAULT_READINESS_MS,
131
131
  DEFAULT_SHRINK_MIN_FONT_SIZE_PT,
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * @worm-vue3-print/core v1.3.6
2
+ * @worm-vue3-print/core v1.3.7
3
3
  * Copyright (c) 2026 worm <liu_long_qqcom@qq.com>
4
4
  * SPDX-FileCopyrightText: 2026 worm <liu_long_qqcom@qq.com>
5
5
  * SPDX-License-Identifier: MIT
@@ -1,10 +1,10 @@
1
1
  /*!
2
- * @worm-vue3-print/core v1.3.6
2
+ * @worm-vue3-print/core v1.3.7
3
3
  * Copyright (c) 2026 worm <liu_long_qqcom@qq.com>
4
4
  * SPDX-FileCopyrightText: 2026 worm <liu_long_qqcom@qq.com>
5
5
  * SPDX-License-Identifier: MIT
6
6
  */
7
- import { Y as ExecutorBundle } from '../driver-CFm0C_yX.cjs';
7
+ import { Y as ExecutorBundle } from '../driver-Dzr2Aikx.cjs';
8
8
 
9
9
  /** 读取 core 自带的 DOM 执行器 IIFE 产物;宿主把它注入页面后即可调用 __wormDom */
10
10
  declare function loadExecutorBundle(): ExecutorBundle;
@@ -1,10 +1,10 @@
1
1
  /*!
2
- * @worm-vue3-print/core v1.3.6
2
+ * @worm-vue3-print/core v1.3.7
3
3
  * Copyright (c) 2026 worm <liu_long_qqcom@qq.com>
4
4
  * SPDX-FileCopyrightText: 2026 worm <liu_long_qqcom@qq.com>
5
5
  * SPDX-License-Identifier: MIT
6
6
  */
7
- import { Y as ExecutorBundle } from '../driver-CFm0C_yX.js';
7
+ import { Y as ExecutorBundle } from '../driver-Dzr2Aikx.js';
8
8
 
9
9
  /** 读取 core 自带的 DOM 执行器 IIFE 产物;宿主把它注入页面后即可调用 __wormDom */
10
10
  declare function loadExecutorBundle(): ExecutorBundle;
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * @worm-vue3-print/core v1.3.6
2
+ * @worm-vue3-print/core v1.3.7
3
3
  * Copyright (c) 2026 worm <liu_long_qqcom@qq.com>
4
4
  * SPDX-FileCopyrightText: 2026 worm <liu_long_qqcom@qq.com>
5
5
  * SPDX-License-Identifier: MIT
@@ -1,10 +1,10 @@
1
1
  /*!
2
- * @worm-vue3-print/core v1.3.6
2
+ * @worm-vue3-print/core v1.3.7
3
3
  * Copyright (c) 2026 worm <liu_long_qqcom@qq.com>
4
4
  * SPDX-FileCopyrightText: 2026 worm <liu_long_qqcom@qq.com>
5
5
  * SPDX-License-Identifier: MIT
6
6
  */
7
- import { H as TextFit, a as CodeSpec, N as ViewportPx, R as RawMeasurement, S as PdfTargetSpec } from './driver-CFm0C_yX.js';
7
+ import { H as TextFit, a as CodeSpec, N as ViewportPx, R as RawMeasurement, S as PdfTargetSpec } from './driver-Dzr2Aikx.js';
8
8
 
9
9
  /** 自动缩小的默认下限字号(pt) */
10
10
  declare const DEFAULT_SHRINK_MIN_FONT_SIZE_PT = 6;
@@ -1,10 +1,10 @@
1
1
  /*!
2
- * @worm-vue3-print/core v1.3.6
2
+ * @worm-vue3-print/core v1.3.7
3
3
  * Copyright (c) 2026 worm <liu_long_qqcom@qq.com>
4
4
  * SPDX-FileCopyrightText: 2026 worm <liu_long_qqcom@qq.com>
5
5
  * SPDX-License-Identifier: MIT
6
6
  */
7
- import { H as TextFit, a as CodeSpec, N as ViewportPx, R as RawMeasurement, S as PdfTargetSpec } from './driver-CFm0C_yX.cjs';
7
+ import { H as TextFit, a as CodeSpec, N as ViewportPx, R as RawMeasurement, S as PdfTargetSpec } from './driver-Dzr2Aikx.cjs';
8
8
 
9
9
  /** 自动缩小的默认下限字号(pt) */
10
10
  declare const DEFAULT_SHRINK_MIN_FONT_SIZE_PT = 6;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@worm-vue3-print/core",
3
- "version": "1.3.6",
3
+ "version": "1.3.7",
4
4
  "type": "module",
5
5
  "description": "打印模板表达式引擎、同构渲染管线与框架无关的设计器内核(HTML 生成/分页/数据绑定/设计器模型与工具),无 Vue/React 依赖",
6
6
  "main": "dist/index.cjs",