@guodun/antdv 1.4.3 → 1.4.5

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 (118) hide show
  1. package/dist/es/components/contract-signing-location/src/ContractSigningLocation.vue.mjs +85 -85
  2. package/dist/es/components/contract-signing-location/src/ContractSigningLocationCanvas.vue.mjs +1 -1
  3. package/dist/es/components/contract-signing-location/src/ContractSigningTemplatePage.vue.mjs +66 -13
  4. package/dist/es/components/contract-signing-location/src/constants.mjs +27 -17
  5. package/dist/es/components/contract-signing-location/src/location-rules.mjs +2 -2
  6. package/dist/es/components/contract-signing-location/src/template-source.mjs +52 -36
  7. package/dist/es/components/contract-signing-location/style/index.css +1 -1
  8. package/dist/es/components/dept-selector/src/dept.mjs +170 -142
  9. package/dist/es/components/index.mjs +2 -1
  10. package/dist/es/components/pro-contract-template-designer/index.mjs +2 -1
  11. package/dist/es/components/pro-contract-template-designer/src/ContractTemplateDesignerInspector.vue.mjs +372 -185
  12. package/dist/es/components/pro-contract-template-designer/src/ContractTemplateDesignerWorkspaceHeader.vue.mjs +59 -42
  13. package/dist/es/components/pro-contract-template-designer/src/ContractTemplatePreviewPage.vue.mjs +4 -4
  14. package/dist/es/components/pro-contract-template-designer/src/ContractTemplateRendererField.vue.mjs +218 -85
  15. package/dist/es/components/pro-contract-template-designer/src/ContractTemplateVariableDataModal.mjs +5 -0
  16. package/dist/es/components/pro-contract-template-designer/src/ContractTemplateVariableDataModal.vue.mjs +97 -0
  17. package/dist/es/components/pro-contract-template-designer/src/DesignerPage.vue.mjs +50 -50
  18. package/dist/es/components/pro-contract-template-designer/src/ProContractTemplateDesigner.vue.mjs +948 -887
  19. package/dist/es/components/pro-contract-template-designer/src/ProContractTemplateRenderer.vue.mjs +550 -245
  20. package/dist/es/components/pro-contract-template-designer/src/composables/use-template-designer.mjs +225 -150
  21. package/dist/es/components/pro-contract-template-designer/src/extensions/template-variable.mjs +53 -35
  22. package/dist/es/components/pro-contract-template-designer/src/types.mjs +15 -2
  23. package/dist/es/components/pro-contract-template-designer/src/utils/advanced-controls.mjs +91 -0
  24. package/dist/es/components/pro-contract-template-designer/src/utils/page-decorations.mjs +17 -17
  25. package/dist/es/components/pro-contract-template-designer/src/utils/signing-placement.mjs +14 -14
  26. package/dist/es/components/pro-contract-template-designer/src/utils/template-renderer.mjs +168 -137
  27. package/dist/es/components/pro-contract-template-designer/src/utils/template-tool-icons.mjs +23 -16
  28. package/dist/es/components/pro-contract-template-designer/style/index.css +1 -1
  29. package/dist/es/components/pro-selector/src/components/org-tree.mjs +130 -89
  30. package/dist/es/components/pro-selector/src/components/user.mjs +34 -26
  31. package/dist/es/components/pro-selector/src/pro-user.mjs +86 -72
  32. package/dist/es/components/pro-selector/src/types.mjs +4 -1
  33. package/dist/es/components/pro-selector/src/utils/orgTree.mjs +5 -2
  34. package/dist/es/components/pro-selector-group/src/compoents/dept-tree.vue.mjs +92 -65
  35. package/dist/es/components/pro-selector-group/src/compoents/dept.vue.mjs +3 -3
  36. package/dist/es/components/pro-selector-group/src/compoents/role.vue.mjs +98 -73
  37. package/dist/es/components/pro-selector-group/src/compoents/select-box.vue.mjs +12 -9
  38. package/dist/es/components/pro-selector-group/src/compoents/user.vue.mjs +101 -72
  39. package/dist/es/components/pro-selector-group/src/hooks/useApi.mjs +39 -22
  40. package/dist/es/components/pro-selector-group/src/index.vue.mjs +105 -83
  41. package/dist/es/components/pro-selector-group/src/utils/index.mjs +36 -0
  42. package/dist/es/components/role-selector/src/role.mjs +134 -120
  43. package/dist/es/index.mjs +50 -49
  44. package/dist/lib/components/contract-signing-location/src/ContractSigningLocation.vue.cjs +1 -1
  45. package/dist/lib/components/contract-signing-location/src/ContractSigningLocationCanvas.vue.cjs +1 -1
  46. package/dist/lib/components/contract-signing-location/src/ContractSigningTemplatePage.vue.cjs +1 -1
  47. package/dist/lib/components/contract-signing-location/src/constants.cjs +1 -1
  48. package/dist/lib/components/contract-signing-location/src/location-rules.cjs +1 -1
  49. package/dist/lib/components/contract-signing-location/src/template-source.cjs +1 -1
  50. package/dist/lib/components/contract-signing-location/style/index.css +1 -1
  51. package/dist/lib/components/dept-selector/src/dept.cjs +1 -1
  52. package/dist/lib/components/index.cjs +1 -1
  53. package/dist/lib/components/pro-contract-template-designer/index.cjs +1 -1
  54. package/dist/lib/components/pro-contract-template-designer/src/ContractTemplateDesignerInspector.vue.cjs +2 -1
  55. package/dist/lib/components/pro-contract-template-designer/src/ContractTemplateDesignerWorkspaceHeader.vue.cjs +1 -1
  56. package/dist/lib/components/pro-contract-template-designer/src/ContractTemplatePreviewPage.vue.cjs +1 -1
  57. package/dist/lib/components/pro-contract-template-designer/src/ContractTemplateRendererField.vue.cjs +1 -1
  58. package/dist/lib/components/pro-contract-template-designer/src/ContractTemplateVariableDataModal.cjs +1 -0
  59. package/dist/lib/components/pro-contract-template-designer/src/ContractTemplateVariableDataModal.vue.cjs +1 -0
  60. package/dist/lib/components/pro-contract-template-designer/src/DesignerPage.vue.cjs +2 -2
  61. package/dist/lib/components/pro-contract-template-designer/src/ProContractTemplateDesigner.vue.cjs +1 -1
  62. package/dist/lib/components/pro-contract-template-designer/src/ProContractTemplateRenderer.vue.cjs +1 -1
  63. package/dist/lib/components/pro-contract-template-designer/src/composables/use-template-designer.cjs +4 -4
  64. package/dist/lib/components/pro-contract-template-designer/src/extensions/template-variable.cjs +1 -1
  65. package/dist/lib/components/pro-contract-template-designer/src/types.cjs +1 -1
  66. package/dist/lib/components/pro-contract-template-designer/src/utils/advanced-controls.cjs +1 -0
  67. package/dist/lib/components/pro-contract-template-designer/src/utils/page-decorations.cjs +1 -1
  68. package/dist/lib/components/pro-contract-template-designer/src/utils/signing-placement.cjs +1 -1
  69. package/dist/lib/components/pro-contract-template-designer/src/utils/template-renderer.cjs +3 -3
  70. package/dist/lib/components/pro-contract-template-designer/src/utils/template-tool-icons.cjs +1 -1
  71. package/dist/lib/components/pro-contract-template-designer/style/index.css +1 -1
  72. package/dist/lib/components/pro-selector/src/components/org-tree.cjs +1 -1
  73. package/dist/lib/components/pro-selector/src/components/user.cjs +1 -1
  74. package/dist/lib/components/pro-selector/src/pro-user.cjs +1 -1
  75. package/dist/lib/components/pro-selector/src/types.cjs +1 -1
  76. package/dist/lib/components/pro-selector/src/utils/orgTree.cjs +1 -1
  77. package/dist/lib/components/pro-selector-group/src/compoents/dept-tree.vue.cjs +1 -1
  78. package/dist/lib/components/pro-selector-group/src/compoents/dept.vue.cjs +1 -1
  79. package/dist/lib/components/pro-selector-group/src/compoents/role.vue.cjs +1 -1
  80. package/dist/lib/components/pro-selector-group/src/compoents/select-box.vue.cjs +1 -1
  81. package/dist/lib/components/pro-selector-group/src/compoents/user.vue.cjs +1 -1
  82. package/dist/lib/components/pro-selector-group/src/hooks/useApi.cjs +1 -1
  83. package/dist/lib/components/pro-selector-group/src/index.vue.cjs +1 -1
  84. package/dist/lib/components/pro-selector-group/src/utils/index.cjs +1 -0
  85. package/dist/lib/components/role-selector/src/role.cjs +1 -1
  86. package/dist/lib/index.cjs +1 -1
  87. package/dist/theme/contract-signing-location.css +1 -1
  88. package/dist/theme/dept-selector.css +1 -1
  89. package/dist/theme/icon.css +1 -1
  90. package/dist/theme/index.css +1 -1
  91. package/dist/theme/pro-selector-group.css +1 -1
  92. package/dist/theme/pro-selector.css +1 -1
  93. package/dist/theme/role-selector.css +1 -1
  94. package/dist/types/components/contract-signing-location/src/ContractSigningLocation.vue.d.ts +3 -3
  95. package/dist/types/components/contract-signing-location/src/ContractSigningTemplatePage.vue.d.ts +3 -1
  96. package/dist/types/components/contract-signing-location/src/constants.d.ts +18 -0
  97. package/dist/types/components/contract-signing-location/src/coordinates.d.ts +6 -0
  98. package/dist/types/components/contract-signing-location/src/template-source.d.ts +17 -0
  99. package/dist/types/components/pro-contract-template-designer/index.d.ts +1 -0
  100. package/dist/types/components/pro-contract-template-designer/src/ContractTemplateDesignerInspector.vue.d.ts +1 -0
  101. package/dist/types/components/pro-contract-template-designer/src/ContractTemplateDesignerWorkspaceHeader.vue.d.ts +3 -0
  102. package/dist/types/components/pro-contract-template-designer/src/ContractTemplateRendererField.vue.d.ts +7 -1
  103. package/dist/types/components/pro-contract-template-designer/src/ContractTemplateVariableDataModal.vue.d.ts +14 -0
  104. package/dist/types/components/pro-contract-template-designer/src/ProContractTemplateDesigner.vue.d.ts +13 -1
  105. package/dist/types/components/pro-contract-template-designer/src/ProContractTemplateRenderer.vue.d.ts +11 -1
  106. package/dist/types/components/pro-contract-template-designer/src/composables/use-template-designer.d.ts +4 -0
  107. package/dist/types/components/pro-contract-template-designer/src/extensions/template-variable.d.ts +11 -1
  108. package/dist/types/components/pro-contract-template-designer/src/types.d.ts +131 -2
  109. package/dist/types/components/pro-contract-template-designer/src/utils/advanced-controls.d.ts +15 -0
  110. package/dist/types/components/pro-contract-template-designer/src/utils/template-renderer.d.ts +10 -2
  111. package/dist/types/components/pro-selector/index.d.ts +9 -0
  112. package/dist/types/components/pro-selector/src/components/user.d.ts +9 -0
  113. package/dist/types/components/pro-selector/src/types.d.ts +2 -0
  114. package/dist/types/components/pro-selector/src/utils/orgTree.d.ts +4 -1
  115. package/dist/types/components/pro-selector-group/src/compoents/select-box.vue.d.ts +4 -4
  116. package/dist/types/components/pro-selector-group/src/hooks/useApi.d.ts +6 -1
  117. package/dist/types/components/pro-selector-group/src/utils/index.d.ts +8 -0
  118. package/package.json +5 -1
@@ -1 +1 @@
1
- const e=require(`./html.cjs`),t=require(`../constants.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: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: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(t,n,r,i,a,o,s){let c=C(n),l=n.divider.enabled?`;border-${t===`header`?`bottom`:`top`}:1px solid ${e.escapeHtmlAttribute(n.divider.color)}`:``,u=`color:${e.escapeHtmlAttribute(n.color)};font-family:${e.escapeHtmlAttribute(n.fontFamily)};font-size:${n.fontSize}px;font-weight:${n.fontWeight};${t===`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__${t}" data-decoration-offset="${n.offset}" data-decoration-font-size="${n.fontSize}" data-decoration-safe-padding="${c}" style="${u}">${d}</div>`}function A(t,n,r,i,a,o){let s=S(t.density),c=t.layout===`tiled`?s.columns*s.rows:1,l=j(t.text,n,r,i,a,o),u=Array.from({length:c},()=>`<div class="gd-contract-template-page__watermark-item" style="color:${e.escapeHtmlAttribute(t.color)};font-size:${t.fontSize}px;opacity:${t.opacity};transform:rotate(${t.rotation}deg)">${l}</div>`).join(``),d=t.layout===`tiled`?`--gd-watermark-columns:${s.columns};--gd-watermark-rows:${s.rows}`:``;return`<div class="gd-contract-template-page__watermark is-${t.layout} density-${t.density}" data-watermark-layout="${t.layout}" data-watermark-density="${t.density}" aria-hidden="true" style="${d}">${u}</div>`}function j(t,n,r,i,a,o){let s=h(i,a,o),c=new Map(n.map(e=>[e.key,e]));return g(t).tokens.map(t=>{if(t.type===`text`)return e.escapeHtmlText(t.value);if(t.type===`pageNumber`)return e.escapeHtmlText(s.pageNumber);if(t.type===`totalPages`)return e.escapeHtmlText(s.totalPages);let n=c.get(t.key);return r!==void 0&&n&&n.type!==`image`?e.escapeHtmlText(M(n,r[t.key])):`<span class="gd-contract-template-page__variable" data-template-variable="true" data-key="${e.escapeHtmlAttribute(t.key)}" data-label="${e.escapeHtmlAttribute(n?.label??t.key)}" data-variable-type="${e.escapeHtmlAttribute(n?.type??`text`)}">\${{${e.escapeHtmlText(t.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(`../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 +1 @@
1
- const e=require(`../../../contract-signing-location/src/constants.cjs`),t=require(`./html.cjs`);var n=`application/x-gd-contract-signing-placement`,r={seal:e.resolveContractSigningSealSizeInCssPixels([`04`]),signature:{width:l(50),height:l(20)},date:{width:l(50),height:l(20)}},i=8,a={seal:`印章`,signature:`签名`,date:`签署日期`},o=class extends Error{constructor(e){super(`签署位置无法转换为 locationRules`),this.code=`SIGNING_PLACEMENT_LOCATION_RULES_INVALID`,this.name=`ContractTemplateLocationRuleBuildError`,this.errors=e}},s=0;function c(){return s+=1,`signing-placement-${Date.now().toString(36)}-${s.toString(36)}`}function l(e,t=96){return Math.round(e/25.4*t)}function u(e,t){let n=Number(e);return Number.isFinite(n)?n:t}function d(e){return{width:Math.max(1,u(e.width,1)),height:Math.max(1,u(e.height,1))}}function f(e={}){return e.showSigningPlacementTools===!1?[]:Object.keys(a).map(e=>({key:e,type:e,label:a[e]}))}function p(e){let t=A(e);return t?JSON.stringify(t):``}function m(e){if(typeof e!=`string`)return;let t=e.trim();if(N(t))return{type:t};try{return A(JSON.parse(t))}catch{return}}function h(e,t){return!e&&!t}function g(e){return{...r[e]??r.signature}}function _(e){return a[e]??`签署位置`}function v(e,t,n=8){let r=d(t),i=Math.max(1,u(n,8)),a=Math.min(r.width,Math.max(i,u(e.width,i))),o=Math.min(r.height,Math.max(i,u(e.height,i))),s=M(u(e.x,0),0,Math.max(0,r.width-a)),c=M(u(e.y,0),0,Math.max(0,r.height-o)),l=e.type===`seal`&&Array.isArray(e.sealTypes)&&e.sealTypes.length?Array.from(new Set(e.sealTypes.map(String).filter(Boolean))):void 0;return{id:e.id,pageId:e.pageId,type:e.type,x:j(s),y:j(c),width:j(a),height:j(o),mustSign:e.mustSign===!0,...l?{sealTypes:l}:{}}}function y(t,n,r){let i=n.type??t.type,a={...t,...n,type:i,...i===`seal`?{}:{sealTypes:void 0}};if(i===`seal`&&(n.type!==void 0||n.sealTypes!==void 0)){let t=e.resolveContractSigningSealSizeInCssPixels(n.sealTypes??a.sealTypes??[`04`]);a.width=t.width,a.height=t.height}return v(a,r)}function b(t,n,r,i={}){let a=N(t)?t:`signature`,o=g(a),s=d(r),l=a===`seal`?e.resolveContractSigningSealSizeInCssPixels(i.sealTypes??[`04`]):o,f=u(i.width,l.width),p=u(i.height,l.height);return v({id:i.id||c(),pageId:n,type:a,x:u(i.x,Math.max(0,(s.width-f)/2)),y:u(i.y,Math.max(0,(s.height-p)/2)),width:f,height:p,mustSign:i.mustSign===!0,...a===`seal`&&i.sealTypes?.length?{sealTypes:[...i.sealTypes]}:{}},s)}function x(e,t,n){if(!Array.isArray(e))return[];let r=d(n),i=k(e);return e.map((e,n)=>{let a=e&&typeof e==`object`?e:{},o=N(a.type)?a.type:`signature`,s=String(a.pageId||``),c=t[s]??r;return v({id:i[n],pageId:s,type:o,x:u(a.x,0),y:u(a.y,0),width:u(a.width,g(o).width),height:u(a.height,g(o).height),mustSign:a.mustSign===!0,...o===`seal`&&Array.isArray(a.sealTypes)&&a.sealTypes.length?{sealTypes:Array.from(new Set(a.sealTypes.map(String).filter(Boolean)))}:{}},c)})}function S(e,t,n,r,i){let a=Number.isFinite(r)&&r>0?r:1;return v({...e,x:e.x+u(t,0)/a,y:e.y+u(n,0)/a},i)}function C(e,t,n,r=8){let i=d(t),a=d(n);return v({...e,x:e.x*a.width/i.width,y:e.y*a.height/i.height,width:e.width*a.width/i.width,height:e.height*a.height/i.height},a,r)}function w(e,t,n){return v({...e,...t},n)}function T(e){let t=[],n=Array.isArray(e?.pages)?e.pages:[],r=new Map(n.map(e=>[e.id,e])),i=Array.isArray(e.signingPlacements)?e.signingPlacements:[],a=k(i),o=new Set;return i.forEach((n,i)=>{let s=String(n?.id||``),c=a[i];s?o.has(s)&&t.push({type:`signing-placement`,id:c,pageId:n?.pageId,code:`SIGNING_PLACEMENT_ID_DUPLICATE`,message:`签署位置标识 ${s} 重复`}):t.push({type:`signing-placement`,id:c,pageId:n?.pageId,code:`SIGNING_PLACEMENT_ID_MISSING`,message:`签署位置缺少唯一标识`}),o.add(s);let l=r.get(n?.pageId);if(l||t.push({type:`signing-placement`,id:c,pageId:n?.pageId,code:`SIGNING_PLACEMENT_PAGE_MISSING`,message:`签署位置引用的页面 ${n?.pageId||`(空)`} 不存在`}),N(n?.type)||t.push({type:`signing-placement`,id:c,pageId:n?.pageId,code:`SIGNING_PLACEMENT_TYPE_INVALID`,message:`签署位置类型必须是 seal、signature 或 date`}),[n?.x,n?.y,n?.width,n?.height].some(e=>typeof e!=`number`||!Number.isFinite(e)))t.push({type:`signing-placement`,id:c,pageId:n?.pageId,code:`SIGNING_PLACEMENT_GEOMETRY_INVALID`,message:`签署位置坐标和尺寸必须是有限数字`});else if(n.width<8||n.height<8||n.width<=0||n.height<=0)t.push({type:`signing-placement`,id:c,pageId:n?.pageId,code:`SIGNING_PLACEMENT_SIZE_INVALID`,message:`签署位置尺寸不能小于 8px`});else if(l){let r=d(l.pageSize??e.pageSize);(n.x<0||n.y<0||n.x+n.width>r.width||n.y+n.height>r.height)&&t.push({type:`signing-placement`,id:c,pageId:n.pageId,code:`SIGNING_PLACEMENT_OUT_OF_BOUNDS`,message:`签署位置不能超出所属页面边界`})}n?.type!==`seal`&&n?.sealTypes!==void 0?t.push({type:`signing-placement`,id:c,pageId:n?.pageId,code:`SIGNING_PLACEMENT_SEAL_TYPES_INVALID`,message:`只有印章位置可以配置印章类型`}):n?.type===`seal`&&n.sealTypes!==void 0&&(!Array.isArray(n.sealTypes)||n.sealTypes.some(e=>typeof e!=`string`))&&t.push({type:`signing-placement`,id:c,pageId:n?.pageId,code:`SIGNING_PLACEMENT_SEAL_TYPES_INVALID`,message:`印章类型必须是字符串数组`})}),t}function E(e,t,n){let r=typeof t==`string`?{fileId:t,targetPageSizes:n}:t,i=T(e),a=String(r.fileId??``).trim();if(a||i.push({type:`signing-placement`,id:`location-rules`,code:`SIGNING_PLACEMENT_FILE_ID_MISSING`,message:`locationRules 缺少目标文件 ID`}),i.length)throw new o(i);let s=r.targetPageSizes,c=e.pages??[];return(e.signingPlacements??[]).map(t=>{let n=c.findIndex(e=>e.id===t.pageId),r=d((n>=0?c[n]:void 0)?.pageSize??e.pageSize),i=C(t,r,O(s,t.pageId,n,r),1),o={signType:t.type,signTop:Math.round(i.y),signLeft:Math.round(i.x),signWidth:Math.round(i.width),signHeight:Math.round(i.height),pageList:{[a]:[n]},...t.type===`seal`&&t.sealTypes?.length?{sealType:[...t.sealTypes]}:{}};return{mustSign:t.mustSign===!0,placementId:t.id,pageId:t.pageId,pageIndex:n,location:o}})}function D(e,t,n){return E(e,t,n).map(({mustSign:e,location:t})=>({mustSign:e,location:t}))}function O(e,n,r,i){if(!e)return i;let a=Array.isArray(e)?e[r]:e[n];return t.hasPositivePageSize(a)?d(a):i}function k(e){let t=new Set(e.map(e=>e&&typeof e==`object`?String(e.id||``):``).filter(Boolean)),n=new Set;return e.map((e,r)=>{let i=e&&typeof e==`object`?String(e.id||``):``;if(i&&!n.has(i))return n.add(i),i;let a=i||`signing-placement`,o=`${a}-normalized-${r+1}`,s=2;for(;n.has(o)||t.has(o);)o=`${a}-normalized-${r+1}-${s}`,s+=1;return n.add(o),o})}function A(e){if(!e||typeof e!=`object`)return;let t=e;if(N(t.type))return{type:t.type}}function j(e){return Math.round(e*100)/100}function M(e,t,n){return n<t?t:Math.min(n,Math.max(t,e))}function N(e){return e===`seal`||e===`signature`||e===`date`}exports.ContractTemplateLocationRuleBuildError=o,exports.SIGNING_PLACEMENT_DEFAULT_SIZES=r,exports.SIGNING_PLACEMENT_MIME=n,exports.SIGNING_PLACEMENT_MIN_SIZE=i,exports.SIGNING_PLACEMENT_TYPE_LABELS=a,exports.applySigningPlacementPatch=y,exports.buildContractLocationRules=D,exports.buildSigningPlacementLocationRules=E,exports.canMutateSigningPlacements=h,exports.clampSigningPlacement=v,exports.createSigningPlacement=b,exports.getSigningPlacementDefaultSize=g,exports.getSigningPlacementTypeLabel=_,exports.moveSigningPlacementByDisplayDelta=S,exports.normalizeSigningPlacements=x,exports.parseSigningPlacementDragPayload=m,exports.resizeSigningPlacement=w,exports.resolveSigningPlacementToolItems=f,exports.scaleSigningPlacementToPage=C,exports.serializeSigningPlacementDragPayload=p,exports.validateSigningPlacements=T;
1
+ const e=require(`./html.cjs`),t=require(`../../../contract-signing-location/src/constants.cjs`);var n=`application/x-gd-contract-signing-placement`,r={seal:t.resolveContractSigningSealSizeInCssPixels([`04`]),signature:{width:l(50),height:l(20)},date:{width:l(50),height:l(20)}},i=8,a={seal:`印章`,signature:`签名`,date:`签署日期`},o=class extends Error{constructor(e){super(`签署位置无法转换为 locationRules`),this.code=`SIGNING_PLACEMENT_LOCATION_RULES_INVALID`,this.name=`ContractTemplateLocationRuleBuildError`,this.errors=e}},s=0;function c(){return s+=1,`signing-placement-${Date.now().toString(36)}-${s.toString(36)}`}function l(e,t=96){return Math.round(e/25.4*t)}function u(e,t){let n=Number(e);return Number.isFinite(n)?n:t}function d(e){return{width:Math.max(1,u(e.width,1)),height:Math.max(1,u(e.height,1))}}function f(e={}){return e.showSigningPlacementTools===!1?[]:Object.keys(a).map(e=>({key:e,type:e,label:a[e]}))}function p(e){let t=A(e);return t?JSON.stringify(t):``}function m(e){if(typeof e!=`string`)return;let t=e.trim();if(N(t))return{type:t};try{return A(JSON.parse(t))}catch{return}}function h(e,t){return!e&&!t}function g(e){return{...r[e]??r.signature}}function _(e){return a[e]??`签署位置`}function v(e,t,n=8){let r=d(t),i=Math.max(1,u(n,8)),a=Math.min(r.width,Math.max(i,u(e.width,i))),o=Math.min(r.height,Math.max(i,u(e.height,i))),s=M(u(e.x,0),0,Math.max(0,r.width-a)),c=M(u(e.y,0),0,Math.max(0,r.height-o)),l=e.type===`seal`&&Array.isArray(e.sealTypes)&&e.sealTypes.length?Array.from(new Set(e.sealTypes.map(String).filter(Boolean))):void 0;return{id:e.id,pageId:e.pageId,type:e.type,x:j(s),y:j(c),width:j(a),height:j(o),mustSign:e.mustSign===!0,...l?{sealTypes:l}:{}}}function y(e,n,r){let i=n.type??e.type,a={...e,...n,type:i,...i===`seal`?{}:{sealTypes:void 0}};if(i===`seal`&&(n.type!==void 0||n.sealTypes!==void 0)){let e=t.resolveContractSigningSealSizeInCssPixels(n.sealTypes??a.sealTypes??[`04`]);a.width=e.width,a.height=e.height}return v(a,r)}function b(e,n,r,i={}){let a=N(e)?e:`signature`,o=g(a),s=d(r),l=a===`seal`?t.resolveContractSigningSealSizeInCssPixels(i.sealTypes??[`04`]):o,f=u(i.width,l.width),p=u(i.height,l.height);return v({id:i.id||c(),pageId:n,type:a,x:u(i.x,Math.max(0,(s.width-f)/2)),y:u(i.y,Math.max(0,(s.height-p)/2)),width:f,height:p,mustSign:i.mustSign===!0,...a===`seal`&&i.sealTypes?.length?{sealTypes:[...i.sealTypes]}:{}},s)}function x(e,t,n){if(!Array.isArray(e))return[];let r=d(n),i=k(e);return e.map((e,n)=>{let a=e&&typeof e==`object`?e:{},o=N(a.type)?a.type:`signature`,s=String(a.pageId||``),c=t[s]??r;return v({id:i[n],pageId:s,type:o,x:u(a.x,0),y:u(a.y,0),width:u(a.width,g(o).width),height:u(a.height,g(o).height),mustSign:a.mustSign===!0,...o===`seal`&&Array.isArray(a.sealTypes)&&a.sealTypes.length?{sealTypes:Array.from(new Set(a.sealTypes.map(String).filter(Boolean)))}:{}},c)})}function S(e,t,n,r,i){let a=Number.isFinite(r)&&r>0?r:1;return v({...e,x:e.x+u(t,0)/a,y:e.y+u(n,0)/a},i)}function C(e,t,n,r=8){let i=d(t),a=d(n);return v({...e,x:e.x*a.width/i.width,y:e.y*a.height/i.height,width:e.width*a.width/i.width,height:e.height*a.height/i.height},a,r)}function w(e,t,n){return v({...e,...t},n)}function T(e){let t=[],n=Array.isArray(e?.pages)?e.pages:[],r=new Map(n.map(e=>[e.id,e])),i=Array.isArray(e.signingPlacements)?e.signingPlacements:[],a=k(i),o=new Set;return i.forEach((n,i)=>{let s=String(n?.id||``),c=a[i];s?o.has(s)&&t.push({type:`signing-placement`,id:c,pageId:n?.pageId,code:`SIGNING_PLACEMENT_ID_DUPLICATE`,message:`签署位置标识 ${s} 重复`}):t.push({type:`signing-placement`,id:c,pageId:n?.pageId,code:`SIGNING_PLACEMENT_ID_MISSING`,message:`签署位置缺少唯一标识`}),o.add(s);let l=r.get(n?.pageId);if(l||t.push({type:`signing-placement`,id:c,pageId:n?.pageId,code:`SIGNING_PLACEMENT_PAGE_MISSING`,message:`签署位置引用的页面 ${n?.pageId||`(空)`} 不存在`}),N(n?.type)||t.push({type:`signing-placement`,id:c,pageId:n?.pageId,code:`SIGNING_PLACEMENT_TYPE_INVALID`,message:`签署位置类型必须是 seal、signature 或 date`}),[n?.x,n?.y,n?.width,n?.height].some(e=>typeof e!=`number`||!Number.isFinite(e)))t.push({type:`signing-placement`,id:c,pageId:n?.pageId,code:`SIGNING_PLACEMENT_GEOMETRY_INVALID`,message:`签署位置坐标和尺寸必须是有限数字`});else if(n.width<8||n.height<8||n.width<=0||n.height<=0)t.push({type:`signing-placement`,id:c,pageId:n?.pageId,code:`SIGNING_PLACEMENT_SIZE_INVALID`,message:`签署位置尺寸不能小于 8px`});else if(l){let r=d(l.pageSize??e.pageSize);(n.x<0||n.y<0||n.x+n.width>r.width||n.y+n.height>r.height)&&t.push({type:`signing-placement`,id:c,pageId:n.pageId,code:`SIGNING_PLACEMENT_OUT_OF_BOUNDS`,message:`签署位置不能超出所属页面边界`})}n?.type!==`seal`&&n?.sealTypes!==void 0?t.push({type:`signing-placement`,id:c,pageId:n?.pageId,code:`SIGNING_PLACEMENT_SEAL_TYPES_INVALID`,message:`只有印章位置可以配置印章类型`}):n?.type===`seal`&&n.sealTypes!==void 0&&(!Array.isArray(n.sealTypes)||n.sealTypes.some(e=>typeof e!=`string`))&&t.push({type:`signing-placement`,id:c,pageId:n?.pageId,code:`SIGNING_PLACEMENT_SEAL_TYPES_INVALID`,message:`印章类型必须是字符串数组`})}),t}function E(e,t,n){let r=typeof t==`string`?{fileId:t,targetPageSizes:n}:t,i=T(e),a=String(r.fileId??``).trim();if(a||i.push({type:`signing-placement`,id:`location-rules`,code:`SIGNING_PLACEMENT_FILE_ID_MISSING`,message:`locationRules 缺少目标文件 ID`}),i.length)throw new o(i);let s=r.targetPageSizes,c=e.pages??[];return(e.signingPlacements??[]).map(t=>{let n=c.findIndex(e=>e.id===t.pageId),r=d((n>=0?c[n]:void 0)?.pageSize??e.pageSize),i=C(t,r,O(s,t.pageId,n,r),1),o={signType:t.type,signTop:Math.round(i.y),signLeft:Math.round(i.x),signWidth:Math.round(i.width),signHeight:Math.round(i.height),pageList:{[a]:[n]},...t.type===`seal`&&t.sealTypes?.length?{sealType:[...t.sealTypes]}:{}};return{mustSign:t.mustSign===!0,placementId:t.id,pageId:t.pageId,pageIndex:n,location:o}})}function D(e,t,n){return E(e,t,n).map(({mustSign:e,location:t})=>({mustSign:e,location:t}))}function O(t,n,r,i){if(!t)return i;let a=Array.isArray(t)?t[r]:t[n];return e.hasPositivePageSize(a)?d(a):i}function k(e){let t=new Set(e.map(e=>e&&typeof e==`object`?String(e.id||``):``).filter(Boolean)),n=new Set;return e.map((e,r)=>{let i=e&&typeof e==`object`?String(e.id||``):``;if(i&&!n.has(i))return n.add(i),i;let a=i||`signing-placement`,o=`${a}-normalized-${r+1}`,s=2;for(;n.has(o)||t.has(o);)o=`${a}-normalized-${r+1}-${s}`,s+=1;return n.add(o),o})}function A(e){if(!e||typeof e!=`object`)return;let t=e;if(N(t.type))return{type:t.type}}function j(e){return Math.round(e*100)/100}function M(e,t,n){return n<t?t:Math.min(n,Math.max(t,e))}function N(e){return e===`seal`||e===`signature`||e===`date`}exports.ContractTemplateLocationRuleBuildError=o,exports.SIGNING_PLACEMENT_DEFAULT_SIZES=r,exports.SIGNING_PLACEMENT_MIME=n,exports.SIGNING_PLACEMENT_MIN_SIZE=i,exports.SIGNING_PLACEMENT_TYPE_LABELS=a,exports.applySigningPlacementPatch=y,exports.buildContractLocationRules=D,exports.buildSigningPlacementLocationRules=E,exports.canMutateSigningPlacements=h,exports.clampSigningPlacement=v,exports.createSigningPlacement=b,exports.getSigningPlacementDefaultSize=g,exports.getSigningPlacementTypeLabel=_,exports.moveSigningPlacementByDisplayDelta=S,exports.normalizeSigningPlacements=x,exports.parseSigningPlacementDragPayload=m,exports.resizeSigningPlacement=w,exports.resolveSigningPlacementToolItems=f,exports.scaleSigningPlacementToPage=C,exports.serializeSigningPlacementDragPayload=p,exports.validateSigningPlacements=T;
@@ -1,3 +1,3 @@
1
- const e=require(`../types.cjs`),t=require(`./html.cjs`),n=require(`./template-variable-render.cjs`),r=require(`./page-decorations.cjs`),i=require(`../composables/use-template-designer.cjs`),a=require(`./image-url.cjs`);var o=new Set([`action`,`formaction`,`href`,`src`,`xlink:href`]),s=/<[^>]+data-template-variable=["']true["'][^>]*>/gi;function c(e){let t={};return(Array.isArray(e?.variables)?e.variables:[]).forEach(e=>{e?.key&&(t[e.key]=x(e))}),t}function l(e,t){return{...c(e),...t??{}}}function u(e,t){let n=f(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_UNKNOWN`})}),r.forEach(e=>{if(!e?.key)return;let r=t[e.key];if(e.required&&h(r)){n.push({type:`variable`,id:e.id,variableKey:e.key,message:`请填写${e.label||e.key}`,code:`VARIABLE_REQUIRED`});return}h(r)||(e.type===`number`&&(typeof r!=`number`||!Number.isFinite(r))&&n.push({type:`variable`,id:e.id,variableKey:e.key,message:`${e.label||e.key} 不是合法数字`,code:`VARIABLE_TYPE_INVALID`}),e.type===`checkbox`&&typeof r!=`boolean`&&n.push({type:`variable`,id:e.id,variableKey:e.key,message:`${e.label||e.key} 不是合法复选值`,code:`VARIABLE_TYPE_INVALID`}),e.type===`date`&&!j(r)&&n.push({type:`variable`,id:e.id,variableKey:e.key,message:`${e.label||e.key} 不是合法日期`,code:`VARIABLE_TYPE_INVALID`}),e.type===`image`&&!a.isSafeContractImageUrl(String(r))&&n.push({type:`security`,id:e.id,variableKey:e.key,message:`${e.label||e.key} 不是安全的图片地址`,code:`IMAGE_URL_UNSAFE`}))}),n}function d(e,t,n){return n?u(e,t):f(e)}function f(n){if(!n)return[{type:`page`,id:`template`,message:`缺少可渲染的合同模板`,code:`TEMPLATE_MISSING`}];let a=[],o=Array.isArray(n.pages)?n.pages:[],s=Array.isArray(n.variables)?n.variables:[];(!Array.isArray(n.pages)||o.length===0)&&a.push({type:`page`,id:`template-pages`,message:`模板至少需要一个合法页面`,code:`TEMPLATE_PAGES_INVALID`}),Array.isArray(n.variables)||a.push({type:`variable`,id:`template-variables`,message:`模板变量列表格式无效`,code:`TEMPLATE_VARIABLES_INVALID`}),t.hasPositivePageSize(n.pageSize)||a.push({type:`page`,id:`template-page-size`,message:`模板默认页面尺寸无效,已回退为安全默认尺寸`,code:`TEMPLATE_PAGE_SIZE_INVALID`});let c=new Map;s.forEach((t,n)=>{if(!t||typeof t.key!=`string`||!t.key.trim()){a.push({type:`variable`,id:t?.id||`variable-${n}`,message:`第 ${n+1} 个变量缺少有效 key`,code:`VARIABLE_KEY_MISSING`});return}let r=t.key.trim(),o=s.some(e=>e?.id!==t.id&&typeof e?.key==`string`&&e.key.trim()===r),l=i.validateContractTemplateVariableKey(t.key,s,t.id),u=!i.CONTRACT_TEMPLATE_VARIABLE_KEY_PATTERN.test(r)||i.CONTRACT_TEMPLATE_RESERVED_VARIABLE_KEYS.has(r);l&&(u||!o||t.key!==r)&&a.push({type:`variable`,id:t.id||`variable-${n}`,variableKey:t.key,message:`${t.label||t.key}:${l}`,code:`VARIABLE_KEY_INVALID`}),c.set(r,(c.get(r)??0)+1),e.isContractTemplateFieldType(t.type??`text`)||a.push({type:`variable`,id:t.id,variableKey:t.key,message:`${t.label||t.key} 不是正文填写变量`,code:`VARIABLE_TYPE_UNSUPPORTED`})}),c.forEach((e,t)=>{e>1&&a.push({type:`variable`,id:t,variableKey:t,message:`变量 key ${t} 重复`,code:`VARIABLE_KEY_DUPLICATED`})});let l=new Set;o.forEach((e,n)=>{if(!e||typeof e.id!=`string`||!e.id.trim()||typeof e.contentHtml!=`string`){a.push({type:`page`,id:e?.id||`page-${n}`,pageId:e?.id,message:`第 ${n+1} 页结构无效,已跳过渲染`,code:`PAGE_INVALID`});return}e.pageSize!==void 0&&!t.hasPositivePageSize(e.pageSize)&&a.push({type:`page`,id:`${e.id}-page-size`,pageId:e.id,message:`${e.title||`第 ${n+1} 页`}:页面尺寸无效,已回退为安全尺寸`,code:`PAGE_SIZE_INVALID`}),E(e.contentHtml).forEach(e=>l.add(e)),D(e.contentHtml).forEach((t,r)=>{a.push({type:`security`,id:`${e.id}-security-${r}`,pageId:e.id,message:`${e.title||`第 ${n+1} 页`}:${t}`,code:`HTML_UNSAFE`})})}),l.forEach(e=>{c.has(e)||a.push({type:`variable`,id:e,variableKey:e,message:`正文引用的变量 ${e} 缺少配置`,code:`VARIABLE_CONFIG_MISSING`})});let u=r.collectPageDecorationVariableKeys(n.pageDecorations);return c.forEach((e,t)=>{!l.has(t)&&!u.has(t)&&a.push({type:`variable`,id:t,variableKey:t,message:`变量 ${t} 缺少正文节点`,code:`VARIABLE_NODE_MISSING`})}),a.push(...r.validatePageDecorations(n.pageDecorations,s)),a}function p(e,n,a={}){if(!e||!Array.isArray(e.pages))return[];let o=Array.isArray(e.variables)?e.variables:[],s=new Map(o.filter(e=>e?.key).map(e=>[e.key,e])),c=t.hasPositivePageSize(e.pageSize)?e.pageSize:i.DEFAULT_PAGE_SIZE;return e.pages.flatMap(t=>{if(!t||typeof t.id!=`string`||!t.id.trim()||typeof t.contentHtml!=`string`)return[];let l=i.resolvePageSize(t.pageSize,c);return[{id:t.id,title:t.title||`未命名页面`,format:l.format??`Custom`,width:l.width,height:l.height,contentHtml:g(t.contentHtml,s,n,a),...e.pageDecorations?{pageDecorations:r.normalizePageDecorations(e.pageDecorations)}:{},decorationVariables:o,decorationValues:n}]})}function m(e,n,i={}){return p(e,n,i).map((e,n,i)=>{let a=r.buildPageDecorationsHtml(e.pageDecorations,n+1,i.length,e.decorationVariables,e.decorationValues);return`<section class="${r.buildPageDecorationClassNames(e.pageDecorations,n+1)}" data-page-id="${t.escapeHtmlAttribute(e.id)}" data-page-format="${t.escapeHtmlAttribute(e.format)}" data-page-width="${e.width}" data-page-height="${e.height}" style="width:${e.width}px;min-height:${e.height}px">${a}<div class="gd-contract-template-page__content">${e.contentHtml}</div></section>`}).join(`
2
- `)}function h(e){return e==null||e===``}function g(e,n,r,i){if(!e)return e;let a=T(e);if(t.canUseDomHtml()){let e=new DOMParser().parseFromString(a,`text/html`);return e.querySelectorAll(`[data-template-variable]`).forEach(e=>{_(e,n,r,i)}),e.body.innerHTML}return t.replaceTemplateVariableSpans(a,(e,a)=>{let o=t.getHtmlAttribute(a,`data-key`);return o?v(n.get(o),o,r[o],i):e})}function _(e,t,n,r){let i=e.dataset.key||``,a=t.get(i);if(!i||!a)return;let o=new DOMParser().parseFromString(v(a,i,n[i],r),`text/html`).body.firstElementChild;o&&e.replaceWith(o)}function v(e,t,n,r){return r.mode===`display`?y(e,t,n,r):b(e,t,n,r)}function y(e,r,i,o){let s=e?.type??`text`,c=i??x(e),l=s===`image`&&!h(c)&&!a.isSafeContractImageUrl(String(c))?``:c,u=C(l),d=n.resolveTemplateVariablePresentation({type:s,width:e?.width,height:e?.height,placeholder:e?.placeholder??``,defaultValue:u,format:e?.format??``,precision:e?.precision,useGrouping:e?.useGrouping,checkedText:e?.checkedText??``,uncheckedText:e?.uncheckedText??``,multiline:e?.multiline,rows:e?.rows,lineHeight:e?.lineHeight,style:e?.style}),f=d.displayText||e?.placeholder||e?.label||r,p=[`class="${t.escapeHtmlAttribute([`gd-contract-template-renderer__control`,`gd-contract-template-renderer__preview-control`,...d.classes,o.activeKey===r?`is-active`:``,h(l)?`is-empty`:``].filter(Boolean).join(` `))}"`,`style="${t.escapeHtmlAttribute(d.styleText)}"`,`data-contract-render-wrapper="true"`,`data-contract-render-preview="true"`,`data-key="${t.escapeHtmlAttribute(r)}"`,`data-variable-type="${t.escapeHtmlAttribute(s)}"`,`aria-label="${t.escapeHtmlAttribute(e?.label||r)}"`,o.disabled?``:`role="button"`,o.disabled?``:`tabindex="0"`].filter(Boolean).join(` `);return s===`checkbox`?`<span ${p}><span class="gd-contract-template-renderer__checkbox-mark" aria-hidden="true">${w(l)?`✓`:``}</span>${t.escapeHtmlText(f)}</span>`:s===`image`&&!h(l)?`<span ${p}></span>`:`<span ${p}>${t.escapeHtmlText(f)}</span>`}function b(e,r,i,a){let o=e?.type??`text`,s=!!a.readonly,c=S(i??x(e)),l=n.resolveTemplateVariablePresentation({type:o,width:e?.width,height:e?.height,placeholder:e?.placeholder??``,defaultValue:s?c:``,format:e?.format??``,precision:e?.precision,useGrouping:e?.useGrouping,checkedText:e?.checkedText??``,uncheckedText:e?.uncheckedText??``,multiline:e?.multiline,rows:e?.rows,lineHeight:e?.lineHeight,style:e?.style}),u=a.disabled||s,d=[`data-contract-render-control="true"`,`data-key="${t.escapeHtmlAttribute(r)}"`,`data-variable-type="${t.escapeHtmlAttribute(o)}"`,`aria-label="${t.escapeHtmlAttribute(e?.label||r)}"`,u?`disabled`:``,s?`readonly`:``].filter(Boolean).join(` `),f=`style="${t.escapeHtmlAttribute(l.styleText)}"`,p=t.escapeHtmlAttribute([`gd-contract-template-renderer__control`,...l.classes].join(` `));return o===`checkbox`?`<label class="${p}" ${f} data-contract-render-wrapper="true" data-key="${t.escapeHtmlAttribute(r)}"><input type="checkbox" ${d} ${w(c)?`checked`:``}>${t.escapeHtmlText(e?.checkedText||e?.label||r)}</label>`:s?`<span class="${p}" ${f} data-contract-render-wrapper="true" data-key="${t.escapeHtmlAttribute(r)}">${t.escapeHtmlText(l.displayText||c)}</span>`:o===`number`?`<input class="${p}" ${f} type="number" ${d} value="${t.escapeHtmlAttribute(c)}" placeholder="${t.escapeHtmlAttribute(e?.placeholder||``)}">`:o===`date`?`<input class="${p}" ${f} type="date" ${d} value="${t.escapeHtmlAttribute(c)}" placeholder="${t.escapeHtmlAttribute(e?.placeholder||``)}">`:e?.multiline?`<textarea class="${p}" ${f} ${d} placeholder="${t.escapeHtmlAttribute(e.placeholder||``)}">${t.escapeHtmlText(c)}</textarea>`:`<input class="${p}" ${f} type="text" ${d} value="${t.escapeHtmlAttribute(c)}" placeholder="${t.escapeHtmlAttribute(e?.placeholder||``)}">`}function x(e){if(!e)return``;if(e.type===`checkbox`)return w(e.defaultValue);if(e.type===`number`&&e.defaultValue!==void 0){let t=Number(e.defaultValue);return Number.isFinite(t)?t:e.defaultValue}return e.defaultValue??``}function S(e){return typeof e==`boolean`?e?`true`:``:e==null?``:String(e)}function C(e){return typeof e==`boolean`?e?`true`:`false`:e==null?``:String(e)}function w(e){return e===!0||e===`true`||e===`1`||e===`yes`||e===`是`||e===`已选`}function T(e){if(t.canParseHtmlDocument()){let t=new DOMParser().parseFromString(e,`text/html`);return t.querySelectorAll(`script,style,meta,link,iframe,object,embed`).forEach(e=>e.remove()),t.querySelectorAll(`*`).forEach(e=>{Array.from(e.attributes).forEach(t=>{let n=t.name.toLowerCase();(n.startsWith(`on`)||n===`srcdoc`||o.has(n)&&O(t.value)||n===`style`&&A(t.value))&&e.removeAttribute(t.name)})}),t.body.innerHTML}return e.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 O(a)?``:n?` ${t}=${n}${a}${n}`:` ${t}=${a}`}).replace(/\s+style\s*=\s*(["'])(.*?)\1/gi,(e,t,n)=>A(n)?``:` style=${t}${n}${t}`)}function E(e){return t.collectFromHtmlTags(e,s,e=>t.getHtmlAttribute(e,`data-key`))}function D(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(`正文包含已移除的事件或嵌入属性`),(k(e)||/style\s*=\s*["'][^"']*(?:expression\s*\(|url\s*\(\s*["']?\s*(?:javascript|vbscript|data:text\/html))/i.test(e))&&t.push(`正文包含已移除的危险 URL 或样式`),t}function O(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:`
3
- `,tab:` `})[t.toLowerCase()]??``).trim().replace(/[\u0000-\u0020\u007F]+/g,``);return/^(?:javascript|vbscript|data:text\/html)/i.test(t)}function k(e){let t=/\s+(?:action|formaction|href|src|xlink:href)\s*=\s*(?:(["'])(.*?)\1|([^\s>]+))/gi,n=t.exec(e);for(;n;){if(O(n[2]??n[3]??``))return!0;n=t.exec(e)}return!1}function A(e){return/expression\s*\(|url\s*\(\s*["']?\s*(?:javascript|vbscript|data:text\/html)/i.test(e)}function j(e){let t=/^(\d{4})-(\d{2})-(\d{2})$/.exec(String(e));if(!t)return!1;let n=new Date(`${t[1]}-${t[2]}-${t[3]}T00:00:00Z`);return!Number.isNaN(n.getTime())&&n.getUTCFullYear()===Number(t[1])&&n.getUTCMonth()+1===Number(t[2])&&n.getUTCDate()===Number(t[3])}exports.buildInitialRenderValues=c,exports.buildTemplateRenderHtml=m,exports.buildTemplateRenderPages=p,exports.isEmptyRenderValue=h,exports.normalizeRenderValues=l,exports.resolveTemplateRenderSubmitErrors=d,exports.sanitizeContractRendererHtml=T,exports.validateTemplateRenderStructure=f,exports.validateTemplateRenderValues=u;
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;function d(e){let t={};return(Array.isArray(e?.variables)?e.variables:[]).forEach(e=>{e?.key&&(t[e.key]=w(e))}),t}function f(e,t){return{...d(e),...t??{}}}function p(e,t){let n=h(e);if(!e)return n;let r=Array.isArray(e.variables)?e.variables:[],a=new Set(r.map(e=>e?.key).filter(Boolean));return Object.keys(t).forEach(e=>{a.has(e)||n.push({type:`variable`,id:e,variableKey:e,message:`提交值 ${e} 不属于模板变量`,code:`VARIABLE_UNKNOWN`})}),r.forEach(e=>{if(!e?.key)return;let r=t[e.key];if(e.required&&v(r)){n.push({type:`variable`,id:e.id,variableKey:e.key,message:`请填写${e.label||e.key}`,code:`VARIABLE_REQUIRED`});return}v(r)||(e.type===`number`&&(typeof r!=`number`||!Number.isFinite(r))&&n.push({type:`variable`,id:e.id,variableKey:e.key,message:`${e.label||e.key} 不是合法数字`,code:`VARIABLE_TYPE_INVALID`}),e.type===`checkbox`&&typeof r!=`boolean`&&n.push({type:`variable`,id:e.id,variableKey:e.key,message:`${e.label||e.key} 不是合法复选值`,code:`VARIABLE_TYPE_INVALID`}),e.type===`date`&&!P(r)&&n.push({type:`variable`,id:e.id,variableKey:e.key,message:`${e.label||e.key} 不是合法日期`,code:`VARIABLE_TYPE_INVALID`}),e.type===`image`&&!o.isSafeContractImageUrl(String(r))&&n.push({type:`security`,id:e.id,variableKey:e.key,message:`${e.label||e.key} 不是安全的图片地址`,code:`IMAGE_URL_UNSAFE`}),(e.type===`select`||e.type===`radio`||e.type===`user-selector`||e.type===`dept-selector`||e.type===`role-selector`||e.type===`org-selector`)&&r!==void 0&&((Array.isArray(r)?r.every(i.isContractTemplateSelectionValue):i.isContractTemplateSelectionValue(r))||n.push({type:`variable`,id:e.id,variableKey:e.key,message:`${e.label||e.key} 不是合法选择值`,code:`VARIABLE_SELECTION_INVALID`})))}),n}function m(e,t,n){return n?p(e,t):h(e)}function h(t){if(!t)return[{type:`page`,id:`template`,message:`缺少可渲染的合同模板`,code:`TEMPLATE_MISSING`}];let i=[],o=Array.isArray(t.pages)?t.pages:[],s=Array.isArray(t.variables)?t.variables:[];(!Array.isArray(t.pages)||o.length===0)&&i.push({type:`page`,id:`template-pages`,message:`模板至少需要一个合法页面`,code:`TEMPLATE_PAGES_INVALID`}),Array.isArray(t.variables)||i.push({type:`variable`,id:`template-variables`,message:`模板变量列表格式无效`,code:`TEMPLATE_VARIABLES_INVALID`}),e.hasPositivePageSize(t.pageSize)||i.push({type:`page`,id:`template-page-size`,message:`模板默认页面尺寸无效,已回退为安全默认尺寸`,code:`TEMPLATE_PAGE_SIZE_INVALID`});let c=new Map;s.forEach((e,t)=>{if(!e||typeof e.key!=`string`||!e.key.trim()){i.push({type:`variable`,id:e?.id||`variable-${t}`,message:`第 ${t+1} 个变量缺少有效 key`,code:`VARIABLE_KEY_MISSING`});return}let n=e.key.trim(),o=s.some(t=>t?.id!==e.id&&typeof t?.key==`string`&&t.key.trim()===n),l=a.validateContractTemplateVariableKey(e.key,s,e.id),u=!a.CONTRACT_TEMPLATE_VARIABLE_KEY_PATTERN.test(n)||a.CONTRACT_TEMPLATE_RESERVED_VARIABLE_KEYS.has(n);l&&(u||!o||e.key!==n)&&i.push({type:`variable`,id:e.id||`variable-${t}`,variableKey:e.key,message:`${e.label||e.key}:${l}`,code:`VARIABLE_KEY_INVALID`}),c.set(n,(c.get(n)??0)+1),r.isContractTemplateFieldType(e.type??`text`)||i.push({type:`variable`,id:e.id,variableKey:e.key,message:`${e.label||e.key} 不是正文填写变量`,code:`VARIABLE_TYPE_UNSUPPORTED`})}),c.forEach((e,t)=>{e>1&&i.push({type:`variable`,id:t,variableKey:t,message:`变量 key ${t} 重复`,code:`VARIABLE_KEY_DUPLICATED`})});let l=new Set;o.forEach((t,n)=>{if(!t||typeof t.id!=`string`||!t.id.trim()||typeof t.contentHtml!=`string`){i.push({type:`page`,id:t?.id||`page-${n}`,pageId:t?.id,message:`第 ${n+1} 页结构无效,已跳过渲染`,code:`PAGE_INVALID`});return}t.pageSize!==void 0&&!e.hasPositivePageSize(t.pageSize)&&i.push({type:`page`,id:`${t.id}-page-size`,pageId:t.id,message:`${t.title||`第 ${n+1} 页`}:页面尺寸无效,已回退为安全尺寸`,code:`PAGE_SIZE_INVALID`}),k(t.contentHtml).forEach(e=>l.add(e)),A(t.contentHtml).forEach((e,r)=>{i.push({type:`security`,id:`${t.id}-security-${r}`,pageId:t.id,message:`${t.title||`第 ${n+1} 页`}:${e}`,code:`HTML_UNSAFE`})})}),l.forEach(e=>{c.has(e)||i.push({type:`variable`,id:e,variableKey:e,message:`正文引用的变量 ${e} 缺少配置`,code:`VARIABLE_CONFIG_MISSING`})});let u=n.collectPageDecorationVariableKeys(t.pageDecorations);return c.forEach((e,t)=>{!l.has(t)&&!u.has(t)&&i.push({type:`variable`,id:t,variableKey:t,message:`变量 ${t} 缺少正文节点`,code:`VARIABLE_NODE_MISSING`})}),i.push(...n.validatePageDecorations(t.pageDecorations,s)),i}function g(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:y(e.contentHtml,s,r,i),...t.pageDecorations?{pageDecorations:n.normalizePageDecorations(t.pageDecorations)}:{},decorationVariables:o,decorationValues:r}]})}function _(t,r,i={}){return g(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 v(e){return e==null||e===``||Array.isArray(e)&&e.length===0}function y(t,n,r,i){if(!t)return t;let a=O(t);if(e.canUseDomHtml()){let e=new DOMParser().parseFromString(a,`text/html`);return e.querySelectorAll(`[data-template-variable]`).forEach(e=>{b(e,n,r,i)}),e.body.innerHTML}return e.replaceTemplateVariableSpans(a,(t,a)=>{let o=e.getHtmlAttribute(a,`data-key`);return o?x(n.get(o),o,r[o],i):t})}function b(e,t,n,r){let i=e.dataset.key||``,a=t.get(i);if(!i||!a)return;let o=new DOMParser().parseFromString(x(a,i,n[i],r),`text/html`).body.firstElementChild;o&&e.replaceWith(o)}function x(e,t,n,r){return r.mode===`display`?S(e,t,n,r):C(e,t,n,r)}function S(n,r,i,a){let s=n?.type??`text`,c=i??w(n),l=s===`image`&&!v(c)&&!o.isSafeContractImageUrl(String(c))?``:c,u=E(l),d=t.resolveTemplateVariablePresentation({type:s,width:n?.width,height:n?.height,placeholder:n?.placeholder??``,defaultValue:u,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}),f=d.displayText||n?.placeholder||n?.label||r,p=[`class="${e.escapeHtmlAttribute([`gd-contract-template-renderer__control`,`gd-contract-template-renderer__preview-control`,...d.classes,a.activeKey===r?`is-active`:``,v(l)?`is-empty`:``].filter(Boolean).join(` `))}"`,`style="${e.escapeHtmlAttribute(d.styleText)}"`,`data-contract-render-wrapper="true"`,`data-contract-render-preview="true"`,`data-key="${e.escapeHtmlAttribute(r)}"`,`data-variable-type="${e.escapeHtmlAttribute(s)}"`,`aria-label="${e.escapeHtmlAttribute(n?.label||r)}"`,a.disabled?``:`role="button"`,a.disabled?``:`tabindex="0"`].filter(Boolean).join(` `);return s===`checkbox`?`<span ${p}><span class="gd-contract-template-renderer__checkbox-mark" aria-hidden="true">${D(l)?`✓`:``}</span>${e.escapeHtmlText(f)}</span>`:s===`image`&&!v(l)?`<span ${p}></span>`:`<span ${p}>${e.escapeHtmlText(f)}</span>`}function C(n,r,a,o){let s=n?.type??`text`,c=!!o.readonly,l=T(a??w(n)),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(` `));return s===`checkbox`?`<label class="${m}" ${p} data-contract-render-wrapper="true" data-key="${e.escapeHtmlAttribute(r)}"><input type="checkbox" ${f} ${D(l)?`checked`:``}>${e.escapeHtmlText(n?.checkedText||n?.label||r)}</label>`:c?`<span class="${m}" ${p} data-contract-render-wrapper="true" data-key="${e.escapeHtmlAttribute(r)}">${e.escapeHtmlText(u.displayText||l)}</span>`:s===`number`?`<input class="${m}" ${p} type="number" ${f} value="${e.escapeHtmlAttribute(l)}" placeholder="${e.escapeHtmlAttribute(n?.placeholder||``)}">`:s===`date`?`<input class="${m}" ${p} type="date" ${f} value="${e.escapeHtmlAttribute(l)}" placeholder="${e.escapeHtmlAttribute(n?.placeholder||``)}">`:s===`select`||s===`radio`||s.endsWith(`-selector`)||s===`custom`?`<span class="${m}" ${p} data-contract-render-wrapper="true" data-key="${e.escapeHtmlAttribute(r)}">${e.escapeHtmlText(i.formatContractTemplateRenderValue(a))}</span>`:n?.multiline?`<textarea class="${m}" ${p} ${f} placeholder="${e.escapeHtmlAttribute(n.placeholder||``)}">${e.escapeHtmlText(l)}</textarea>`:`<input class="${m}" ${p} type="text" ${f} value="${e.escapeHtmlAttribute(l)}" placeholder="${e.escapeHtmlAttribute(n?.placeholder||``)}">`}function w(e){if(!e)return``;if(e.type===`checkbox`)return D(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`||e.type?.endsWith(`-selector`)))return e.defaultValue??``}function T(e){return typeof e==`boolean`?e?`true`:``:e==null?``:i.formatContractTemplateRenderValue(e)}function E(e){return typeof e==`boolean`?e?`true`:`false`:e==null?``:i.formatContractTemplateRenderValue(e)}function D(e){return e===!0||e===`true`||e===`1`||e===`yes`||e===`是`||e===`已选`}function O(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)&&j(t.value)||n===`style`&&N(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 j(a)?``:n?` ${t}=${n}${a}${n}`:` ${t}=${a}`}).replace(/\s+style\s*=\s*(["'])(.*?)\1/gi,(e,t,n)=>N(n)?``:` style=${t}${n}${t}`)}function k(t){return e.collectFromHtmlTags(t,u,t=>e.getHtmlAttribute(t,`data-key`))}function A(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(`正文包含已移除的事件或嵌入属性`),(M(e)||/style\s*=\s*["'][^"']*(?:expression\s*\(|url\s*\(\s*["']?\s*(?:javascript|vbscript|data:text\/html))/i.test(e))&&t.push(`正文包含已移除的危险 URL 或样式`),t}function j(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:`
3
+ `,tab:` `})[t.toLowerCase()]??``).trim().replace(/[\u0000-\u0020\u007F]+/g,``);return/^(?:javascript|vbscript|data:text\/html)/i.test(t)}function M(e){let t=/\s+(?:action|formaction|href|src|xlink:href)\s*=\s*(?:(["'])(.*?)\1|([^\s>]+))/gi,n=t.exec(e);for(;n;){if(j(n[2]??n[3]??``))return!0;n=t.exec(e)}return!1}function N(e){return/expression\s*\(|url\s*\(\s*["']?\s*(?:javascript|vbscript|data:text\/html)/i.test(e)}function P(e){let t=/^(\d{4})-(\d{2})-(\d{2})$/.exec(String(e));if(!t)return!1;let n=new Date(`${t[1]}-${t[2]}-${t[3]}T00:00:00Z`);return!Number.isNaN(n.getTime())&&n.getUTCFullYear()===Number(t[1])&&n.getUTCMonth()+1===Number(t[2])&&n.getUTCDate()===Number(t[3])}exports.buildInitialRenderValues=d,exports.buildTemplateRenderHtml=_,exports.buildTemplateRenderPages=g,exports.buildTemplateVariableData=s,exports.isEmptyRenderValue=v,exports.normalizeRenderValues=f,exports.resolveTemplateRenderSubmitErrors=m,exports.sanitizeContractRendererHtml=O,exports.validateTemplateRenderStructure=h,exports.validateTemplateRenderValues=p;
@@ -1 +1 @@
1
- require(`../../../../_virtual/_rolldown/runtime.cjs`);const e=require(`../types.cjs`);let t=require(`@ant-design/icons-vue`);var n={text:t.FontSizeOutlined,date:t.CalendarOutlined,number:t.NumberOutlined,image:t.PictureOutlined,checkbox:t.CheckSquareOutlined},r={seal:t.SafetyCertificateOutlined,signature:t.EditOutlined,date:t.CalendarOutlined};function i(t){return n[e.isContractTemplateFieldType(t)?t:`text`]}function a(e){return r[e]}exports.resolveFieldTypeIcon=i,exports.resolveSigningPlacementTypeIcon=a;
1
+ require(`../../../../_virtual/_rolldown/runtime.cjs`);const e=require(`../types.cjs`);let t=require(`@ant-design/icons-vue`);var n={text:t.FontSizeOutlined,date:t.CalendarOutlined,number:t.NumberOutlined,image:t.PictureOutlined,checkbox:t.CheckSquareOutlined,select:t.DownOutlined,radio:t.ProfileOutlined,"user-selector":t.UserOutlined,"dept-selector":t.ApartmentOutlined,"role-selector":t.TeamOutlined,"org-selector":t.ApartmentOutlined,custom:t.CodeOutlined},r={seal:t.SafetyCertificateOutlined,signature:t.EditOutlined,date:t.CalendarOutlined};function i(t){return n[e.isContractTemplateFieldType(t)?t:`text`]}function a(e){return r[e]}exports.resolveFieldTypeIcon=i,exports.resolveSigningPlacementTypeIcon=a;