@guodun/antdv 1.4.2 → 1.4.4
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.
- package/dist/es/components/contract-signing-location/src/ContractSigningLocationCanvas.vue.mjs +304 -293
- package/dist/es/components/contract-signing-location/src/ContractSigningTemplatePage.vue.mjs +66 -13
- package/dist/es/components/contract-signing-location/src/constants.mjs +27 -17
- package/dist/es/components/contract-signing-location/src/coordinates.mjs +23 -23
- package/dist/es/components/contract-signing-location/src/location-rules.mjs +20 -10
- package/dist/es/components/contract-signing-location/src/page-layout.mjs +12 -9
- package/dist/es/components/contract-signing-location/src/template-source.mjs +52 -34
- package/dist/es/components/contract-signing-location/style/index.css +1 -1
- package/dist/es/components/index.mjs +1 -1
- package/dist/es/components/pro-contract-template-designer/index.mjs +1 -1
- package/dist/es/components/pro-contract-template-designer/src/ContractTemplateDesignerWorkspaceHeader.vue.mjs +186 -148
- package/dist/es/components/pro-contract-template-designer/src/ContractTemplatePreviewPage.vue.mjs +4 -4
- package/dist/es/components/pro-contract-template-designer/src/ContractTemplateTextBubbleMenu.mjs +5 -0
- package/dist/es/components/pro-contract-template-designer/src/ContractTemplateTextBubbleMenu.vue.mjs +179 -0
- package/dist/es/components/pro-contract-template-designer/src/DesignerPage.vue.mjs +149 -126
- package/dist/es/components/pro-contract-template-designer/src/ProContractTemplateDesigner.vue.mjs +1229 -1059
- package/dist/es/components/pro-contract-template-designer/src/composables/use-template-designer.mjs +34 -34
- package/dist/es/components/pro-contract-template-designer/src/utils/page-decorations.mjs +17 -17
- package/dist/es/components/pro-contract-template-designer/src/utils/signing-placement.mjs +14 -14
- package/dist/es/components/pro-contract-template-designer/src/utils/template-renderer.mjs +89 -89
- package/dist/es/components/pro-contract-template-designer/style/index.css +1 -1
- package/dist/es/index.mjs +25 -25
- package/dist/lib/components/contract-signing-location/src/ContractSigningLocationCanvas.vue.cjs +1 -1
- package/dist/lib/components/contract-signing-location/src/ContractSigningTemplatePage.vue.cjs +1 -1
- package/dist/lib/components/contract-signing-location/src/constants.cjs +1 -1
- package/dist/lib/components/contract-signing-location/src/coordinates.cjs +1 -1
- package/dist/lib/components/contract-signing-location/src/location-rules.cjs +1 -1
- package/dist/lib/components/contract-signing-location/src/page-layout.cjs +1 -1
- package/dist/lib/components/contract-signing-location/src/template-source.cjs +1 -1
- package/dist/lib/components/contract-signing-location/style/index.css +1 -1
- package/dist/lib/components/index.cjs +1 -1
- package/dist/lib/components/pro-contract-template-designer/index.cjs +1 -1
- package/dist/lib/components/pro-contract-template-designer/src/ContractTemplateDesignerWorkspaceHeader.vue.cjs +1 -1
- package/dist/lib/components/pro-contract-template-designer/src/ContractTemplatePreviewPage.vue.cjs +1 -1
- package/dist/lib/components/pro-contract-template-designer/src/ContractTemplateTextBubbleMenu.cjs +1 -0
- package/dist/lib/components/pro-contract-template-designer/src/ContractTemplateTextBubbleMenu.vue.cjs +1 -0
- package/dist/lib/components/pro-contract-template-designer/src/DesignerPage.vue.cjs +2 -2
- package/dist/lib/components/pro-contract-template-designer/src/ProContractTemplateDesigner.vue.cjs +1 -1
- package/dist/lib/components/pro-contract-template-designer/src/composables/use-template-designer.cjs +3 -3
- package/dist/lib/components/pro-contract-template-designer/src/utils/page-decorations.cjs +1 -1
- package/dist/lib/components/pro-contract-template-designer/src/utils/signing-placement.cjs +1 -1
- package/dist/lib/components/pro-contract-template-designer/src/utils/template-renderer.cjs +2 -2
- package/dist/lib/components/pro-contract-template-designer/style/index.css +1 -1
- package/dist/lib/index.cjs +1 -1
- package/dist/theme/contract-signing-location.css +1 -1
- package/dist/theme/icon.css +1 -1
- package/dist/theme/index.css +1 -1
- package/dist/types/components/contract-signing-location/src/ContractSigningTemplatePage.vue.d.ts +3 -1
- package/dist/types/components/contract-signing-location/src/constants.d.ts +18 -0
- package/dist/types/components/contract-signing-location/src/coordinates.d.ts +8 -2
- package/dist/types/components/contract-signing-location/src/page-layout.d.ts +2 -2
- package/dist/types/components/contract-signing-location/src/template-source.d.ts +19 -0
- package/dist/types/components/contract-signing-location/src/types.d.ts +3 -0
- package/dist/types/components/pro-contract-template-designer/src/ContractTemplateDesignerWorkspaceHeader.vue.d.ts +10 -0
- package/dist/types/components/pro-contract-template-designer/src/ContractTemplateTextBubbleMenu.vue.d.ts +43 -0
- package/dist/types/components/pro-contract-template-designer/src/DesignerPage.vue.d.ts +22 -0
- package/dist/types/components/pro-contract-template-designer/src/ProContractTemplateDesigner.vue.d.ts +90 -0
- package/dist/types/components/pro-contract-template-designer/src/utils/context-menu-viewport.d.ts +3 -0
- package/package.json +5 -3
package/dist/lib/components/pro-contract-template-designer/src/composables/use-template-designer.cjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
const e=require(`../
|
|
1
|
+
const e=require(`../constants.cjs`),t=require(`../utils/html.cjs`),n=require(`../utils/template-variable-render.cjs`),r=require(`../utils/page-decorations.cjs`),i=require(`../types.cjs`),a=require(`../utils/signing-placement.cjs`);var o=[{format:`A0`,width:3178,height:4493,label:`A0`},{format:`A1`,width:2245,height:3178,label:`A1`},{format:`A2`,width:1587,height:2245,label:`A2`},{format:`A3`,width:1123,height:1587,label:`A3`},{format:`A4`,width:794,height:1123,label:`A4`},{format:`A5`,width:559,height:794,label:`A5`},{format:`Letter`,width:816,height:1056,label:`Letter`},{format:`Legal`,width:816,height:1344,label:`Legal`}],s={...o[4]},c={color:`#1f2937`,background:`transparent`,fontSize:14,fontFamily:e.DEFAULT_CONTRACT_FONT_FAMILY,placeholderColor:`#7a818b`,lineColor:`#565b66`,textAlign:`left`,borderStyle:`solid`,objectFit:`contain`},l=3,u=28,d=`contract-template-renderer-1.0.0`,f=`contract-render-css-1.0.0`,p=/^[A-Za-z][A-Za-z0-9_]{1,63}$/,m=new Set([`pageNumber`,`totalPages`,`rendererVersion`]);function h(e,t,n){let r=typeof e==`string`?e.trim():``;return r?p.test(r)?m.has(r)?`${r} 是系统保留标识`:t.some(e=>e.id!==n&&e.key.trim()===r)?`变量标识 ${r} 已存在`:``:`变量标识需以字母开头,仅包含字母、数字和下划线,长度为 2~64 位`:`请输入变量标识`}function g(e){let t=Number(e);return Number.isFinite(t)&&t>=1?Math.max(1,Math.floor(t)):20}var _=[{type:`text`,label:`输入框`,defaultWidth:160,defaultHeight:32},{type:`date`,label:`日期`,defaultWidth:140,defaultHeight:32},{type:`number`,label:`数字`,defaultWidth:120,defaultHeight:32},{type:`image`,label:`图片`,defaultWidth:160,defaultHeight:96},{type:`checkbox`,label:`复选框`,defaultWidth:96,defaultHeight:28}],v=0;function y(e){return v+=1,`${e}-${Date.now().toString(36)}-${v.toString(36)}`}function b(e){let t=JSON.parse(JSON.stringify(e));return Array.isArray(t.signingPlacements)&&(t.signingPlacements=t.signingPlacements.map(e=>({id:e.id,pageId:e.pageId,type:e.type,x:e.x,y:e.y,width:e.width,height:e.height,mustSign:e.mustSign,...e.sealTypes?.length?{sealTypes:[...e.sealTypes]}:{}}))),t}function x(e){return o.find(t=>t.format===e)}function S(e){if(e)return e.format&&e.format!==`Custom`?e.format:o.find(t=>t.width===e.width&&t.height===e.height)?.format}function C(e,t=s){let n=S(t)??t.format,r=e?.format??S(e)??n??`Custom`,i=r===`Custom`?void 0:x(r),a=D(i?.width??e?.width,t.width),o=D(i?.height??e?.height,t.height);return{format:i?.format??r,width:a,height:o,label:e?.label??i?.label??t.label??r}}function w(e){return`${e.format??`Custom`}:${e.width}:${e.height}`}function T(e){let t=(Array.isArray(e)?e:o).map(e=>{let t=Number(e?.width),n=Number(e?.height);if(!Number.isFinite(t)||t<=0||!Number.isFinite(n)||n<=0)return;let r=e?.format;if(r&&r!==`Custom`){let t=x(r);return t?{...t,label:e.label??t.label}:void 0}let i=r?void 0:S(e),a=i?x(i):void 0;if(a)return{...a,label:e.label??a.label};if(r!==`Custom`)return;let o=Math.round(t),s=Math.round(n);if(!(o<=0||s<=0))return{format:`Custom`,width:o,height:s,label:e.label??`Custom`}}).filter(Boolean),n=new Set,r=t.filter(e=>{let t=w(e);return n.has(t)?!1:(n.add(t),!0)});return(r.length?r:o).map(e=>({...e}))}function E(e,t){let n=w(e);return t.find(e=>w(e)===n)}function ee(e,t){let n=T(t),r=n[0],i=C(e.pageSize,r),o=E(i,n)??r,s=new Map,c=e.pages.map(e=>{let t=C(e.pageSize,i),a=E(t,n)??r;return w(t)!==w(a)&&s.set(e.id,{source:t,target:a}),{...e,pageSize:{...a}}}),l=[],u=(e.signingPlacements??[]).map(e=>{let t=s.get(e.pageId);return t?(l.push(e.id),a.scaleSigningPlacementToPage(e,t.source,t.target)):e});return{value:{...e,pageSize:{...o},pages:c,signingPlacements:u},resizedSigningPlacementIds:l}}function D(e,t){let n=Number(e);return!Number.isFinite(n)||n<=0?t:Math.round(n)}function O(e=1,t){return{id:y(`page`),title:`第 ${e} 页`,pageSize:t?C(t):void 0,contentHtml:`<p>请输入合同正文。</p>`}}function k(e=1,t,n=`<p></p>`,r){return{id:y(`page`),title:`第 ${e} 页`,pageSize:t?C(t):void 0,contentHtml:n,contentJson:r}}function A(e=s){let t=C(e);return{pages:[O(1,t)],variables:[],pageSize:t,signingPlacements:[]}}function te(e=s){let t=C(e);return{pages:[k(1,t,`<p></p>`)],variables:[],pageSize:t,signingPlacements:[]}}function j(e,t=_){return t.find(t=>t.type===e)??_[0]}function M(e,t=_,n={}){let r=e.type===void 0?`text`:e.type,i=j(r,t),a=ne(r);return{id:e.id??y(`variable`),key:e.key,label:e.label??i.label??e.key,type:r,placeholder:e.placeholder??a.placeholder??``,width:Math.max(24,Math.round(e.width??i.defaultWidth??140)),height:Math.max(24,Math.round(e.height??a.height??i.defaultHeight??32)),required:e.required??!1,defaultValue:e.defaultValue??``,format:e.format??a.format??``,precision:e.precision??a.precision,useGrouping:e.useGrouping??a.useGrouping,checkedText:e.checkedText??a.checkedText??``,uncheckedText:e.uncheckedText??a.uncheckedText??``,multiline:e.multiline??!1,rows:Math.max(1,Math.round(e.rows??3)),lineHeight:Math.max(18,Math.round(e.lineHeight??28)),style:{...c,...a.style,...n,...e.style}}}function ne(e){return e===`date`?{placeholder:`年 月 日`,format:`YYYY年MM月DD日`,style:{border:!1,underline:!0}}:e===`number`?{placeholder:`0`,format:`decimal`,useGrouping:!0,style:{border:!1,underline:!0,textAlign:`right`}}:e===`image`?{placeholder:`图片`,height:96,style:{border:!0,underline:!1,borderStyle:`dashed`,background:`transparent`,lineColor:`#d9dce0`,textAlign:`center`,objectFit:`contain`}}:e===`checkbox`?{height:28,checkedText:`已选`,uncheckedText:``,style:{border:!1,underline:!1}}:{style:{border:!1,underline:!0}}}function N(e){return e!==void 0&&!i.isContractTemplateFieldType(e)}function re(e,t=s){if(!e)return A(t);let n=C(e.pageSize,t),i=(e.pages?.length?e.pages:[O(1,n)]).map((e,t)=>({id:e.id||y(`page`),title:e.title||`第 ${t+1} 页`,pageSize:C(e.pageSize,n),contentHtml:e.contentHtml||`<p></p>`,contentJson:e.contentJson})),o=[],c=new Map,l=Object.fromEntries(i.map(e=>[e.id,C(e.pageSize,n)]));return(e.variables??[]).forEach(e=>{let t=M({...e,id:e.id||y(`variable`)});o.push(t),t.key&&c.set(t.key,t)}),i.forEach(e=>{G(e).forEach(e=>{if(!e.key)return;let t=c.get(e.key);if(!t){let t=M(e);o.push(t),c.set(e.key,t);return}if(N(e.type)){let n=M({...t,type:e.type});c.set(e.key,n);let r=o.findIndex(e=>e.id===t.id);r>=0&&(o[r]=n)}})}),{pages:i,variables:o,pageSize:n,signingPlacements:a.normalizeSigningPlacements(e.signingPlacements,l,n),...e.pageDecorations?{pageDecorations:r.normalizePageDecorations(e.pageDecorations)}:{}}}function ie(e){return e.pages.map((t,n)=>H(e,t,n,t.contentHtml,{})).join(`
|
|
2
2
|
`)}function P(e){return e.pages.map((t,n)=>H(e,t,n,ge(t.contentHtml))).join(`
|
|
3
|
-
`)}function F(e){return I(e).map(({page:t,contentHtml:n},
|
|
4
|
-
`)}function I(e){let t=new Map(e.variables.map(e=>[e.key,e])),n=Array.isArray(e.signingPlacements)?e.signingPlacements:[];return e.pages.map(e=>({page:{...e,...e.pageSize?{pageSize:{...e.pageSize}}:{}},contentHtml:le(e.contentHtml,t),signingPlacements:n.filter(t=>t.pageId===e.id).map(e=>({id:e.id,pageId:e.pageId,type:e.type,x:e.x,y:e.y,width:e.width,height:e.height,mustSign:e.mustSign,...e.sealTypes?.length?{sealTypes:[...e.sealTypes]}:{}}))}))}var L=class extends Error{constructor(e){super(e[0]?.message||`页面装饰配置无效`),this.errors=e,this.name=`ContractTemplatePageDecorationValidationError`}};function ae(e){let t=a.validatePageDecorations(e.pageDecorations,e.variables);if(t.length)throw new L(t);let n=b(e);return n.pageDecorations&&=a.normalizePageDecorations(n.pageDecorations),{...n,rendererVersion:d,styleVersion:f,html:P(n)}}function R(e,t={}){let r=[],i=new Set;typeof t.maxPages==`number`&&e.pages.length>t.maxPages&&r.push({type:`page`,id:e.pages[t.maxPages]?.id??e.pages.at(-1)?.id??``,pageId:e.pages[t.maxPages]?.id,code:`PAGE_LIMIT_EXCEEDED`,message:`合同共 ${e.pages.length} 页,超过最多 ${t.maxPages} 页限制`}),e.variables.forEach(t=>{let n=h(t.key,e.variables,t.id),a=!!t.key?.trim()&&e.variables.some(e=>e.id!==t.id&&e.key.trim()===t.key.trim());n&&(!a||t.key!==t.key.trim())&&r.push({type:`variable`,id:t.id,variableKey:t.key,message:t.key?.trim()?n:`${t.label||`变量`} 缺少变量标识`,code:t.key?.trim()?`VARIABLE_KEY_INVALID`:`VARIABLE_KEY_MISSING`}),t.key&&(i.has(t.key)&&r.push({type:`variable`,id:t.id,variableKey:t.key,message:`变量标识 ${t.key} 重复`,code:`VARIABLE_KEY_DUPLICATED`}),i.add(t.key)),N(t.type)&&r.push({type:`variable`,id:t.id,variableKey:t.key,message:`${t.label||t.key||`变量`} 不是正文填写变量`,code:`VARIABLE_TYPE_UNSUPPORTED`})});let o=new Set(e.variables.map(e=>e.key).filter(Boolean)),s=new Set,c=a.collectPageDecorationVariableKeys(e.pageDecorations);return e.pages.forEach(e=>{z(e).forEach(t=>{s.add(t),o.has(t)||r.push({type:`variable`,id:e.id,message:`正文模板变量 ${t} 没有对应变量配置`})})}),e.variables.forEach(e=>{e.key&&!s.has(e.key)&&!c.has(e.key)&&r.push({type:`variable`,id:e.id,message:`${e.label||e.key} 缺少对应正文变量节点`})}),r.push(...a.validatePageDecorations(e.pageDecorations,e.variables)),r.push(...n.validateSigningPlacements(e)),r}function z(e){let t=new Set;function n(e){if(!e||typeof e!=`object`)return;let r=e;oe(r.type)&&r.attrs?.key&&t.add(r.attrs.key),r.content?.forEach(n)}n(e.contentJson);let r=e.contentHtml||``,i=/data-template-variable=["']true["'][^>]*data-key=["']([^"']+)["']|data-key=["']([^"']+)["'][^>]*data-template-variable=["']true["']/g,a=i.exec(r);for(;a;){let e=a[1]||a[2];e&&t.add(e),a=i.exec(r)}return t}function oe(e){return e===`templateVariable`||e===`templateField`}function B(e){let t=new Set;return e.pages.forEach(e=>{z(e).forEach(e=>t.add(e))}),t}function se(e){let t=B(e),n=a.collectPageDecorationVariableKeys(e.pageDecorations);return{...e,variables:e.variables.filter(r=>h(r.key,e.variables,r.id)?!0:t.has(r.key)||n.has(r.key))}}function V(e,t,n){let r=e??[];if(r.length<=1||n<=0)return;let i=Math.min(r.length,t.length),a=-1;for(let e=0;e<i;e+=1){let r=t[e];if(r.top+r.height>n+1){a=e;break}}if(!(a<=0))return{splitIndex:a,currentContent:r.slice(0,a),overflowContent:r.slice(a)}}function H(e,t,n,r,i){let o=a.buildPageDecorationsHtml(e.pageDecorations,n+1,e.pages.length,e.variables,i);return`<section ${U(t,e.pageSize,e.pageDecorations,n+1)}>${o}<div class="gd-contract-template-page__content">${r}</div></section>`}function U(e,n,r,i=1){let o=C(e.pageSize,n);return[`class="${a.buildPageDecorationClassNames(r,i)}"`,`data-page-id="${t.escapeHtmlAttribute(e.id)}"`,`data-page-format="${t.escapeHtmlAttribute(o.format??`Custom`)}"`,`data-page-label="${t.escapeHtmlAttribute(o.label??o.format??`自定义`)}"`,`data-page-width="${o.width}"`,`data-page-height="${o.height}"`].join(` `)}var W=/<span\b[^>]*data-template-variable=["']true["'][^>]*>/g;function G(e){let n=new Map;function r(e){if(!e.key)return;let t=n.get(e.key);(!t||N(e.type)&&!N(t.type))&&n.set(e.key,e)}function i(e){if(!e||typeof e!=`object`)return;let t=e;t.type===`templateVariable`&&typeof t.attrs?.key==`string`&&r(ce(t.attrs,t.attrs.key)),t.content?.forEach(i)}i(e.contentJson);let a=e.contentHtml||``;return t.canUseDomHtml()?new DOMParser().parseFromString(a,`text/html`).querySelectorAll(`[data-template-variable]`).forEach(e=>{r(K(t.createElementAttributeReader(e)))}):t.forEachHtmlTag(a,W,e=>{r(K(t.createTagAttributeReader(e)))}),Array.from(n.values())}function K(e){let n=e(`data-key`)??``,r=e(`data-variable-type`),i=e(`data-precision`),a=e(`data-use-grouping`);return{key:n,label:e(`data-label`)??n,type:r??`text`,placeholder:e(`data-placeholder`)??``,width:t.readNumberAttribute(e(`data-width`),160),height:t.readNumberAttribute(e(`data-height`),32),required:e(`data-required`)===`true`,defaultValue:e(`data-default-value`)??``,format:e(`data-format`)??``,precision:i?Number(i):void 0,useGrouping:a?a===`true`:void 0,checkedText:e(`data-checked-text`)??``,uncheckedText:e(`data-unchecked-text`)??``,multiline:e(`data-multiline`)===`true`,rows:t.readNumberAttribute(e(`data-rows`),3),lineHeight:t.readNumberAttribute(e(`data-line-height`),28),style:{border:t.readOptionalBoolean(e(`data-border`)),underline:t.readOptionalBoolean(e(`data-underline`)),color:e(`data-color`),background:e(`data-background`),fontSize:t.readNumberAttribute(e(`data-font-size`),14),fontFamily:e(`data-font-family`),placeholderColor:e(`data-placeholder-color`),lineColor:e(`data-line-color`),textAlign:Z(e(`data-text-align`)),borderStyle:Q(e(`data-border-style`)),objectFit:$(e(`data-object-fit`))}}}function ce(e,n){let r=t=>typeof e[t]==`string`?e[t]:void 0;return{key:n,label:r(`label`)??n,type:e.type===void 0?`text`:e.type,placeholder:r(`placeholder`)??``,width:t.readNumberAttribute(e.width,160),height:t.readNumberAttribute(e.height,32),required:e.required===!0,defaultValue:r(`defaultValue`)??``,format:r(`format`)??``,precision:typeof e.precision==`number`?e.precision:void 0,useGrouping:typeof e.useGrouping==`boolean`?e.useGrouping:void 0,checkedText:r(`checkedText`)??``,uncheckedText:r(`uncheckedText`)??``,multiline:e.multiline===!0,rows:t.readNumberAttribute(e.rows,3),lineHeight:t.readNumberAttribute(e.lineHeight,28),style:{border:typeof e.border==`boolean`?e.border:void 0,underline:typeof e.underline==`boolean`?e.underline:void 0,color:r(`color`),background:r(`background`),fontSize:t.readNumberAttribute(e.fontSize,14),fontFamily:r(`fontFamily`),placeholderColor:r(`placeholderColor`),lineColor:r(`lineColor`),textAlign:Z(e.textAlign),borderStyle:Q(e.borderStyle),objectFit:$(e.objectFit)}}}function le(e,n){if(!e)return e;if(t.canUseDomHtml()){let t=new DOMParser().parseFromString(e,`text/html`);return ue(t),t.querySelectorAll(`[data-template-variable]`).forEach(e=>{de(e,n)}),t.body.innerHTML}return t.replaceTemplateVariableSpans(pe(e),(e,r)=>{let i=t.createTagAttributeReader(r);return i(`data-key`)?fe(i,n):e})}function ue(e){e.querySelectorAll(`script,style,meta,link`).forEach(e=>e.remove()),e.querySelectorAll(`*`).forEach(e=>{Array.from(e.attributes).forEach(t=>{let n=t.name.toLowerCase(),r=t.value;if(n.startsWith(`on`)||n===`srcdoc`){e.removeAttribute(t.name);return}if((n===`href`||n===`src`)&&J(r)){e.removeAttribute(t.name);return}n===`style`&&Y(r)&&e.removeAttribute(t.name)})})}function q(e,n){let r=e(`data-key`)??``,a=n.get(r),o=a?.type??e(`data-variable-type`)??`text`,s=he(o,a?.defaultValue??e(`data-default-value`)??``),c=i.resolveTemplateVariablePresentation({type:o,width:a?.width??e(`data-width`),height:a?.height??e(`data-height`),defaultValue:s,placeholder:a?.placeholder??e(`data-placeholder`)??``,format:a?.format??e(`data-format`)??``,precision:a?.precision??t.readOptionalNumber(e(`data-precision`)),useGrouping:a?.useGrouping??t.readOptionalBoolean(e(`data-use-grouping`)),checkedText:a?.checkedText??e(`data-checked-text`)??``,uncheckedText:a?.uncheckedText??e(`data-unchecked-text`)??``,multiline:a?.multiline??t.readOptionalBoolean(e(`data-multiline`))??!1,rows:a?.rows??e(`data-rows`),lineHeight:a?.lineHeight??e(`data-line-height`),style:me(a,e)});return{key:r,label:a?.label??e(`data-label`)??r,presentation:c,text:c.type===`image`&&c.hasDefaultValue?` `:c.displayText||` `}}function de(e,n){let{key:r,label:i,presentation:a,text:o}=q(t.createElementAttributeReader(e),n);e.setAttribute(`data-template-variable`,`true`),e.setAttribute(`data-key`,r),e.setAttribute(`data-label`,i),e.setAttribute(`data-variable-type`,a.type),e.setAttribute(`data-width`,String(a.width)),e.setAttribute(`data-height`,String(a.height)),e.setAttribute(`data-border`,String(a.border)),e.setAttribute(`data-underline`,String(a.underline)),e.setAttribute(`data-color`,a.color),e.setAttribute(`data-background`,a.background),e.setAttribute(`data-font-size`,String(a.fontSize)),e.setAttribute(`data-font-family`,a.fontFamily),e.setAttribute(`data-placeholder-color`,a.placeholderColor),e.setAttribute(`data-line-color`,a.lineColor),e.setAttribute(`data-text-align`,a.textAlign),e.setAttribute(`data-border-style`,a.borderStyle),e.setAttribute(`data-object-fit`,a.objectFit),e.className=a.classes.join(` `),e.setAttribute(`style`,a.styleText),e.textContent=o}function fe(e,n){let{key:r,label:i,presentation:a,text:o}=q(e,n);return`<span data-template-variable="true" data-key="${t.escapeHtmlAttribute(r)}" data-label="${t.escapeHtmlAttribute(i)}" data-variable-type="${t.escapeHtmlAttribute(a.type)}" data-width="${a.width}" data-height="${a.height}" data-border="${a.border}" data-underline="${a.underline}" data-font-family="${t.escapeHtmlAttribute(a.fontFamily)}" class="${t.escapeHtmlAttribute(a.classes.join(` `))}" style="${t.escapeHtmlAttribute(a.styleText)}">${t.escapeHtmlText(o)}</span>`}function pe(e){return e.replace(/<\s*(script|style|meta|link)\b[\s\S]*?<\s*\/\s*\1\s*>/gi,``).replace(/<\s*(meta|link)\b[^>]*>/gi,``).replace(/\s+on[a-z]+\s*=\s*(?:"[^"]*"|'[^']*'|[^\s>]+)/gi,``).replace(/\s+srcdoc\s*=\s*(?:"[^"]*"|'[^']*'|[^\s>]+)/gi,``).replace(/\s+(href|src)\s*=\s*(["'])(.*?)\2/gi,(e,t,n,r)=>J(r)?``:` ${t}=${n}${r}${n}`).replace(/\s+style\s*=\s*(["'])(.*?)\1/gi,(e,t,n)=>Y(n)?``:` style=${t}${n}${t}`)}function me(e,n){return{border:e?.style?.border??t.readOptionalBoolean(n(`data-border`)),underline:e?.style?.underline??t.readOptionalBoolean(n(`data-underline`)),color:e?.style?.color??n(`data-color`),background:e?.style?.background??n(`data-background`),fontSize:e?.style?.fontSize??t.readOptionalNumber(n(`data-font-size`)),fontFamily:e?.style?.fontFamily??n(`data-font-family`),placeholderColor:e?.style?.placeholderColor??n(`data-placeholder-color`),lineColor:e?.style?.lineColor??n(`data-line-color`),textAlign:e?.style?.textAlign??Z(n(`data-text-align`)),borderStyle:e?.style?.borderStyle??Q(n(`data-border-style`)),objectFit:e?.style?.objectFit??$(n(`data-object-fit`))}}function he(e,t){return e===`image`&&J(t)?``:t}function J(e){let t=e.trim().replace(/[\u0000-\u001F\s]+/g,``).toLowerCase();return t.startsWith(`javascript:`)||t.startsWith(`vbscript:`)||t.startsWith(`data:`)&&!t.startsWith(`data:image/`)}function Y(e){return/expression\s*\(|javascript:|vbscript:/i.test(e)}function ge(e){if(!e)return e;if(t.canUseDomHtml()){let t=new DOMParser().parseFromString(e,`text/html`);return t.querySelectorAll(`[data-template-variable]`).forEach(e=>{let t=e.dataset.key||``;t&&(e.textContent=`\${{${t}}}`)}),t.body.innerHTML}return t.replaceTemplateVariableSpans(e,(e,n)=>{let r=t.createTagAttributeReader(n)(`data-key`);return r?`<span${n}>\${{${r}}}</span>`:e})}function X(e){return e===`left`||e===`center`||e===`right`}function _e(e){return e===`solid`||e===`dashed`}function ve(e){return e===`contain`||e===`cover`||e===`fill`}function Z(e){return X(e)?e:void 0}function Q(e){return _e(e)?e:void 0}function $(e){return ve(e)?e:void 0}function ye(e,t=[]){let n=[...t,...R(e)],r=new Set;return n.filter(e=>{let t=`${e.code??``}|${e.id}|${e.pageId??``}|${e.message}`;return r.has(t)?!1:(r.add(t),!0)})}exports.CONTRACT_TEMPLATE_RENDERER_VERSION=d,exports.CONTRACT_TEMPLATE_RESERVED_VARIABLE_KEYS=m,exports.CONTRACT_TEMPLATE_STYLE_VERSION=f,exports.CONTRACT_TEMPLATE_VARIABLE_KEY_PATTERN=p,exports.ContractTemplatePageDecorationValidationError=L,exports.DEFAULT_FIELD_STYLE=c,exports.DEFAULT_FIELD_TYPES=_,exports.DEFAULT_MULTILINE_LINE_HEIGHT=u,exports.DEFAULT_MULTILINE_ROWS=l,exports.DEFAULT_PAGE_SIZE=s,exports.PAGE_SIZE_OPTIONS=o,exports.buildTemplateExpressionHtml=P,exports.buildTemplateHtml=ie,exports.buildTemplatePreviewHtml=F,exports.buildTemplatePreviewPages=I,exports.cloneTemplateValue=b,exports.collectTemplateLocationRuleExportErrors=ye,exports.collectTemplateValueVariableKeys=B,exports.collectTemplateVariableKeys=z,exports.constrainTemplatePageSizes=ee,exports.createBlankPage=k,exports.createBlankTemplate=te,exports.createDefaultPage=O,exports.createDefaultTemplate=A,exports.createDesignerId=y,exports.createTemplateVariable=M,exports.exportTemplateValue=ae,exports.findPageSizeOption=E,exports.getFieldOption=j,exports.getPageSizeKey=w,exports.getPageSizeOption=x,exports.inferPageFormat=S,exports.normalizeContractTemplateMaxPages=g,exports.normalizePageSizeOptions=T,exports.normalizeTemplateValue=re,exports.resolvePageSize=C,exports.splitPageContentByMeasurements=V,exports.syncTemplateVariablesWithPages=se,exports.validateContractTemplateVariableKey=h,exports.validateTemplateValue=R;
|
|
3
|
+
`)}function F(e){return I(e).map(({page:t,contentHtml:n},i)=>{let a=C(t.pageSize,e.pageSize),o=r.buildPageDecorationsHtml(e.pageDecorations,i+1,e.pages.length,e.variables,{});return`<section ${U(t,e.pageSize,e.pageDecorations,i+1)} style="width:${a.width}px;min-height:${a.height}px">${o}<div class="gd-contract-template-page__content">${n}</div></section>`}).join(`
|
|
4
|
+
`)}function I(e){let t=new Map(e.variables.map(e=>[e.key,e])),n=Array.isArray(e.signingPlacements)?e.signingPlacements:[];return e.pages.map(e=>({page:{...e,...e.pageSize?{pageSize:{...e.pageSize}}:{}},contentHtml:le(e.contentHtml,t),signingPlacements:n.filter(t=>t.pageId===e.id).map(e=>({id:e.id,pageId:e.pageId,type:e.type,x:e.x,y:e.y,width:e.width,height:e.height,mustSign:e.mustSign,...e.sealTypes?.length?{sealTypes:[...e.sealTypes]}:{}}))}))}var L=class extends Error{constructor(e){super(e[0]?.message||`页面装饰配置无效`),this.errors=e,this.name=`ContractTemplatePageDecorationValidationError`}};function ae(e){let t=r.validatePageDecorations(e.pageDecorations,e.variables);if(t.length)throw new L(t);let n=b(e);return n.pageDecorations&&=r.normalizePageDecorations(n.pageDecorations),{...n,rendererVersion:d,styleVersion:f,html:P(n)}}function R(e,t={}){let n=[],i=new Set;typeof t.maxPages==`number`&&e.pages.length>t.maxPages&&n.push({type:`page`,id:e.pages[t.maxPages]?.id??e.pages.at(-1)?.id??``,pageId:e.pages[t.maxPages]?.id,code:`PAGE_LIMIT_EXCEEDED`,message:`合同共 ${e.pages.length} 页,超过最多 ${t.maxPages} 页限制`}),e.variables.forEach(t=>{let r=h(t.key,e.variables,t.id),a=!!t.key?.trim()&&e.variables.some(e=>e.id!==t.id&&e.key.trim()===t.key.trim());r&&(!a||t.key!==t.key.trim())&&n.push({type:`variable`,id:t.id,variableKey:t.key,message:t.key?.trim()?r:`${t.label||`变量`} 缺少变量标识`,code:t.key?.trim()?`VARIABLE_KEY_INVALID`:`VARIABLE_KEY_MISSING`}),t.key&&(i.has(t.key)&&n.push({type:`variable`,id:t.id,variableKey:t.key,message:`变量标识 ${t.key} 重复`,code:`VARIABLE_KEY_DUPLICATED`}),i.add(t.key)),N(t.type)&&n.push({type:`variable`,id:t.id,variableKey:t.key,message:`${t.label||t.key||`变量`} 不是正文填写变量`,code:`VARIABLE_TYPE_UNSUPPORTED`})});let o=new Set(e.variables.map(e=>e.key).filter(Boolean)),s=new Set,c=r.collectPageDecorationVariableKeys(e.pageDecorations);return e.pages.forEach(e=>{z(e).forEach(t=>{s.add(t),o.has(t)||n.push({type:`variable`,id:e.id,message:`正文模板变量 ${t} 没有对应变量配置`})})}),e.variables.forEach(e=>{e.key&&!s.has(e.key)&&!c.has(e.key)&&n.push({type:`variable`,id:e.id,message:`${e.label||e.key} 缺少对应正文变量节点`})}),n.push(...r.validatePageDecorations(e.pageDecorations,e.variables)),n.push(...a.validateSigningPlacements(e)),n}function z(e){let t=new Set;function n(e){if(!e||typeof e!=`object`)return;let r=e;oe(r.type)&&r.attrs?.key&&t.add(r.attrs.key),r.content?.forEach(n)}n(e.contentJson);let r=e.contentHtml||``,i=/data-template-variable=["']true["'][^>]*data-key=["']([^"']+)["']|data-key=["']([^"']+)["'][^>]*data-template-variable=["']true["']/g,a=i.exec(r);for(;a;){let e=a[1]||a[2];e&&t.add(e),a=i.exec(r)}return t}function oe(e){return e===`templateVariable`||e===`templateField`}function B(e){let t=new Set;return e.pages.forEach(e=>{z(e).forEach(e=>t.add(e))}),t}function se(e){let t=B(e),n=r.collectPageDecorationVariableKeys(e.pageDecorations);return{...e,variables:e.variables.filter(r=>h(r.key,e.variables,r.id)?!0:t.has(r.key)||n.has(r.key))}}function V(e,t,n){let r=e??[];if(r.length<=1||n<=0)return;let i=Math.min(r.length,t.length),a=-1;for(let e=0;e<i;e+=1){let r=t[e];if(r.top+r.height>n+1){a=e;break}}if(!(a<=0))return{splitIndex:a,currentContent:r.slice(0,a),overflowContent:r.slice(a)}}function H(e,t,n,i,a){let o=r.buildPageDecorationsHtml(e.pageDecorations,n+1,e.pages.length,e.variables,a);return`<section ${U(t,e.pageSize,e.pageDecorations,n+1)}>${o}<div class="gd-contract-template-page__content">${i}</div></section>`}function U(e,n,i,a=1){let o=C(e.pageSize,n);return[`class="${r.buildPageDecorationClassNames(i,a)}"`,`data-page-id="${t.escapeHtmlAttribute(e.id)}"`,`data-page-format="${t.escapeHtmlAttribute(o.format??`Custom`)}"`,`data-page-label="${t.escapeHtmlAttribute(o.label??o.format??`自定义`)}"`,`data-page-width="${o.width}"`,`data-page-height="${o.height}"`].join(` `)}var W=/<span\b[^>]*data-template-variable=["']true["'][^>]*>/g;function G(e){let n=new Map;function r(e){if(!e.key)return;let t=n.get(e.key);(!t||N(e.type)&&!N(t.type))&&n.set(e.key,e)}function i(e){if(!e||typeof e!=`object`)return;let t=e;t.type===`templateVariable`&&typeof t.attrs?.key==`string`&&r(ce(t.attrs,t.attrs.key)),t.content?.forEach(i)}i(e.contentJson);let a=e.contentHtml||``;return t.canUseDomHtml()?new DOMParser().parseFromString(a,`text/html`).querySelectorAll(`[data-template-variable]`).forEach(e=>{r(K(t.createElementAttributeReader(e)))}):t.forEachHtmlTag(a,W,e=>{r(K(t.createTagAttributeReader(e)))}),Array.from(n.values())}function K(e){let n=e(`data-key`)??``,r=e(`data-variable-type`),i=e(`data-precision`),a=e(`data-use-grouping`);return{key:n,label:e(`data-label`)??n,type:r??`text`,placeholder:e(`data-placeholder`)??``,width:t.readNumberAttribute(e(`data-width`),160),height:t.readNumberAttribute(e(`data-height`),32),required:e(`data-required`)===`true`,defaultValue:e(`data-default-value`)??``,format:e(`data-format`)??``,precision:i?Number(i):void 0,useGrouping:a?a===`true`:void 0,checkedText:e(`data-checked-text`)??``,uncheckedText:e(`data-unchecked-text`)??``,multiline:e(`data-multiline`)===`true`,rows:t.readNumberAttribute(e(`data-rows`),3),lineHeight:t.readNumberAttribute(e(`data-line-height`),28),style:{border:t.readOptionalBoolean(e(`data-border`)),underline:t.readOptionalBoolean(e(`data-underline`)),color:e(`data-color`),background:e(`data-background`),fontSize:t.readNumberAttribute(e(`data-font-size`),14),fontFamily:e(`data-font-family`),placeholderColor:e(`data-placeholder-color`),lineColor:e(`data-line-color`),textAlign:Z(e(`data-text-align`)),borderStyle:Q(e(`data-border-style`)),objectFit:$(e(`data-object-fit`))}}}function ce(e,n){let r=t=>typeof e[t]==`string`?e[t]:void 0;return{key:n,label:r(`label`)??n,type:e.type===void 0?`text`:e.type,placeholder:r(`placeholder`)??``,width:t.readNumberAttribute(e.width,160),height:t.readNumberAttribute(e.height,32),required:e.required===!0,defaultValue:r(`defaultValue`)??``,format:r(`format`)??``,precision:typeof e.precision==`number`?e.precision:void 0,useGrouping:typeof e.useGrouping==`boolean`?e.useGrouping:void 0,checkedText:r(`checkedText`)??``,uncheckedText:r(`uncheckedText`)??``,multiline:e.multiline===!0,rows:t.readNumberAttribute(e.rows,3),lineHeight:t.readNumberAttribute(e.lineHeight,28),style:{border:typeof e.border==`boolean`?e.border:void 0,underline:typeof e.underline==`boolean`?e.underline:void 0,color:r(`color`),background:r(`background`),fontSize:t.readNumberAttribute(e.fontSize,14),fontFamily:r(`fontFamily`),placeholderColor:r(`placeholderColor`),lineColor:r(`lineColor`),textAlign:Z(e.textAlign),borderStyle:Q(e.borderStyle),objectFit:$(e.objectFit)}}}function le(e,n){if(!e)return e;if(t.canUseDomHtml()){let t=new DOMParser().parseFromString(e,`text/html`);return ue(t),t.querySelectorAll(`[data-template-variable]`).forEach(e=>{de(e,n)}),t.body.innerHTML}return t.replaceTemplateVariableSpans(pe(e),(e,r)=>{let i=t.createTagAttributeReader(r);return i(`data-key`)?fe(i,n):e})}function ue(e){e.querySelectorAll(`script,style,meta,link`).forEach(e=>e.remove()),e.querySelectorAll(`*`).forEach(e=>{Array.from(e.attributes).forEach(t=>{let n=t.name.toLowerCase(),r=t.value;if(n.startsWith(`on`)||n===`srcdoc`){e.removeAttribute(t.name);return}if((n===`href`||n===`src`)&&J(r)){e.removeAttribute(t.name);return}n===`style`&&Y(r)&&e.removeAttribute(t.name)})})}function q(e,r){let i=e(`data-key`)??``,a=r.get(i),o=a?.type??e(`data-variable-type`)??`text`,s=he(o,a?.defaultValue??e(`data-default-value`)??``),c=n.resolveTemplateVariablePresentation({type:o,width:a?.width??e(`data-width`),height:a?.height??e(`data-height`),defaultValue:s,placeholder:a?.placeholder??e(`data-placeholder`)??``,format:a?.format??e(`data-format`)??``,precision:a?.precision??t.readOptionalNumber(e(`data-precision`)),useGrouping:a?.useGrouping??t.readOptionalBoolean(e(`data-use-grouping`)),checkedText:a?.checkedText??e(`data-checked-text`)??``,uncheckedText:a?.uncheckedText??e(`data-unchecked-text`)??``,multiline:a?.multiline??t.readOptionalBoolean(e(`data-multiline`))??!1,rows:a?.rows??e(`data-rows`),lineHeight:a?.lineHeight??e(`data-line-height`),style:me(a,e)});return{key:i,label:a?.label??e(`data-label`)??i,presentation:c,text:c.type===`image`&&c.hasDefaultValue?` `:c.displayText||` `}}function de(e,n){let{key:r,label:i,presentation:a,text:o}=q(t.createElementAttributeReader(e),n);e.setAttribute(`data-template-variable`,`true`),e.setAttribute(`data-key`,r),e.setAttribute(`data-label`,i),e.setAttribute(`data-variable-type`,a.type),e.setAttribute(`data-width`,String(a.width)),e.setAttribute(`data-height`,String(a.height)),e.setAttribute(`data-border`,String(a.border)),e.setAttribute(`data-underline`,String(a.underline)),e.setAttribute(`data-color`,a.color),e.setAttribute(`data-background`,a.background),e.setAttribute(`data-font-size`,String(a.fontSize)),e.setAttribute(`data-font-family`,a.fontFamily),e.setAttribute(`data-placeholder-color`,a.placeholderColor),e.setAttribute(`data-line-color`,a.lineColor),e.setAttribute(`data-text-align`,a.textAlign),e.setAttribute(`data-border-style`,a.borderStyle),e.setAttribute(`data-object-fit`,a.objectFit),e.className=a.classes.join(` `),e.setAttribute(`style`,a.styleText),e.textContent=o}function fe(e,n){let{key:r,label:i,presentation:a,text:o}=q(e,n);return`<span data-template-variable="true" data-key="${t.escapeHtmlAttribute(r)}" data-label="${t.escapeHtmlAttribute(i)}" data-variable-type="${t.escapeHtmlAttribute(a.type)}" data-width="${a.width}" data-height="${a.height}" data-border="${a.border}" data-underline="${a.underline}" data-font-family="${t.escapeHtmlAttribute(a.fontFamily)}" class="${t.escapeHtmlAttribute(a.classes.join(` `))}" style="${t.escapeHtmlAttribute(a.styleText)}">${t.escapeHtmlText(o)}</span>`}function pe(e){return e.replace(/<\s*(script|style|meta|link)\b[\s\S]*?<\s*\/\s*\1\s*>/gi,``).replace(/<\s*(meta|link)\b[^>]*>/gi,``).replace(/\s+on[a-z]+\s*=\s*(?:"[^"]*"|'[^']*'|[^\s>]+)/gi,``).replace(/\s+srcdoc\s*=\s*(?:"[^"]*"|'[^']*'|[^\s>]+)/gi,``).replace(/\s+(href|src)\s*=\s*(["'])(.*?)\2/gi,(e,t,n,r)=>J(r)?``:` ${t}=${n}${r}${n}`).replace(/\s+style\s*=\s*(["'])(.*?)\1/gi,(e,t,n)=>Y(n)?``:` style=${t}${n}${t}`)}function me(e,n){return{border:e?.style?.border??t.readOptionalBoolean(n(`data-border`)),underline:e?.style?.underline??t.readOptionalBoolean(n(`data-underline`)),color:e?.style?.color??n(`data-color`),background:e?.style?.background??n(`data-background`),fontSize:e?.style?.fontSize??t.readOptionalNumber(n(`data-font-size`)),fontFamily:e?.style?.fontFamily??n(`data-font-family`),placeholderColor:e?.style?.placeholderColor??n(`data-placeholder-color`),lineColor:e?.style?.lineColor??n(`data-line-color`),textAlign:e?.style?.textAlign??Z(n(`data-text-align`)),borderStyle:e?.style?.borderStyle??Q(n(`data-border-style`)),objectFit:e?.style?.objectFit??$(n(`data-object-fit`))}}function he(e,t){return e===`image`&&J(t)?``:t}function J(e){let t=e.trim().replace(/[\u0000-\u001F\s]+/g,``).toLowerCase();return t.startsWith(`javascript:`)||t.startsWith(`vbscript:`)||t.startsWith(`data:`)&&!t.startsWith(`data:image/`)}function Y(e){return/expression\s*\(|javascript:|vbscript:/i.test(e)}function ge(e){if(!e)return e;if(t.canUseDomHtml()){let t=new DOMParser().parseFromString(e,`text/html`);return t.querySelectorAll(`[data-template-variable]`).forEach(e=>{let t=e.dataset.key||``;t&&(e.textContent=`\${{${t}}}`)}),t.body.innerHTML}return t.replaceTemplateVariableSpans(e,(e,n)=>{let r=t.createTagAttributeReader(n)(`data-key`);return r?`<span${n}>\${{${r}}}</span>`:e})}function X(e){return e===`left`||e===`center`||e===`right`}function _e(e){return e===`solid`||e===`dashed`}function ve(e){return e===`contain`||e===`cover`||e===`fill`}function Z(e){return X(e)?e:void 0}function Q(e){return _e(e)?e:void 0}function $(e){return ve(e)?e:void 0}function ye(e,t=[]){let n=[...t,...R(e)],r=new Set;return n.filter(e=>{let t=`${e.code??``}|${e.id}|${e.pageId??``}|${e.message}`;return r.has(t)?!1:(r.add(t),!0)})}exports.CONTRACT_TEMPLATE_RENDERER_VERSION=d,exports.CONTRACT_TEMPLATE_RESERVED_VARIABLE_KEYS=m,exports.CONTRACT_TEMPLATE_STYLE_VERSION=f,exports.CONTRACT_TEMPLATE_VARIABLE_KEY_PATTERN=p,exports.ContractTemplatePageDecorationValidationError=L,exports.DEFAULT_FIELD_STYLE=c,exports.DEFAULT_FIELD_TYPES=_,exports.DEFAULT_MULTILINE_LINE_HEIGHT=u,exports.DEFAULT_MULTILINE_ROWS=l,exports.DEFAULT_PAGE_SIZE=s,exports.PAGE_SIZE_OPTIONS=o,exports.buildTemplateExpressionHtml=P,exports.buildTemplateHtml=ie,exports.buildTemplatePreviewHtml=F,exports.buildTemplatePreviewPages=I,exports.cloneTemplateValue=b,exports.collectTemplateLocationRuleExportErrors=ye,exports.collectTemplateValueVariableKeys=B,exports.collectTemplateVariableKeys=z,exports.constrainTemplatePageSizes=ee,exports.createBlankPage=k,exports.createBlankTemplate=te,exports.createDefaultPage=O,exports.createDefaultTemplate=A,exports.createDesignerId=y,exports.createTemplateVariable=M,exports.exportTemplateValue=ae,exports.findPageSizeOption=E,exports.getFieldOption=j,exports.getPageSizeKey=w,exports.getPageSizeOption=x,exports.inferPageFormat=S,exports.normalizeContractTemplateMaxPages=g,exports.normalizePageSizeOptions=T,exports.normalizeTemplateValue=re,exports.resolvePageSize=C,exports.splitPageContentByMeasurements=V,exports.syncTemplateVariablesWithPages=se,exports.validateContractTemplateVariableKey=h,exports.validateTemplateValue=R;
|
|
@@ -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`)
|
|
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(
|
|
2
|
-
`)}function h(e){return e==null||e===``}function g(
|
|
1
|
+
const e=require(`./html.cjs`),t=require(`./template-variable-render.cjs`),n=require(`./page-decorations.cjs`),r=require(`../types.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(t){if(!t)return[{type:`page`,id:`template`,message:`缺少可渲染的合同模板`,code:`TEMPLATE_MISSING`}];let a=[],o=Array.isArray(t.pages)?t.pages:[],s=Array.isArray(t.variables)?t.variables:[];(!Array.isArray(t.pages)||o.length===0)&&a.push({type:`page`,id:`template-pages`,message:`模板至少需要一个合法页面`,code:`TEMPLATE_PAGES_INVALID`}),Array.isArray(t.variables)||a.push({type:`variable`,id:`template-variables`,message:`模板变量列表格式无效`,code:`TEMPLATE_VARIABLES_INVALID`}),e.hasPositivePageSize(t.pageSize)||a.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()){a.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=i.validateContractTemplateVariableKey(e.key,s,e.id),u=!i.CONTRACT_TEMPLATE_VARIABLE_KEY_PATTERN.test(n)||i.CONTRACT_TEMPLATE_RESERVED_VARIABLE_KEYS.has(n);l&&(u||!o||e.key!==n)&&a.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`)||a.push({type:`variable`,id:e.id,variableKey:e.key,message:`${e.label||e.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((t,n)=>{if(!t||typeof t.id!=`string`||!t.id.trim()||typeof t.contentHtml!=`string`){a.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)&&a.push({type:`page`,id:`${t.id}-page-size`,pageId:t.id,message:`${t.title||`第 ${n+1} 页`}:页面尺寸无效,已回退为安全尺寸`,code:`PAGE_SIZE_INVALID`}),E(t.contentHtml).forEach(e=>l.add(e)),D(t.contentHtml).forEach((e,r)=>{a.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)||a.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)&&a.push({type:`variable`,id:t,variableKey:t,message:`变量 ${t} 缺少正文节点`,code:`VARIABLE_NODE_MISSING`})}),a.push(...n.validatePageDecorations(t.pageDecorations,s)),a}function p(t,r,a={}){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:i.DEFAULT_PAGE_SIZE;return t.pages.flatMap(e=>{if(!e||typeof e.id!=`string`||!e.id.trim()||typeof e.contentHtml!=`string`)return[];let l=i.resolvePageSize(e.pageSize,c);return[{id:e.id,title:e.title||`未命名页面`,format:l.format??`Custom`,width:l.width,height:l.height,contentHtml:g(e.contentHtml,s,r,a),...t.pageDecorations?{pageDecorations:n.normalizePageDecorations(t.pageDecorations)}:{},decorationVariables:o,decorationValues:r}]})}function m(t,r,i={}){return p(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 h(e){return e==null||e===``}function g(t,n,r,i){if(!t)return t;let a=T(t);if(e.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 e.replaceTemplateVariableSpans(a,(t,a)=>{let o=e.getHtmlAttribute(a,`data-key`);return o?v(n.get(o),o,r[o],i):t})}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(n,r,i,o){let s=n?.type??`text`,c=i??x(n),l=s===`image`&&!h(c)&&!a.isSafeContractImageUrl(String(c))?``:c,u=C(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,o.activeKey===r?`is-active`:``,h(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)}"`,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>${e.escapeHtmlText(f)}</span>`:s===`image`&&!h(l)?`<span ${p}></span>`:`<span ${p}>${e.escapeHtmlText(f)}</span>`}function b(n,r,i,a){let o=n?.type??`text`,s=!!a.readonly,c=S(i??x(n)),l=t.resolveTemplateVariablePresentation({type:o,width:n?.width,height:n?.height,placeholder:n?.placeholder??``,defaultValue:s?c:``,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}),u=a.disabled||s,d=[`data-contract-render-control="true"`,`data-key="${e.escapeHtmlAttribute(r)}"`,`data-variable-type="${e.escapeHtmlAttribute(o)}"`,`aria-label="${e.escapeHtmlAttribute(n?.label||r)}"`,u?`disabled`:``,s?`readonly`:``].filter(Boolean).join(` `),f=`style="${e.escapeHtmlAttribute(l.styleText)}"`,p=e.escapeHtmlAttribute([`gd-contract-template-renderer__control`,...l.classes].join(` `));return o===`checkbox`?`<label class="${p}" ${f} data-contract-render-wrapper="true" data-key="${e.escapeHtmlAttribute(r)}"><input type="checkbox" ${d} ${w(c)?`checked`:``}>${e.escapeHtmlText(n?.checkedText||n?.label||r)}</label>`:s?`<span class="${p}" ${f} data-contract-render-wrapper="true" data-key="${e.escapeHtmlAttribute(r)}">${e.escapeHtmlText(l.displayText||c)}</span>`:o===`number`?`<input class="${p}" ${f} type="number" ${d} value="${e.escapeHtmlAttribute(c)}" placeholder="${e.escapeHtmlAttribute(n?.placeholder||``)}">`:o===`date`?`<input class="${p}" ${f} type="date" ${d} value="${e.escapeHtmlAttribute(c)}" placeholder="${e.escapeHtmlAttribute(n?.placeholder||``)}">`:n?.multiline?`<textarea class="${p}" ${f} ${d} placeholder="${e.escapeHtmlAttribute(n.placeholder||``)}">${e.escapeHtmlText(c)}</textarea>`:`<input class="${p}" ${f} type="text" ${d} value="${e.escapeHtmlAttribute(c)}" placeholder="${e.escapeHtmlAttribute(n?.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(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`||o.has(n)&&O(t.value)||n===`style`&&A(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 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(t){return e.collectFromHtmlTags(t,s,t=>e.getHtmlAttribute(t,`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
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;
|