@guodun/antdv 1.7.12 → 1.7.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 (67) hide show
  1. package/dist/es/components/contract-signing-location/src/ContractSigningLocation.vue.mjs +373 -295
  2. package/dist/es/components/contract-signing-location/src/ContractSigningLocationCanvas.vue.mjs +219 -202
  3. package/dist/es/components/contract-signing-location/src/ContractSigningTemplatePage.vue.mjs +18 -18
  4. package/dist/es/components/contract-signing-location/src/template-source.mjs +62 -49
  5. package/dist/es/components/index.mjs +1 -0
  6. package/dist/es/components/pro-contract-template-designer/index.mjs +1 -0
  7. package/dist/es/components/pro-contract-template-designer/src/ContractTemplatePreviewPage.vue.mjs +37 -42
  8. package/dist/es/components/pro-contract-template-designer/src/ContractTemplateRendererPage.vue.mjs +69 -55
  9. package/dist/es/components/pro-contract-template-designer/src/ContractTemplateSingleRenderer.vue.mjs +278 -270
  10. package/dist/es/components/pro-contract-template-designer/src/DesignerPage.vue.mjs +344 -343
  11. package/dist/es/components/pro-contract-template-designer/src/ProContractTemplateDesigner.vue.mjs +1025 -964
  12. package/dist/es/components/pro-contract-template-designer/src/ProContractTemplateRenderer.vue.mjs +120 -74
  13. package/dist/es/components/pro-contract-template-designer/src/SigningLayoutCustomModal.vue.mjs +72 -59
  14. package/dist/es/components/pro-contract-template-designer/src/composables/use-template-designer.mjs +133 -132
  15. package/dist/es/components/pro-contract-template-designer/src/utils/contract-layout-check.mjs +239 -0
  16. package/dist/es/components/pro-contract-template-designer/src/utils/contract-print-document.mjs +95 -71
  17. package/dist/es/components/pro-contract-template-designer/src/utils/page-decorations.mjs +67 -76
  18. package/dist/es/components/pro-contract-template-designer/src/utils/signing-layout-presets.mjs +77 -61
  19. package/dist/es/components/pro-contract-template-designer/src/utils/template-renderer.mjs +96 -83
  20. package/dist/es/components/pro-contract-template-designer/src/utils/template-variable-render.mjs +23 -15
  21. package/dist/es/components/pro-contract-template-designer/style/index.css +1 -1
  22. package/dist/es/contract-print-css/index.mjs +134 -30
  23. package/dist/es/contract-print.mjs +2 -0
  24. package/dist/es/index.mjs +21 -20
  25. package/dist/lib/components/contract-signing-location/src/ContractSigningLocation.vue.cjs +1 -1
  26. package/dist/lib/components/contract-signing-location/src/ContractSigningLocationCanvas.vue.cjs +1 -1
  27. package/dist/lib/components/contract-signing-location/src/ContractSigningTemplatePage.vue.cjs +1 -1
  28. package/dist/lib/components/contract-signing-location/src/template-source.cjs +1 -1
  29. package/dist/lib/components/index.cjs +1 -1
  30. package/dist/lib/components/pro-contract-template-designer/index.cjs +1 -1
  31. package/dist/lib/components/pro-contract-template-designer/src/ContractTemplatePreviewPage.vue.cjs +1 -1
  32. package/dist/lib/components/pro-contract-template-designer/src/ContractTemplateRendererPage.vue.cjs +1 -1
  33. package/dist/lib/components/pro-contract-template-designer/src/ContractTemplateSingleRenderer.vue.cjs +1 -1
  34. package/dist/lib/components/pro-contract-template-designer/src/DesignerPage.vue.cjs +2 -2
  35. package/dist/lib/components/pro-contract-template-designer/src/ProContractTemplateDesigner.vue.cjs +1 -1
  36. package/dist/lib/components/pro-contract-template-designer/src/ProContractTemplateRenderer.vue.cjs +1 -1
  37. package/dist/lib/components/pro-contract-template-designer/src/SigningLayoutCustomModal.vue.cjs +1 -1
  38. package/dist/lib/components/pro-contract-template-designer/src/composables/use-template-designer.cjs +4 -4
  39. package/dist/lib/components/pro-contract-template-designer/src/utils/contract-layout-check.cjs +1 -0
  40. package/dist/lib/components/pro-contract-template-designer/src/utils/contract-print-document.cjs +50 -28
  41. package/dist/lib/components/pro-contract-template-designer/src/utils/page-decorations.cjs +1 -1
  42. package/dist/lib/components/pro-contract-template-designer/src/utils/signing-layout-presets.cjs +1 -1
  43. package/dist/lib/components/pro-contract-template-designer/src/utils/template-renderer.cjs +5 -5
  44. package/dist/lib/components/pro-contract-template-designer/src/utils/template-variable-render.cjs +1 -1
  45. package/dist/lib/components/pro-contract-template-designer/style/index.css +1 -1
  46. package/dist/lib/contract-print-css/index.cjs +74 -23
  47. package/dist/lib/contract-print.cjs +1 -0
  48. package/dist/lib/index.cjs +1 -1
  49. package/dist/theme/icon.css +1 -1
  50. package/dist/theme/index.css +1 -1
  51. package/dist/types/components/contract-signing-location/src/ContractSigningLocation.vue.d.ts +9 -0
  52. package/dist/types/components/contract-signing-location/src/ContractSigningLocationCanvas.vue.d.ts +7 -0
  53. package/dist/types/components/contract-signing-location/src/template-source.d.ts +6 -0
  54. package/dist/types/components/pro-contract-template-designer/index.d.ts +1 -0
  55. package/dist/types/components/pro-contract-template-designer/src/ContractTemplateSingleRenderer.vue.d.ts +2 -0
  56. package/dist/types/components/pro-contract-template-designer/src/ProContractTemplateDesigner.vue.d.ts +5 -1
  57. package/dist/types/components/pro-contract-template-designer/src/ProContractTemplateRenderer.vue.d.ts +7 -2
  58. package/dist/types/components/pro-contract-template-designer/src/composables/use-template-designer.d.ts +2 -2
  59. package/dist/types/components/pro-contract-template-designer/src/types.d.ts +36 -0
  60. package/dist/types/components/pro-contract-template-designer/src/utils/contract-layout-check.d.ts +104 -0
  61. package/dist/types/components/pro-contract-template-designer/src/utils/contract-print-document.d.ts +4 -1
  62. package/dist/types/components/pro-contract-template-designer/src/utils/page-decorations.d.ts +2 -8
  63. package/dist/types/components/pro-contract-template-designer/src/utils/signing-layout-presets.d.ts +9 -0
  64. package/dist/types/components/pro-contract-template-designer/src/utils/template-renderer.d.ts +6 -1
  65. package/dist/types/contract-print-css/index.d.ts +70 -0
  66. package/dist/types/contract-print.d.ts +2 -0
  67. package/package.json +14 -2
@@ -1,19 +1,19 @@
1
- require(`../../../../_virtual/_rolldown/runtime.cjs`);const e=require(`../../../../contract-print-css/index.cjs`);let t=require(`vue`);var n=`gd-contract-print`,r=.5,i=`合同签署位置:甲方(Company A)编号 2026-08-31。`,a=e.CONTRACT_PRINT_FONT_TIMEOUT_MS+1e3,o=new Set;function s(e){o.forEach(t=>t(e))}function c(e){o.size||window.addEventListener(`message`,s),o.add(e)}function l(e){o.delete(e),o.size||window.removeEventListener(`message`,s)}var u=`合同签署位置甲乙双方`,d=`:,()。;`,f=`20260831`,p={textWidth:379.546875,sansTextWidth:393,variableRowHeight:28},m=`合同排版度量校验失败,禁止生成签署坐标`,h=(0,t.shallowRef)(``);function g(e){h.value=(e?.baseUrl?.trim()??``).replace(/\/+$/,``)}function _(e){let t=e?.trim();return t?t.replace(/\/+$/,``):h.value.trim().replace(/\/+$/,``)}function v(e,t=typeof window>`u`?``:window.location.origin){let n=e.trim().replace(/\/+$/,``);return n?/^https?:\/\//i.test(n)?n:t?new URL(n.startsWith(`/`)?n:`/${n}`,`${t.replace(/\/+$/,``)}/`).href.replace(/\/+$/,``):n.startsWith(`/`)?n:`/${n}`:``}function y(t){let a=`gd-contract-print-${t.messageId}`,o=e.buildContractPrintCss({width:t.width,height:t.height,pages:[{id:t.pageId,pageSize:{width:t.width,height:t.height}}]}),s=JSON.stringify({messageId:t.messageId,parentOrigin:t.parentOrigin,pageId:t.pageId,pageHeight:t.height,timeoutMs:e.CONTRACT_PRINT_FONT_TIMEOUT_MS,fontFamily:e.CONTRACT_PRINT_FONT_FAMILY,sansFontFamily:e.CONTRACT_PRINT_SANS_FONT_FAMILY,latinFontFamily:`"GD Contract Latin", serif`,metricNormalizeCss:e.CONTRACT_PRINT_METRIC_NORMALIZE_CSS.replace(/\s+/g,` `).trim(),sample:i,hanziSample:u,punctSample:d,digitSample:f,hanziAdvance:16,punctAdvance:16,digitAdvance:8,baseline:p,tolerance:r}).replace(/</g,`\\u003c`),c=`width:${t.width}px;min-height:${t.height}px;padding-top:${t.paddingTop}px;padding-bottom:${t.paddingBottom}px`;return`<!doctype html>
1
+ require(`../../../../_virtual/_rolldown/runtime.cjs`);const e=require(`../../../../contract-print-css/index.cjs`);let t=require(`vue`);var n=`gd-contract-print`,r=.5,i=`合同签署位置:甲方(Company A)编号 2026-08-31。`,a=e.CONTRACT_PRINT_FONT_TIMEOUT_MS+1e3,o=new Set;function s(e){o.forEach(t=>t(e))}function c(e){o.size||window.addEventListener(`message`,s),o.add(e)}function l(e){o.delete(e),o.size||window.removeEventListener(`message`,s)}var u=`合同签署位置甲乙双方`,d=`:,()。;`,f=`20260831`,p={textWidth:379.546875,sansTextWidth:393,variableRowHeight:28},m=`合同排版度量校验失败,禁止生成签署坐标`,h=`合同图片加载失败`,g=(0,t.shallowRef)(``);function _(e){g.value=(e?.baseUrl?.trim()??``).replace(/\/+$/,``)}function v(e){let t=e?.trim();return t?t.replace(/\/+$/,``):g.value.trim().replace(/\/+$/,``)}function y(e,t=typeof window>`u`?``:window.location.origin){let n=e.trim().replace(/\/+$/,``);return n?/^https?:\/\//i.test(n)?n:t?new URL(n.startsWith(`/`)?n:`/${n}`,`${t.replace(/\/+$/,``)}/`).href.replace(/\/+$/,``):n.startsWith(`/`)?n:`/${n}`:``}function b(t){let a=`gd-contract-print-${t.messageId}`,o=e.buildContractPrintCss({width:t.width,height:t.height,pages:[{id:t.pageId,pageSize:{width:t.width,height:t.height}}]}),s=JSON.stringify({messageId:t.messageId,parentOrigin:t.parentOrigin,pageId:t.pageId,pageHeight:t.height,timeoutMs:e.CONTRACT_PRINT_FONT_TIMEOUT_MS,imageErrorMessage:h,fontFamily:e.CONTRACT_PRINT_FONT_FAMILY,sansFontFamily:e.CONTRACT_PRINT_SANS_FONT_FAMILY,latinFontFamily:`"GD Contract Latin", serif`,metricNormalizeCss:e.CONTRACT_PRINT_METRIC_NORMALIZE_CSS.replace(/\s+/g,` `).trim(),sample:i,hanziSample:u,punctSample:d,digitSample:f,hanziAdvance:16,punctAdvance:16,digitAdvance:8,baseline:p,tolerance:r}).replace(/</g,`\\u003c`),c=`width:${t.width}px;min-height:${t.height}px;padding-top:${t.paddingTop}px;padding-bottom:${t.paddingBottom}px`;return`<!doctype html>
2
2
  <html lang="zh-CN">
3
3
  <head>
4
4
  <meta charset="utf-8">
5
5
  <meta name="color-scheme" content="light">
6
- <meta http-equiv="Content-Security-Policy" content="default-src 'none'; base-uri 'none'; object-src 'none'; form-action 'none'; connect-src 'none'; frame-src 'none'; worker-src 'none'; img-src data: blob: http: https:; font-src data: blob: http: https:; style-src 'unsafe-inline'; script-src 'nonce-${x(a)}'">
6
+ <meta http-equiv="Content-Security-Policy" content="default-src 'none'; base-uri 'none'; object-src 'none'; form-action 'none'; connect-src 'none'; frame-src 'none'; worker-src 'none'; img-src data: blob: http: https:; font-src data: blob: http: https:; style-src 'unsafe-inline'; script-src 'nonce-${S(a)}'">
7
7
  <style data-contract-render-style="true">
8
- ${b(o)}
8
+ ${x(o)}
9
9
  </style>
10
10
  </head>
11
11
  <body>
12
- <section class="${x(t.classNames)}" data-page-id="${x(t.pageId)}" data-page-format="${x(t.pageFormat??`Custom`)}" data-page-width="${t.width}" data-page-height="${t.height}" style="${c}">
12
+ <section class="${S(t.classNames)}" data-page-id="${S(t.pageId)}" data-page-format="${S(t.pageFormat??`Custom`)}" data-page-width="${t.width}" data-page-height="${t.height}" style="${c}">
13
13
  ${t.decorationsHtml}
14
14
  <div class="gd-contract-template-page__content">${t.contentHtml}</div>
15
15
  </section>
16
- <script nonce="${x(a)}">
16
+ <script nonce="${S(a)}">
17
17
  (() => {
18
18
  'use strict'
19
19
  const config = ${s}
@@ -89,6 +89,7 @@ ${t.decorationsHtml}
89
89
  if (message.command.scroll)
90
90
  firstMatch?.scrollIntoView({ behavior: 'smooth', block: 'center', inline: 'center' })
91
91
  })
92
+ const measureLayout = ${e.measureContractPageLayout.toString()}
92
93
  const measure = () => {
93
94
  if (!page)
94
95
  throw new Error('合同打印页节点不存在')
@@ -133,10 +134,7 @@ ${t.decorationsHtml}
133
134
  })
134
135
  : []
135
136
  const metrics = {
136
- pageWidth: page.offsetWidth,
137
- pageHeight: page.offsetHeight,
138
- contentHeight: page.scrollHeight,
139
- overflowHeight: Math.max(0, page.scrollHeight - config.pageHeight),
137
+ ...measureLayout(page, { width: ${t.width}, height: config.pageHeight }),
140
138
  paddingTop: Number.parseFloat(pageStyle.paddingTop),
141
139
  paddingBottom: Number.parseFloat(pageStyle.paddingBottom),
142
140
  paddingLeft: Number.parseFloat(pageStyle.paddingLeft),
@@ -176,13 +174,45 @@ ${t.decorationsHtml}
176
174
  throw new Error('合同排版度量不一致:' + key + ' expected=' + expected + ' actual=' + actual + ' tolerance=' + config.tolerance)
177
175
  }
178
176
  }
179
- const withTimeout = (promise) => Promise.race([
180
- promise,
181
- new Promise((_, reject) => setTimeout(() => reject(new Error('合同排版度量校验超时(' + config.timeoutMs + 'ms)')), config.timeoutMs)),
182
- ])
183
- const start = async () => {
177
+ const waitForAssets = async () => {
184
178
  if (document.fonts)
185
- await withTimeout(document.fonts.ready)
179
+ await document.fonts.ready
180
+ await Promise.all(Array.from(document.images).map(async image => {
181
+ image.loading = 'eager'
182
+ if (!image.complete)
183
+ await new Promise((resolve, reject) => {
184
+ image.addEventListener('load', resolve, { once: true })
185
+ image.addEventListener('error', () => reject(new Error(config.imageErrorMessage)), { once: true })
186
+ })
187
+ if (!image.naturalWidth)
188
+ throw new Error(config.imageErrorMessage)
189
+ if (image.decode)
190
+ await image.decode()
191
+ }))
192
+ }
193
+ // 字体与图片共用同一个截止时间,两段等待累计不超过 config.timeoutMs;父侧超时必须大于它。
194
+ const waitWithSharedDeadline = (promise) => {
195
+ let timer
196
+ const deadline = new Promise((_, reject) => {
197
+ timer = setTimeout(() => reject(new Error('合同排版度量校验超时(' + config.timeoutMs + 'ms)')), config.timeoutMs)
198
+ })
199
+ return Promise.race([promise, deadline]).finally(() => clearTimeout(timer))
200
+ }
201
+ // 布局度量异常必须经 error 消息回到父页,不能在 ResizeObserver 或 fonts 事件里变成未捕获异常。
202
+ const reportMetrics = () => {
203
+ if (!ready)
204
+ return
205
+ try {
206
+ post('metrics', { metrics: measure() })
207
+ }
208
+ catch (error) {
209
+ ready = false
210
+ observer?.disconnect()
211
+ post('error', { error: error instanceof Error ? error.message : String(error) })
212
+ }
213
+ }
214
+ const start = async () => {
215
+ await waitWithSharedDeadline(waitForAssets())
186
216
  const metrics = measure()
187
217
  try {
188
218
  assertMetrics(metrics)
@@ -193,19 +223,11 @@ ${t.decorationsHtml}
193
223
  }
194
224
  ready = true
195
225
  post('ready', { metrics })
196
- observer = new ResizeObserver(() => {
197
- if (!ready)
198
- return
199
- try {
200
- post('metrics', { metrics: measure() })
201
- }
202
- catch (error) {
203
- ready = false
204
- observer?.disconnect()
205
- post('error', { error: error instanceof Error ? error.message : String(error) })
206
- }
207
- })
226
+ observer = new ResizeObserver(reportMetrics)
208
227
  observer.observe(page)
228
+ const content = page.querySelector('.gd-contract-template-page__content')
229
+ if (content) observer.observe(content)
230
+ document.fonts?.addEventListener('loadingdone', reportMetrics)
209
231
  }
210
232
  start().catch((error) => {
211
233
  post('error', { error: error instanceof Error ? error.message : String(error) })
@@ -214,4 +236,4 @@ ${t.decorationsHtml}
214
236
  })()
215
237
  <\/script>
216
238
  </body>
217
- </html>`}function b(e){return e.replace(/<\/style/gi,`<\\/style`)}function x(e){return String(e).replace(/&/g,`&amp;`).replace(/"/g,`&quot;`).replace(/</g,`&lt;`).replace(/>/g,`&gt;`)}function S(e){if(!e||typeof e!=`object`)return!1;let t=e;return t.namespace===`gd-contract-print`&&typeof t.messageId==`string`&&/^gd-contract-print-[A-Za-z0-9-]{8,160}$/.test(t.messageId)&&(t.type===`ready`||t.type===`metrics`||t.type===`error`||t.type===`interaction`)?t.type===`error`?typeof t.error==`string`&&t.error.length<=2e3:t.type===`interaction`?C(t.interaction):w(t.metrics):!1}function C(e){if(!e||typeof e!=`object`)return!1;let t=e;return typeof t.key!=`string`||!/^[A-Za-z][A-Za-z0-9_]{1,63}$/.test(t.key)||typeof t.pageId!=`string`||!t.pageId||t.pageId.length>256?!1:t.kind===`select`?!0:t.kind===`input`&&(t.value===void 0||typeof t.value==`string`&&t.value.length<=1e6||typeof t.value==`number`&&Number.isFinite(t.value)||typeof t.value==`boolean`)}function w(e){if(!e||typeof e!=`object`)return!1;let t=e;if(![`pageWidth`,`pageHeight`,`contentHeight`,`overflowHeight`,`paddingTop`,`paddingBottom`,`paddingLeft`,`paddingRight`,`fontSize`,`lineHeight`,`textWidth`,`sansTextWidth`,`variableRowHeight`].every(e=>{let n=t[e];return typeof n==`number`&&Number.isFinite(n)&&n>=0&&n<=1e7})||!(t.pageWidth>0)||!(t.pageHeight>0)||!(t.fontSize>0)||!(t.lineHeight>0)||typeof t.fontFamily!=`string`||t.fontFamily.length>1e3||!t.probeOffsets||typeof t.probeOffsets!=`object`)return!1;let n=Object.values(t.probeOffsets);return n.length>1e3||!n.every(e=>Number.isFinite(e)&&e>=-1e7&&e<=1e7)||!Array.isArray(t.blocks)||t.blocks.length>1e4?!1:t.blocks.every(e=>!!e&&typeof e.text==`string`&&e.text.length<=1e3&&Number.isFinite(e.top)&&Math.abs(e.top)<=1e7&&Number.isFinite(e.lineCount)&&e.lineCount>=0&&e.lineCount<=1e6)}exports.CONTRACT_PRINT_FONT_UNCONFIGURED_MESSAGE=m,exports.CONTRACT_PRINT_FRAME_TIMEOUT_MS=a,exports.CONTRACT_PRINT_MESSAGE_NAMESPACE=n,exports.buildContractPrintDocument=y,exports.configureContractPrintFonts=g,exports.isContractPrintFrameMessage=S,exports.resolveContractFontBaseUrl=_,exports.subscribeContractPrintFrameMessages=c,exports.toAbsoluteContractFontBaseUrl=v,exports.unsubscribeContractPrintFrameMessages=l;
239
+ </html>`}function x(e){return e.replace(/<\/style/gi,`<\\/style`)}function S(e){return String(e).replace(/&/g,`&amp;`).replace(/"/g,`&quot;`).replace(/</g,`&lt;`).replace(/>/g,`&gt;`)}function C(e){if(!e||typeof e!=`object`)return!1;let t=e;return t.namespace===`gd-contract-print`&&typeof t.messageId==`string`&&/^gd-contract-print-[A-Za-z0-9-]{8,160}$/.test(t.messageId)&&(t.type===`ready`||t.type===`metrics`||t.type===`error`||t.type===`interaction`)?t.type===`error`?typeof t.error==`string`&&t.error.length<=2e3:t.type===`interaction`?w(t.interaction):T(t.metrics):!1}function w(e){if(!e||typeof e!=`object`)return!1;let t=e;return typeof t.key!=`string`||!/^[A-Za-z][A-Za-z0-9_]{1,63}$/.test(t.key)||typeof t.pageId!=`string`||!t.pageId||t.pageId.length>256?!1:t.kind===`select`?!0:t.kind===`input`&&(t.value===void 0||typeof t.value==`string`&&t.value.length<=1e6||typeof t.value==`number`&&Number.isFinite(t.value)||typeof t.value==`boolean`)}function T(e){if(!e||typeof e!=`object`)return!1;let t=e;if(![`pageWidth`,`pageHeight`,`contentHeight`,`overflowHeight`,`overflowWidth`,`paddingTop`,`paddingBottom`,`paddingLeft`,`paddingRight`,`fontSize`,`lineHeight`,`textWidth`,`sansTextWidth`,`variableRowHeight`].every(e=>{let n=t[e];return typeof n==`number`&&Number.isFinite(n)&&n>=0&&n<=1e7})||!(t.pageWidth>0)||!(t.pageHeight>0)||!(t.fontSize>0)||!(t.lineHeight>0)||typeof t.fontFamily!=`string`||t.fontFamily.length>1e3||!t.probeOffsets||typeof t.probeOffsets!=`object`)return!1;let n=Object.values(t.probeOffsets);return n.length>1e3||!n.every(e=>Number.isFinite(e)&&e>=-1e7&&e<=1e7)||!Array.isArray(t.blocks)||t.blocks.length>1e4?!1:t.blocks.every(e=>!!e&&typeof e.text==`string`&&e.text.length<=1e3&&Number.isFinite(e.top)&&Math.abs(e.top)<=1e7&&Number.isFinite(e.lineCount)&&e.lineCount>=0&&e.lineCount<=1e6)}exports.CONTRACT_PRINT_FONT_UNCONFIGURED_MESSAGE=m,exports.CONTRACT_PRINT_FRAME_TIMEOUT_MS=a,exports.CONTRACT_PRINT_IMAGE_ERROR_MESSAGE=h,exports.CONTRACT_PRINT_MESSAGE_NAMESPACE=n,exports.buildContractPrintDocument=b,exports.configureContractPrintFonts=_,exports.isContractPrintFrameMessage=C,exports.resolveContractFontBaseUrl=v,exports.subscribeContractPrintFrameMessages=c,exports.toAbsoluteContractFontBaseUrl=y,exports.unsubscribeContractPrintFrameMessages=l;
@@ -1 +1 @@
1
- const e=require(`../constants.cjs`),t=require(`./html.cjs`),n=require(`./template-variable-render.cjs`);var r={top:54,right:64,bottom:54,left:64},i={sparse:{columns:2,rows:3},normal:{columns:3,rows:4},dense:{columns:4,rows:6}},a={header:{enabled:!1,text:``,textAlign:`center`,slots:{left:``,center:``,right:``},showOnFirstPage:!0,fontFamily:e.DEFAULT_CONTRACT_FONT_FAMILY,fontSize:12,fontWeight:400,color:`#565b66`,offset:24,divider:{enabled:!1,color:`#d8dadd`}},footer:{enabled:!1,text:`第 {pageNumber} / {totalPages} 页`,textAlign:`center`,slots:{left:``,center:`第 {pageNumber} / {totalPages} 页`,right:``},showOnFirstPage:!0,fontFamily:e.DEFAULT_CONTRACT_FONT_FAMILY,fontSize:12,fontWeight:400,color:`#565b66`,offset:24,divider:{enabled:!1,color:`#d8dadd`}},watermark:{enabled:!1,text:``,fontSize:36,color:`#7a818b`,opacity:.14,rotation:-30,showOnFirstPage:!0,layout:`single`,density:`normal`},pageNumbering:{countFirstPage:!0}},o=/^#[\da-f]{6}$/i,s=/^[A-Za-z][A-Za-z0-9_]{1,63}$/,c=/\$\{\{[\s\S]*?\}\}|\$\{\{|\$\{[^{}]*\}|\{[A-Za-z][A-Za-z0-9]*\}/g;function l(e){return{header:E(e?.header,a.header),footer:E(e?.footer,a.footer),watermark:D(e?.watermark),pageNumbering:{countFirstPage:e?.pageNumbering?.countFirstPage!==!1}}}function u(e){let t=l();return e===`none`?t:(t.footer=E({...t.footer,enabled:!0,slots:{left:``,center:`第 {pageNumber} / {totalPages} 页`,right:``}},a.footer),(e===`internal-review`||e===`draft`)&&(t.watermark=D({...t.watermark,enabled:!0,text:e===`internal-review`?`内部审阅`:`草稿`,layout:`tiled`,density:`normal`})),t)}function d(e){let t=JSON.stringify(l(e));return[`none`,`page-number`,`internal-review`,`draft`].find(e=>JSON.stringify(u(e))===t)??`custom`}function f(e,t=1){let n=l(e).header;return F(n,t)}function p(e,t=1){let n=l(e).footer;return F(n,t)}function m(e,t=1){let n=l(e).watermark;return n.enabled&&!!n.text.trim()&&(t!==1||n.showOnFirstPage)}function h(e,t,n=!0){let r=Math.max(1,Math.floor(e||1)),i=Math.max(0,Math.floor(t||0));return{pageNumber:n?String(r):r===1?``:String(r-1),totalPages:String(n?i:Math.max(0,i-1))}}function g(e,t=[],n=!1){let r=[],i=[],a=new Map(t.map(e=>[e.key,e])),o=0;c.lastIndex=0;let l=c.exec(e);for(;l;){l.index>o&&r.push({type:`text`,value:e.slice(o,l.index)});let t=l[0];if(t===`{pageNumber}`)r.push({type:`pageNumber`});else if(t===`{totalPages}`)r.push({type:`totalPages`});else if(t.startsWith("${{")&&t.endsWith(`}}`)){let e=t.slice(3,-2),o=e.trim();if(e!==o||!s.test(o))i.push({code:`DECORATION_TOKEN_MALFORMED`,message:`页面装饰变量令牌 ${t} 格式错误`,token:t,offset:l.index}),r.push({type:`text`,value:t});else{let e=a.get(o);n&&!e?i.push({code:`DECORATION_VARIABLE_UNKNOWN`,message:`页面装饰引用了未知变量 ${o}`,token:t,offset:l.index}):e?.type===`image`&&i.push({code:`DECORATION_VARIABLE_IMAGE_UNSUPPORTED`,message:`图片变量 ${o} 不能用于页面装饰`,token:t,offset:l.index}),r.push({type:`variable`,key:o,raw:t})}}else i.push({code:`DECORATION_TOKEN_MALFORMED`,message:`页面装饰令牌 ${t} 格式错误`,token:t,offset:l.index}),r.push({type:`text`,value:t});o=l.index+t.length,l=c.exec(e)}return o<e.length&&r.push({type:`text`,value:e.slice(o)}),{tokens:r,issues:i}}function _(e){let t=l(e),n=new Set;return N(t,e=>{g(e).tokens.forEach(e=>{e.type===`variable`&&n.add(e.key)}),L(e).forEach(e=>n.add(e.key))}),n}function v(e,t){let n=l(e),r=[];return N(n,(e,n)=>{g(e,t,!0).issues.forEach((e,t)=>{r.push({type:`variable`,id:`${n}-${e.offset}-${t}`,variableKey:e.code===`DECORATION_VARIABLE_UNKNOWN`?e.token.slice(3,-2).trim():void 0,code:e.code,message:`${P(n)}:${e.message}`})})}),r}function y(e){if(!e.code?.startsWith(`DECORATION_`))return;let t=e.id.replace(/-\d+-\d+$/,``);if(/^(?:header|footer)\.slots\.(?:left|center|right)$/.test(t)||t===`watermark.text`)return t}function b(e,t,n){let r=l(e),i=e=>R(e,t,n);return r.header.slots=I(r.header.slots,i),r.footer.slots=I(r.footer.slots,i),r.watermark.text=i(r.watermark.text),r.header=E(r.header,a.header),r.footer=E(r.footer,a.footer),r}function x(e,t,n,r,i,a){if(e.type===`text`)return e.value;let o=h(r,i,a);if(e.type===`pageNumber`)return o.pageNumber;if(e.type===`totalPages`)return o.totalPages;let s=t.find(t=>t.key===e.key);return!s||s.type===`image`?e.raw:M(s,n?.[e.key])}function S(e){return i[e]??i.normal}function C(e){let t=E(e,a.header);return Math.max(80,t.offset+Math.ceil(t.fontSize*1.5)+20)}function w(e,t=1){return[`gd-contract-template-page`,f(e,t)?`has-contract-header`:``,p(e,t)?`has-contract-footer`:``].filter(Boolean).join(` `)}function T(e,t,n,r=[],i){let a=l(e),o=[];return m(a,t)&&o.push(A(a.watermark,r,i,t,n,a.pageNumbering.countFirstPage)),f(a,t)&&o.push(k(`header`,a.header,r,i,t,n,a.pageNumbering.countFirstPage)),p(a,t)&&o.push(k(`footer`,a.footer,r,i,t,n,a.pageNumbering.countFirstPage)),o.join(``)}function E(e,t){let n=z(e?.textAlign,t.textAlign),r=O(e,t,n),i=r[n].trim()?n:r.center.trim()?`center`:r.left.trim()?`left`:r.right.trim()?`right`:n;return{enabled:!!e?.enabled,text:r[i],textAlign:i,slots:r,showOnFirstPage:e?.showOnFirstPage!==!1,fontFamily:H(e?.fontFamily,t.fontFamily),fontSize:U(e?.fontSize,10,24,t.fontSize),fontWeight:e?.fontWeight===600?600:400,color:V(e?.color,t.color),offset:U(e?.offset,12,48,t.offset),divider:{enabled:!!e?.divider?.enabled,color:V(e?.divider?.color,t.divider.color)}}}function D(e){let t=a.watermark;return{enabled:!!e?.enabled,text:B(e?.text,t.text),fontSize:U(e?.fontSize,12,72,t.fontSize),color:V(e?.color,t.color),opacity:U(e?.opacity,.04,.5,t.opacity),rotation:U(e?.rotation,-90,90,t.rotation),showOnFirstPage:e?.showOnFirstPage!==!1,layout:e?.layout===`tiled`?`tiled`:`single`,density:e?.density===`sparse`||e?.density===`dense`?e.density:`normal`}}function O(e,t,n){if(e?.slots&&typeof e.slots==`object`)return{left:B(e.slots.left,``),center:B(e.slots.center,``),right:B(e.slots.right,``)};let r={left:``,center:``,right:``};return r[n]=B(e?.text,t.text),r}function k(e,n,r,i,a,o,s){let c=C(n),l=n.divider.enabled?`;border-${e===`header`?`bottom`:`top`}:1px solid ${t.escapeHtmlAttribute(n.divider.color)}`:``,u=`color:${t.escapeHtmlAttribute(n.color)};font-family:${t.escapeHtmlAttribute(n.fontFamily)};font-size:${n.fontSize}px;font-weight:${n.fontWeight};${e===`header`?`top`:`bottom`}:${n.offset}px${l}`,d=[`left`,`center`,`right`].map(e=>`<div class="gd-contract-template-page__decoration-slot is-${e}">${j(n.slots[e],r,i,a,o,s)}</div>`).join(``);return`<div class="gd-contract-template-page__${e}" data-decoration-offset="${n.offset}" data-decoration-font-size="${n.fontSize}" data-decoration-safe-padding="${c}" style="${u}">${d}</div>`}function A(e,n,r,i,a,o){let s=S(e.density),c=e.layout===`tiled`?s.columns*s.rows:1,l=j(e.text,n,r,i,a,o),u=Array.from({length:c},()=>`<div class="gd-contract-template-page__watermark-item" style="color:${t.escapeHtmlAttribute(e.color)};font-size:${e.fontSize}px;opacity:${e.opacity};transform:rotate(${e.rotation}deg)">${l}</div>`).join(``),d=e.layout===`tiled`?`--gd-watermark-columns:${s.columns};--gd-watermark-rows:${s.rows}`:``;return`<div class="gd-contract-template-page__watermark is-${e.layout} density-${e.density}" data-watermark-layout="${e.layout}" data-watermark-density="${e.density}" aria-hidden="true" style="${d}">${u}</div>`}function j(e,n,r,i,a,o){let s=h(i,a,o),c=new Map(n.map(e=>[e.key,e]));return g(e).tokens.map(e=>{if(e.type===`text`)return t.escapeHtmlText(e.value);if(e.type===`pageNumber`)return t.escapeHtmlText(s.pageNumber);if(e.type===`totalPages`)return t.escapeHtmlText(s.totalPages);let n=c.get(e.key);return r!==void 0&&n&&n.type!==`image`?t.escapeHtmlText(M(n,r[e.key])):`<span class="gd-contract-template-page__variable" data-template-variable="true" data-key="${t.escapeHtmlAttribute(e.key)}" data-label="${t.escapeHtmlAttribute(n?.label??e.key)}" data-variable-type="${t.escapeHtmlAttribute(n?.type??`text`)}">\${{${t.escapeHtmlText(e.key)}}}</span>`}).join(``)}function M(e,t){let r=t==null?e.defaultValue??``:String(t);return n.resolveTemplateVariablePresentation({type:e.type,defaultValue:r,placeholder:e.placeholder,format:e.format,precision:e.precision,useGrouping:e.useGrouping,checkedText:e.checkedText,uncheckedText:e.uncheckedText,style:e.style}).displayText||e.placeholder||e.label||e.key}function N(e,t){[`left`,`center`,`right`].forEach(n=>{t(e.header.slots[n],`header.slots.${n}`),t(e.footer.slots[n],`footer.slots.${n}`)}),t(e.watermark.text,`watermark.text`)}function P(e){return{"header.slots.left":`页眉左栏`,"header.slots.center":`页眉中栏`,"header.slots.right":`页眉右栏`,"footer.slots.left":`页脚左栏`,"footer.slots.center":`页脚中栏`,"footer.slots.right":`页脚右栏`,"watermark.text":`水印内容`}[e]??`页面装饰`}function F(e,t){return e.enabled&&Object.values(e.slots).some(e=>e.trim())&&(t!==1||e.showOnFirstPage)}function I(e,t){return{left:t(e.left),center:t(e.center),right:t(e.right)}}function L(e){let t=[],n=/\$\{\{([\s\S]*?)\}\}|\$\{\{\s*([A-Za-z][A-Za-z0-9_]{1,63})(?![A-Za-z0-9_])/g,r=n.exec(e);for(;r;){let i=(r[1]??r[2]??``).trim();i&&t.push({key:i,raw:r[0],start:r.index,end:r.index+r[0].length}),r=n.exec(e)}return t}function R(e,t,n){let r=L(e);if(!r.length)return e;let i=``,a=0;return r.forEach(r=>{i+=e.slice(a,r.start),i+=r.key===t?n?`\${{${n}}}`:``:r.raw,a=r.end}),i+e.slice(a)}function z(e,t){return e===`left`||e===`right`||e===`center`?e:t}function B(e,t){return(typeof e==`string`?e:t).slice(0,240)}function V(e,t){return typeof e==`string`&&o.test(e)?e:t}function H(e,t){return typeof e==`string`&&e.replace(/[;{}<>]/g,``).trim().slice(0,120)||t}function U(e,t,n,r){let i=Number(e);return Number.isFinite(i)?Math.min(n,Math.max(t,i)):r}exports.CONTRACT_PAGE_BASE_PADDING=r,exports.buildPageDecorationClassNames=w,exports.buildPageDecorationsHtml=T,exports.collectPageDecorationVariableKeys=_,exports.createPageDecorationPreset=u,exports.getPageDecorationSafePadding=C,exports.getWatermarkDensityGrid=S,exports.hasEnabledPageFooter=p,exports.hasEnabledPageHeader=f,exports.hasEnabledPageWatermark=m,exports.normalizePageDecorations=l,exports.parsePageDecorationText=g,exports.resolvePageDecorationPreset=d,exports.resolvePageDecorationTokenText=x,exports.resolvePageDecorationValidationPath=y,exports.rewritePageDecorationVariableTokens=b,exports.validatePageDecorations=v;
1
+ const e=require(`../../../../contract-print-css/index.cjs`),t=require(`../constants.cjs`),n=require(`./html.cjs`),r=require(`./template-variable-render.cjs`);var i={sparse:{columns:2,rows:3},normal:{columns:3,rows:4},dense:{columns:4,rows:6}},a={header:{enabled:!1,text:``,textAlign:`center`,slots:{left:``,center:``,right:``},showOnFirstPage:!0,fontFamily:t.DEFAULT_CONTRACT_FONT_FAMILY,fontSize:12,fontWeight:400,color:`#565b66`,offset:24,divider:{enabled:!1,color:`#d8dadd`}},footer:{enabled:!1,text:`第 {pageNumber} / {totalPages} 页`,textAlign:`center`,slots:{left:``,center:`第 {pageNumber} / {totalPages} 页`,right:``},showOnFirstPage:!0,fontFamily:t.DEFAULT_CONTRACT_FONT_FAMILY,fontSize:12,fontWeight:400,color:`#565b66`,offset:24,divider:{enabled:!1,color:`#d8dadd`}},watermark:{enabled:!1,text:``,fontSize:36,color:`#7a818b`,opacity:.14,rotation:-30,showOnFirstPage:!0,layout:`single`,density:`normal`},pageNumbering:{countFirstPage:!0}},o=/^#[\da-f]{6}$/i,s=/^[A-Za-z][A-Za-z0-9_]{1,63}$/,c=/\$\{\{[\s\S]*?\}\}|\$\{\{|\$\{[^{}]*\}|\{[A-Za-z][A-Za-z0-9]*\}/g;function l(e){return{header:T(e?.header,a.header),footer:T(e?.footer,a.footer),watermark:E(e?.watermark),pageNumbering:{countFirstPage:e?.pageNumbering?.countFirstPage!==!1}}}function u(e){let t=l();return e===`none`?t:(t.footer=T({...t.footer,enabled:!0,slots:{left:``,center:`第 {pageNumber} / {totalPages} 页`,right:``}},a.footer),(e===`internal-review`||e===`draft`)&&(t.watermark=E({...t.watermark,enabled:!0,text:e===`internal-review`?`内部审阅`:`草稿`,layout:`tiled`,density:`normal`})),t)}function d(e){let t=JSON.stringify(l(e));return[`none`,`page-number`,`internal-review`,`draft`].find(e=>JSON.stringify(u(e))===t)??`custom`}function f(e,t=1){let n=l(e).header;return P(n,t)}function p(e,t=1){let n=l(e).footer;return P(n,t)}function m(e,t=1){let n=l(e).watermark;return n.enabled&&!!n.text.trim()&&(t!==1||n.showOnFirstPage)}function h(e,t,n=!0){let r=Math.max(1,Math.floor(e||1)),i=Math.max(0,Math.floor(t||0));return{pageNumber:n?String(r):r===1?``:String(r-1),totalPages:String(n?i:Math.max(0,i-1))}}function g(e,t=[],n=!1){let r=[],i=[],a=new Map(t.map(e=>[e.key,e])),o=0;c.lastIndex=0;let l=c.exec(e);for(;l;){l.index>o&&r.push({type:`text`,value:e.slice(o,l.index)});let t=l[0];if(t===`{pageNumber}`)r.push({type:`pageNumber`});else if(t===`{totalPages}`)r.push({type:`totalPages`});else if(t.startsWith("${{")&&t.endsWith(`}}`)){let e=t.slice(3,-2),o=e.trim();if(e!==o||!s.test(o))i.push({code:`DECORATION_TOKEN_MALFORMED`,message:`页面装饰变量令牌 ${t} 格式错误`,token:t,offset:l.index}),r.push({type:`text`,value:t});else{let e=a.get(o);n&&!e?i.push({code:`DECORATION_VARIABLE_UNKNOWN`,message:`页面装饰引用了未知变量 ${o}`,token:t,offset:l.index}):e?.type===`image`&&i.push({code:`DECORATION_VARIABLE_IMAGE_UNSUPPORTED`,message:`图片变量 ${o} 不能用于页面装饰`,token:t,offset:l.index}),r.push({type:`variable`,key:o,raw:t})}}else i.push({code:`DECORATION_TOKEN_MALFORMED`,message:`页面装饰令牌 ${t} 格式错误`,token:t,offset:l.index}),r.push({type:`text`,value:t});o=l.index+t.length,l=c.exec(e)}return o<e.length&&r.push({type:`text`,value:e.slice(o)}),{tokens:r,issues:i}}function _(e){let t=l(e),n=new Set;return M(t,e=>{g(e).tokens.forEach(e=>{e.type===`variable`&&n.add(e.key)}),I(e).forEach(e=>n.add(e.key))}),n}function v(e,t){let n=l(e),r=[];return M(n,(e,n)=>{g(e,t,!0).issues.forEach((e,t)=>{r.push({type:`variable`,id:`${n}-${e.offset}-${t}`,variableKey:e.code===`DECORATION_VARIABLE_UNKNOWN`?e.token.slice(3,-2).trim():void 0,code:e.code,message:`${N(n)}:${e.message}`})})}),r}function y(e){if(!e.code?.startsWith(`DECORATION_`))return;let t=e.id.replace(/-\d+-\d+$/,``);if(/^(?:header|footer)\.slots\.(?:left|center|right)$/.test(t)||t===`watermark.text`)return t}function b(e,t,n){let r=l(e),i=e=>L(e,t,n);return r.header.slots=F(r.header.slots,i),r.footer.slots=F(r.footer.slots,i),r.watermark.text=i(r.watermark.text),r.header=T(r.header,a.header),r.footer=T(r.footer,a.footer),r}function x(e,t,n,r,i,a){if(e.type===`text`)return e.value;let o=h(r,i,a);if(e.type===`pageNumber`)return o.pageNumber;if(e.type===`totalPages`)return o.totalPages;let s=t.find(t=>t.key===e.key);return!s||s.type===`image`?e.raw:j(s,n?.[e.key])}function S(e){return i[e]??i.normal}function C(e,t=1){return[`gd-contract-template-page`,f(e,t)?`has-contract-header`:``,p(e,t)?`has-contract-footer`:``].filter(Boolean).join(` `)}function w(e,t,n,r=[],i){let a=l(e),o=[];return m(a,t)&&o.push(k(a.watermark,r,i,t,n,a.pageNumbering.countFirstPage)),f(a,t)&&o.push(O(`header`,a.header,r,i,t,n,a.pageNumbering.countFirstPage)),p(a,t)&&o.push(O(`footer`,a.footer,r,i,t,n,a.pageNumbering.countFirstPage)),o.join(``)}function T(e,t){let n=R(e?.textAlign,t.textAlign),r=D(e,t,n),i=r[n].trim()?n:r.center.trim()?`center`:r.left.trim()?`left`:r.right.trim()?`right`:n;return{enabled:!!e?.enabled,text:r[i],textAlign:i,slots:r,showOnFirstPage:e?.showOnFirstPage!==!1,fontFamily:V(e?.fontFamily,t.fontFamily),fontSize:H(e?.fontSize,10,24,t.fontSize),fontWeight:e?.fontWeight===600?600:400,color:B(e?.color,t.color),offset:H(e?.offset,12,48,t.offset),divider:{enabled:!!e?.divider?.enabled,color:B(e?.divider?.color,t.divider.color)}}}function E(e){let t=a.watermark;return{enabled:!!e?.enabled,text:z(e?.text,t.text),fontSize:H(e?.fontSize,12,72,t.fontSize),color:B(e?.color,t.color),opacity:H(e?.opacity,.04,.5,t.opacity),rotation:H(e?.rotation,-90,90,t.rotation),showOnFirstPage:e?.showOnFirstPage!==!1,layout:e?.layout===`tiled`?`tiled`:`single`,density:e?.density===`sparse`||e?.density===`dense`?e.density:`normal`}}function D(e,t,n){if(e?.slots&&typeof e.slots==`object`)return{left:z(e.slots.left,``),center:z(e.slots.center,``),right:z(e.slots.right,``)};let r={left:``,center:``,right:``};return r[n]=z(e?.text,t.text),r}function O(t,r,i,a,o,s,c){let l=e.resolveContractDecorationSafePadding(r),u=r.divider.enabled?`;border-${t===`header`?`bottom`:`top`}:1px solid ${n.escapeHtmlAttribute(r.divider.color)}`:``,d=`color:${n.escapeHtmlAttribute(r.color)};font-family:${n.escapeHtmlAttribute(r.fontFamily)};font-size:${r.fontSize}px;font-weight:${r.fontWeight};${t===`header`?`top`:`bottom`}:${r.offset}px${u}`,f=[`left`,`center`,`right`].map(e=>`<div class="gd-contract-template-page__decoration-slot is-${e}">${A(r.slots[e],i,a,o,s,c)}</div>`).join(``);return`<div class="gd-contract-template-page__${t}" data-decoration-offset="${r.offset}" data-decoration-font-size="${r.fontSize}" data-decoration-safe-padding="${l}" style="${d}">${f}</div>`}function k(e,t,r,i,a,o){let s=S(e.density),c=e.layout===`tiled`?s.columns*s.rows:1,l=A(e.text,t,r,i,a,o),u=Array.from({length:c},()=>`<div class="gd-contract-template-page__watermark-item" style="color:${n.escapeHtmlAttribute(e.color)};font-size:${e.fontSize}px;opacity:${e.opacity};transform:rotate(${e.rotation}deg)">${l}</div>`).join(``),d=e.layout===`tiled`?`--gd-watermark-columns:${s.columns};--gd-watermark-rows:${s.rows}`:``;return`<div class="gd-contract-template-page__watermark is-${e.layout} density-${e.density}" data-watermark-layout="${e.layout}" data-watermark-density="${e.density}" aria-hidden="true" style="${d}">${u}</div>`}function A(e,t,r,i,a,o){let s=h(i,a,o),c=new Map(t.map(e=>[e.key,e]));return g(e).tokens.map(e=>{if(e.type===`text`)return n.escapeHtmlText(e.value);if(e.type===`pageNumber`)return n.escapeHtmlText(s.pageNumber);if(e.type===`totalPages`)return n.escapeHtmlText(s.totalPages);let t=c.get(e.key);return r!==void 0&&t&&t.type!==`image`?n.escapeHtmlText(j(t,r[e.key])):`<span class="gd-contract-template-page__variable" data-template-variable="true" data-key="${n.escapeHtmlAttribute(e.key)}" data-label="${n.escapeHtmlAttribute(t?.label??e.key)}" data-variable-type="${n.escapeHtmlAttribute(t?.type??`text`)}">\${{${n.escapeHtmlText(e.key)}}}</span>`}).join(``)}function j(e,t){let n=t==null?e.defaultValue??``:String(t);return r.resolveTemplateVariablePresentation({type:e.type,defaultValue:n,placeholder:e.placeholder,format:e.format,precision:e.precision,useGrouping:e.useGrouping,checkedText:e.checkedText,uncheckedText:e.uncheckedText,style:e.style}).displayText||e.placeholder||e.label||e.key}function M(e,t){[`left`,`center`,`right`].forEach(n=>{t(e.header.slots[n],`header.slots.${n}`),t(e.footer.slots[n],`footer.slots.${n}`)}),t(e.watermark.text,`watermark.text`)}function N(e){return{"header.slots.left":`页眉左栏`,"header.slots.center":`页眉中栏`,"header.slots.right":`页眉右栏`,"footer.slots.left":`页脚左栏`,"footer.slots.center":`页脚中栏`,"footer.slots.right":`页脚右栏`,"watermark.text":`水印内容`}[e]??`页面装饰`}function P(t,n){return e.isContractPageDecorationVisible(t,n)}function F(e,t){return{left:t(e.left),center:t(e.center),right:t(e.right)}}function I(e){let t=[],n=/\$\{\{([\s\S]*?)\}\}|\$\{\{\s*([A-Za-z][A-Za-z0-9_]{1,63})(?![A-Za-z0-9_])/g,r=n.exec(e);for(;r;){let i=(r[1]??r[2]??``).trim();i&&t.push({key:i,raw:r[0],start:r.index,end:r.index+r[0].length}),r=n.exec(e)}return t}function L(e,t,n){let r=I(e);if(!r.length)return e;let i=``,a=0;return r.forEach(r=>{i+=e.slice(a,r.start),i+=r.key===t?n?`\${{${n}}}`:``:r.raw,a=r.end}),i+e.slice(a)}function R(e,t){return e===`left`||e===`right`||e===`center`?e:t}function z(e,t){return(typeof e==`string`?e:t).slice(0,240)}function B(e,t){return typeof e==`string`&&o.test(e)?e:t}function V(e,t){return typeof e==`string`&&e.replace(/[;{}<>]/g,``).trim().slice(0,120)||t}function H(e,t,n,r){let i=Number(e);return Number.isFinite(i)?Math.min(n,Math.max(t,i)):r}exports.buildPageDecorationClassNames=C,exports.buildPageDecorationsHtml=w,exports.collectPageDecorationVariableKeys=_,exports.createPageDecorationPreset=u,exports.getWatermarkDensityGrid=S,exports.hasEnabledPageFooter=p,exports.hasEnabledPageHeader=f,exports.hasEnabledPageWatermark=m,exports.normalizePageDecorations=l,exports.parsePageDecorationText=g,exports.resolvePageDecorationPreset=d,exports.resolvePageDecorationTokenText=x,exports.resolvePageDecorationValidationPath=y,exports.rewritePageDecorationVariableTokens=b,exports.validatePageDecorations=v;
@@ -1 +1 @@
1
- const e=require(`./signing-mark.cjs`);var t=`dual-party`,n=`custom`,r=1,i=6,a=[`side-by-side`,`stacked`,`table-cell`,`final-page`],o={"side-by-side":`并排分栏`,stacked:`逐行列出`,"table-cell":`表格单元格`,"final-page":`末页集中`},s=[`seal`,`signature`,`date`,`title`],c={seal:`盖章框`,signature:`签字线`,date:`日期`,title:`职务`},l=[`甲`,`乙`,`丙`,`丁`,`戊`,`己`,`庚`,`辛`,`壬`,`癸`],u=`年  月  日`,d=`      `,f=`签署页`;function p(e){let t=l[e];return t?`${t}方`:`${e+1}方`}var m={"dual-party":{key:`dual-party`,label:`双方并排`,description:`甲乙双方盖章、授权代表签字及日期`,options:{partyCount:2,arrangement:`side-by-side`,fields:{seal:!0,signature:!0,date:!0,title:!1}}},"party-list":{key:`party-list`,label:`多方列表`,description:`每个签署方一行,适合三方及以上`,options:{partyCount:3,arrangement:`stacked`,fields:{seal:!0,signature:!0,date:!0,title:!1}}},"table-cell":{key:`table-cell`,label:`双方逐行`,description:`甲乙双方上下排列,适合正文末尾签署`,options:{partyCount:2,arrangement:`stacked`,fields:{seal:!0,signature:!0,date:!0,title:!1}}},"final-page":{key:`final-page`,label:`末页签署区`,description:`合同末尾集中签署块`,options:{partyCount:2,arrangement:`final-page`,fields:{seal:!0,signature:!0,date:!0,title:!0}}}},h=[`dual-party`,`party-list`,`table-cell`,`final-page`],g=[...h,n];function _(e){return typeof e==`string`&&Object.prototype.hasOwnProperty.call(m,e)}function v(e){return typeof e==`string`&&g.includes(e)}function y(e){return a.includes(e)}function b(e){let t=Number(e?.partyCount),n=e?.fields,r={seal:n?.seal!==!1,signature:n?.signature!==!1,date:n?.date!==!1,title:n?.title===!0};!r.seal&&!r.signature&&!r.date&&!r.title&&(r.seal=!0);let i=Array.isArray(e?.partyNames)?e.partyNames.map(e=>String(e??``).trim()):void 0;return{partyCount:Number.isFinite(t)?Math.min(6,Math.max(1,Math.round(t))):m[`dual-party`].options.partyCount,arrangement:y(e?.arrangement)?e.arrangement:`side-by-side`,fields:r,...i?.length?{partyNames:i}:{}}}function x(e){return Array.from({length:e.partyCount},(t,n)=>e.partyNames?.[n]||p(n))}function S(e=[],t){return{type:`paragraph`,...t?{attrs:{textAlign:t}}:{},content:e}}function C(e,t){return S([{type:`text`,text:e}],t)}function w(t,n=``){return S([{type:`signingMark`,attrs:e.buildSigningMarkAttrs(t,{label:n})}])}function T(e,t){return S([{type:`text`,text:e},{type:`text`,text:t,marks:[{type:`underline`}]}])}function E(){return T(`日期:`,u)}function D(){return T(`职务:`,d)}function O(e,t=`tableCell`){return{type:t,attrs:{colspan:1,rowspan:1,colwidth:null,textAlign:`left`},content:e}}function k(e,t){let n=[C(t.seal?`${e}(盖章):`:`${e}:`)];return t.seal&&n.push(w(`seal`)),t.signature&&(n.push(C(`授权代表(签字):`)),n.push(w(`line`))),t.title&&n.push(D()),t.date&&n.push(E()),O(n)}function A(e,t){return{type:`table`,attrs:{signingLayout:t},content:e}}function j(e,t=n){let r=b(e),i=x(r),a=v(t)?t:n,o=[];return r.arrangement===`final-page`&&o.push(C(f,`center`)),r.arrangement===`stacked`?o.push(A(i.map(e=>({type:`tableRow`,content:[k(e,r.fields)]})),a)):o.push(A([{type:`tableRow`,content:i.map(e=>k(e,r.fields))}],a)),o.push(S()),o}function M(e){return j(m[e].options,e)}function N(){return M(`dual-party`)}function P(e){let t=b(e),n=s.filter(e=>t.fields[e]).map(e=>c[e]);return`${t.partyCount} 个签署方 · ${o[t.arrangement]} · ${n.join(`、`)}`}var F={seal:`seal`,signature:`line`,date:`date`,title:`text`};function I(e){let t=b(e),n=x(t),r=s.filter(e=>t.fields[e]).map(e=>F[e]),i=n.map(e=>({partyLabel:e,items:r}));return t.arrangement===`stacked`?{arrangement:t.arrangement,columns:1,cells:i}:{arrangement:t.arrangement,columns:t.partyCount,...t.arrangement===`final-page`?{title:f}:{},cells:i}}exports.CUSTOM_SIGNING_LAYOUT=n,exports.DUAL_PARTY_SIGNING_LAYOUT=t,exports.MAX_SIGNING_LAYOUT_PARTY_COUNT=i,exports.MIN_SIGNING_LAYOUT_PARTY_COUNT=r,exports.SIGNING_LAYOUT_ARRANGEMENTS=a,exports.SIGNING_LAYOUT_ARRANGEMENT_LABELS=o,exports.SIGNING_LAYOUT_ATTRIBUTE_VALUES=g,exports.SIGNING_LAYOUT_FIELD_KEYS=s,exports.SIGNING_LAYOUT_FIELD_LABELS=c,exports.SIGNING_LAYOUT_PRESETS=m,exports.SIGNING_LAYOUT_PRESET_KEYS=h,exports.buildDualPartySigningLayoutPreset=N,exports.buildSigningLayoutContent=j,exports.buildSigningLayoutPresetContent=M,exports.buildSigningLayoutPreviewModel=I,exports.describeSigningLayoutOptions=P,exports.isSigningLayoutAttributeValue=v,exports.isSigningLayoutPresetKey=_,exports.normalizeSigningLayoutOptions=b,exports.resolvePartyName=p;
1
+ const e=require(`../../../../contract-print-css/index.cjs`),t=require(`./signing-mark.cjs`);var n=`dual-party`,r=794,i=24,a=4,o=r-e.CONTRACT_PAGE_BASE_PADDING.left-e.CONTRACT_PAGE_BASE_PADDING.right,s=3,c=`custom`,l=1,u=6,d=[`side-by-side`,`stacked`,`table-cell`,`final-page`],f={"side-by-side":`并排分栏`,stacked:`逐行列出`,"table-cell":`表格单元格`,"final-page":`末页集中`},p=[`seal`,`signature`,`date`,`title`],m={seal:`盖章框`,signature:`签字线`,date:`日期`,title:`职务`},h=[`甲`,`乙`,`丙`,`丁`,`戊`,`己`,`庚`,`辛`,`壬`,`癸`],g=`年  月  日`,_=`      `,v=`签署页`;function y(e){let t=h[e];return t?`${t}方`:`${e+1}方`}var b={"dual-party":{key:`dual-party`,label:`双方并排`,description:`甲乙双方盖章、授权代表签字及日期`,options:{partyCount:2,arrangement:`side-by-side`,fields:{seal:!0,signature:!0,date:!0,title:!1}}},"party-list":{key:`party-list`,label:`多方列表`,description:`每个签署方一行,适合三方及以上`,options:{partyCount:3,arrangement:`stacked`,fields:{seal:!0,signature:!0,date:!0,title:!1}}},"table-cell":{key:`table-cell`,label:`双方逐行`,description:`甲乙双方上下排列,适合正文末尾签署`,options:{partyCount:2,arrangement:`stacked`,fields:{seal:!0,signature:!0,date:!0,title:!1}}},"final-page":{key:`final-page`,label:`末页签署区`,description:`合同末尾集中签署块`,options:{partyCount:2,arrangement:`final-page`,fields:{seal:!0,signature:!0,date:!0,title:!0}}}},x=[`dual-party`,`party-list`,`table-cell`,`final-page`],S=[...x,c];function C(e){return typeof e==`string`&&Object.prototype.hasOwnProperty.call(b,e)}function w(e){return typeof e==`string`&&S.includes(e)}function T(e){return d.includes(e)}function E(e){let t=Number(e?.partyCount),n=e?.fields,r={seal:n?.seal!==!1,signature:n?.signature!==!1,date:n?.date!==!1,title:n?.title===!0};!r.seal&&!r.signature&&!r.date&&!r.title&&(r.seal=!0);let i=Array.isArray(e?.partyNames)?e.partyNames.map(e=>String(e??``).trim()):void 0,a=Number.isFinite(t)?Math.min(6,Math.max(1,Math.round(t))):b[`dual-party`].options.partyCount,o=T(e?.arrangement)?e.arrangement:`side-by-side`;return{partyCount:a,arrangement:j(o)&&a>3?`stacked`:o,fields:r,...i?.length?{partyNames:i}:{}}}function D(e){return Array.from({length:e.partyCount},(t,n)=>e.partyNames?.[n]||y(n))}function O(e=[],t){return{type:`paragraph`,...t?{attrs:{textAlign:t}}:{},content:e}}function k(e,t){return O([{type:`text`,text:e}],t)}function A(e,n=``,r){return O([{type:`signingMark`,attrs:t.buildSigningMarkAttrs(e,{label:n,width:r})}])}function j(e){return e!==`stacked`}function M(e){let n=Math.floor(o/Math.max(1,e))-i*2-a;return Math.min(t.getSigningMarkDefaultSize(`line`).width,n)}function N(e,t){return O([{type:`text`,text:e},{type:`text`,text:t,marks:[{type:`underline`}]}])}function P(){return N(`日期:`,g)}function F(){return N(`职务:`,_)}function I(e,t=`tableCell`){return{type:t,attrs:{colspan:1,rowspan:1,colwidth:null,textAlign:`left`},content:e}}function L(e,t,n){let r=[k(t.seal?`${e}(盖章):`:`${e}:`)];return t.seal&&r.push(A(`seal`)),t.signature&&(r.push(k(`授权代表(签字):`)),r.push(A(`line`,``,n))),t.title&&r.push(F()),t.date&&r.push(P()),I(r)}function R(e,t){return{type:`table`,attrs:{signingLayout:t},content:e}}function z(e,t=c){let n=E(e),r=D(n),i=w(t)?t:c,a=[];if(n.arrangement===`final-page`&&a.push(k(v,`center`)),n.arrangement===`stacked`)a.push(R(r.map(e=>({type:`tableRow`,content:[L(e,n.fields)]})),i));else{let e=M(n.partyCount);a.push(R([{type:`tableRow`,content:r.map(t=>L(t,n.fields,e))}],i))}return a.push(O()),a}function B(e){return z(b[e].options,e)}function V(){return B(`dual-party`)}function H(e){let t=E(e),n=p.filter(e=>t.fields[e]).map(e=>m[e]);return`${t.partyCount} 个签署方 · ${f[t.arrangement]} · ${n.join(`、`)}`}var U={seal:`seal`,signature:`line`,date:`date`,title:`text`};function W(e){let t=E(e),n=D(t),r=p.filter(e=>t.fields[e]).map(e=>U[e]),i=n.map(e=>({partyLabel:e,items:r}));return t.arrangement===`stacked`?{arrangement:t.arrangement,columns:1,cells:i}:{arrangement:t.arrangement,columns:t.partyCount,...t.arrangement===`final-page`?{title:v}:{},cells:i}}exports.CUSTOM_SIGNING_LAYOUT=c,exports.DUAL_PARTY_SIGNING_LAYOUT=n,exports.MAX_SIDE_BY_SIDE_SIGNING_LAYOUT_PARTY_COUNT=s,exports.MAX_SIGNING_LAYOUT_PARTY_COUNT=u,exports.MIN_SIGNING_LAYOUT_PARTY_COUNT=l,exports.SIGNING_LAYOUT_ARRANGEMENTS=d,exports.SIGNING_LAYOUT_ARRANGEMENT_LABELS=f,exports.SIGNING_LAYOUT_ATTRIBUTE_VALUES=S,exports.SIGNING_LAYOUT_FIELD_KEYS=p,exports.SIGNING_LAYOUT_FIELD_LABELS=m,exports.SIGNING_LAYOUT_PRESETS=b,exports.SIGNING_LAYOUT_PRESET_KEYS=x,exports.buildDualPartySigningLayoutPreset=V,exports.buildSigningLayoutContent=z,exports.buildSigningLayoutPresetContent=B,exports.buildSigningLayoutPreviewModel=W,exports.describeSigningLayoutOptions=H,exports.isSigningLayoutAttributeValue=w,exports.isSigningLayoutPresetKey=C,exports.isSingleRowSigningLayoutArrangement=j,exports.normalizeSigningLayoutOptions=E,exports.resolvePartyName=y,exports.resolveSingleRowSignatureLineWidth=M;
@@ -1,5 +1,5 @@
1
- const e=require(`./html.cjs`),t=require(`./template-variable-render.cjs`),n=require(`./page-decorations.cjs`),r=require(`../types.cjs`),i=require(`./advanced-controls.cjs`),a=require(`../composables/use-template-designer.cjs`),o=require(`./image-url.cjs`);function s(e){let t=Array.isArray(e?.variables)?e.variables:[],n=t.map(e=>c(e)),r={};return t.forEach(e=>{let t=typeof e?.key==`string`?e.key:``;if(t){if(e.type===`checkbox`){r[t]=!1;return}if(e.type===`number`){let n=typeof e.defaultValue==`string`?e.defaultValue.trim().length>0:e.defaultValue!==void 0,i=Number(e.defaultValue);r[t]=n&&Number.isFinite(i)?i:``;return}r[t]=e.defaultValue??``}}),{values:r,variables:n}}function c(e){return JSON.parse(JSON.stringify(e))}var l=new Set([`action`,`formaction`,`href`,`src`,`xlink:href`]),u=/<[^>]+data-template-variable=["']true["'][^>]*>/gi,d=100,f=6e3,p=6,m=/^data:image\/(?:png|jpe?g|webp|gif);base64,[A-Za-z0-9+/=]+$/i;function h(e){let t={};return(Array.isArray(e?.variables)?e.variables:[]).forEach(e=>{e?.key&&(t[e.key]=A(e))}),t}function g(e,t){return{...h(e),...t??{}}}function _(e,t){let n=b(e);if(!e)return n;let r=Array.isArray(e.variables)?e.variables:[],i=new Set(r.map(e=>e?.key).filter(Boolean));return Object.keys(t).forEach(e=>{i.has(e)||n.push({type:`variable`,id:e,variableKey:e,message:`提交值 ${e} 不属于模板变量`,code:`VARIABLE_TYPE_INVALID`})}),r.forEach(e=>{if(!e?.key)return;let r=W(e,t[e.key]),i=e.label||e.key;if(e.required&&C(r)){n.push({type:`variable`,id:e.id,variableKey:e.key,message:`请填写${i}`,code:`VARIABLE_REQUIRED`});return}if(C(r))return;let a=e.type??`text`;a===`number`&&!G(r,e.precision,e.format)&&n.push({type:`variable`,id:e.id,variableKey:e.key,message:`${i} 不是合法数字或超出精度`,code:`VARIABLE_TYPE_INVALID`}),a===`checkbox`&&!q(r)&&n.push({type:`variable`,id:e.id,variableKey:e.key,message:`${i} 不是合法勾选值`,code:`VARIABLE_TYPE_INVALID`}),a===`date`&&!K(r)&&n.push({type:`variable`,id:e.id,variableKey:e.key,message:`${i} 不是合法日期`,code:`VARIABLE_TYPE_INVALID`}),a===`image`&&!J(String(r).trim())&&n.push({type:`security`,id:e.id,variableKey:e.key,message:`${i} 必须使用安全的图片 data URL`,code:`UNSAFE_IMAGE_URL`}),n.push(...v(e,r)),Y(a)&&(X(r,a!==`radio`&&!!e.multiple)?N(e)&&!P(e,r)&&n.push({type:`variable`,id:e.id,variableKey:e.key,message:`${i} 不在可选项中`,code:`VARIABLE_TYPE_INVALID`}):n.push({type:`variable`,id:e.id,variableKey:e.key,message:`${i} 不是合法选择值`,code:`VARIABLE_TYPE_INVALID`}))}),n}function v(e,t){if((e.type??`text`)!==`text`)return[];let n=W(e,t);if(C(n)||!Z(e,String(n)))return[];let r=e.label||e.key;return[{type:`variable`,id:e.id,variableKey:e.key,message:e.multiline?`${r} 内容超出正文预留的${e.rows??3}行,请缩短内容或调整模板行数`:`${r} 内容超出变量范围`,code:`VARIABLE_OVERFLOW`}]}function y(e,t,n){return _(e,t)}function b(e){if(!e)return[{type:`page`,id:`template`,message:`缺少可渲染的合同模板`,code:`TEMPLATE_MISSING`}];let t=[],i=Array.isArray(e.pages)?e.pages:[],o=Array.isArray(e.variables)?e.variables:[];(!Array.isArray(e.pages)||i.length===0)&&t.push({type:`page`,id:`template-pages`,message:`模板至少需要一个合法页面`,code:`TEMPLATE_PAGES_INVALID`}),Array.isArray(e.variables)||t.push({type:`variable`,id:`template-variables`,message:`模板变量列表格式无效`,code:`TEMPLATE_VARIABLES_INVALID`}),Q(e.pageSize)||t.push({type:`page`,id:`template-page-size`,message:`模板默认页面尺寸必须在 ${d} ~ ${f} CSS px 之间`,code:`TEMPLATE_PAGE_SIZE_INVALID`});let s=new Map;o.forEach((e,n)=>{if(!e||typeof e.key!=`string`||!e.key.trim()){t.push({type:`variable`,id:e?.id||`variable-${n}`,message:`第 ${n+1} 个变量缺少有效 key`,code:`VARIABLE_KEY_MISSING`});return}let i=e.key.trim(),c=o.some(t=>t?.id!==e.id&&typeof t?.key==`string`&&t.key.trim()===i),l=a.validateContractTemplateVariableKey(e.key,o,e.id),u=!a.CONTRACT_TEMPLATE_VARIABLE_KEY_PATTERN.test(i)||a.CONTRACT_TEMPLATE_RESERVED_VARIABLE_KEYS.has(i);l&&(u||!c||e.key!==i)&&t.push({type:`variable`,id:e.id||`variable-${n}`,variableKey:e.key,message:`${e.label||e.key}:${l}`,code:`VARIABLE_KEY_INVALID`}),s.set(i,(s.get(i)??0)+1),r.isContractTemplateFieldType(e.type??`text`)||t.push({type:`variable`,id:e.id,variableKey:e.key,message:`${e.label||e.key} 不是正文填写变量`,code:`VARIABLE_TYPE_UNSUPPORTED`})}),s.forEach((e,n)=>{e>1&&t.push({type:`variable`,id:n,variableKey:n,message:`变量 key ${n} 重复`,code:`VARIABLE_KEY_DUPLICATED`})});let c=new Set;i.forEach((e,n)=>{if(!e||typeof e.id!=`string`||!e.id.trim()||typeof e.contentHtml!=`string`){t.push({type:`page`,id:e?.id||`page-${n}`,pageId:e?.id,message:`第 ${n+1} 页结构无效,已跳过渲染`,code:`PAGE_INVALID`});return}e.pageSize!==void 0&&!Q(e.pageSize)&&t.push({type:`page`,id:`${e.id}-page-size`,pageId:e.id,message:`${e.title||`第 ${n+1} 页`}:页面尺寸必须在 ${d} ~ ${f} CSS px 之间`,code:`PAGE_SIZE_INVALID`}),z(e.contentHtml).forEach(e=>c.add(e)),B(e.contentHtml).forEach((r,i)=>{t.push({type:`security`,id:`${e.id}-security-${i}`,pageId:e.id,message:`${e.title||`第 ${n+1} 页`}:${r}`,code:`HTML_UNSAFE`})})}),c.forEach(e=>{s.has(e)||t.push({type:`variable`,id:e,variableKey:e,message:`正文引用的变量 ${e} 缺少配置`,code:`VARIABLE_CONFIG_MISSING`})});let l=n.collectPageDecorationVariableKeys(e.pageDecorations);return s.forEach((e,n)=>{!c.has(n)&&!l.has(n)&&t.push({type:`variable`,id:n,variableKey:n,message:`变量 ${n} 缺少正文节点`,code:`VARIABLE_NODE_MISSING`})}),t.push(...n.validatePageDecorations(e.pageDecorations,o)),t}function x(t,r,i={}){if(!t||!Array.isArray(t.pages))return[];let o=Array.isArray(t.variables)?t.variables:[],s=new Map(o.filter(e=>e?.key).map(e=>[e.key,e])),c=e.hasPositivePageSize(t.pageSize)?t.pageSize:a.DEFAULT_PAGE_SIZE;return t.pages.flatMap(e=>{if(!e||typeof e.id!=`string`||!e.id.trim()||typeof e.contentHtml!=`string`)return[];let l=a.resolvePageSize(e.pageSize,c);return[{id:e.id,title:e.title||`未命名页面`,format:l.format??`Custom`,width:l.width,height:l.height,contentHtml:w(e.contentHtml,s,r,i),...t.pageDecorations?{pageDecorations:n.normalizePageDecorations(t.pageDecorations)}:{},decorationVariables:o,decorationValues:r}]})}function S(t,r,i={}){return x(t,r,i).map((t,r,i)=>{let a=n.buildPageDecorationsHtml(t.pageDecorations,r+1,i.length,t.decorationVariables,t.decorationValues);return`<section class="${n.buildPageDecorationClassNames(t.pageDecorations,r+1)}" data-page-id="${e.escapeHtmlAttribute(t.id)}" data-page-format="${e.escapeHtmlAttribute(t.format)}" data-page-width="${t.width}" data-page-height="${t.height}" style="width:${t.width}px;min-height:${t.height}px">${a}<div class="gd-contract-template-page__content">${t.contentHtml}</div></section>`}).join(`
2
- `)}function C(e){return e==null||e===``||Array.isArray(e)&&e.length===0}function w(t,n,r,i){if(!t)return t;let a=R(t);if(e.canUseDomHtml()){let e=new DOMParser().parseFromString(a,`text/html`);return e.querySelectorAll(`[data-template-variable]`).forEach(e=>{T(e,n,r,i)}),e.body.innerHTML.replace(/(<textarea\b[^>]*data-contract-render-control="true"[^>]*>)(?=[\r\n])/gi,`$1
3
- `)}return e.replaceTemplateVariableSpans(a,(t,a)=>{let o=e.getHtmlAttribute(a,`data-key`);return o?E(n.get(o),o,r[o],i):t})}function T(e,t,n,r){let i=e.dataset.key||``,a=t.get(i);if(!i||!a)return;let o=new DOMParser().parseFromString(E(a,i,n[i],r),`text/html`).body.firstElementChild;o&&(o.tagName===`TEXTAREA`&&(o.textContent=F(k(a,n[i]))),e.replaceWith(o))}function E(e,t,n,r){return r.mode===`display`?D(e,t,n,r):O(e,t,n,r)}function D(n,r,a,s){let c=n?.type??`text`,l=k(n,a),u=c===`image`&&!C(l)&&!o.isSafeContractImageUrl(String(l))?``:l,d=I(u),f=t.resolveTemplateVariablePresentation({type:c,width:n?.width,height:n?.height,placeholder:n?.placeholder??``,defaultValue:d,format:n?.format??``,precision:n?.precision,useGrouping:n?.useGrouping,checkedText:n?.checkedText??``,uncheckedText:n?.uncheckedText??``,multiline:n?.multiline,rows:n?.rows,lineHeight:n?.lineHeight,style:n?.style}),p=f.displayText||n?.placeholder||n?.label||r,m=[`class="${e.escapeHtmlAttribute([`gd-contract-template-renderer__control`,`gd-contract-template-renderer__preview-control`,...f.classes,s.activeKey===r?`is-active`:``,C(u)?`is-empty`:``].filter(Boolean).join(` `))}"`,`style="${e.escapeHtmlAttribute(f.styleText)}"`,`data-contract-render-wrapper="true"`,`data-contract-render-preview="true"`,`data-key="${e.escapeHtmlAttribute(r)}"`,`data-variable-type="${e.escapeHtmlAttribute(c)}"`,`aria-label="${e.escapeHtmlAttribute(n?.label||r)}"`,s.disabled?``:`role="button"`,s.disabled?``:`tabindex="0"`].filter(Boolean).join(` `);return c===`checkbox`?`<span ${m}><span class="gd-contract-template-renderer__checkbox-mark" aria-hidden="true">${L(u)?`✓`:``}</span>${e.escapeHtmlText(p)}</span>`:c===`radio`?`<span ${m}>${i.buildRadioOptionsHtml(n?.options,j(u))||e.escapeHtmlText(n?.placeholder||p)}</span>`:c===`select`?`<span ${m}>${e.escapeHtmlText(M(n,u)||p)}</span>`:c===`image`&&!C(u)?`<span ${m}></span>`:`<span ${m}>${e.escapeHtmlText(p)}</span>`}function O(n,r,a,o){let s=n?.type??`text`,c=!!o.readonly,l=F(k(n,a)),u=t.resolveTemplateVariablePresentation({type:s,width:n?.width,height:n?.height,placeholder:n?.placeholder??``,defaultValue:c?l:``,format:n?.format??``,precision:n?.precision,useGrouping:n?.useGrouping,checkedText:n?.checkedText??``,uncheckedText:n?.uncheckedText??``,multiline:n?.multiline,rows:n?.rows,lineHeight:n?.lineHeight,style:n?.style}),d=o.disabled||c,f=[`data-contract-render-control="true"`,`data-key="${e.escapeHtmlAttribute(r)}"`,`data-variable-type="${e.escapeHtmlAttribute(s)}"`,`aria-label="${e.escapeHtmlAttribute(n?.label||r)}"`,d?`disabled`:``,c?`readonly`:``].filter(Boolean).join(` `),p=`style="${e.escapeHtmlAttribute(u.styleText)}"`,m=e.escapeHtmlAttribute([`gd-contract-template-renderer__control`,...u.classes].join(` `));if(s===`checkbox`)return`<label class="${m}" ${p} data-contract-render-wrapper="true" data-key="${e.escapeHtmlAttribute(r)}"><input type="checkbox" ${f} ${L(l)?`checked`:``}>${e.escapeHtmlText(n?.checkedText||n?.label||r)}</label>`;if(s===`radio`){let t=k(n,a),o=i.buildRadioOptionsHtml(n?.options,j(t))||e.escapeHtmlText(u.displayText||n?.placeholder||``);return`<span class="${m}" ${p} data-contract-render-wrapper="true" data-key="${e.escapeHtmlAttribute(r)}">${o}</span>`}if(c)return`<span class="${m}" ${p} data-contract-render-wrapper="true" data-key="${e.escapeHtmlAttribute(r)}">${e.escapeHtmlText(u.displayText||l)}</span>`;if(s===`number`)return`<input class="${m}" ${p} type="number" ${f} value="${e.escapeHtmlAttribute(l)}" placeholder="${e.escapeHtmlAttribute(n?.placeholder||``)}">`;if(s===`date`)return`<input class="${m}" ${p} type="date" ${f} value="${e.escapeHtmlAttribute(l)}" placeholder="${e.escapeHtmlAttribute(n?.placeholder||``)}">`;if(s===`select`||s.endsWith(`-selector`)||s===`custom`){let t=k(n,a),o=s===`select`?M(n,t):i.formatContractTemplateRenderValue(t);return`<span class="${m}" ${p} data-contract-render-wrapper="true" data-key="${e.escapeHtmlAttribute(r)}">${e.escapeHtmlText(o)}</span>`}if(n?.multiline){let t=/^[\r\n]/.test(l)?`
4
- `:``;return`<textarea class="${m}" ${p} ${f} placeholder="${e.escapeHtmlAttribute(n.placeholder||``)}">${t}${e.escapeHtmlText(l)}</textarea>`}return`<input class="${m}" ${p} type="text" ${f} value="${e.escapeHtmlAttribute(l)}" placeholder="${e.escapeHtmlAttribute(n?.placeholder||``)}">`}function k(e,t){if(!(e?.type===`select`&&e.multiple&&C(t)))return t??A(e)}function A(e){if(!e)return``;if(e.type===`checkbox`)return L(e.defaultValue);if(e.type===`number`&&e.defaultValue!==void 0){let t=Number(e.defaultValue);return Number.isFinite(t)?t:e.defaultValue}if(e.type===`select`||e.type===`radio`){if(e.type===`select`&&e.multiple||!e.defaultValue)return;let t=(e.options??[]).find(t=>String(t.value)===String(e.defaultValue));return t?{value:t.value,label:t.label,type:t.type||e.type}:void 0}if(!e.type?.endsWith(`-selector`))return e.defaultValue??``}function j(e){if(!Array.isArray(e)){if(i.isContractTemplateSelectionValue(e))return e.value;if(typeof e==`string`||typeof e==`number`)return e}}function M(e,t){let n=Array.isArray(t)?t:[t];if(n.length&&n.every(e=>i.isContractTemplateSelectionValue(e)))return i.formatContractTemplateRenderValue(t);let r=n.flatMap(t=>{let n=typeof t==`string`||typeof t==`number`?t:void 0;if(n===void 0)return[];let r=e?.options?.find(e=>String(e.value)===String(n));return r?.label?[r.label]:[]});return r.length?r.join(`、`):i.formatContractTemplateRenderValue(t)}function N(e){return(e.type===`select`||e.type===`radio`)&&!e.dataSource&&Array.isArray(e.options)&&e.options.length>0}function P(e,t){let n=Array.isArray(t)?t:[t];return n.length>0&&n.every(t=>i.isContractTemplateSelectionValue(t)&&(e.options??[]).some(e=>String(e.value)===String(t.value)))}function F(e){return typeof e==`boolean`?e?`true`:``:e==null?``:i.formatContractTemplateRenderValue(e)}function I(e){return typeof e==`boolean`?e?`true`:`false`:e==null?``:i.formatContractTemplateRenderValue(e)}function L(e){return e===!0||e===`true`||e===`1`||e===`yes`||e===`是`||e===`已选`}function R(t){if(e.canParseHtmlDocument()){let e=new DOMParser().parseFromString(t,`text/html`);return e.querySelectorAll(`script,style,meta,link,iframe,object,embed`).forEach(e=>e.remove()),e.querySelectorAll(`*`).forEach(e=>{Array.from(e.attributes).forEach(t=>{let n=t.name.toLowerCase();(n.startsWith(`on`)||n===`srcdoc`||l.has(n)&&V(t.value)||n===`style`&&U(t.value))&&e.removeAttribute(t.name)})}),e.body.innerHTML}return t.replace(/<\s*(script|style|iframe|object|embed)\b[^>]*>[\s\S]*?<\s*\/\s*\1\s*>/gi,``).replace(/<\s*\/?\s*(?:script|style|meta|link|iframe|object|embed)\b[^>]*>/gi,``).replace(/\s+on[a-z]+\s*=\s*(?:"[^"]*"|'[^']*'|[^\s>]+)/gi,``).replace(/\s+srcdoc\s*=\s*(?:"[^"]*"|'[^']*'|[^\s>]+)/gi,``).replace(/\s+(action|formaction|href|src|xlink:href)\s*=\s*(?:(["'])(.*?)\2|([^\s>]+))/gi,(e,t,n,r,i)=>{let a=r??i??``;return V(a)?``:n?` ${t}=${n}${a}${n}`:` ${t}=${a}`}).replace(/\s+style\s*=\s*(["'])(.*?)\1/gi,(e,t,n)=>U(n)?``:` style=${t}${n}${t}`)}function z(t){return e.collectFromHtmlTags(t,u,t=>e.getHtmlAttribute(t,`data-key`))}function B(e){let t=[];return/<\s*(script|style|meta|link|iframe|object|embed)\b/i.test(e)&&t.push(`正文包含已移除的危险标签`),/\s(?:on[a-z]+|srcdoc)\s*=/i.test(e)&&t.push(`正文包含已移除的事件或嵌入属性`),(H(e)||/style\s*=\s*["'][^"']*(?:expression\s*\(|url\s*\(\s*["']?\s*(?:javascript|vbscript|data:text\/html))/i.test(e))&&t.push(`正文包含已移除的危险 URL 或样式`),t}function V(e){let t=e.replace(/&#(?:x([\da-f]+)|(\d+));?/gi,(e,t,n)=>{let r=Number.parseInt(t??n??``,t?16:10);try{return Number.isFinite(r)?String.fromCodePoint(r):e}catch{return e}}).replace(/&(colon|tab|newline);/gi,(e,t)=>({colon:`:`,newline:`
5
- `,tab:` `})[t.toLowerCase()]??``).trim().replace(/[\u0000-\u0020\u007F]+/g,``);return/^(?:javascript|vbscript|data:text\/html)/i.test(t)}function H(e){let t=/\s+(?:action|formaction|href|src|xlink:href)\s*=\s*(?:(["'])(.*?)\1|([^\s>]+))/gi,n=t.exec(e);for(;n;){if(V(n[2]??n[3]??``))return!0;n=t.exec(e)}return!1}function U(e){return/expression\s*\(|url\s*\(\s*["']?\s*(?:javascript|vbscript|data:text\/html)/i.test(e)}function W(e,t){return C(t)?e.type===`select`||e.type===`radio`?A(e):C(e.defaultValue)?t:e.defaultValue:t}function G(e,t,n){if(typeof e==`boolean`||typeof e!=`number`&&typeof e!=`string`)return!1;let r=String(e).trim();if(!/^-?(?:\d+)(?:\.\d+)?$/.test(r))return!1;let i=Number(r);if(!Number.isFinite(i))return!1;if(t!==void 0){let e=r.split(`.`)[1]?.length??0,i=t+(n===`percent`?2:0);if(!Number.isInteger(t)||t<0||t>p||e>i)return!1}return!0}function K(e){if(typeof e!=`string`&&typeof e!=`number`)return!1;let t=String(e).trim(),n=/^(\d{4})[-/年](\d{1,2})[-/月](\d{1,2})(?:日)?(?:[T\s].*)?$/.exec(t);if(!n)return!1;let r=Number(n[1]),i=Number(n[2]),a=Number(n[3]),o=new Date(Date.UTC(r,i-1,a));return o.getUTCFullYear()===r&&o.getUTCMonth()===i-1&&o.getUTCDate()===a}function q(e){return typeof e==`boolean`?!0:[`1`,`true`,`yes`,`checked`,`是`,`已选`,`0`,`false`,`no`,`unchecked`,`否`,`未选`].includes(String(e).trim().toLowerCase())}function J(e){return m.test(e)}function Y(e){return e===`select`||e===`radio`||e===`user-selector`||e===`dept-selector`||e===`role-selector`||e===`org-selector`}function X(e,t){return t?Array.isArray(e)&&e.every(i.isContractTemplateSelectionValue):i.isContractTemplateSelectionValue(e)}function Z(e,t){let n=e.width;if(!Number.isFinite(n)||n<=0)return!1;let r=Math.max(10,Number.isFinite(e.style?.fontSize)&&(e.style?.fontSize??0)>0?e.style.fontSize:14),i=Math.max(1,n-12)/r,a=e=>Array.from(e).reduce((e,t)=>e+(/[^\x00-\x7f]/.test(t)?1:.55),0);return e.multiline?t.split(/\r?\n/).reduce((e,t)=>e+Math.max(1,Math.ceil(a(t)/i)),0)>(e.rows??3):a(t)>i}function Q(e){if(!e||typeof e!=`object`)return!1;let{width:t,height:n}=e;return typeof t==`number`&&typeof n==`number`&&Number.isFinite(t)&&Number.isFinite(n)&&t>=d&&n>=d&&t<=f&&n<=f}exports.buildInitialRenderValues=h,exports.buildTemplateRenderHtml=S,exports.buildTemplateRenderPages=x,exports.buildTemplateVariableData=s,exports.isEmptyRenderValue=C,exports.normalizeRenderValues=g,exports.resolveTemplateRenderSubmitErrors=y,exports.sanitizeContractRendererHtml=R,exports.validateTemplateRenderStructure=b,exports.validateTemplateRenderValues=_,exports.validateTemplateTextOverflow=v;
1
+ const e=require(`./html.cjs`),t=require(`./template-variable-render.cjs`),n=require(`./page-decorations.cjs`),r=require(`../types.cjs`),i=require(`./advanced-controls.cjs`),a=require(`../composables/use-template-designer.cjs`),o=require(`./image-url.cjs`);function s(e){let t=Array.isArray(e?.variables)?e.variables:[],n=t.map(e=>c(e)),r={};return t.forEach(e=>{let t=typeof e?.key==`string`?e.key:``;if(t){if(e.type===`checkbox`){r[t]=!1;return}if(e.type===`number`){let n=typeof e.defaultValue==`string`?e.defaultValue.trim().length>0:e.defaultValue!==void 0,i=Number(e.defaultValue);r[t]=n&&Number.isFinite(i)?i:``;return}r[t]=e.defaultValue??``}}),{values:r,variables:n}}function c(e){return JSON.parse(JSON.stringify(e))}var l=new Set([`action`,`formaction`,`href`,`src`,`xlink:href`]),u=/<[^>]+data-template-variable=["']true["'][^>]*>/gi,d=100,f=6e3,p=6,m=/^data:image\/(?:png|jpe?g|webp|gif);base64,[A-Za-z0-9+/=]+$/i;function h(e){let t={};return(Array.isArray(e?.variables)?e.variables:[]).forEach(e=>{e?.key&&(t[e.key]=j(e))}),t}function g(e,t){return{...h(e),...t??{}}}function _(e,t,n){let a={...t};return(Array.isArray(e?.variables)?e.variables:[]).forEach(e=>{if(!e?.key||!r.isContractTemplateFieldType(e.type??`text`))return;let t=e.componentKey||e.type||``,o=t?n?.[t]:void 0;if(o?.toDisplayText)try{a[e.key]=o.toDisplayText(a[e.key],{variable:e,config:i.normalizeContractTemplateJsonObject(e.componentConfig)})}catch{}}),a}function v(e,t){let n=x(e);if(!e)return n;let r=Array.isArray(e.variables)?e.variables:[],i=new Set(r.map(e=>e?.key).filter(Boolean));return Object.keys(t).forEach(e=>{i.has(e)||n.push({type:`variable`,id:e,variableKey:e,message:`提交值 ${e} 不属于模板变量`,code:`VARIABLE_TYPE_INVALID`})}),r.forEach(e=>{if(!e?.key)return;let r=G(e,t[e.key]),i=e.label||e.key;if(e.required&&w(r)){n.push({type:`variable`,id:e.id,variableKey:e.key,message:`请填写${i}`,code:`VARIABLE_REQUIRED`});return}if(w(r))return;let a=e.type??`text`;a===`number`&&!K(r,e.precision,e.format)&&n.push({type:`variable`,id:e.id,variableKey:e.key,message:`${i} 不是合法数字或超出精度`,code:`VARIABLE_TYPE_INVALID`}),a===`checkbox`&&!J(r)&&n.push({type:`variable`,id:e.id,variableKey:e.key,message:`${i} 不是合法勾选值`,code:`VARIABLE_TYPE_INVALID`}),a===`date`&&!q(r)&&n.push({type:`variable`,id:e.id,variableKey:e.key,message:`${i} 不是合法日期`,code:`VARIABLE_TYPE_INVALID`}),a===`image`&&!Y(String(r).trim())&&n.push({type:`security`,id:e.id,variableKey:e.key,message:`${i} 必须使用安全的图片 data URL`,code:`UNSAFE_IMAGE_URL`}),n.push(...y(e,r)),X(a)&&(Z(r,a!==`radio`&&!!e.multiple)?P(e)&&!F(e,r)&&n.push({type:`variable`,id:e.id,variableKey:e.key,message:`${i} 不在可选项中`,code:`VARIABLE_TYPE_INVALID`}):n.push({type:`variable`,id:e.id,variableKey:e.key,message:`${i} 不是合法选择值`,code:`VARIABLE_TYPE_INVALID`}))}),n}function y(e,t){if((e.type??`text`)!==`text`)return[];let n=G(e,t);if(w(n)||!Q(e,String(n)))return[];let r=e.label||e.key;return[{type:`variable`,id:e.id,variableKey:e.key,message:e.multiline?`${r} 内容超出正文预留的${e.rows??3}行,请缩短内容或调整模板行数`:`${r} 内容超出变量范围`,code:`VARIABLE_OVERFLOW`}]}function b(e,t,n){return v(e,t)}function x(e){if(!e)return[{type:`page`,id:`template`,message:`缺少可渲染的合同模板`,code:`TEMPLATE_MISSING`}];let t=[],i=Array.isArray(e.pages)?e.pages:[],o=Array.isArray(e.variables)?e.variables:[];(!Array.isArray(e.pages)||i.length===0)&&t.push({type:`page`,id:`template-pages`,message:`模板至少需要一个合法页面`,code:`TEMPLATE_PAGES_INVALID`}),Array.isArray(e.variables)||t.push({type:`variable`,id:`template-variables`,message:`模板变量列表格式无效`,code:`TEMPLATE_VARIABLES_INVALID`}),$(e.pageSize)||t.push({type:`page`,id:`template-page-size`,message:`模板默认页面尺寸必须在 ${d} ~ ${f} CSS px 之间`,code:`TEMPLATE_PAGE_SIZE_INVALID`});let s=new Map;o.forEach((e,n)=>{if(!e||typeof e.key!=`string`||!e.key.trim()){t.push({type:`variable`,id:e?.id||`variable-${n}`,message:`第 ${n+1} 个变量缺少有效 key`,code:`VARIABLE_KEY_MISSING`});return}let i=e.key.trim(),c=o.some(t=>t?.id!==e.id&&typeof t?.key==`string`&&t.key.trim()===i),l=a.validateContractTemplateVariableKey(e.key,o,e.id),u=!a.CONTRACT_TEMPLATE_VARIABLE_KEY_PATTERN.test(i)||a.CONTRACT_TEMPLATE_RESERVED_VARIABLE_KEYS.has(i);l&&(u||!c||e.key!==i)&&t.push({type:`variable`,id:e.id||`variable-${n}`,variableKey:e.key,message:`${e.label||e.key}:${l}`,code:`VARIABLE_KEY_INVALID`}),s.set(i,(s.get(i)??0)+1),r.isContractTemplateFieldType(e.type??`text`)||t.push({type:`variable`,id:e.id,variableKey:e.key,message:`${e.label||e.key} 不是正文填写变量`,code:`VARIABLE_TYPE_UNSUPPORTED`})}),s.forEach((e,n)=>{e>1&&t.push({type:`variable`,id:n,variableKey:n,message:`变量 key ${n} 重复`,code:`VARIABLE_KEY_DUPLICATED`})});let c=new Set;i.forEach((e,n)=>{if(!e||typeof e.id!=`string`||!e.id.trim()||typeof e.contentHtml!=`string`){t.push({type:`page`,id:e?.id||`page-${n}`,pageId:e?.id,message:`第 ${n+1} 页结构无效,已跳过渲染`,code:`PAGE_INVALID`});return}e.pageSize!==void 0&&!$(e.pageSize)&&t.push({type:`page`,id:`${e.id}-page-size`,pageId:e.id,message:`${e.title||`第 ${n+1} 页`}:页面尺寸必须在 ${d} ~ ${f} CSS px 之间`,code:`PAGE_SIZE_INVALID`}),B(e.contentHtml).forEach(e=>c.add(e)),V(e.contentHtml).forEach((r,i)=>{t.push({type:`security`,id:`${e.id}-security-${i}`,pageId:e.id,message:`${e.title||`第 ${n+1} 页`}:${r}`,code:`HTML_UNSAFE`})})}),c.forEach(e=>{s.has(e)||t.push({type:`variable`,id:e,variableKey:e,message:`正文引用的变量 ${e} 缺少配置`,code:`VARIABLE_CONFIG_MISSING`})});let l=n.collectPageDecorationVariableKeys(e.pageDecorations);return s.forEach((e,n)=>{!c.has(n)&&!l.has(n)&&t.push({type:`variable`,id:n,variableKey:n,message:`变量 ${n} 缺少正文节点`,code:`VARIABLE_NODE_MISSING`})}),t.push(...n.validatePageDecorations(e.pageDecorations,o)),t}function S(t,r,i={}){if(!t||!Array.isArray(t.pages))return[];let o=Array.isArray(t.variables)?t.variables:[],s=new Map(o.filter(e=>e?.key).map(e=>[e.key,e])),c=e.hasPositivePageSize(t.pageSize)?t.pageSize:a.DEFAULT_PAGE_SIZE;return t.pages.flatMap(e=>{if(!e||typeof e.id!=`string`||!e.id.trim()||typeof e.contentHtml!=`string`)return[];let l=a.resolvePageSize(e.pageSize,c);return[{id:e.id,title:e.title||`未命名页面`,format:l.format??`Custom`,width:l.width,height:l.height,contentHtml:T(e.contentHtml,s,r,i),...t.pageDecorations?{pageDecorations:n.normalizePageDecorations(t.pageDecorations)}:{},decorationVariables:o,decorationValues:r}]})}function C(t,r,i={}){return S(t,r,i).map((t,r,i)=>{let a=n.buildPageDecorationsHtml(t.pageDecorations,r+1,i.length,t.decorationVariables,t.decorationValues);return`<section class="${n.buildPageDecorationClassNames(t.pageDecorations,r+1)}" data-page-id="${e.escapeHtmlAttribute(t.id)}" data-page-format="${e.escapeHtmlAttribute(t.format)}" data-page-width="${t.width}" data-page-height="${t.height}" style="width:${t.width}px;min-height:${t.height}px">${a}<div class="gd-contract-template-page__content">${t.contentHtml}</div></section>`}).join(`
2
+ `)}function w(e){return e==null||e===``||Array.isArray(e)&&e.length===0}function T(t,n,r,i){if(!t)return t;let a=z(t);if(e.canUseDomHtml()){let e=new DOMParser().parseFromString(a,`text/html`);return e.querySelectorAll(`[data-template-variable]`).forEach(e=>{E(e,n,r,i)}),e.body.innerHTML.replace(/(<textarea\b[^>]*data-contract-render-control="true"[^>]*>)(?=[\r\n])/gi,`$1
3
+ `)}return e.replaceTemplateVariableSpans(a,(t,a)=>{let o=e.getHtmlAttribute(a,`data-key`);return o?D(n.get(o),o,r[o],i):t})}function E(e,t,n,r){let i=e.dataset.key||``,a=t.get(i);if(!i||!a)return;let o=new DOMParser().parseFromString(D(a,i,n[i],r),`text/html`).body.firstElementChild;o&&(o.tagName===`TEXTAREA`&&(o.textContent=I(A(a,n[i]))),e.replaceWith(o))}function D(e,t,n,r){return r.mode===`display`?O(e,t,n,r):k(e,t,n,r)}function O(n,r,a,s){let c=n?.type??`text`,l=A(n,a),u=c===`image`&&!w(l)&&!o.isSafeContractImageUrl(String(l))?``:l,d=L(u),f=t.resolveTemplateVariablePresentation({type:c,width:n?.width,height:n?.height,placeholder:n?.placeholder??``,defaultValue:d,format:n?.format??``,precision:n?.precision,useGrouping:n?.useGrouping,checkedText:n?.checkedText??``,uncheckedText:n?.uncheckedText??``,multiline:n?.multiline,rows:n?.rows,lineHeight:n?.lineHeight,style:n?.style}),p=f.displayText||n?.placeholder||n?.label||r,m=[`class="${e.escapeHtmlAttribute([`gd-contract-template-renderer__control`,`gd-contract-template-renderer__preview-control`,...f.classes,s.activeKey===r?`is-active`:``,w(u)?`is-empty`:``].filter(Boolean).join(` `))}"`,`style="${e.escapeHtmlAttribute(f.styleText)}"`,`data-contract-render-wrapper="true"`,`data-contract-render-preview="true"`,`data-key="${e.escapeHtmlAttribute(r)}"`,`data-variable-type="${e.escapeHtmlAttribute(c)}"`,`aria-label="${e.escapeHtmlAttribute(n?.label||r)}"`,s.disabled?``:`role="button"`,s.disabled?``:`tabindex="0"`].filter(Boolean).join(` `);return c===`checkbox`?`<span ${m}><span class="gd-contract-template-renderer__checkbox-mark" aria-hidden="true">${R(u)?`✓`:``}</span>${e.escapeHtmlText(p)}</span>`:c===`radio`?`<span ${m}>${i.buildRadioOptionsHtml(n?.options,M(u))||e.escapeHtmlText(n?.placeholder||p)}</span>`:c===`select`?`<span ${m}>${e.escapeHtmlText(N(n,u)||p)}</span>`:c===`image`&&!w(u)?`<span ${m}></span>`:`<span ${m}>${e.escapeHtmlText(p)}</span>`}function k(n,r,a,o){let s=n?.type??`text`,c=!!o.readonly,l=I(A(n,a)),u=t.resolveTemplateVariablePresentation({type:s,width:n?.width,height:n?.height,placeholder:n?.placeholder??``,defaultValue:c?l:``,format:n?.format??``,precision:n?.precision,useGrouping:n?.useGrouping,checkedText:n?.checkedText??``,uncheckedText:n?.uncheckedText??``,multiline:n?.multiline,rows:n?.rows,lineHeight:n?.lineHeight,style:n?.style}),d=o.disabled||c,f=[`data-contract-render-control="true"`,`data-key="${e.escapeHtmlAttribute(r)}"`,`data-variable-type="${e.escapeHtmlAttribute(s)}"`,`aria-label="${e.escapeHtmlAttribute(n?.label||r)}"`,d?`disabled`:``,c?`readonly`:``].filter(Boolean).join(` `),p=`style="${e.escapeHtmlAttribute(u.styleText)}"`,m=e.escapeHtmlAttribute([`gd-contract-template-renderer__control`,...u.classes].join(` `));if(s===`checkbox`)return`<label class="${m}" ${p} data-contract-render-wrapper="true" data-key="${e.escapeHtmlAttribute(r)}"><input type="checkbox" ${f} ${R(l)?`checked`:``}>${e.escapeHtmlText(n?.checkedText||n?.label||r)}</label>`;if(s===`radio`){let t=A(n,a),o=i.buildRadioOptionsHtml(n?.options,M(t))||e.escapeHtmlText(u.displayText||n?.placeholder||``);return`<span class="${m}" ${p} data-contract-render-wrapper="true" data-key="${e.escapeHtmlAttribute(r)}">${o}</span>`}if(c)return`<span class="${m}" ${p} data-contract-render-wrapper="true" data-key="${e.escapeHtmlAttribute(r)}">${e.escapeHtmlText(u.displayText||l)}</span>`;if(s===`number`)return`<input class="${m}" ${p} type="number" ${f} value="${e.escapeHtmlAttribute(l)}" placeholder="${e.escapeHtmlAttribute(n?.placeholder||``)}">`;if(s===`date`)return`<input class="${m}" ${p} type="date" ${f} value="${e.escapeHtmlAttribute(l)}" placeholder="${e.escapeHtmlAttribute(n?.placeholder||``)}">`;if(s===`select`||s.endsWith(`-selector`)||s===`custom`){let t=A(n,a),o=s===`select`?N(n,t):i.formatContractTemplateRenderValue(t);return`<span class="${m}" ${p} data-contract-render-wrapper="true" data-key="${e.escapeHtmlAttribute(r)}">${e.escapeHtmlText(o)}</span>`}if(n?.multiline){let t=/^[\r\n]/.test(l)?`
4
+ `:``;return`<textarea class="${m}" ${p} ${f} placeholder="${e.escapeHtmlAttribute(n.placeholder||``)}">${t}${e.escapeHtmlText(l)}</textarea>`}return`<input class="${m}" ${p} type="text" ${f} value="${e.escapeHtmlAttribute(l)}" placeholder="${e.escapeHtmlAttribute(n?.placeholder||``)}">`}function A(e,t){if(!(e?.type===`select`&&e.multiple&&w(t)))return t??j(e)}function j(e){if(!e)return``;if(e.type===`checkbox`)return R(e.defaultValue);if(e.type===`number`&&e.defaultValue!==void 0){let t=Number(e.defaultValue);return Number.isFinite(t)?t:e.defaultValue}if(e.type===`select`||e.type===`radio`){if(e.type===`select`&&e.multiple||!e.defaultValue)return;let t=(e.options??[]).find(t=>String(t.value)===String(e.defaultValue));return t?{value:t.value,label:t.label,type:t.type||e.type}:void 0}if(!e.type?.endsWith(`-selector`))return e.defaultValue??``}function M(e){if(!Array.isArray(e)){if(i.isContractTemplateSelectionValue(e))return e.value;if(typeof e==`string`||typeof e==`number`)return e}}function N(e,t){let n=Array.isArray(t)?t:[t];if(n.length&&n.every(e=>i.isContractTemplateSelectionValue(e)))return i.formatContractTemplateRenderValue(t);let r=n.flatMap(t=>{let n=typeof t==`string`||typeof t==`number`?t:void 0;if(n===void 0)return[];let r=e?.options?.find(e=>String(e.value)===String(n));return r?.label?[r.label]:[]});return r.length?r.join(`、`):i.formatContractTemplateRenderValue(t)}function P(e){return(e.type===`select`||e.type===`radio`)&&!e.dataSource&&Array.isArray(e.options)&&e.options.length>0}function F(e,t){let n=Array.isArray(t)?t:[t];return n.length>0&&n.every(t=>i.isContractTemplateSelectionValue(t)&&(e.options??[]).some(e=>String(e.value)===String(t.value)))}function I(e){return typeof e==`boolean`?e?`true`:``:e==null?``:i.formatContractTemplateRenderValue(e)}function L(e){return typeof e==`boolean`?e?`true`:`false`:e==null?``:i.formatContractTemplateRenderValue(e)}function R(e){return e===!0||e===`true`||e===`1`||e===`yes`||e===`是`||e===`已选`}function z(t){if(e.canParseHtmlDocument()){let e=new DOMParser().parseFromString(t,`text/html`);return e.querySelectorAll(`script,style,meta,link,iframe,object,embed`).forEach(e=>e.remove()),e.querySelectorAll(`*`).forEach(e=>{Array.from(e.attributes).forEach(t=>{let n=t.name.toLowerCase();(n.startsWith(`on`)||n===`srcdoc`||l.has(n)&&H(t.value)||n===`style`&&W(t.value))&&e.removeAttribute(t.name)})}),e.body.innerHTML}return t.replace(/<\s*(script|style|iframe|object|embed)\b[^>]*>[\s\S]*?<\s*\/\s*\1\s*>/gi,``).replace(/<\s*\/?\s*(?:script|style|meta|link|iframe|object|embed)\b[^>]*>/gi,``).replace(/\s+on[a-z]+\s*=\s*(?:"[^"]*"|'[^']*'|[^\s>]+)/gi,``).replace(/\s+srcdoc\s*=\s*(?:"[^"]*"|'[^']*'|[^\s>]+)/gi,``).replace(/\s+(action|formaction|href|src|xlink:href)\s*=\s*(?:(["'])(.*?)\2|([^\s>]+))/gi,(e,t,n,r,i)=>{let a=r??i??``;return H(a)?``:n?` ${t}=${n}${a}${n}`:` ${t}=${a}`}).replace(/\s+style\s*=\s*(["'])(.*?)\1/gi,(e,t,n)=>W(n)?``:` style=${t}${n}${t}`)}function B(t){return e.collectFromHtmlTags(t,u,t=>e.getHtmlAttribute(t,`data-key`))}function V(e){let t=[];return/<\s*(script|style|meta|link|iframe|object|embed)\b/i.test(e)&&t.push(`正文包含已移除的危险标签`),/\s(?:on[a-z]+|srcdoc)\s*=/i.test(e)&&t.push(`正文包含已移除的事件或嵌入属性`),(U(e)||/style\s*=\s*["'][^"']*(?:expression\s*\(|url\s*\(\s*["']?\s*(?:javascript|vbscript|data:text\/html))/i.test(e))&&t.push(`正文包含已移除的危险 URL 或样式`),t}function H(e){let t=e.replace(/&#(?:x([\da-f]+)|(\d+));?/gi,(e,t,n)=>{let r=Number.parseInt(t??n??``,t?16:10);try{return Number.isFinite(r)?String.fromCodePoint(r):e}catch{return e}}).replace(/&(colon|tab|newline);/gi,(e,t)=>({colon:`:`,newline:`
5
+ `,tab:` `})[t.toLowerCase()]??``).trim().replace(/[\u0000-\u0020\u007F]+/g,``);return/^(?:javascript|vbscript|data:text\/html)/i.test(t)}function U(e){let t=/\s+(?:action|formaction|href|src|xlink:href)\s*=\s*(?:(["'])(.*?)\1|([^\s>]+))/gi,n=t.exec(e);for(;n;){if(H(n[2]??n[3]??``))return!0;n=t.exec(e)}return!1}function W(e){return/expression\s*\(|url\s*\(\s*["']?\s*(?:javascript|vbscript|data:text\/html)/i.test(e)}function G(e,t){return w(t)?e.type===`select`||e.type===`radio`?j(e):w(e.defaultValue)?t:e.defaultValue:t}function K(e,t,n){if(typeof e==`boolean`||typeof e!=`number`&&typeof e!=`string`)return!1;let r=String(e).trim();if(!/^-?(?:\d+)(?:\.\d+)?$/.test(r))return!1;let i=Number(r);if(!Number.isFinite(i))return!1;if(t!==void 0){let e=r.split(`.`)[1]?.length??0,i=t+(n===`percent`?2:0);if(!Number.isInteger(t)||t<0||t>p||e>i)return!1}return!0}function q(e){if(typeof e!=`string`&&typeof e!=`number`)return!1;let t=String(e).trim(),n=/^(\d{4})[-/年](\d{1,2})[-/月](\d{1,2})(?:日)?(?:[T\s].*)?$/.exec(t);if(!n)return!1;let r=Number(n[1]),i=Number(n[2]),a=Number(n[3]),o=new Date(Date.UTC(r,i-1,a));return o.getUTCFullYear()===r&&o.getUTCMonth()===i-1&&o.getUTCDate()===a}function J(e){return typeof e==`boolean`?!0:[`1`,`true`,`yes`,`checked`,`是`,`已选`,`0`,`false`,`no`,`unchecked`,`否`,`未选`].includes(String(e).trim().toLowerCase())}function Y(e){return m.test(e)}function X(e){return e===`select`||e===`radio`||e===`user-selector`||e===`dept-selector`||e===`role-selector`||e===`org-selector`}function Z(e,t){return t?Array.isArray(e)&&e.every(i.isContractTemplateSelectionValue):i.isContractTemplateSelectionValue(e)}function Q(e,t){let n=e.width;if(!Number.isFinite(n)||n<=0)return!1;let r=Math.max(10,Number.isFinite(e.style?.fontSize)&&(e.style?.fontSize??0)>0?e.style.fontSize:14),i=Math.max(1,n-12)/r,a=e=>Array.from(e).reduce((e,t)=>e+(/[^\x00-\x7f]/.test(t)?1:.55),0);return e.multiline?t.split(/\r?\n/).reduce((e,t)=>e+Math.max(1,Math.ceil(a(t)/i)),0)>(e.rows??3):a(t)>i}function $(e){if(!e||typeof e!=`object`)return!1;let{width:t,height:n}=e;return typeof t==`number`&&typeof n==`number`&&Number.isFinite(t)&&Number.isFinite(n)&&t>=d&&n>=d&&t<=f&&n<=f}exports.buildInitialRenderValues=h,exports.buildTemplateRenderHtml=C,exports.buildTemplateRenderPages=S,exports.buildTemplateVariableData=s,exports.isEmptyRenderValue=w,exports.normalizeRenderValues=g,exports.resolveTemplateDisplayValues=_,exports.resolveTemplateRenderSubmitErrors=b,exports.sanitizeContractRendererHtml=z,exports.validateTemplateRenderStructure=x,exports.validateTemplateRenderValues=v,exports.validateTemplateTextOverflow=y;
@@ -1 +1 @@
1
- const e=require(`../constants.cjs`);function t(t){let r=t.type===void 0?`text`:String(t.type),i=Math.max(24,s(t.width,160)),a=Math.max(24,s(t.height,32)),c=t.style?.border??t.border??r===`image`,l=t.style?.underline??t.underline??(r!==`image`&&r!==`checkbox`),u=t.style?.color||t.color||`#1f2937`,d=t.style?.background||t.background||`transparent`,f=Math.max(10,s(t.style?.fontSize??t.fontSize,14)),p=t.style?.fontFamily||t.fontFamily||e.DEFAULT_CONTRACT_FONT_FAMILY,m=t.style?.placeholderColor||t.placeholderColor||`#7a818b`,h=t.style?.lineColor||t.lineColor||`#565b66`,g=t.style?.textAlign||t.textAlign||`left`,_=t.style?.borderStyle||t.borderStyle||`solid`,v=t.style?.objectFit||t.objectFit||`contain`,y=!!t.multiline,b=Math.max(1,s(t.rows,3)),x=Math.max(18,s(t.lineHeight,28)),S=b*x,C=v===`fill`?`100% 100%`:v,w=g===`right`?`flex-end`:g===`center`?`center`:`flex-start`,T=r===`select`&&t.multiple?``:String(t.defaultValue||``),E=n({type:r,defaultValue:T,placeholder:t.placeholder||``,format:t.format||``,precision:t.precision,useGrouping:t.useGrouping,checkedText:t.checkedText||``,uncheckedText:t.uncheckedText||``,options:t.options,multiple:t.multiple}),D=T.trim().length>0,O=!D&&E.trim().length>0,k=r===`checkbox`&&o(T),A=r===`image`&&D?`;--gd-contract-variable-image:url('${T.replaceAll(`'`,`%27`)}')`:``;return{type:r,width:i,height:a,border:c,underline:l,color:u,background:d,fontSize:f,fontFamily:p,placeholderColor:m,lineColor:h,textAlign:g,borderStyle:_,objectFit:v,displayText:E,hasDefaultValue:D,isPlaceholder:O,isChecked:k,classes:[`gd-contract-template-variable`,`is-${r}`,c?`has-border`:``,l?`has-underline`:``,y?`is-multiline`:``,O?`is-placeholder`:``,D?`has-value`:``,k?`is-checked`:``].filter(Boolean),styleText:`--gd-contract-variable-width:${i}px;--gd-contract-variable-height:${a}px;--gd-contract-variable-rows:${b};--gd-contract-variable-line-height:${x}px;--gd-contract-variable-multiline-height:${S}px;--gd-contract-variable-color:${u};--gd-contract-variable-background:${d};--gd-contract-variable-font-size:${f}px;--gd-contract-variable-font-family:${p};--gd-contract-variable-placeholder-color:${m};--gd-contract-variable-line-color:${h};--gd-contract-variable-text-align:${g};--gd-contract-variable-justify-content:${w};--gd-contract-variable-border-style:${_};--gd-contract-variable-object-fit:${C}${A}`}}function n(e){let t=e.type||`text`,n=t===`select`&&e.multiple?``:e.defaultValue||``,i=e.placeholder||``;if(t===`checkbox`)return n?o(n)?e.checkedText||i:e.uncheckedText||i:i;if(!n)return i;if(t===`date`)return r(n,e.format||``);if(t===`number`)return a(n,{format:e.format||``,precision:e.precision,useGrouping:e.useGrouping});if(t===`image`)return i;if(t===`select`){let t=e.options?.find(e=>String(e.value??``)===n);if(t?.label)return t.label;if(e.options?.length)return i}return n}function r(e,t){if(!t)return e;let n=/^(\d{4})[-/年](\d{1,2})[-/月](\d{1,2})/.exec(e);if(!n)return e;let[,r,i,a]=n;return t.replace(`YYYY`,r).replace(`MM`,i.padStart(2,`0`)).replace(`DD`,a.padStart(2,`0`))}var i=[{value:`decimal`,label:`常规数字`},{value:`percent`,label:`百分比`},{value:`currency`,label:`人民币金额`}];function a(e,t){let n=Number(e);if(!e.trim()||!Number.isFinite(n))return e;let r=typeof t.precision==`number`&&Number.isInteger(t.precision)&&t.precision>=0&&t.precision<=20?t.precision:void 0,i=n.toLocaleString(`zh-CN`,{style:t.format===`percent`?`percent`:`decimal`,useGrouping:t.useGrouping===!0,minimumFractionDigits:r??0,maximumFractionDigits:r??20});return t.format===`currency`?`¥${i}`:i}function o(e){return[`1`,`true`,`yes`,`checked`,`是`,`已选`].includes(e.trim().toLowerCase())}function s(e,t){if(e==null||e===``)return t;let n=Number(e);return Number.isFinite(n)?n:t}exports.TEMPLATE_NUMBER_FORMAT_OPTIONS=i,exports.resolveTemplateVariablePresentation=t;
1
+ const e=require(`../constants.cjs`);function t(t){let r=t.type===void 0?`text`:String(t.type),i=Math.max(24,c(t.width,160)),a=Math.max(24,c(t.height,32)),o=t.style?.border??t.border??r===`image`,l=t.style?.underline??t.underline??(r!==`image`&&r!==`checkbox`),u=t.style?.color||t.color||`#1f2937`,d=t.style?.background||t.background||`transparent`,f=Math.max(10,c(t.style?.fontSize??t.fontSize,14)),p=t.style?.fontFamily||t.fontFamily||e.DEFAULT_CONTRACT_FONT_FAMILY,m=t.style?.placeholderColor||t.placeholderColor||`#7a818b`,h=t.style?.lineColor||t.lineColor||`#565b66`,g=t.style?.textAlign||t.textAlign||`left`,_=t.style?.borderStyle||t.borderStyle||`solid`,v=t.style?.objectFit||t.objectFit||`contain`,y=!!t.multiline,b=Math.max(1,c(t.rows,3)),x=Math.max(18,c(t.lineHeight,28)),S=b*x,C=v===`fill`?`100% 100%`:v,w=g===`right`?`flex-end`:g===`center`?`center`:`flex-start`,T=r===`select`&&t.multiple?``:String(t.defaultValue||``),E=n({type:r,defaultValue:T,placeholder:t.placeholder||``,format:t.format||``,precision:t.precision,useGrouping:t.useGrouping,checkedText:t.checkedText||``,uncheckedText:t.uncheckedText||``,options:t.options,multiple:t.multiple}),D=T.trim().length>0,O=!D&&E.trim().length>0,k=r===`checkbox`&&s(T),A=r===`image`&&D?`;--gd-contract-variable-image:url('${T.replaceAll(`'`,`%27`)}')`:``;return{type:r,width:i,height:a,border:o,underline:l,color:u,background:d,fontSize:f,fontFamily:p,placeholderColor:m,lineColor:h,textAlign:g,borderStyle:_,objectFit:v,displayText:E,hasDefaultValue:D,isPlaceholder:O,isChecked:k,classes:[`gd-contract-template-variable`,`is-${r}`,o?`has-border`:``,l?`has-underline`:``,y?`is-multiline`:``,O?`is-placeholder`:``,D?`has-value`:``,k?`is-checked`:``].filter(Boolean),styleText:`--gd-contract-variable-width:${i}px;--gd-contract-variable-height:${a}px;--gd-contract-variable-rows:${b};--gd-contract-variable-line-height:${x}px;--gd-contract-variable-multiline-height:${S}px;--gd-contract-variable-color:${u};--gd-contract-variable-background:${d};--gd-contract-variable-font-size:${f}px;--gd-contract-variable-font-family:${p};--gd-contract-variable-placeholder-color:${m};--gd-contract-variable-line-color:${h};--gd-contract-variable-text-align:${g};--gd-contract-variable-justify-content:${w};--gd-contract-variable-border-style:${_};--gd-contract-variable-object-fit:${C}${A}`}}function n(e){let t=e.type||`text`,n=t===`select`&&e.multiple?``:e.defaultValue||``,i=e.placeholder||``;if(t===`checkbox`)return n?s(n)?e.checkedText||i:e.uncheckedText||i:i;if(!n)return i;if(t===`date`)return r(n,e.format||``);if(t===`number`)return o(n,{format:e.format||``,precision:e.precision,useGrouping:e.useGrouping});if(t===`image`)return i;if(t===`select`){let t=e.options?.find(e=>String(e.value??``)===n);if(t?.label)return t.label;if(e.options?.length)return i}return n}function r(e,t){if(!t)return e;let n=i(e);return n?t.replaceAll(`YYYY`,n.year).replaceAll(`MM`,n.month).replaceAll(`DD`,n.day):e}function i(e){let t=String(e).trim(),n=/^(\d{4})[-/年](\d{1,2})[-/月](\d{1,2})(?:日)?(?:[T\s].*)?$/.exec(t);if(!n)return;let r=Number(n[1]),i=Number(n[2]),a=Number(n[3]),o=new Date(Date.UTC(r,i-1,a));if(!(o.getUTCFullYear()!==r||o.getUTCMonth()!==i-1||o.getUTCDate()!==a))return{year:String(o.getUTCFullYear()),month:String(o.getUTCMonth()+1).padStart(2,`0`),day:String(o.getUTCDate()).padStart(2,`0`)}}var a=[{value:`decimal`,label:`常规数字`},{value:`percent`,label:`百分比`},{value:`currency`,label:`人民币金额`}];function o(e,t){let n=Number(e);if(!e.trim()||!Number.isFinite(n))return e;let r=typeof t.precision==`number`&&Number.isInteger(t.precision)&&t.precision>=0&&t.precision<=20?t.precision:void 0,i=n.toLocaleString(`zh-CN`,{style:t.format===`percent`?`percent`:`decimal`,useGrouping:t.useGrouping===!0,minimumFractionDigits:r??0,maximumFractionDigits:r??20});return t.format===`currency`?`¥${i}`:i}function s(e){return[`1`,`true`,`yes`,`checked`,`是`,`已选`].includes(e.trim().toLowerCase())}function c(e,t){if(e==null||e===``)return t;let n=Number(e);return Number.isFinite(n)?n:t}exports.TEMPLATE_NUMBER_FORMAT_OPTIONS=a,exports.resolveTemplateVariablePresentation=t;