diff --git a/html2pdf4doc/html2pdf4doc_js/html2pdf4doc.min.js b/html2pdf4doc/html2pdf4doc_js/html2pdf4doc.min.js index ad1392b..7f7df3c 100644 --- a/html2pdf4doc/html2pdf4doc_js/html2pdf4doc.min.js +++ b/html2pdf4doc/html2pdf4doc_js/html2pdf4doc.min.js @@ -1,5 +1,5 @@ /*! Version: 0.3.0 */ -var HTML2PDF4DOC;(()=>{"use strict";var e={d:(t,i)=>{for(var o in i)e.o(i,o)&&!e.o(t,o)&&Object.defineProperty(t,o,{enumerable:!0,get:i[o]})},o:(e,t)=>Object.prototype.hasOwnProperty.call(e,t),r:e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})}},t={};e.r(t),e.d(t,{init:()=>Bn});var i={};e.r(i),e.d(i,{log:()=>H,logGroup:()=>F,logGroupEnd:()=>A,strictAssert:()=>I});var o={};e.r(o),e.d(o,{isAfterContentFlowStart:()=>ie,isComplexTextBlock:()=>ne,isContentFlowEnd:()=>oe,isContentFlowStart:()=>te,isFlexRow:()=>pe,isForcedPageBreak:()=>se,isGrid:()=>ce,isGridAutoFlowRow:()=>ue,isIMG:()=>q,isInline:()=>ae,isInlineBlock:()=>le,isLiNode:()=>X,isNeutral:()=>Q,isNotBreakable:()=>_e,isOBJECT:()=>Y,isPRE:()=>ge,isSTYLE:()=>U,isSVG:()=>K,isSelectorMatching:()=>j,isSignificantTextNode:()=>V,isSliced:()=>fe,isSlough:()=>me,isSyntheticTextWrapper:()=>re,isTableLikeNode:()=>he,isTableNode:()=>de,isWrappedTextGroup:()=>ee,isWrappedTextLine:()=>J,isWrappedTextNode:()=>Z});var n={};e.r(n),e.d(n,{explainHeuristicSelectorMismatch:()=>Ee,filterHeuristicSelectorMatches:()=>Te,hasNoSignificantSiblingNodes:()=>Me,hasSignificantLeadingText:()=>ye,hasSignificantTrailingText:()=>Pe,isHeuristicSelector:()=>Se,resolveConfigSelectorConstraints:()=>we,validateHeuristicSelectorMatch:()=>Ce});var r={};e.r(r),e.d(r,{insertStyle:()=>Oe});var s={};e.r(s),e.d(s,{isFirstChildOfFirstChild:()=>De,isLastChildOfLastChild:()=>ke,isVerticalDrop:()=>Re,resolveFlowBoxElement:()=>xe,setInitStyle:()=>Ne});var a={};e.r(a),e.d(a,{getBottom:()=>Ge,getBottomWithMargin:()=>We,getContentHeightByProbe:()=>Ze,getEmptyNodeHeightByProbe:()=>Ue,getHeightWithMargin:()=>ze,getLineHeight:()=>qe,getMaxWidth:()=>Ve,getNormalizedBottomWithMargin:()=>Ie,getNormalizedTop:()=>He,getPageStartTopInfo:()=>Ae,getTableEmptyRowHeight:()=>Ye,getTableEntries:()=>Qe,getTableRowHeight:()=>Ke,getTableRowShellHeightByTD:()=>Xe,getTop:()=>Le,getTopForPageStartCandidate:()=>Fe,getTopWithMargin:()=>je,resolveRowBoundsGeneric:()=>Je});var l={};e.r(l),e.d(l,{create:()=>et,createComplexTextBlock:()=>lt,createForcedPageBreak:()=>dt,createNeutral:()=>tt,createNeutralBlock:()=>it,createPrintPageBreak:()=>at,createSignpost:()=>gt,createSliceWrapper:()=>pt,createTable:()=>ut,createTestNodeFrom:()=>ct,createTextGroup:()=>rt,createTextLine:()=>nt,createTextNodeWrapper:()=>ot,createWithFlagNoBreak:()=>st,createWord:()=>ht});var c={};e.r(c),e.d(c,{prepareSplittedNode:()=>bt,splitByWordsGreedyWithSpacesFilter:()=>mt,splitTextByLinesGreedy:()=>_t,splitTextByWordsGreedy:()=>ft});var h={};e.r(h),e.d(h,{MarkersState:()=>$t,isNoBreak:()=>Ft,isNoHanging:()=>At,isPageStart:()=>Bt,isSlice:()=>Ht,markBottomCut:()=>Rt,markCleanBottomCut:()=>Dt,markCleanTopCut:()=>vt,markNoBreak:()=>Mt,markNoHanging:()=>yt,markPageEnd:()=>Tt,markPageNumber:()=>Ot,markPageStart:()=>Ct,markProcessed:()=>St,markSlice:()=>Pt,markSliceCuts:()=>Nt,markSliceCutsInRows:()=>xt,markTopCut:()=>kt,unmarkPageStart:()=>Et});var d={};e.r(d),e.d(d,{_getMarkAttributeConfig:()=>oi,_isStyleMark:()=>ni,_registerMark:()=>ei,_unregisterMark:()=>ti,clearMark:()=>Vt,getMark:()=>zt,getRegisteredPageDividers:()=>Xt,getRegisteredPageEnds:()=>ii,getRegisteredPageNumberForElement:()=>Jt,getRegisteredPageNumbers:()=>Zt,hasMark:()=>jt,registerPageDivider:()=>Yt,setMark:()=>Wt});var g={};e.r(g),e.d(g,{wrapNodeChildrenWithNeutralBlock:()=>ri});var u={};e.r(u),e.d(u,{copyNodeWidth:()=>hi,estimateInlineImgGapBelow:()=>ui,fitElementWithinBoundaries:()=>ai,fitElementWithinHeight:()=>li,lockNodesWidths:()=>gi,lockTableWidths:()=>di,scaleCellsToHeight:()=>ci});var p={};e.r(p),e.d(p,{findAllForcedPageBreakInside:()=>Mi,findBetterForcedPageStarter:()=>_i,findBetterPageStart:()=>fi,findFirstChildParent:()=>wi,findFirstChildParentFromPage:()=>mi,findLastChildParent:()=>Si,findPreviousNonHangingsFromPage:()=>bi});var _={};e.r(_),e.d(_,{getFirstChildrenChain:()=>Ni,getFlowChildren:()=>vi,getFlowFirstChild:()=>Di,getFlowLastChild:()=>ki,getLastChildrenChain:()=>xi,getPreparedChildren:()=>Oi,getSplitChildren:()=>Ri,isIgnorableSpacerParagraph:()=>Bi,isStructurallyEmptyNode:()=>Fi});var f={};e.r(f),e.d(f,{isReplacedElement:()=>ji,resolveReplacedElement:()=>Vi});var m={};e.r(m),e.d(m,{getBottomCollapseChain:()=>qi,getTopCollapseChain:()=>Ui});var b={};e.r(b),e.d(b,{cloneAndCleanOutsideRange:()=>to,getSplitPoints:()=>Yi,getSplitPointsPerCells:()=>Xi,isFirstSliceEmpty:()=>eo,normalizeContentCuts:()=>Zi,sliceNodeBySplitPoints:()=>Qi,sliceNodeContentBySplitPoints:()=>Ji});var w={};e.r(w),e.d(w,{isRegisteredFloatElement:()=>co,shouldSkipFlowElement:()=>lo});var S={};e.r(S),e.d(S,{getBCRCached:()=>ho,getComputedStyleCached:()=>go,resetMeasureCache:()=>uo});var M={};e.r(M),e.d(M,{buildRowSlices:()=>_o,evaluateRowSplitPlacement:()=>mo,paginationBuildBalancedRowSlices:()=>fo,replaceCurrentRowsAfterRowSplit:()=>bo,sliceCellsBySplitPoints:()=>po});var y={};e.r(y),e.d(y,{paginationApplyFullPageScaling:()=>yo,paginationScaleCellsToHeight:()=>So,paginationShouldScaleFullPage:()=>Mo});var P={};e.r(P),e.d(P,{applyRowSlicesToEntriesAfterRowSplit:()=>Po,computeRowFlags:()=>Co});var C={};e.r(C),e.d(C,{paginationRefreshRowsAfterSplit:()=>To,validateSplitterAdapter:()=>Eo});var E={};e.r(E),e.d(E,{paginationComputeCellShellHeights:()=>Oo});var T={};e.r(T),e.d(T,{handleRowOverflow:()=>ko,handleRowSplitFailure:()=>Ro,scaleRowCellsToHeight:()=>Do});var O={};e.r(O),e.d(O,{absorbShortTrailingSliceIfFits:()=>xo,calculateFinalPartReclaimedHeight:()=>No});var v={};e.r(v),e.d(v,{paginationBuildRowEvaluationContext:()=>Fo,paginationCanAbsorbLastRow:()=>Ao});var D={};e.r(D),e.d(D,{paginationCalculateRowSplitBudget:()=>Go,paginationHandleRowSlicesPlacement:()=>Uo,paginationProcessRowSplitResult:()=>jo,paginationResolveAlreadySlicedRow:()=>$o,paginationResolveOverflowingRow:()=>Io,paginationResolveRowWithRowspan:()=>Lo,paginationResolveSplittableRow:()=>Vo,paginationSplitRow:()=>Wo});const k="html2pdf4doc",R="html2pdf";function N(e,t){if("string"!=typeof e)return e;if(!e.includes(k))return e;if(t){if(!e.includes(t))return e;const i=t.replaceAll(k,R);if(i===t)return e;const o=e.replaceAll(t,i);return o===e?e:`${e},${o}`}const i=e.replaceAll(k,R);return i===e?e:`${e},${i}`}const x={init:"[html2pdf4doc]",root:"html2pdf4doc-root",paperFlow:"html2pdf4doc-paper-flow",contentFlow:"html2pdf4doc-content-flow",overlayFlow:"html2pdf4doc-overlay-flow",pageDivider:"html2pdf4doc-page",pageStartMarker:"[html2pdf4doc-page-start]",pageEndMarker:"[html2pdf4doc-page-end]",pageMarker:"[html2pdf4doc-page]",contentFlowStart:"html2pdf4doc-content-flow-start",contentFlowEnd:"html2pdf4doc-content-flow-end",style:"[html2pdf4doc-style]",frontpageTemplate:"[html2pdf4doc-frontpage]",headerTemplate:"[html2pdf4doc-header]",footerTemplate:"[html2pdf4doc-footer]",frontpageElement:"html2pdf4doc-frontpage",frontpageContent:"html2pdf4doc-frontpage-content",headerContent:"html2pdf4doc-header",footerContent:"html2pdf4doc-footer",pageNumberRoot:"[html2pdf4doc-page-number]",pageNumberCurrent:"[html2pdf4doc-page-number-current]",pageNumberTotal:"[html2pdf4doc-page-number-total]",pageChrome:"html2pdf4doc-page-chrome",pageBodySpacer:"html2pdf4doc-page-body-spacer",pageHeader:"html2pdf4doc-page-header",pageFooter:"html2pdf4doc-page-footer",printPageBreak:"html2pdf4doc-print-page-break",runningSafety:"html2pdf4doc-print-running",virtualPaper:"html2pdf4doc-virtual-paper",virtualPaperTopMargin:"html2pdf4doc-virtual-paper-margin-top",virtualPaperBottomMargin:"html2pdf4doc-virtual-paper-margin-bottom",virtualPaperGap:"html2pdf4doc-virtual-paper-gap",printIgnore:"[html2pdf4doc-print-ignore]",printHide:"[html2pdf4doc-print-hide]",neutral:"html2pdf4doc-neutral",word:"html2pdf4doc-word",textNode:"html2pdf4doc-text-node",textLine:"html2pdf4doc-text-line",textGroup:"html2pdf4doc-text-group",complexTextBlock:"html2pdf4doc-complex-text-block",printForcedPageBreak:"html2pdf4doc-print-forced-page-break",split:"[html2pdf4doc-split]",processed:"[html2pdf4doc-processed]",flagNoBreak:"[html2pdf4doc-flag-no-break]",flagNoHanging:"[html2pdf4doc-flag-no-hanging]",flagSlice:"[html2pdf4doc-flag-slice]",topCutPart:".html2pdf4doc-top-cut",bottomCutPart:".html2pdf4doc-bottom-cut",cleanTopCut:".html2pdf4doc-clean-top-cut",cleanBottomCut:".html2pdf4doc-clean-bottom-cut",tocPageNumber:"html2pdf4doc-toc-page-number"},B="background:#eee;color:#888;padding: 0 1px 0 0;";function F(e,t="",i=!1){"boolean"==typeof t&&(i=t,t=""),!0===i?this._debug._&&console.groupCollapsed(`%c${e}`,t):this._debug._&&console.group(`%c${e}`,t)}function A(e){this._debug._&&console.log(`%c ▲ ${e} `,B),this._debug._&&console.groupEnd()}function H(e,...t){this._debug._&&console.log(`[${e}]`,...t)}function I(e,...t){this._assert&&console.assert(e,"⛔",...t)}class L{constructor({DOM:e,config:t}){this.document=e,this.body=e.body,this._debug=t.debugMode?{...t.debugConfig.DOM}:{},this._assert=!!t.consoleAssert,Object.assign(this,i)}createElement(e){return this.document.createElement(e)}createDocumentFragment(){return this.document.createDocumentFragment()}cloneNode(e){return e?.cloneNode(!0)}cloneNodeWrapper(e){return e?.cloneNode(!1)}insertBefore(e,...t){const i=t.filter(e=>null!=e);e.before(...i)}insertAfter(e,...t){const i=t.filter(e=>null!=e);e.after(...i)}insertAtEnd(e,...t){const i=t.filter(e=>null!=e);e.append(...i)}insertAtStart(e,...t){const i=t.filter(e=>null!=e);e.prepend(...i)}insertInsteadOf(e,...t){this.insertBefore(e,...t),e.remove()}wrap(e,t){return e.before(t),t.append(e),t}moveContent(e,t){for(;e.firstChild;)t.append(e.firstChild);this.strictAssert(""===this.getInnerHTML(e))}moveRowContent(e,t){if(!e||!t)return void(this._debug._&&console.warn("moveRowContent(): sourceTR or targetTR is missing"));const i=this.getElementTagName(e),o=this.getElementTagName(t);this.strictAssert("TR"===i,`moveRowContent(): source is not TR, got ${i}`),this.strictAssert("TR"===o,`moveRowContent(): target is not TR, got ${o}`);const n=[...this.getChildren(e)],r=[...this.getChildren(t)];n.length!==r.length&&this._debug._&&console.warn(`moveRowContent(): cells count mismatch: ${n.length} (source) vs ${r.length} (target)`);const s=Math.min(n.length,r.length);for(let e=0;e0,"getAll(selectors), selectors:",e),1===e.length?[...this.getAllElements(e[0],t)]:[...e].flatMap(e=>[...this.getAllElements(e,t)])}getElement(e,t=this.document){return this.strictAssert(e),t.querySelector(e)}getAllElements(e,t=this.document){return this.strictAssert(e),t.querySelectorAll(e)}getElementById(e,t=this.document){return t.getElementById(e)}getNodeType(e){return e.nodeType}getRightNeighbor(e){return e.nextElementSibling}getLeftNeighbor(e){return e.previousElementSibling}getParentNode(e){return e.parentElement}getNodeValue(e){return e.nodeValue}getNodeWholeText(e){return e.wholeText}getLastElementChild(e){return e.lastElementChild}getFirstElementChild(e){return e.firstElementChild}getChildNodes(e){return e.childNodes}getChildren(e){return e.children}getElementOffsetParent(e){return e.offsetParent}getComputedStyle(e){return window.getComputedStyle(e)}getElementBCR(e){return e.getBoundingClientRect()}getElementOffsetLeft(e){return e?.offsetLeft}getElementOffsetHeight(e){return e?.offsetHeight}getElementOffsetWidth(e){return e?.offsetWidth}getElementOffsetTop(e){return e?.offsetTop}getElementOffsetBottom(e){return e?.offsetTop+e?.offsetHeight||void 0}getElementTagName(e){return e.tagName}getDataId(e){return e.dataset.id}getAttribute(e,t){if(!e||!t)return void(this._debug._&&console.warn("getAttribute() must have 2 params"));const i=t.charAt(0);if("."!==i&&"#"!==i||this.log("getAttribute",`you're really sure ${t} is attribute selector?`),"["===i){this.strictAssert("]"===t.at(-1),`the ${t} selector is not OK.`);const i=t.substring(1,t.length-1);return e.getAttribute(i)}e.getAttribute(t)}setAttribute(e,t,i){if(!e||!t)return void(this._debug._&&console.warn("setAttribute() must have 2 params"));const o=t.charAt(0);if("."===o){const i=t.substring(1);return void e.classList.add(i)}if("#"===o){const i=t.substring(1);return void(e.id=i)}if("["===o){this.strictAssert("]"===t.at(-1),`the ${t} selector is not OK.`);const o=t.substring(1,t.length-1);return void e.setAttribute(o,i||"")}this.log("setAttribute",`you're really sure ${t} is a selector?`)}setStyles(e,t){Object.entries(t).forEach(([t,i])=>{Array.isArray(i)?this.setStyle(e,t,i[0],i[1]||""):this.setStyle(e,t,i)})}setStyle(e,t,i,o=""){const n=this._toKebab(t);null==i||""===i?e.style.removeProperty(n):e.style.setProperty(n,String(i),o)}_toKebab=e=>{if(e.includes("-"))return e;const t=e.match(/^(webkit|moz|ms|o)(?=[A-Z])/);return t&&(e="-"+t[1]+"-"+e.slice(t[1].length)),e.replace(/[A-Z]/g,e=>"-"+e.toLowerCase())};addClasses(e,...t){e.classList.add(...t)}removeAttribute(e,t){if(!e||!t)return void(this._debug._&&console.warn("removeAttribute() must have 2 params"));const i=t.charAt(0);if(this.strictAssert(i.match(/[a-zA-Z#\[\.]/),`removeAttribute() expects a valid selector, but received ${t}`),"."===i){const i=t.substring(1);return void e.classList.remove(i)}if("#"===i){const i=t.substring(1);return void e.removeAttribute(i)}if("["===i){this.strictAssert("]"===t.at(-1),`the ${t} selector is not OK.`);const i=t.substring(1,t.length-1);return void e.removeAttribute(i)}e.removeAttribute(attr)}removeAllAttributes(e){for(;e.attributes.length>0;)e.removeAttribute(e.attributes[0].name)}removeClasses(e,...t){e.classList.remove(...t)}removeAllClasses(e){e.classList=""}removeAllStyles(e){e.style=""}getInnerHTML(e){if("string"==typeof e){const t=this.document.querySelector(e);return t?t.innerHTML:void 0}return e.innerHTML}setInnerHTML(e,t){if("string"==typeof e){const i=this.document.querySelector(e);i&&(i.innerHTML=t)}e.innerHTML=t}isDocumentBody(e){return"BODY"===e.tagName}isTextNode(e){return e.nodeType===Node.TEXT_NODE}isElementNode(e){return e.nodeType===Node.ELEMENT_NODE}hasClass(e,t){return e.classList.contains(t)}hasID(e,t){return e.id===t}hasAttribute(e,t){return e.hasAttribute(t)}}class ${constructor(e){this.config=e,this._printWidth=parseFloat(this.config.paperWidth),this._printLeft=parseFloat(this.config.printLeftMargin),this._printRight=parseFloat(this.config.printRightMargin),this._printContentWidth=this._printWidth-this._printLeft-this._printRight+"px",this._flowPreviewPaddingBottom="100px",this._chromeBorderSafeSpace="2px",this._ensureBFC="display: flow-root",this.charWidth="10px"}create(){return this._pageRule()+this._layoutStyles().screen+this._layoutStyles().print+this._chromeStyles().screen+this._chromeStyles().print+this._serviceElementsStyle().screen+this._serviceElementsStyle().print+this._cutEdgeStyle()+(this.config.debugMode?this._testScreenOnlyStyle():"")}_pageRule(){return`@page {\n size: A4;\n size: ${`${this.config.paperWidth} ${this.config.paperHeight}`};\n margin-left: ${this.config.printLeftMargin};\n margin-right: ${this.config.printRightMargin};\n margin-top: ${this.config.printTopMargin};\n margin-bottom: 0;\n}`}_layoutStyles(){return{screen:`\n${x.root} {\n --paper-color: ${this.config.paperColor};\n display: flow-root;\n position: relative;\n z-index: 1;\n width: ${this._printContentWidth};\n margin: 0 auto;\n font-size: ${this.config.printFontSize};\n padding-bottom: ${this._flowPreviewPaddingBottom};\n}\n\n${x.contentFlow} {\n display: block;\n}\n\n${x.paperFlow} {\n display: block;\n position: absolute;\n width: 100%;\n z-index: -1;\n padding-bottom: ${this._flowPreviewPaddingBottom};\n pointer-events: none;\n}\n\n${x.overlayFlow} {\n display: block;\n position: absolute;\n width: 100%;\n z-index: 2147483647;\n padding-bottom: ${this._flowPreviewPaddingBottom};\n pointer-events: none;\n}\n\n${x.virtualPaper} {\n display: grid;\n grid-template-columns: 1fr;\n grid-template-rows: minmax(min-content, max-content) minmax(min-content, max-content) 1fr minmax(min-content, max-content) minmax(min-content, max-content);\n place-items: stretch stretch;\n place-content: stretch stretch;\n width: ${this._printContentWidth};\n height: ${this.config.paperHeight};\n font-size: ${this.config.printFontSize};\n}\n\n${x.virtualPaper}::before {\n position: absolute;\n content: '';\n width: ${this.config.paperWidth};\n height: ${this.config.paperHeight};\n left: -${this.config.printLeftMargin};\n background: var(--paper-color, white);\n box-shadow: rgba(0, 0, 0, 0.1) 2px 2px 12px 0px;\n z-index: -1;\n}\n\n${x.pageChrome} {\n display: block;\n pointer-events: none;\n}\n\n${x.pageBodySpacer} {\n display: block;\n pointer-events: none;\n}\n\n${x.pageFooter},\n${x.pageHeader} {\n display: block;\n position: relative;\n pointer-events: auto;\n}\n\n${x.pageFooter}::before,\n${x.pageHeader}::before {\n content: '';\n position: absolute;\n inset: 0;\n left: -10px;\n right: -10px;\n z-index: -1;\n background: var(--paper-color, white);\n}\n\n${x.pageFooter}::before {\n top: ${this._chromeBorderSafeSpace};\n}\n\n${x.pageHeader}::before {\n bottom: ${this._chromeBorderSafeSpace};\n}\n\n${x.virtualPaperTopMargin} {\n display: block;\n height: ${this.config.printTopMargin};\n}\n\n${x.virtualPaperBottomMargin} {\n display: block;\n height: ${this.config.printBottomMargin};\n}\n\n${x.virtualPaperGap} {\n display: block;\n padding-top: ${this.config.virtualPagesGap};\n}\n\n${x.contentFlowStart},\n${x.contentFlowEnd},\n${x.pageDivider},\n${x.runningSafety} {\n ${this._ensureBFC};\n}\n `,print:`\n@media print {\n\n ${x.root},\n ${x.overlayFlow},\n ${x.paperFlow} {\n padding: 0;\n }\n\n ${x.paperFlow},\n ${x.printHide} {\n display: none !important;\n }\n\n ${x.printIgnore} {\n display: contents !important;\n }\n\n ${x.virtualPaperTopMargin},\n ${x.virtualPaperBottomMargin},\n ${x.virtualPaperGap} {\n display: none !important;\n }\n\n ${x.pageChrome},\n ${x.frontpageElement},\n ${x.pageBodySpacer} {\n break-inside: avoid;\n }\n}\n `}}_chromeStyles(){return{screen:`\n${x.headerContent},\n${x.footerContent} {\n display: block;\n font-size: small;\n}\n\n${x.headerContent} p,\n${x.footerContent} p {\n margin: 0;\n}\n\n${x.headerContent} {\n padding-bottom: ${this.config.headerMargin};\n padding-top: 10px; /* for page numbers */\n}\n\n${x.footerContent} {\n padding-top: ${this.config.footerMargin};\n min-height: 32px; /* for page numbers */\n}\n\n${x.tocPageNumber} {\n min-width: 3ch;\n display: flex;\n justify-content: flex-end;\n align-items: baseline;\n}\n\n${N(x.pageNumberRoot)} {\n display: flex;\n column-gap: 2px;\n position: absolute;\n right: 0;\n text-align: right;\n line-height: 1;\n}\n\n${N(`${x.headerContent} ${x.pageNumberRoot}`,x.pageNumberRoot)} {\n top: 0;\n}\n\n${N(`${x.footerContent} ${x.pageNumberRoot}`,x.pageNumberRoot)} {\n bottom: 0;\n}\n `,print:""}}_cutEdgeStyle(){return`\n${x.topCutPart} {\n margin-top: 0 !important;\n}\n${x.bottomCutPart} {\n margin-bottom: 0 !important;\n}\n${x.cleanTopCut} {\n margin-top: 0 !important;\n padding-top: 0 !important;\n border-top: none !important;\n}\n${x.cleanBottomCut} {\n margin-bottom: 0 !important;\n padding-bottom: 0 !important;\n border-bottom: none !important;\n}\n `}_serviceElementsStyle(){return{screen:`\n.null {\n display: inline;\n padding: 0;\n margin: 0;\n font: 0;\n color: transparent;\n line-height: 0;\n border: none;\n outline: none;\n background: none;\n background-color: transparent;\n}\n\n${x.word},\n${x.textNode},\n${x.textLine},\n${x.textGroup},\n${x.neutral},\n${x.neutral} span {\n display: inline;\n padding: 0;\n margin: 0;\n font: inherit;\n color: inherit;\n line-height: inherit;\n background: none;\n background-color: transparent;\n}\n\n${x.textGroup} {\n display: block;\n}\n\n${x.complexTextBlock} {\n display: block;\n}\n\n${x.complexTextBlock} ${x.complexTextBlock} {\n display: inline;\n}\n\n${x.printPageBreak} {\n ${this._ensureBFC};\n}\n\n${x.printForcedPageBreak} {\n display: block;\n visibility: hidden;\n height: 0;\n overflow: hidden;\n}\n `,print:`\n@media print {\n\n ${x.printPageBreak} {\n break-after: page;\n }\n\n}\n `}}_testScreenOnlyStyle(){return`\n/* DEBUG PREVIEW */\n@media screen {\n\n ${x.contentFlow} {\n background:repeating-linear-gradient(\n -45deg,\n rgba(222, 222, 222, .1),\n rgba(222, 222, 222, .1) 10px,\n rgba(222, 222, 222, .2) 10px,\n rgba(222, 222, 222, .2) 20px\n );\n }\n\n ${x.overlayFlow} {\n background:repeating-linear-gradient(\n 45deg,\n rgba(222, 222, 222, 0),\n rgba(222, 222, 222, 0) 18px,\n rgba(0, 166, 255, 0.05) 18px,\n rgba(0, 166, 255, 0.05) 20px\n );\n }\n\n ${x.virtualPaperGap} {\n background: #ff000020;\n }\n\n ${x.pageFooter},\n ${x.pageHeader} {\n background: #fff1ff99;\n }\n ${x.pageBodySpacer} {\n background: #ffee0020;\n }\n ${x.runningSafety} {\n background: #f200ff;\n outline: 0.1px dashed #f200ff88;\n }\n ${x.frontpageElement} {\n background: #00fcff20;\n }\n\n ${x.neutral} {\n background: #00ffee10;\n }\n\n ${x.textNode} {\n background: #00ff0010;\n }\n\n ${x.textGroup},\n ${x.textLine} {\n background: #0000ff08;\n }\n}\n `}}class G{constructor({config:e,DOM:t,node:o,selector:n}){this.success=!1,Object.assign(this,i),this.root,this.paperFlow,this.contentFlow,this.overlayFlow,this.frontpageTemplate,this.headerTemplate,this.footerTemplate,this._initialRoot,this._contentRoot,this._config=e,this._debug=e.debugMode?{...e.debugConfig.layout}:{},this._assert=!!e.consoleAssert,this._DOM=t,this._selector=n,this._node=o,this._customInitialRootSelector=e.initialRoot,this._defaultInitialRootSelector=n.init}create(){if(this._getTemplates(),this._insertStyle(),this._DOM.getElement(`style${this._selector.style}`)){if(this._createLayout(),this._DOM.getParentNode(this.root)!==this._initialRoot||this._DOM.getElementOffsetParent(this.paperFlow)!==this.root||this._DOM.getElementOffsetParent(this.contentFlow)!==this.root||this._DOM.getElementOffsetParent(this.overlayFlow)!==this.root)return this.strictAssert(this._DOM.getParentNode(this.root)===this._initialRoot,"Failed to insert the layout root into the DOM."),this.strictAssert(this._DOM.getElementOffsetParent(this.paperFlow)===this.root,"Failed to insert the paperFlow element into the DOM."),void this.strictAssert(this._DOM.getElementOffsetParent(this.contentFlow)===this.root,"Failed to insert the contentFlow element into the DOM.");this.success=!0}else console.error("Failed to add print styles into the DOM.")}_getTemplates(){this.strictAssert(this._selector.frontpageTemplate,"frontpageTemplate selector is missing"),this.strictAssert(this._selector.headerTemplate,"headerTemplate selector is missing"),this.strictAssert(this._selector.footerTemplate,"footerTemplate selector is missing"),this.frontpageTemplate=this._DOM.getInnerHTML(N(this._selector.frontpageTemplate)),this.headerTemplate=this._DOM.getInnerHTML(N(this._selector.headerTemplate)),this.footerTemplate=this._DOM.getInnerHTML(N(this._selector.footerTemplate))}_insertStyle(){this._node.insertStyle(new $(this._config).create())}_createLayout(){this._getInitialRoot(),this._initialRoot?(this.log("create Layout","initial root:",this._initialRoot),this._createRoot(),this._createPaperFlow(),this._createContentFlow(),this._createOverlayFlow(),this._DOM.moveContent(this._initialRoot,this.contentFlow),this._DOM.insertAtEnd(this._initialRoot,this.root),this._DOM.insertAtEnd(this.root,this.paperFlow,this.overlayFlow,this.contentFlow),this._insertContentFlowStartAndEnd(this.contentFlow),this._ignoreUnprintableEnvironment(this.root)):console.error("Failed to initialize the root element.")}_insertContentFlowStartAndEnd(e){const t=this._node.create(this._selector.contentFlowStart),i=this._node.create(this._selector.contentFlowEnd);return this._DOM.insertAtStart(e,t),this._DOM.insertAtEnd(e,i),{contentFlowStart:t,contentFlowEnd:i}}_getInitialRoot(){let e=this._customInitialRootSelector?this._DOM.getElement(this._customInitialRootSelector):this._DOM.getElement(this._defaultInitialRootSelector);if(!e){if(!this._DOM.body)return void console.error("We expected to find the BODY tag.");e=this._DOM.body,console.warn(`The printable area is currently unspecified and encompasses the entire contents of the BODY tag. To restrict the printed content to a specific area, include ${this._defaultInitialRootSelector} in the root element of the desired printing area.`)}return this._initialRoot=e,e}_createRoot(){const e=this._node.create(this._selector.root);return this._DOM.setStyles(e,{visibility:"hidden"}),this.root=e,e}_createPaperFlow(){const e=this._node.create(this._selector.paperFlow);return this.paperFlow=e,e}_createOverlayFlow(){const e=this._node.create(this._selector.overlayFlow);return this.overlayFlow=e,e}_createContentFlow(){const e=this._node.create(this._selector.contentFlow);return this.contentFlow=e,e}_ignoreUnprintableEnvironment(e){if(e===this._DOM.body)return void this.strictAssert(!1,"misshapen root");let t=this._DOM.getParentNode(e);this._DOM.setAttribute(t,this._selector.printIgnore),this._DOM.getChildNodes(t).forEach(t=>{if(t!==e&&this._DOM.isElementNode(t))this._DOM.setAttribute(t,this._selector.printHide);else{if(!this._node.isSignificantTextNode(t))return;{const e=this._node.createTextNodeWrapper();this._DOM.wrap(t,e),this._DOM.setAttribute(e,this._selector.printHide)}}}),this._DOM.isDocumentBody(t)||this._ignoreUnprintableEnvironment(t)}}function W(e){return function(t){return t._config.debugMode&&t._debug[e]}}const z=W("selectors");function j(e,t){if(!e||!t)return void(z(this)&&console.warn("isSelectorMatching() must have 2 params","\n element: ",e,"\n selector: ",t));const i=[t];if("string"==typeof t&&t.includes("html2pdf4doc")){const e=t.replaceAll("html2pdf4doc","html2pdf");e!==t&&i.push(e)}return i.some(t=>{const i=t.charAt(0);if("."===i){const i=t.substring(1);return this._DOM.hasClass(e,i)}if("#"===i){const i=t.substring(1);return this._DOM.hasID(e,i)}if("["===i){this.strictAssert("]"===t.at(-1),`the ${t} selector is not OK.`);const i=t.substring(1,t.length-1);return this._DOM.hasAttribute(e,i)}return this._DOM.getElementTagName(e)===t.toUpperCase()})}function V(e){return!!this._DOM.isTextNode(e)&&this._DOM.getNodeValue(e).trim().length>0}function U(e){return"STYLE"===this._DOM.getElementTagName(e)}function q(e){return"IMG"===this._DOM.getElementTagName(e)}function K(e){return"svg"===this._DOM.getElementTagName(e)}function Y(e){return"OBJECT"===this._DOM.getElementTagName(e)}function X(e){return"LI"===this._DOM.getElementTagName(e)}function Q(e){return this.isSelectorMatching(e,this._selector.neutral)}function Z(e){return this.isSelectorMatching(e,this._selector.textNode)}function J(e){return this.isSelectorMatching(e,this._selector.textLine)}function ee(e){return this.isSelectorMatching(e,this._selector.textGroup)}function te(e){return this.isSelectorMatching(e,this._selector.contentFlowStart)}function ie(e){let t=this._DOM.getLeftNeighbor(e);for(;t&&this.shouldSkipFlowElement(t,{context:"isAfterContentFlowStart"});)t=this._DOM.getLeftNeighbor(t);return this.isSelectorMatching(t,this._selector.contentFlowStart)}function oe(e){return this.isSelectorMatching(e,this._selector.contentFlowEnd)}function ne(e){return this.isSelectorMatching(e,this._selector.complexTextBlock)}function re(e){return this.isComplexTextBlock(e)||this.isWrappedTextNode(e)||this.isWrappedTextLine(e)||this.isWrappedTextGroup(e)}function se(e){return this.isSelectorMatching(e,this._selector.printForcedPageBreak)}function ae(e,t){if(!(e instanceof HTMLElement))return;const i=(t||this._DOM.getComputedStyle(e)).display;return"inline"===i||"inline-block"===i||"inline-table"===i||"inline-flex"===i||"inline-grid"===i}function le(e,t){if(!(e instanceof HTMLElement))return;const i=(t||this._DOM.getComputedStyle(e)).display;return"inline-block"===i||"inline-table"===i||"inline-flex"===i||"inline-grid"===i}function ce(e,t){if(!(e instanceof HTMLElement))return;return"grid"===(t||this._DOM.getComputedStyle(e)).display}function he(e,t){if(!(e instanceof HTMLElement))return;const i=(t||this._DOM.getComputedStyle(e)).display;if("TABLE"!==this._DOM.getElementTagName(e)&&["table","inline-table"].includes(i))return!0;const o=e=>"table-row"===e,n=e=>"table-cell"===e;if(o(i)){const t=this._DOM.getChildren(e);for(const e of t)if(e instanceof HTMLElement&&n(this._DOM.getComputedStyle(e).display))return!0;return!1}if("table-row-group"===(r=i)||"table-header-group"===r||"table-footer-group"===r){const t=this._DOM.getChildren(e);for(const e of t){if(!(e instanceof HTMLElement))continue;if(!o(this._DOM.getComputedStyle(e).display))continue;const t=this._DOM.getChildren(e);for(const e of t)if(e instanceof HTMLElement&&n(this._DOM.getComputedStyle(e).display))return!0}return!1}var r;return!1}function de(e,t){if(e instanceof HTMLElement) +var HTML2PDF4DOC;(()=>{"use strict";var e={d:(t,i)=>{for(var o in i)e.o(i,o)&&!e.o(t,o)&&Object.defineProperty(t,o,{enumerable:!0,get:i[o]})},o:(e,t)=>Object.prototype.hasOwnProperty.call(e,t),r:e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})}},t={};e.r(t),e.d(t,{init:()=>Fn});var i={};e.r(i),e.d(i,{log:()=>H,logGroup:()=>F,logGroupEnd:()=>A,strictAssert:()=>I});var o={};e.r(o),e.d(o,{isAfterContentFlowStart:()=>ie,isComplexTextBlock:()=>ne,isContentFlowEnd:()=>oe,isContentFlowStart:()=>te,isFlexRow:()=>pe,isForcedPageBreak:()=>se,isGrid:()=>ce,isGridAutoFlowRow:()=>ue,isIMG:()=>q,isInline:()=>ae,isInlineBlock:()=>le,isLiNode:()=>X,isNeutral:()=>Q,isNotBreakable:()=>_e,isOBJECT:()=>Y,isPRE:()=>ge,isSTYLE:()=>U,isSVG:()=>K,isSelectorMatching:()=>j,isSignificantTextNode:()=>V,isSliced:()=>fe,isSlough:()=>me,isSyntheticTextWrapper:()=>re,isTableLikeNode:()=>he,isTableNode:()=>de,isWrappedTextGroup:()=>ee,isWrappedTextLine:()=>J,isWrappedTextNode:()=>Z});var n={};e.r(n),e.d(n,{explainHeuristicSelectorMismatch:()=>Ee,filterHeuristicSelectorMatches:()=>Te,hasNoSignificantSiblingNodes:()=>Me,hasSignificantLeadingText:()=>ye,hasSignificantTrailingText:()=>Pe,isHeuristicSelector:()=>Se,resolveConfigSelectorConstraints:()=>we,validateHeuristicSelectorMatch:()=>Ce});var r={};e.r(r),e.d(r,{insertStyle:()=>Oe});var s={};e.r(s),e.d(s,{isFirstChildOfFirstChild:()=>De,isLastChildOfLastChild:()=>ke,isVerticalDrop:()=>Re,resolveFlowBoxElement:()=>xe,setInitStyle:()=>Ne});var a={};e.r(a),e.d(a,{getBottom:()=>Ge,getBottomWithMargin:()=>We,getContentHeightByProbe:()=>Ze,getEmptyNodeHeightByProbe:()=>Ue,getHeightWithMargin:()=>ze,getLineHeight:()=>qe,getMaxWidth:()=>Ve,getNormalizedBottomWithMargin:()=>Ie,getNormalizedTop:()=>He,getPageStartTopInfo:()=>Ae,getTableEmptyRowHeight:()=>Ye,getTableEntries:()=>Qe,getTableRowHeight:()=>Ke,getTableRowShellHeightByTD:()=>Xe,getTop:()=>Le,getTopForPageStartCandidate:()=>Fe,getTopWithMargin:()=>je,resolveRowBoundsGeneric:()=>Je});var l={};e.r(l),e.d(l,{create:()=>et,createComplexTextBlock:()=>lt,createForcedPageBreak:()=>dt,createNeutral:()=>tt,createNeutralBlock:()=>it,createPrintPageBreak:()=>at,createSignpost:()=>gt,createSliceWrapper:()=>pt,createTable:()=>ut,createTestNodeFrom:()=>ct,createTextGroup:()=>rt,createTextLine:()=>nt,createTextNodeWrapper:()=>ot,createWithFlagNoBreak:()=>st,createWord:()=>ht});var c={};e.r(c),e.d(c,{prepareSplittedNode:()=>bt,splitByWordsGreedyWithSpacesFilter:()=>mt,splitTextByLinesGreedy:()=>_t,splitTextByWordsGreedy:()=>ft});var h={};e.r(h),e.d(h,{MarkersState:()=>$t,isNoBreak:()=>Ft,isNoHanging:()=>At,isPageStart:()=>Bt,isSlice:()=>Ht,markBottomCut:()=>Rt,markCleanBottomCut:()=>Dt,markCleanTopCut:()=>vt,markNoBreak:()=>Mt,markNoHanging:()=>yt,markPageEnd:()=>Tt,markPageNumber:()=>Ot,markPageStart:()=>Ct,markProcessed:()=>St,markSlice:()=>Pt,markSliceCuts:()=>Nt,markSliceCutsInRows:()=>xt,markTopCut:()=>kt,unmarkPageStart:()=>Et});var d={};e.r(d),e.d(d,{_getMarkAttributeConfig:()=>oi,_isStyleMark:()=>ni,_registerMark:()=>ei,_unregisterMark:()=>ti,clearMark:()=>Vt,getMark:()=>zt,getRegisteredPageDividers:()=>Xt,getRegisteredPageEnds:()=>ii,getRegisteredPageNumberForElement:()=>Jt,getRegisteredPageNumbers:()=>Zt,hasMark:()=>jt,registerPageDivider:()=>Yt,setMark:()=>Wt});var g={};e.r(g),e.d(g,{wrapNodeChildrenWithNeutralBlock:()=>ri});var u={};e.r(u),e.d(u,{copyNodeWidth:()=>hi,estimateInlineImgGapBelow:()=>ui,fitElementWithinBoundaries:()=>ai,fitElementWithinHeight:()=>li,lockNodesWidths:()=>gi,lockTableWidths:()=>di,scaleCellsToHeight:()=>ci});var p={};e.r(p),e.d(p,{findAllForcedPageBreakInside:()=>Mi,findBetterForcedPageStarter:()=>_i,findBetterPageStart:()=>fi,findFirstChildParent:()=>wi,findFirstChildParentFromPage:()=>mi,findLastChildParent:()=>Si,findPreviousNonHangingsFromPage:()=>bi});var _={};e.r(_),e.d(_,{getFirstChildrenChain:()=>Ni,getFlowChildren:()=>vi,getFlowFirstChild:()=>Di,getFlowLastChild:()=>ki,getLastChildrenChain:()=>xi,getPreparedChildren:()=>Oi,getSplitChildren:()=>Ri,isIgnorableSpacerParagraph:()=>Bi,isStructurallyEmptyNode:()=>Fi});var f={};e.r(f),e.d(f,{isReplacedElement:()=>ji,resolveReplacedElement:()=>Vi});var m={};e.r(m),e.d(m,{getBottomCollapseChain:()=>qi,getTopCollapseChain:()=>Ui});var b={};e.r(b),e.d(b,{cloneAndCleanOutsideRange:()=>to,getSplitPoints:()=>Yi,getSplitPointsPerCells:()=>Xi,isFirstSliceEmpty:()=>eo,normalizeContentCuts:()=>Zi,sliceNodeBySplitPoints:()=>Qi,sliceNodeContentBySplitPoints:()=>Ji});var w={};e.r(w),e.d(w,{isRegisteredFloatElement:()=>co,shouldSkipFlowElement:()=>lo});var S={};e.r(S),e.d(S,{getBCRCached:()=>ho,getComputedStyleCached:()=>go,resetMeasureCache:()=>uo});var M={};e.r(M),e.d(M,{buildRowSlices:()=>_o,evaluateRowSplitPlacement:()=>mo,paginationBuildBalancedRowSlices:()=>fo,replaceCurrentRowsAfterRowSplit:()=>bo,sliceCellsBySplitPoints:()=>po});var y={};e.r(y),e.d(y,{paginationApplyFullPageScaling:()=>yo,paginationScaleCellsToHeight:()=>So,paginationShouldScaleFullPage:()=>Mo});var P={};e.r(P),e.d(P,{applyRowSlicesToEntriesAfterRowSplit:()=>Po,computeRowFlags:()=>Co});var C={};e.r(C),e.d(C,{paginationRefreshRowsAfterSplit:()=>To,validateSplitterAdapter:()=>Eo});var E={};e.r(E),e.d(E,{paginationComputeCellShellHeights:()=>Oo});var T={};e.r(T),e.d(T,{handleRowOverflow:()=>ko,handleRowSplitFailure:()=>Ro,scaleRowCellsToHeight:()=>Do});var O={};e.r(O),e.d(O,{absorbShortTrailingSliceIfFits:()=>xo,calculateFinalPartReclaimedHeight:()=>No});var v={};e.r(v),e.d(v,{paginationBuildRowEvaluationContext:()=>Fo,paginationCanAbsorbLastRow:()=>Ao});var D={};e.r(D),e.d(D,{paginationCalculateRowSplitBudget:()=>Go,paginationHandleRowSlicesPlacement:()=>Uo,paginationProcessRowSplitResult:()=>jo,paginationResolveAlreadySlicedRow:()=>$o,paginationResolveOverflowingRow:()=>Io,paginationResolveRowWithRowspan:()=>Lo,paginationResolveSplittableRow:()=>Vo,paginationSplitRow:()=>Wo});const k="html2pdf4doc",R="html2pdf";function N(e,t){if("string"!=typeof e)return e;if(!e.includes(k))return e;if(t){if(!e.includes(t))return e;const i=t.replaceAll(k,R);if(i===t)return e;const o=e.replaceAll(t,i);return o===e?e:`${e},${o}`}const i=e.replaceAll(k,R);return i===e?e:`${e},${i}`}const x={init:"[html2pdf4doc]",root:"html2pdf4doc-root",paperFlow:"html2pdf4doc-paper-flow",contentFlow:"html2pdf4doc-content-flow",overlayFlow:"html2pdf4doc-overlay-flow",pageDivider:"html2pdf4doc-page",pageStartMarker:"[html2pdf4doc-page-start]",pageEndMarker:"[html2pdf4doc-page-end]",pageMarker:"[html2pdf4doc-page]",contentFlowStart:"html2pdf4doc-content-flow-start",contentFlowEnd:"html2pdf4doc-content-flow-end",style:"[html2pdf4doc-style]",frontpageTemplate:"[html2pdf4doc-frontpage]",headerTemplate:"[html2pdf4doc-header]",footerTemplate:"[html2pdf4doc-footer]",frontpageElement:"html2pdf4doc-frontpage",frontpageContent:"html2pdf4doc-frontpage-content",headerContent:"html2pdf4doc-header",footerContent:"html2pdf4doc-footer",pageNumberRoot:"[html2pdf4doc-page-number]",pageNumberCurrent:"[html2pdf4doc-page-number-current]",pageNumberTotal:"[html2pdf4doc-page-number-total]",pageChrome:"html2pdf4doc-page-chrome",pageBodySpacer:"html2pdf4doc-page-body-spacer",pageHeader:"html2pdf4doc-page-header",pageFooter:"html2pdf4doc-page-footer",printPageBreak:"html2pdf4doc-print-page-break",runningSafety:"html2pdf4doc-print-running",virtualPaper:"html2pdf4doc-virtual-paper",virtualPaperTopMargin:"html2pdf4doc-virtual-paper-margin-top",virtualPaperBottomMargin:"html2pdf4doc-virtual-paper-margin-bottom",virtualPaperGap:"html2pdf4doc-virtual-paper-gap",printIgnore:"[html2pdf4doc-print-ignore]",printHide:"[html2pdf4doc-print-hide]",neutral:"html2pdf4doc-neutral",word:"html2pdf4doc-word",textNode:"html2pdf4doc-text-node",textLine:"html2pdf4doc-text-line",textGroup:"html2pdf4doc-text-group",complexTextBlock:"html2pdf4doc-complex-text-block",printForcedPageBreak:"html2pdf4doc-print-forced-page-break",split:"[html2pdf4doc-split]",processed:"[html2pdf4doc-processed]",flagNoBreak:"[html2pdf4doc-flag-no-break]",flagNoHanging:"[html2pdf4doc-flag-no-hanging]",flagSlice:"[html2pdf4doc-flag-slice]",topCutPart:".html2pdf4doc-top-cut",bottomCutPart:".html2pdf4doc-bottom-cut",cleanTopCut:".html2pdf4doc-clean-top-cut",cleanBottomCut:".html2pdf4doc-clean-bottom-cut",tocPageNumber:"html2pdf4doc-toc-page-number"},B="background:#eee;color:#888;padding: 0 1px 0 0;";function F(e,t="",i=!1){"boolean"==typeof t&&(i=t,t=""),!0===i?this._debug._&&console.groupCollapsed(`%c${e}`,t):this._debug._&&console.group(`%c${e}`,t)}function A(e){this._debug._&&console.log(`%c ▲ ${e} `,B),this._debug._&&console.groupEnd()}function H(e,...t){this._debug._&&console.log(`[${e}]`,...t)}function I(e,...t){this._assert&&console.assert(e,"⛔",...t)}class L{constructor({DOM:e,config:t}){this.document=e,this.body=e.body,this._debug=t.debugMode?{...t.debugConfig.DOM}:{},this._assert=!!t.consoleAssert,Object.assign(this,i)}createElement(e){return this.document.createElement(e)}createDocumentFragment(){return this.document.createDocumentFragment()}cloneNode(e){return e?.cloneNode(!0)}cloneNodeWrapper(e){return e?.cloneNode(!1)}insertBefore(e,...t){const i=t.filter(e=>null!=e);e.before(...i)}insertAfter(e,...t){const i=t.filter(e=>null!=e);e.after(...i)}insertAtEnd(e,...t){const i=t.filter(e=>null!=e);e.append(...i)}insertAtStart(e,...t){const i=t.filter(e=>null!=e);e.prepend(...i)}insertInsteadOf(e,...t){this.insertBefore(e,...t),e.remove()}wrap(e,t){return e.before(t),t.append(e),t}moveContent(e,t){for(;e.firstChild;)t.append(e.firstChild);this.strictAssert(""===this.getInnerHTML(e))}moveRowContent(e,t){if(!e||!t)return void(this._debug._&&console.warn("moveRowContent(): sourceTR or targetTR is missing"));const i=this.getElementTagName(e),o=this.getElementTagName(t);this.strictAssert("TR"===i,`moveRowContent(): source is not TR, got ${i}`),this.strictAssert("TR"===o,`moveRowContent(): target is not TR, got ${o}`);const n=[...this.getChildren(e)],r=[...this.getChildren(t)];n.length!==r.length&&this._debug._&&console.warn(`moveRowContent(): cells count mismatch: ${n.length} (source) vs ${r.length} (target)`);const s=Math.min(n.length,r.length);for(let e=0;e0,"getAll(selectors), selectors:",e),1===e.length?[...this.getAllElements(e[0],t)]:[...e].flatMap(e=>[...this.getAllElements(e,t)])}getElement(e,t=this.document){return this.strictAssert(e),t.querySelector(e)}getAllElements(e,t=this.document){return this.strictAssert(e),t.querySelectorAll(e)}getElementById(e,t=this.document){return t.getElementById(e)}getNodeType(e){return e.nodeType}getRightNeighbor(e){return e.nextElementSibling}getLeftNeighbor(e){return e.previousElementSibling}getParentNode(e){return e.parentElement}getNodeValue(e){return e.nodeValue}getNodeWholeText(e){return e.wholeText}getLastElementChild(e){return e.lastElementChild}getFirstElementChild(e){return e.firstElementChild}getChildNodes(e){return e.childNodes}getChildren(e){return e.children}getElementOffsetParent(e){return e.offsetParent}getComputedStyle(e){return window.getComputedStyle(e)}getElementBCR(e){return e.getBoundingClientRect()}getElementOffsetLeft(e){return e?.offsetLeft}getElementOffsetHeight(e){return e?.offsetHeight}getElementOffsetWidth(e){return e?.offsetWidth}getElementOffsetTop(e){return e?.offsetTop}getElementOffsetBottom(e){return e?.offsetTop+e?.offsetHeight||void 0}getElementTagName(e){return e.tagName}getDataId(e){return e.dataset.id}getAttribute(e,t){if(!e||!t)return void(this._debug._&&console.warn("getAttribute() must have 2 params"));const i=t.charAt(0);if("."!==i&&"#"!==i||this.log("getAttribute",`you're really sure ${t} is attribute selector?`),"["===i){this.strictAssert("]"===t.at(-1),`the ${t} selector is not OK.`);const i=t.substring(1,t.length-1);return e.getAttribute(i)}e.getAttribute(t)}setAttribute(e,t,i){if(!e||!t)return void(this._debug._&&console.warn("setAttribute() must have 2 params"));const o=t.charAt(0);if("."===o){const i=t.substring(1);return void e.classList.add(i)}if("#"===o){const i=t.substring(1);return void(e.id=i)}if("["===o){this.strictAssert("]"===t.at(-1),`the ${t} selector is not OK.`);const o=t.substring(1,t.length-1);return void e.setAttribute(o,i||"")}this.log("setAttribute",`you're really sure ${t} is a selector?`)}setStyles(e,t){Object.entries(t).forEach(([t,i])=>{Array.isArray(i)?this.setStyle(e,t,i[0],i[1]||""):this.setStyle(e,t,i)})}setStyle(e,t,i,o=""){const n=this._toKebab(t);null==i||""===i?e.style.removeProperty(n):e.style.setProperty(n,String(i),o)}_toKebab=e=>{if(e.includes("-"))return e;const t=e.match(/^(webkit|moz|ms|o)(?=[A-Z])/);return t&&(e="-"+t[1]+"-"+e.slice(t[1].length)),e.replace(/[A-Z]/g,e=>"-"+e.toLowerCase())};addClasses(e,...t){e.classList.add(...t)}removeAttribute(e,t){if(!e||!t)return void(this._debug._&&console.warn("removeAttribute() must have 2 params"));const i=t.charAt(0);if(this.strictAssert(i.match(/[a-zA-Z#\[\.]/),`removeAttribute() expects a valid selector, but received ${t}`),"."===i){const i=t.substring(1);return void e.classList.remove(i)}if("#"===i){const i=t.substring(1);return void e.removeAttribute(i)}if("["===i){this.strictAssert("]"===t.at(-1),`the ${t} selector is not OK.`);const i=t.substring(1,t.length-1);return void e.removeAttribute(i)}e.removeAttribute(attr)}removeAllAttributes(e){for(;e.attributes.length>0;)e.removeAttribute(e.attributes[0].name)}removeClasses(e,...t){e.classList.remove(...t)}removeAllClasses(e){e.classList=""}removeAllStyles(e){e.style=""}getInnerHTML(e){if("string"==typeof e){const t=this.document.querySelector(e);return t?t.innerHTML:void 0}return e.innerHTML}setInnerHTML(e,t){if("string"==typeof e){const i=this.document.querySelector(e);i&&(i.innerHTML=t)}e.innerHTML=t}isDocumentBody(e){return"BODY"===e.tagName}isTextNode(e){return e.nodeType===Node.TEXT_NODE}isElementNode(e){return e.nodeType===Node.ELEMENT_NODE}hasClass(e,t){return e.classList.contains(t)}hasID(e,t){return e.id===t}hasAttribute(e,t){return e.hasAttribute(t)}}class ${constructor(e){this.config=e,this._printWidth=parseFloat(this.config.paperWidth),this._printLeft=parseFloat(this.config.printLeftMargin),this._printRight=parseFloat(this.config.printRightMargin),this._printContentWidth=this._printWidth-this._printLeft-this._printRight+"px",this._flowPreviewPaddingBottom="100px",this._chromeBorderSafeSpace="2px",this._ensureBFC="display: flow-root",this.charWidth="10px"}create(){return this._pageRule()+this._layoutStyles().screen+this._layoutStyles().print+this._chromeStyles().screen+this._chromeStyles().print+this._serviceElementsStyle().screen+this._serviceElementsStyle().print+this._cutEdgeStyle()+(this.config.debugMode?this._testScreenOnlyStyle():"")}_pageRule(){return`@page {\n size: A4;\n size: ${`${this.config.paperWidth} ${this.config.paperHeight}`};\n margin-left: ${this.config.printLeftMargin};\n margin-right: ${this.config.printRightMargin};\n margin-top: ${this.config.printTopMargin};\n margin-bottom: 0;\n}`}_layoutStyles(){return{screen:`\n${x.root} {\n --paper-color: ${this.config.paperColor};\n display: flow-root;\n position: relative;\n z-index: 1;\n width: ${this._printContentWidth};\n margin: 0 auto;\n font-size: ${this.config.printFontSize};\n padding-bottom: ${this._flowPreviewPaddingBottom};\n}\n\n${x.contentFlow} {\n display: block;\n}\n\n${x.paperFlow} {\n display: block;\n position: absolute;\n width: 100%;\n z-index: -1;\n padding-bottom: ${this._flowPreviewPaddingBottom};\n pointer-events: none;\n}\n\n${x.overlayFlow} {\n display: block;\n position: absolute;\n width: 100%;\n z-index: 2147483647;\n padding-bottom: ${this._flowPreviewPaddingBottom};\n pointer-events: none;\n}\n\n${x.virtualPaper} {\n display: grid;\n grid-template-columns: 1fr;\n grid-template-rows: minmax(min-content, max-content) minmax(min-content, max-content) 1fr minmax(min-content, max-content) minmax(min-content, max-content);\n place-items: stretch stretch;\n place-content: stretch stretch;\n width: ${this._printContentWidth};\n height: ${this.config.paperHeight};\n font-size: ${this.config.printFontSize};\n}\n\n${x.virtualPaper}::before {\n position: absolute;\n content: '';\n width: ${this.config.paperWidth};\n height: ${this.config.paperHeight};\n left: -${this.config.printLeftMargin};\n background: var(--paper-color, white);\n box-shadow: rgba(0, 0, 0, 0.1) 2px 2px 12px 0px;\n z-index: -1;\n}\n\n${x.pageChrome} {\n display: block;\n pointer-events: none;\n}\n\n${x.pageBodySpacer} {\n display: block;\n pointer-events: none;\n}\n\n${x.pageFooter},\n${x.pageHeader} {\n display: block;\n position: relative;\n pointer-events: auto;\n}\n\n${x.pageFooter}::before,\n${x.pageHeader}::before {\n content: '';\n position: absolute;\n inset: 0;\n left: -10px;\n right: -10px;\n z-index: -1;\n background: var(--paper-color, white);\n}\n\n${x.pageFooter}::before {\n top: ${this._chromeBorderSafeSpace};\n}\n\n${x.pageHeader}::before {\n bottom: ${this._chromeBorderSafeSpace};\n}\n\n${x.virtualPaperTopMargin} {\n display: block;\n height: ${this.config.printTopMargin};\n}\n\n${x.virtualPaperBottomMargin} {\n display: block;\n height: ${this.config.printBottomMargin};\n}\n\n${x.virtualPaperGap} {\n display: block;\n padding-top: ${this.config.virtualPagesGap};\n}\n\n${x.contentFlowStart},\n${x.contentFlowEnd},\n${x.pageDivider},\n${x.runningSafety} {\n ${this._ensureBFC};\n}\n `,print:`\n@media print {\n\n ${x.root},\n ${x.overlayFlow},\n ${x.paperFlow} {\n padding: 0;\n }\n\n ${x.paperFlow},\n ${x.printHide} {\n display: none !important;\n }\n\n ${x.printIgnore} {\n display: contents !important;\n }\n\n ${x.virtualPaperTopMargin},\n ${x.virtualPaperBottomMargin},\n ${x.virtualPaperGap} {\n display: none !important;\n }\n\n ${x.pageChrome},\n ${x.frontpageElement},\n ${x.pageBodySpacer} {\n break-inside: avoid;\n }\n}\n `}}_chromeStyles(){return{screen:`\n${x.headerContent},\n${x.footerContent} {\n display: block;\n font-size: small;\n}\n\n${x.headerContent} p,\n${x.footerContent} p {\n margin: 0;\n}\n\n${x.headerContent} {\n padding-bottom: ${this.config.headerMargin};\n padding-top: 10px; /* for page numbers */\n}\n\n${x.footerContent} {\n padding-top: ${this.config.footerMargin};\n min-height: 32px; /* for page numbers */\n}\n\n${x.tocPageNumber} {\n min-width: 3ch;\n display: flex;\n justify-content: flex-end;\n align-items: baseline;\n}\n\n${N(x.pageNumberRoot)} {\n display: flex;\n column-gap: 2px;\n position: absolute;\n right: 0;\n text-align: right;\n line-height: 1;\n}\n\n${N(`${x.headerContent} ${x.pageNumberRoot}`,x.pageNumberRoot)} {\n top: 0;\n}\n\n${N(`${x.footerContent} ${x.pageNumberRoot}`,x.pageNumberRoot)} {\n bottom: 0;\n}\n `,print:""}}_cutEdgeStyle(){return`\n${x.topCutPart} {\n margin-top: 0 !important;\n}\n${x.bottomCutPart} {\n margin-bottom: 0 !important;\n}\n${x.cleanTopCut} {\n margin-top: 0 !important;\n padding-top: 0 !important;\n border-top: none !important;\n}\n${x.cleanBottomCut} {\n margin-bottom: 0 !important;\n padding-bottom: 0 !important;\n border-bottom: none !important;\n}\n `}_serviceElementsStyle(){return{screen:`\n.null {\n display: inline;\n padding: 0;\n margin: 0;\n font: 0;\n color: transparent;\n line-height: 0;\n border: none;\n outline: none;\n background: none;\n background-color: transparent;\n}\n\n${x.word},\n${x.textNode},\n${x.textLine},\n${x.textGroup},\n${x.neutral},\n${x.neutral} span {\n display: inline;\n padding: 0;\n margin: 0;\n font: inherit;\n color: inherit;\n line-height: inherit;\n background: none;\n background-color: transparent;\n}\n\n${x.textGroup} {\n display: block;\n}\n\n${x.complexTextBlock} {\n display: block;\n}\n\n${x.complexTextBlock} ${x.complexTextBlock} {\n display: inline;\n}\n\n${x.printPageBreak} {\n ${this._ensureBFC};\n}\n\n${x.printForcedPageBreak} {\n display: block;\n visibility: hidden;\n height: 0;\n overflow: hidden;\n}\n `,print:`\n@media print {\n\n ${x.printPageBreak} {\n break-after: page;\n }\n\n}\n `}}_testScreenOnlyStyle(){return`\n/* DEBUG PREVIEW */\n@media screen {\n\n ${x.contentFlow} {\n background:repeating-linear-gradient(\n -45deg,\n rgba(222, 222, 222, .1),\n rgba(222, 222, 222, .1) 10px,\n rgba(222, 222, 222, .2) 10px,\n rgba(222, 222, 222, .2) 20px\n );\n }\n\n ${x.overlayFlow} {\n background:repeating-linear-gradient(\n 45deg,\n rgba(222, 222, 222, 0),\n rgba(222, 222, 222, 0) 18px,\n rgba(0, 166, 255, 0.05) 18px,\n rgba(0, 166, 255, 0.05) 20px\n );\n }\n\n ${x.virtualPaperGap} {\n background: #ff000020;\n }\n\n ${x.pageFooter},\n ${x.pageHeader} {\n background: #fff1ff99;\n }\n ${x.pageBodySpacer} {\n background: #ffee0020;\n }\n ${x.runningSafety} {\n background: #f200ff;\n outline: 0.1px dashed #f200ff88;\n }\n ${x.frontpageElement} {\n background: #00fcff20;\n }\n\n ${x.neutral} {\n background: #00ffee10;\n }\n\n ${x.textNode} {\n background: #00ff0010;\n }\n\n ${x.textGroup},\n ${x.textLine} {\n background: #0000ff08;\n }\n}\n `}}class G{constructor({config:e,DOM:t,node:o,selector:n}){this.success=!1,Object.assign(this,i),this.root,this.paperFlow,this.contentFlow,this.overlayFlow,this.frontpageTemplate,this.headerTemplate,this.footerTemplate,this._initialRoot,this._contentRoot,this._config=e,this._debug=e.debugMode?{...e.debugConfig.layout}:{},this._assert=!!e.consoleAssert,this._DOM=t,this._selector=n,this._node=o,this._customInitialRootSelector=e.initialRoot,this._defaultInitialRootSelector=n.init}create(){if(this._getTemplates(),this._insertStyle(),this._DOM.getElement(`style${this._selector.style}`)){if(this._createLayout(),this._DOM.getParentNode(this.root)!==this._initialRoot||this._DOM.getElementOffsetParent(this.paperFlow)!==this.root||this._DOM.getElementOffsetParent(this.contentFlow)!==this.root||this._DOM.getElementOffsetParent(this.overlayFlow)!==this.root)return this.strictAssert(this._DOM.getParentNode(this.root)===this._initialRoot,"Failed to insert the layout root into the DOM."),this.strictAssert(this._DOM.getElementOffsetParent(this.paperFlow)===this.root,"Failed to insert the paperFlow element into the DOM."),void this.strictAssert(this._DOM.getElementOffsetParent(this.contentFlow)===this.root,"Failed to insert the contentFlow element into the DOM.");this.success=!0}else console.error("Failed to add print styles into the DOM.")}_getTemplates(){this.strictAssert(this._selector.frontpageTemplate,"frontpageTemplate selector is missing"),this.strictAssert(this._selector.headerTemplate,"headerTemplate selector is missing"),this.strictAssert(this._selector.footerTemplate,"footerTemplate selector is missing"),this.frontpageTemplate=this._DOM.getInnerHTML(N(this._selector.frontpageTemplate)),this.headerTemplate=this._DOM.getInnerHTML(N(this._selector.headerTemplate)),this.footerTemplate=this._DOM.getInnerHTML(N(this._selector.footerTemplate))}_insertStyle(){this._node.insertStyle(new $(this._config).create())}_createLayout(){this._getInitialRoot(),this._initialRoot?(this.log("create Layout","initial root:",this._initialRoot),this._createRoot(),this._createPaperFlow(),this._createContentFlow(),this._createOverlayFlow(),this._DOM.moveContent(this._initialRoot,this.contentFlow),this._DOM.insertAtEnd(this._initialRoot,this.root),this._DOM.insertAtEnd(this.root,this.paperFlow,this.overlayFlow,this.contentFlow),this._insertContentFlowStartAndEnd(this.contentFlow),this._ignoreUnprintableEnvironment(this.root)):console.error("Failed to initialize the root element.")}_insertContentFlowStartAndEnd(e){const t=this._node.create(this._selector.contentFlowStart),i=this._node.create(this._selector.contentFlowEnd);return this._DOM.insertAtStart(e,t),this._DOM.insertAtEnd(e,i),{contentFlowStart:t,contentFlowEnd:i}}_getInitialRoot(){let e=this._customInitialRootSelector?this._DOM.getElement(this._customInitialRootSelector):this._DOM.getElement(this._defaultInitialRootSelector);if(!e){if(!this._DOM.body)return void console.error("We expected to find the BODY tag.");e=this._DOM.body,console.warn(`The printable area is currently unspecified and encompasses the entire contents of the BODY tag. To restrict the printed content to a specific area, include ${this._defaultInitialRootSelector} in the root element of the desired printing area.`)}return this._initialRoot=e,e}_createRoot(){const e=this._node.create(this._selector.root);return this._DOM.setStyles(e,{visibility:"hidden"}),this.root=e,e}_createPaperFlow(){const e=this._node.create(this._selector.paperFlow);return this.paperFlow=e,e}_createOverlayFlow(){const e=this._node.create(this._selector.overlayFlow);return this.overlayFlow=e,e}_createContentFlow(){const e=this._node.create(this._selector.contentFlow);return this.contentFlow=e,e}_ignoreUnprintableEnvironment(e){if(e===this._DOM.body)return void this.strictAssert(!1,"misshapen root");let t=this._DOM.getParentNode(e);this._DOM.setAttribute(t,this._selector.printIgnore),this._DOM.getChildNodes(t).forEach(t=>{if(t!==e&&this._DOM.isElementNode(t))this._DOM.setAttribute(t,this._selector.printHide);else{if(!this._node.isSignificantTextNode(t))return;{const e=this._node.createTextNodeWrapper();this._DOM.wrap(t,e),this._DOM.setAttribute(e,this._selector.printHide)}}}),this._DOM.isDocumentBody(t)||this._ignoreUnprintableEnvironment(t)}}function W(e){return function(t){return t._config.debugMode&&t._debug[e]}}const z=W("selectors");function j(e,t){if(!e||!t)return void(z(this)&&console.warn("isSelectorMatching() must have 2 params","\n element: ",e,"\n selector: ",t));const i=[t];if("string"==typeof t&&t.includes("html2pdf4doc")){const e=t.replaceAll("html2pdf4doc","html2pdf");e!==t&&i.push(e)}return i.some(t=>{const i=t.charAt(0);if("."===i){const i=t.substring(1);return this._DOM.hasClass(e,i)}if("#"===i){const i=t.substring(1);return this._DOM.hasID(e,i)}if("["===i){this.strictAssert("]"===t.at(-1),`the ${t} selector is not OK.`);const i=t.substring(1,t.length-1);return this._DOM.hasAttribute(e,i)}return this._DOM.getElementTagName(e)===t.toUpperCase()})}function V(e){return!!this._DOM.isTextNode(e)&&this._DOM.getNodeValue(e).trim().length>0}function U(e){return"STYLE"===this._DOM.getElementTagName(e)}function q(e){return"IMG"===this._DOM.getElementTagName(e)}function K(e){return"svg"===this._DOM.getElementTagName(e)}function Y(e){return"OBJECT"===this._DOM.getElementTagName(e)}function X(e){return"LI"===this._DOM.getElementTagName(e)}function Q(e){return this.isSelectorMatching(e,this._selector.neutral)}function Z(e){return this.isSelectorMatching(e,this._selector.textNode)}function J(e){return this.isSelectorMatching(e,this._selector.textLine)}function ee(e){return this.isSelectorMatching(e,this._selector.textGroup)}function te(e){return this.isSelectorMatching(e,this._selector.contentFlowStart)}function ie(e){let t=this._DOM.getLeftNeighbor(e);for(;t&&this.shouldSkipFlowElement(t,{context:"isAfterContentFlowStart"});)t=this._DOM.getLeftNeighbor(t);return this.isSelectorMatching(t,this._selector.contentFlowStart)}function oe(e){return this.isSelectorMatching(e,this._selector.contentFlowEnd)}function ne(e){return this.isSelectorMatching(e,this._selector.complexTextBlock)}function re(e){return this.isComplexTextBlock(e)||this.isWrappedTextNode(e)||this.isWrappedTextLine(e)||this.isWrappedTextGroup(e)}function se(e){return this.isSelectorMatching(e,this._selector.printForcedPageBreak)}function ae(e,t){if(!(e instanceof HTMLElement))return;const i=(t||this._DOM.getComputedStyle(e)).display;return"inline"===i||"inline-block"===i||"inline-table"===i||"inline-flex"===i||"inline-grid"===i}function le(e,t){if(!(e instanceof HTMLElement))return;const i=(t||this._DOM.getComputedStyle(e)).display;return"inline-block"===i||"inline-table"===i||"inline-flex"===i||"inline-grid"===i}function ce(e,t){if(!(e instanceof HTMLElement))return;return"grid"===(t||this._DOM.getComputedStyle(e)).display}function he(e,t){if(!(e instanceof HTMLElement))return;const i=(t||this._DOM.getComputedStyle(e)).display;if("TABLE"!==this._DOM.getElementTagName(e)&&["table","inline-table"].includes(i))return!0;const o=e=>"table-row"===e,n=e=>"table-cell"===e;if(o(i)){const t=this._DOM.getChildren(e);for(const e of t)if(e instanceof HTMLElement&&n(this._DOM.getComputedStyle(e).display))return!0;return!1}if("table-row-group"===(r=i)||"table-header-group"===r||"table-footer-group"===r){const t=this._DOM.getChildren(e);for(const e of t){if(!(e instanceof HTMLElement))continue;if(!o(this._DOM.getComputedStyle(e).display))continue;const t=this._DOM.getChildren(e);for(const e of t)if(e instanceof HTMLElement&&n(this._DOM.getComputedStyle(e).display))return!0}return!1}var r;return!1}function de(e,t){if(e instanceof HTMLElement) //! const computedStyle = style || this._DOM.getComputedStyle(element); return"TABLE"===this._DOM.getElementTagName(e); //! || ['table', 'inline-table'].includes(computedStyle.display) @@ -8,4 +8,4 @@ return"TABLE"===this._DOM.getElementTagName(e); //! For firstPartSpaceForSPlitting we only need selected amendments. const S=i-_-m;this._debug._&&console.log({pageBottom:t,nodeTop:p,preWrapperHeight:_,topCutLineAmend:m,bottomCutLineAmend:b,fullPageHeight:i},{firstPartSpace:w,fullPageSpace:S});let M=0,y=[],P=w;const C=r.position;"relative"!=C&&this._DOM.setStyles(e,{position:"relative"});for(let t=0;tP&&(this._debug._&&console.log(`start a new page: currentBottom (${o}) > floater(${P})`,i),t&&y.push(t),t&&(M+=1),P=t?this._node.getTop(i,e)+S:S)}if(this._DOM.setStyles(e,{position:C}),!y.length)return this._debug._&&console.log("%c END ✂️ slice - NO SPLIITERS",sn),a(),[];this._debug._&&console.log(...s,"splitters",y);const E=y.map((t,i,o)=>{const n=this._node.createSliceWrapper(e),r=t,s=i===o.length-1?1/0:o[i+1],a=h.slice(r,s);return this._DOM.insertAtEnd(n,...a),n});return this._node.markSliceCuts([e,...E]),this._debug._&&console.log(...s,"newPreElementsArray",E),this._DOM.insertAfter(e,...E),this._debug._&&console.log("%c END ✂️ slice PRE",sn),a(),[e,...E]}}}class ln{constructor({config:e,DOM:t,selector:k}){this._config=e,this._DOM=t,this._selector=k,this._debug=e.debugMode?{...e.debugConfig.node}:{},this._assert=!!e.consoleAssert,this._markupDebugMode=this._config.markupDebugMode,this._markers=new $t({debugMode:this._config.debugMode,markupDebugMode:this._config.markupDebugMode,setAttribute:this._DOM.setAttribute.bind(this._DOM),removeAttribute:this._DOM.removeAttribute.bind(this._DOM)}),this._marks=this._markers.marks,this._cache=new Yo,Object.assign(this,i),Object.assign(this,o),Object.assign(this,n),Object.assign(this,r),Object.assign(this,s),Object.assign(this,a),Object.assign(this,l),Object.assign(this,c),Object.assign(this,d),Object.assign(this,h),Object.assign(this,g),Object.assign(this,u),Object.assign(this,p),Object.assign(this,_),Object.assign(this,f),Object.assign(this,m),Object.assign(this,b),Object.assign(this,w),Object.assign(this,S),Object.assign(this,M),Object.assign(this,y),Object.assign(this,P),Object.assign(this,C),Object.assign(this,E),Object.assign(this,T),Object.assign(this,O),Object.assign(this,v),Object.assign(this,D),this._paragraph=new Xo({config:this._config,DOM:this._DOM,selector:this._selector,node:this}),this._pre=new an({config:this._config,DOM:this._DOM,selector:this._selector,node:this}),this._table=new on({config:this._config,DOM:this._DOM,selector:this._selector,node:this}),this._grid=new rn({config:this._config,DOM:this._DOM,selector:this._selector,node:this}),this._tableLike=new nn({config:this._config,DOM:this._DOM,selector:this._selector,node:this})}clearTemplates(e){this._DOM.getAll("template",e).forEach(e=>this._DOM.removeNode(e))}notSolved(e){this._DOM.getElementTagName(e);return!1}}function cn(e){return e?.length?e?.split(/\s+/).filter(Boolean):[]}const hn="#66CC00",dn=`color: ${hn};font-weight:bold`,gn=`border:1px solid ${hn};background:#EEEEEE;color:${hn};`,un="background:#999;color:#FFF;padding: 0 4px;";class pn{constructor({config:e,DOM:t,node:o,selector:n,layout:r,referenceWidth:s,referenceHeight:a,mutationQueue:l}){Object.assign(this,i),this._debug=e.debugMode?{...e.debugConfig.pages}:{},this._assert=!!e.consoleAssert,this._selector=n,this._node=o,this._configSelectors={noHanging:e.noHangingSelectors,pageBreakBefore:e.pageBreakBeforeSelectors,pageBreakAfter:e.pageBreakAfterSelectors,forcedPageBreak:e.forcedPageBreakSelectors,noBreak:e.noBreakSelectors,garbage:e.garbageSelectors},this._DOM=t,this._root=r.root,this._contentFlow=r.contentFlow,this._referenceWidth=s,this._referenceHeight=a,this._mutationQueue=l,this._minLeftLines=2,this._minDanglingLines=2,this._minBreakableLines=this._minLeftLines+this._minDanglingLines,this._minLeftRows=1,this._minDanglingRows=1,this._minBreakableRows=1,this._minPreFirstBlockLines=3,this._minPreLastBlockLines=3,this._minPreBreakableLines=this._minPreFirstBlockLines+this._minPreLastBlockLines,this._minBreakableGridRows=4,this._imageReductionRatio=.8,this._signpostHeight=parseFloat(e.splitLabelHeight)||0,this._commonLineHeight=this._node.getLineHeight(this._root),this._minimumBreakableHeight=this._commonLineHeight*this._minBreakableLines,this._contentFlowEnd,this._contentFlowLastChild,this.pages=[]}calculate(){return this._removeGarbageElements(),this._prepareConfigSelectorConstraints(),this._calculatePageStarts(),this._resolvePageEnds(),this._debug._&&console.log("%c ✔ Pages.calculate()",gn,this.pages),this.pages}_removeGarbageElements(){const e=cn(this._configSelectors.garbage);if(e.length){this._node.resolveConfigSelectorConstraints(e,this._contentFlow).forEach(e=>{this._DOM.removeNode(e)})}}_prepareConfigSelectorConstraints(){this._debug._&&console.groupCollapsed("🗂️ prepare config selector constraints");const e=cn(this._configSelectors.noHanging),t=cn(this._configSelectors.pageBreakBefore),i=cn(this._configSelectors.pageBreakAfter),o=cn(this._configSelectors.forcedPageBreak),n=cn(this._configSelectors.noBreak);this._prepareNoHangingElements(e),this._prepareForcedPageBreakElements({beforeSelectors:t,afterSelectors:i,forcedSelectors:o}),this._prepareNoBreakElements(n);this._debug._&&console.groupEnd("🗂️ prepare config selector constraints")}_prepareNoHangingElements(e){if(e.length){const t=this._node.resolveConfigSelectorConstraints(e,this._contentFlow,"noHangings");t.forEach(e=>{this._node.markNoHanging(e);const t=this._node.findLastChildParent(e,this._contentFlow);t&&this._node.markNoHanging(t,"parent")}),this._debug._&&t.length&&console.log("✓ noHangings got the flag")}}_prepareNoBreakElements(e){if(e.length){const t=this._node.resolveConfigSelectorConstraints(e,this._contentFlow,"noBreaks");t.forEach(e=>this._node.markNoBreak(e)),this._debug._&&t.length&&console.log("✓ noBreaks got the flag")}}_prepareForcedPageBreakElements({beforeSelectors:e,afterSelectors:t,forcedSelectors:i}){const o=e.length?this._node.resolveConfigSelectorConstraints(e,this._contentFlow,"pageStarters"):[],n=t.length?this._node.resolveConfigSelectorConstraints(t,this._contentFlow,"pageEnders"):[],r=this._node.resolveConfigSelectorConstraints(i,this._contentFlow,"forcedPageStarters");if(o.length){const e=o[0],t=this._node.findFirstChildParent(e,this._contentFlow)||e;this._node.isAfterContentFlowStart(t)&&o.shift()}if(n.length){const e=n.at(-1),t=this._node.findLastChildParent(e,this._contentFlow)||e,i=this._DOM.getRightNeighbor(t);this._node.isContentFlowEnd(i)&&n.pop()}o.length&&o.forEach(e=>{const t=this._node.findBetterForcedPageStarter(e,this._contentFlow);this.strictAssert(t,"findBetterForcedPageStarter should return an element. Returns:",t),this._DOM.insertBefore(t,this._node.createForcedPageBreak()),this._debug._&&console.log("📄⤵️ pageStarters • inserted before",{candidate:t,element:e})}),r&&r.forEach(e=>{if(!this._node.isForcedPageBreak(e)){const t=this._node.findBetterForcedPageStarter(e,this._contentFlow);this.strictAssert(t,"findBetterForcedPageStarter should return an element. Returns:",t),this._DOM.insertBefore(t,this._node.createForcedPageBreak()),this._debug._&&console.log("📄⤵️⤵️ forcedPageStarters • inserted before",{candidate:t,element:e})}}),n.length&&n.forEach(e=>{const t=this._node.findLastChildParent(e,this._contentFlow);t&&(e=t),this._node.isForcedPageBreak(this._DOM.getRightNeighbor(e))||(this._DOM.insertAfter(e,this._node.createForcedPageBreak()),this._debug._&&console.log("📄⤴️ pageEnders • inserted after",{element:e}))})}_registerFirstPage(){this._registerPageStart({element:this._DOM.getElement(this._selector.contentFlowStart,this._contentFlow),context:"register First Page"})}_isContentFlowShort(){const e=this._DOM.getElement(this._selector.contentFlowEnd,this._contentFlow),t=this._node.getBottom(e,this._root),i=tthis._registerPageStart({element:e,context:"All Forced Page Break Inside _contentFlow"}))}_calculatePageStarts(){if(this._registerFirstPage(),this._isContentFlowShort())return void this._resolveForcedPBInsideContentFlow();const e=this._node.getPreparedChildren(this._contentFlow);this._contentFlowEnd=e.at(-1),this._contentFlowLastChild=e.at(-2),this._debug._&&console.groupCollapsed("%c🚸 children(contentFlow)",gn),this._debug._&&console.log(e),this._debug._&&console.groupEnd("%c🚸 children(contentFlow)",gn),this._parseNodes({array:e})}_resolvePageEnds(){for(let e=1;e"),"📄",this.pages.length,{currentElement:o}),this._debug._parseNode&&console.log({previousElement:i,currentElement:o,nextElement:n,isFirstChild:e,isLastChild:t,arrayTopParent:r,arrayBottomParent:s}),!n)return this._node.markProcessed(o,"content-flow-end"),this._debug._parseNode&&console.log("%c END _parseNode (!nextElement)",un),void(this._debug._parseNode&&console.groupEnd());const l=this._node.getBottom(o,this._root),c=s?this._node.getBottom(s,this._root):void 0;let h=c;const d=this._node.getTop(o,this._root);if(void 0!==c&&c-l>=this._referenceHeight){if(h=void 0,this._debug._parseNode&&console.log("🪁 Tail: We got a tail from the lower shells of the last child. Giving up our “last child” rule here and will try to insert a page break at the end of some parent. ",{arrayParentBottomEdge:c,currentParentBottomEdge:h,currentElementBottom:l,pageBottom:this.pages.at(-1).pageBottom},{currentElement:o,arrayBottomParent:s}),l<=this.pages.at(-1).pageBottom){this._debug._parseNode&&console.log("🪁 Tail: currentElementBottom <= this.pages.at(-1).pageBottom");const e=[];let t=o;for(this._debug._parseNode&&console.log("🪁 Tail: currentElement",o);t&&t!==s;)e.push({element:t,bottom:this._node.getBottom(t,this._root)}),t=t.parentElement;if(t!==s)throw new Error('"bottom" parent not found in the ancestor chain');e.push({element:s,bottom:c}),this._debug._parseNode&&console.log("🪁 Tail: _parents",e),this._debug._parseNode&&console.log("🪁 Tail: current PageBottom",this.pages.at(-1).pageBottom);for(let t=0;tthis.pages.at(-1).pageBottom){this._debug._parseNode&&console.log("🪁 Tail: _parents[i].bottom > this.pages.at(-1).pageBottom",e[t].bottom,">",this.pages.at(-1).pageBottom,e[t].element);const i=this._node.createNeutral();if(i.classList.add("service"),this._DOM.insertAtEnd(e[t].element,i),this._registerPageStart({element:i,context:"_isTailLongerThanPage"}),this._debug._parseNode&&console.log("_registerPageStart",i),this._node.markProcessed(i,"node is ForcedPageBreak"),this._debug._parseNode&&console.log(this.pages.at(-1).pageBottom,c),!(c>this.pages.at(-1).pageBottom))return this._debug._parseNode&&console.log("%c END _parseNode (bottom Tail of parents)",un),void(this._debug._parseNode&&console.groupEnd());this._debug._&&console.log("🧧 • arrayParentBottomEdge > this.pages.at(-1).pageBottom")}return this._debug._parseNode&&console.log("%c END _parseNode (bottom Tail of parents)",un),void(this._debug._parseNode&&console.groupEnd())}this._debug._parseNode&&console.log("🪁 Tail: currentElementBottom > this.pages.at(-1).pageBottom","DOING NOTHING")} //! currentParentBottomEdge is refreshed right before, so descendants see live parent boundaries. -const g=h??l;if(this._debug._parseNode&&console.log("[_parseNode]",{currentBlockBottom:g,currentParentBottomEdge:h,currentElementBottom:l}),this.pages.at(-1).pageStart===o&&(this._node.isNotBreakable(o)||g<=this.pages.at(-1).pageBottom))return this._node.markProcessed(o,"node is already registered and fits in the page"),this._debug._parseNode&&console.log("%c END _parseNode (node is already registered and fits in the next page)",un),void(this._debug._parseNode&&console.groupEnd());if(d>=this.pages.at(-1).pageBottom&&l-d){const t=e&&Boolean(r)?this._node.getTopForPageStartCandidate(r,this._root):void 0,i=Boolean(t)&&d-t>=this._referenceHeight;if(i)this._debug._parseNode&&console.log("🪁 beginning Tail",{parentTop:t,currentParentBottomEdge:h,currentElementTop:d,pageBottom:this.pages.at(-1).pageBottom},{currentElement:o,arrayTopParent:r});else{const e=this._DOM.getComputedStyle(o)?.display||"";if(e.includes("inline")||"contents"===e)return this._debug._parseNode&&console.log("🧅 current in thin wrapper"),this._registerPageStart({element:o,improveResult:!0,context:"🧅 current in thin wrapper"}),this._debug._parseNode&&console.log("%c END _parseNode (registered new page start)",un),void(this._debug._parseNode&&console.groupEnd())}this._registerPageStart({element:o,improveResult:!i,context:"currentElementTop >= this.pages.at(-1).pageBottom"})}if(this._node.isForcedPageBreak(o))return this._registerPageStart({element:o,context:"currentElement is ForcedPageBreak"}),this._node.markProcessed(o,"node is ForcedPageBreak"),this._debug._parseNode&&console.log("%c END _parseNode (isForcedPageBreak)",un),void(this._debug._parseNode&&console.groupEnd());this.strictAssert(this._DOM.getElementOffsetParent(o),"it is expected that the element has an offset parent",o);const u=this._node.getTop(n,this._root);if(this._debug._parseNode&&console.log(...a,"• pageBottom",this.pages.at(-1).pageBottom,"\n","• nextElementTop",u),u<=this.pages.at(-1).pageBottom)return this._debug._parseNode&&console.log("nextElementTop <= this.pages.at(-1).pageBottom",u,"<=",this.pages.at(-1).pageBottom),this._node.markProcessed(o,"node fits"),this._node.findAllForcedPageBreakInside(o).forEach(e=>{this._node.markProcessed(e,"node is ForcedPageBreak (inside a node that fits)"),this._registerPageStart({element:e,context:"All Forced Page Break Inside currentElement"})}),this._debug._parseNode&&console.log("%c END _parseNode (node pass)",un),void(this._debug._parseNode&&console.groupEnd());{if(this._debug._parseNode&&console.log("nextElementTop > this.pages.at(-1).pageBottom",u,">",this.pages.at(-1).pageBottom),g<=this.pages.at(-1).pageBottom)return this._debug._parseNode&&console.log("currentBlockBottom <= this.pages.at(-1).pageBottom",g,"<=",this.pages.at(-1).pageBottom,"\n register nextElement as pageStart"),this._node.isNoHanging(o)?(this._debug._parseNode&&console.log("currentElement fits / last, and _isNoHanging => move it to the next page"),this._node.markProcessed(o,"it fits & last & _isNoHanging => move it to the next page"),this._registerPageStart({element:o,improveResult:!0,context:"currentElement is NoHanging"}),this._debug._parseNode&&console.log("%c END _parseNode (isNoHanging)",un),void(this._debug._parseNode&&console.groupEnd())):(this._registerPageStart({element:n,type:"next",context:"currentBlockBottom <= PgBtt && nextElementTop > PgBtt"}),this._node.markProcessed(o,"fits, its bottom falls exactly on the cut"),this._node.markProcessed(n,"starts new page, its top is exactly on the cut"),this._debug._parseNode&&console.log("%c END _parseNode (currentElement fits, register the next element)",un),void(this._debug._parseNode&&console.groupEnd()));const t=this._node.resolveReplacedElement(o,{prefer:"first"});if(t){const i=this._node.isSVG(t),s=i?this._node.createSignpost(t):t,a=this._node.getTop(s,this._root),l=this._node.getBottom(s,this._root),d=e&&r?this._node.getTop(r,this._root):void 0,g=r||this._DOM.getParentNode(s),u=this._node.estimateInlineImgGapBelow(g);let p=this.pages.at(-1).pageBottom-a-u;p-=c?c-l:0;const _=this._DOM.getElementOffsetHeight(s),f=this._DOM.getElementOffsetWidth(s);if(this._debug._parseNode&&console.log("🖼️🖼️🖼️🖼️🖼️🖼️ (if mediaElement)",t,{_imageParent:g,arrayTopParent:r,arrayParentBottomEdge:c,availableImageNodeSpace:p,currentParentBottomEdge:h,currentElement:o,currentImage:s,currentImageHeight:_,currentImageWidth:f,isSvgMedia:i,imgGapBelow:u,parentTopForImage:d}),f>this._referenceWidth&&this._debug._parseNode&&console.warn("%c IMAGE is too wide","color: red"),_this._imageReductionRatio)return this._debug._parseNode&&console.log("Register next elements; 🖼️🖼️🖼️ IMG RESIZE to availableImageNodeSpace:",p,o),this._node.markProcessed(o,`IMG with ratio ${m}, and next starts on next`),this._node.fitElementWithinBoundaries({element:t,height:_,width:f,vspace:p,hspace:this._referenceWidth}),this._registerPageStart({element:n,type:"next",context:"current IMG was RESIZED to availableImageNodeSpace"}),this._debug._parseNode&&console.log("%c END _parseNode 🖼️ IMG scaled",un),void(this._debug._parseNode&&console.groupEnd());this._node.markProcessed(o,"IMG starts on next");const b=i?s:t;this._registerPageStart({element:b,improveResult:!0,context:"move IMG it to next page"}),this._debug._parseNode&&console.log("🖼️ register Page Start",o);let w=this.pages.at(-1).pageBottom-a-u;const S=c?null:this._node.findLastChildParent(o,this._contentFlow),M=c||this._node.getBottom(S||o,this._root);return M>l&&(w-=M-l),_>w&&(this._node.fitElementWithinBoundaries({element:t,height:_,width:f,vspace:w,hspace:this._referenceWidth}),this._node.markProcessed(o,"IMG starts on next and resized"),this._debug._parseNode&&console.log("🖼️ ..and fit it to full page",o)),this._debug._parseNode&&console.log("%c END",un),void(this._debug._parseNode&&console.groupEnd())}if(o.style.height){this._debug._parseNode&&console.log("🥁 currentElement has HEIGHT",o.style.height);const e=this.pages.at(-1).pageBottom-d,t=u-d,i=e/t,r=this._referenceHeight/t;this._debug._parseNode&&console.log("\n🥁 currentElementTop",d,"\n🥁 pageBottom",this.pages.at(-1).pageBottom,"\n🥁 availableSpace",e,"\n🥁 currentElementContextualHeight",t,"\n🥁 availableSpaceFactor",i,"\n🥁 fullPageFactor",r),this.strictAssert(i<1);const s=e=>{this._DOM.setStyles(o,{transform:`scale(${e})`,"transform-origin":"top center"});const i=Math.max(0,Math.trunc(t*e)),n=this._DOM.getParentNode(o);if(n&&this._node.isNeutral(n))return void this._DOM.setStyles(n,{height:`${i}px`});const r=this._node.createNeutral();this._DOM.setStyles(r,{display:"inline-block",verticalAlign:"top",width:"100%",height:`${i}px`}),this._DOM.wrap(o,r)};return i>.8?(this._debug._parseNode&&console.log("🥁 availableSpaceFactor > 0.8: ",i),s(i),this._registerPageStart({element:n,type:"next",context:"IMMEDIATELY scale currentElement to the remaining space; availableSpaceFactor > 0.8; currentElement.style.height"}),this._node.markProcessed(o,"processed as a image, has been scaled down within 20%, the next one starts a new page"),this._node.markProcessed(n,"the previous one was scaled down within 20%, and this one starts a new page."),this._debug._parseNode&&console.log("%c END _parseNode (has height & scale)",un),void(this._debug._parseNode&&console.groupEnd())):(r<1&&(this._debug._parseNode&&console.log("🥁 fullPageFactor < 1: ",r),this._node.markProcessed(o,"processed as a image, has been scaled down, and starts new page"),s(r)),this._debug._parseNode&&console.log("🥁 _registerPageStart",o),this._registerPageStart({element:o,improveResult:!0,context:'has height & processed "as a image", has been scaled down, and starts new page'}),this._node.markProcessed(o,"processed as a image, starts new page"),this._debug._parseNode&&console.log("%c END _parseNode (has height & put on next page)",un),void(this._debug._parseNode&&console.groupEnd()))}if(this._debug._parseNode&&console.log("split or not? \n","currentBlockBottom",g),this._debug._parseNode&&console.log("currentParentBottomEdge || currentElementBottom",{currentParentBottomEdge:h,currentElementBottom:l},"currentBlockBottom > this.pages.at(-1).pageBottom",g,">",this.pages.at(-1).pageBottom),this._DOM.getElementOffsetHeight(o) this.pages.at(-1).pageBottom"}),this._node.markProcessed(o,"starts new page, #fewLines"),this._debug._parseNode&&console.log("%c END _parseNode #fewLines",un),void(this._debug._parseNode&&console.groupEnd());const p=this._node.getSplitChildren(o,this.pages.at(-1).pageBottom,this._referenceHeight,this._root);this._debug._parseNode&&console.log("try to break it and loop the children:",p);if(p.length){const e=r||o,t=s||o,a=this._node.isSliced(o)||this._node.isSlough(o);this._debug._parseNode&&console.log({isSlicedParent:a,arrayTopParent:r}),this._parseNodes({array:p,previous:i,next:n,arrayTopParent:a?void 0:e,arrayBottomParent:a?void 0:t}),this._node.markProcessed(o,"getSplitChildren and _parseNodes")}else this._debug._parseNode&&console.log(...a,"_registerPageStart (from _parseNode): \n",o),this._registerPageStart({element:o,improveResult:!0,context:"does not fit, has no children, register it (or parents if improved)"}),this._node.markProcessed(o,"doesn't fit, has no children, register it or parents")}this._debug._parseNode&&console.log("%c END _parseNode [•••]",un,{currentElement:o}),this._debug._parseNode&&console.groupEnd()}}class _n{constructor({config:e,DOM:t,node:i,selector:o,layout:n}){this._debug=e.debugMode?{...e.debugConfig.paper}:{},this._DOM=t,this._selector=o,this._node=i,this._frontpageTemplate=n.frontpageTemplate,this._headerTemplate=n.headerTemplate,this._footerTemplate=n.footerTemplate,this._pageChromeSelector=o?.pageChrome||".pageChrome",this._pageBodySpacerSelector=o?.pageBodySpacer||".pageBodySpacer",this._pageHeaderSelector=o?.pageHeader||".pageHeader",this._pageFooterSelector=o?.pageFooter||".pageFooter",this._headerContentSelector=o?.headerContent||".headerContent",this._footerContentSelector=o?.footerContent||".footerContent",this._frontpageElementSelector=o?.frontpageElement||".frontpageElement",this._frontpageContentSelector=o?.frontpageContent||".frontpageContent",this._virtualPaperSelector=o?.virtualPaper||".virtualPaper",this._virtualPaperTopMarginSelector=o?.virtualPaperTopMargin||".virtualPaperTopMargin",this._virtualPaperBottomMarginSelector=o?.virtualPaperBottomMargin||".virtualPaperBottomMargin",this._pageNumberRootSelector=o?.pageNumberRoot?N(o.pageNumberRoot):void 0,this._pageNumberCurrentSelector=o?.pageNumberCurrent?N(o.pageNumberCurrent):void 0,this._pageNumberTotalSelector=o?.pageNumberTotal?N(o.pageNumberTotal):void 0,this._paperHeight,this._frontpageFactor,this.headerHeight,this.footerHeight,this.bodyHeight,this.bodyWidth,this._calculatePaperParams()}createPageChrome({pageNumber:e,pageCount:t}){const i=this._node.create(this._pageChromeSelector);this._node.markPageNumber(i,e);const o=this._composePageElements({pageNumber:e,pageCount:t});return this._DOM.insertAtEnd(i,o),i}_composePageElements({pageNumber:e,pageCount:t}){const i=this._DOM.createDocumentFragment(),o=this._createPageBodySpacer(this.bodyHeight);this._node.markPageNumber(o,e);const n=this._createPageHeader(this._headerTemplate),r=this._createPageFooter(this._footerTemplate);return this._DOM.insertAtEnd(i,this.createVirtualTopMargin(),n,o,r,this.createVirtualBottomMargin()),e&&t&&(this._setPageNumber(n,e,t),this._setPageNumber(r,e,t)),i}createFrontpage(){if(!this._frontpageTemplate)return void(this._debug&&console.warn("[paper • createFrontpage()] called without a template"));const e=this._node.create(this._frontpageElementSelector);this._DOM.setStyles(e,{height:this.bodyHeight+"px",display:"inline-block",width:"100%","vertical-align":"top"});const t=this._createFrontpageContent(this._frontpageTemplate,this._frontpageFactor);return this._DOM.setStyles(t,{display:"flow-root","transform-origin":"top center",height:"100%"}),this._DOM.insertAtStart(e,t),e}createVirtualTopMargin(){return this._node.create(this._virtualPaperTopMarginSelector)}createVirtualBottomMargin(){return this._node.create(this._virtualPaperBottomMarginSelector)}createVirtualPaper(e){const t=this._node.create(this._virtualPaperSelector);return e&&this._DOM.insertAtEnd(t,this.createVirtualTopMargin(),e,this.createVirtualBottomMargin()),t}_createFrontpageContent(e,t){const i=this._node.create(this._frontpageContentSelector);return e&&this._DOM.setInnerHTML(i,e),t&&this._DOM.setStyles(i,{transform:`scale(${t})`}),i}_createPageBodySpacer(e,t){const i=this._node.create(this._pageBodySpacerSelector);return this._DOM.setStyles(i,{height:e+"px"}),t&&this._DOM.insertAtEnd(i,t),i}_createPageHeader(e){const t=this._node.create(this._pageHeaderSelector);if(e){const i=this._node.create(this._headerContentSelector);this._DOM.setInnerHTML(i,e),this._DOM.insertAtEnd(t,i)}return t}_createPageFooter(e){const t=this._node.create(this._pageFooterSelector);if(e){const i=this._node.create(this._footerContentSelector);this._DOM.setInnerHTML(i,e),this._DOM.insertAtEnd(t,i)}return t}_setPageNumber(e,t,i){const o=this._pageNumberRootSelector?this._DOM.getElement(this._pageNumberRootSelector,e):this._pageNumberRootSelector;if(o){const e=this._DOM.getElement(this._pageNumberCurrentSelector,o),n=this._DOM.getElement(this._pageNumberTotalSelector,o);this._DOM.setInnerHTML(e,t),this._DOM.setInnerHTML(n,i)}}_calculatePaperParams(){const e=this._createPageBodySpacer(),t=this._createPageHeader(this._headerTemplate),i=this._createPageFooter(this._footerTemplate),o=this._node.create(this._virtualPaperSelector);this._DOM.insertAtEnd(o,this.createVirtualTopMargin(),t,e,i,this.createVirtualBottomMargin());const n=this._node.create("#workbench");this._DOM.setStyles(n,{position:"absolute",left:"-3000px"}),this._DOM.insertAtEnd(n,o),this._DOM.insertAtStart(this._DOM.body,n);const r=this._DOM.getElementBCR(o).height,s=this._DOM.getElementBCR(t).height||0,a=this._DOM.getElementBCR(i).height||0,l=this._DOM.getElementBCR(e).height,c=this._DOM.getElementBCR(e).width,h=this._createFrontpageContent(this._frontpageTemplate);this._DOM.insertAtStart(e,h);const d=this._DOM.getElementBCR(e).height,g=d>l?l/d:1;this._DOM.removeNode(n),s>.2*r&&console.warn("It seems that your custom header is too high"),a>.15*r&&console.warn("It seems that your custom footer is too high"),g<1&&console.warn("It seems that your frontpage content is too large. We made it smaller to fit on the page. Check out how it looks! It might make sense to fix this with styles or reduce the text amount."),this._paperHeight=r,this.headerHeight=s,this.footerHeight=a,this.bodyHeight=l,this.bodyWidth=c,this._frontpageFactor=g}}class fn{constructor({config:e,DOM:t,selector:o,node:n,pages:r,layout:s,paper:a,mutationQueue:l}){this._config=e,this._debug=e.debugMode?{...e.debugConfig.preview}:{},this._assert=!!e.consoleAssert,Object.assign(this,i),this._accumulatedAssertions={},this._DOM=t,this._selector=o,this._node=n,this._virtualPaperGapSelector=o.virtualPaperGap,this._runningSafetySelector=o.runningSafety,this._printPageBreakSelector=o.printPageBreak,this._pageDivider=o.pageDivider,this._virtualPaper=o.virtualPaper,this._virtualPaperTopMargin=o.virtualPaperTopMargin,this._pageBodySpacer=o.pageBodySpacer,this._pages=r,this._root=s.root,this._contentFlow=s.contentFlow,this._paperFlow=s.paperFlow,this._overlayFlow=s.overlayFlow,this._paper=a,this._mutationQueue=l,this._hasFrontPage=!!s.frontpageTemplate}create(){return this._mutationQueue?.flush(),this._processFrontPage(),this._processPages(),(!0===this._config.mask||"true"===this._config.mask)&&this._addMask(),this._makeRootVisible(),this._accumulatedAssertions}_addMask(){const e=parseInt(this._config.virtualPagesGap),t=parseInt(this._config.paperHeight),i=parseInt(this._config.printTopMargin),o=parseInt(this._config.printBottomMargin),n=parseInt(this._config.headerMargin),r=parseInt(this._config.footerMargin),s=this._paper.headerHeight,a=this._paper.footerHeight,l=this._paper.bodyHeight,c=s?Math.ceil(n/2):0,h=a?Math.ceil(r/2):0,d=s-c,g=a-h,u=l+c+h,p=i+d,_=t+e;this.strictAssert(t===u+d+i+g+o,"Paper size calculation params do not match");const f=function({maskStep:e,maskWindow:t,maskFirstShift:i}){return`\n -webkit-mask-image: linear-gradient(\n black 0,\n black ${t}px,\n transparent ${t}px,\n transparent ${e}px\n );\n mask-image: linear-gradient(\n black 0,\n black ${t}px,\n transparent ${t}px,\n transparent ${e}px\n );\n -webkit-mask-repeat: no-repeat;\n mask-repeat: no-repeat;\n -webkit-mask-size: 100% ${e}px;\n mask-size: 100% ${e}px;\n -webkit-mask-position: 100% ${i}px;\n mask-position: 100% ${i}px;\n -webkit-mask-repeat: repeat-y;\n mask-repeat: repeat-y;\n -webkit-mask-origin: border-box;\n mask-origin: border-box;\n `}({maskFirstShift:p,maskStep:_,maskWindow:u}),m=`\n @media screen {\n ${this._selector.contentFlow} {\n ${f}\n }\n }\n @media print {\n ${this._selector.root}::after {\n /* Safety placeholder for the bottom margin of the paper.\n Remove if the margins at the bottom of the page are replaced with padding.\n Placed under the footer.\n */\n --paper-color: ${this._config.paperColor};\n background: var(--paper-color, white);\n content: '';\n position: fixed;\n pointer-events: none;\n z-index: 11;\n inset: 0;\n top: unset;\n height: ${o+a}px;\n }\n }`;this._node.insertStyle(m,"mask")}_makeRootVisible(){this._DOM.setStyles(this._root,{visibility:"visible"})}_processFrontPage(){if(this._hasFrontPage){const e=this._paper.createFrontpage();this._DOM.insertAtStart(this._contentFlow,e),this._pages.unshift({pageStart:e,pageEnd:e}),this._pages[1].prevPageEnd=e}}_processPages(){for(let e=0;e{this._DOM.setStyles(e,{"margin-top":["0","important"]})})}else this.strictAssert(0,"[preview] [_preventPageOverflow] current page First Element do not pass! page:",e);if(i){this._DOM.setStyles(i,{"margin-bottom":["0","important"]});this._node.getBottomCollapseChain(i,this._root).forEach(e=>{this._DOM.setStyles(e,{"margin-bottom":["0","important"]})}),this._node.isIMG(i)&&this._DOM.setStyles(i,{"vertical-align":["top","important"]})}else e>0&&this._debug._&&console.warn(`[preview] There is no page end element before ${e}. Perhaps it's a 'beginningTail'.`)}_createPageBreaker(e,t){const i=this._node.create(this._pageDivider);return this._DOM.setAttribute(i,"[page]",`${e+1}`),this._node.registerPageDivider(i,e+1),t&&this._paper.footerHeight&&this._DOM.setStyles(i,{marginTop:this._paper.footerHeight+"px"}),this._paper.headerHeight&&this._DOM.setStyles(i,{paddingBottom:this._paper.headerHeight+"px"}),i}_updatePageNumberElementAttrValue(e){this._hasFrontPage&&this._node.markPageStart(this._pages[e].pageStart,`${e+1}`),this._node.markPageEnd(this._pages[e].pageEnd,`${e+1}`)}_insertPaper(e,t,i){i?this._DOM.insertAtEnd(e,i,t):this._DOM.insertAtEnd(e,t)}_createVirtualPaperGap(){return this._node.create(this._virtualPaperGapSelector)}_createVirtualPaperTopMargin(){return this._paper.createVirtualTopMargin()}_createVirtualPaperBottomMargin(){return this._paper.createVirtualBottomMargin()}_insertFrontpageSpacer(e,t){const i=this._node.create();return this._DOM.setStyles(i,{paddingBottom:t+"px"}),this._DOM.setAttribute(i,".printFrontpageSpacer"),this._DOM.insertAtStart(e,i),i}_insertHeaderSpacer(e,t){const i=this._DOM.createDocumentFragment(),o=this._node.create(this._runningSafetySelector);this._DOM.insertAtEnd(i,this._createVirtualPaperTopMargin(),o),this._DOM.insertAtEnd(e,i)}_insertFooterSpacer({target:e,footerHeight:t,pageSeparator:i,paperSeparator:o,pageIndex:n}){const r=this._DOM.createDocumentFragment(),s=this._createVirtualPaperGap(),a=this._node.create(this._runningSafetySelector);this._DOM.insertAtEnd(r,a,this._createVirtualPaperBottomMargin(),this._node.create(this._printPageBreakSelector),s),this._DOM.insertAtStart(e,r),this._balanceFooter({balancingFooter:a,contentSeparator:s,pageSeparator:i,paperSeparator:o,pageIndex:n})}_balanceFooter({balancingFooter:e,contentSeparator:t,pageSeparator:i,paperSeparator:o,pageIndex:n}){const r=this._node.getTop(i,this._root),s=this._node.getTop(o,this._root),a=this._node.getTop(t,this._root);this.strictAssert(s==r,"balancers in paper layers are misaligned",{pageIndex:n,balancingFooter:e,contentSeparator:t,pageSeparator:i,paperSeparator:o,paperSeparatorTop:s,pageSeparatorTop:r});const l=r-a;this._debug._&&console.log({balancingFooter:e,contentSeparatorTop:a,paperSeparatorTop:s,pageSeparatorTop:r}),this._DOM.setStyles(e,{"margin-bottom":l+"px"});l<-1&&(this._debug._&&console.warn(`[pages: ${n}-${n+1}] balancer is negative: ${l} < 0. Submitted to the Validator.`,t),this._accumulatedAssertions[n]={balancer:l,contentSeparator:t,pageNumber:n})}}class mn{constructor({config:e,DOM:t,selector:i,node:o,layout:n}){this._globalDebugMode=e.debugMode,this._debug=e.debugMode?{...e.debugConfig.toc}:{},this._assert=!!e.consoleAssert,this._DOM=t,this._node=o,this._tocPageNumberSelector=e.tocPageNumberSelector,this._root=n.root,this._contentFlow=n.contentFlow,this._pageDividerSelector=i.pageDivider}render(){this._globalDebugMode&&console.time("Processing TOC"),this._debug._&&console.log(`\n📑 TOC: I am here!\n\ntocPageNumberSelector:\n • ${this._tocPageNumberSelector}\n pageDividerSelector:\n • ${this._pageDividerSelector}\n `);const e=this._DOM.getAll(this._tocPageNumberSelector,this._contentFlow);if(this._debug._&&console.log("📑 tocPageNumberBoxes",e.length),!e.length)return void(this._debug._&&console.log("📑 no valid toc"));const t=this._node.getRegisteredPageDividers?.(),i=(t&&t.size?[...t.entries()]:this._DOM.getAll(this._pageDividerSelector,this._contentFlow).map((e,t)=>[t+1,e])).reduce((e,[t,i])=>{const o=this._node.getTop(i,this._root)-1,n=String(t);return e[o]=n,e},{});this._debug._&&console.log("📑 dataFromPagesMarkers",i);const o=e.reduce((e,t)=>{const i=this._DOM.getDataId(t),o=this._DOM.getElementById(i),n=this._node.getTop(o,this._root);return e[n]={box:t,id:i,targetTop:n},e},{});this._debug._&&console.log("📑 dataFromTOC",o);const n={...i,...o};let r=0;this._debug._&&console.groupCollapsed("Processing obj");for(const e in n){const t=n[e];this._debug._&&console.log(`Processing ${e}: ${t}`),"string"==typeof t?r=t:(t.page=r,this._DOM.setInnerHTML(t.box,r))}this._debug._&&console.groupEnd("Processing obj"),this._debug._&&console.log("📑 tocObject",n),this._globalDebugMode&&console.timeEnd("Processing TOC")}}class bn{constructor({config:e,DOM:t,selector:o,node:n,layout:r,pages:s,previewValidations:a}){this._config=e,this._selector=o,this._DOM=t,this._node=n,this._layout=r,this._root=r.root,this._pageCount=s.length,this._accumulatedAssertions=a,this._assert=!!e.consoleAssert,Object.assign(this,i)}init(){this._config.debugMode&&console.log("🐙 i am Validator!"),this._validateLayout()}_validateLayout(){const e=this._collectPageOverflowAssertions();for(const[t,i]of Object.entries(e))this._accumulatedAssertions[t]={...this._accumulatedAssertions[t]||{},...i};this.strictAssert(0===Object.keys(this._accumulatedAssertions).length,"Page overflow detected:",this._accumulatedAssertions)}_collectPageOverflowAssertions(){const e=`${this._selector.paperFlow} ${this._selector.virtualPaperGap}`,t=`${this._selector.contentFlow} ${this._selector.virtualPaperGap}`,i=(this._selector.contentFlow,this._selector.contentFlowEnd,`${this._selector.pageChrome} ${this._selector.pageBodySpacer}`),o={},n=[...this._DOM.getAllElements(e)],r=[...this._DOM.getAllElements(t)];this._assertElementsCount(this._pageCount-1,{paperGapElements:n,pageGapElements:r});const s=n.map(e=>this._node.getTop(e,this._root)),a=r.map(e=>this._node.getTop(e,this._root));for(let e=0;ee?this._node.getBottom(e,this._root):void 0),u=h.map(e=>e?this._node.getBottom(e,this._root):void 0);for(let e=0;e{e<=.1&&(clearInterval(t),this._preloader.remove()),this._preloader.style.opacity=e,e-=.1*e},50);this._debugMode&&console.log("%c Preloader removed ",wn)}_insertStyle(){const e=document.querySelector("head"),t=document.createElement("style");t.append(document.createTextNode(this._css())),t.setAttribute("data-preloader-style",""),e.append(t)}_css(){return`\n /* PRELOADER */\n .lds-dual-ring {\n position: absolute;\n z-index: 99999;\n top: 0; left: 0; bottom: 0; right: 0;\n background: ${this._preloaderBackground};\n display: flex;\n justify-content: center;\n align-items: center;\n }\n /*\n .lds-dual-ring:after {\n content: " ";\n display: block;\n width: 64px;\n height: 64px;\n margin: 8px;\n border-radius: 50%;\n border: 6px solid #eee;\n border-color: #eee transparent #eee transparent;\n animation: lds-dual-ring 1.2s linear infinite;\n }\n @keyframes lds-dual-ring {\n 0% {\n transform: rotate(0deg);\n }\n 100% {\n transform: rotate(360deg);\n }\n }\n */\n `}_resolveTarget(e){const t=(e.preloaderTarget||"").trim();return t&&document.querySelector(t)}}const Mn="html2pdf4doc-resource-status";class yn{constructor(e,t){this._config=e,this._DOM=t,this._debugMode=e.debugMode,this._resourceIssues=[]}async run(){return await this._awaitResources(),this._resourceIssues}async _awaitResources(){const e=this._config.resourceTimeout??this._config.resourceTimeoutMs??2e3,t=this._config.initialRoot,i=t&&this._DOM.document.querySelector(t)||this._DOM.body,o=i?[i,...i.querySelectorAll("*")]:[];this._DOM.document.fonts?.ready&&await this._DOM.document.fonts.ready;const n=[...i.querySelectorAll("img")].map(t=>this._waitForImageElement(t,e)),r=[...i.querySelectorAll("svg image")].map(t=>{const i=t.getAttribute("href")||t.getAttribute("xlink:href");return i?this._preloadUrl(i,t,e):Promise.resolve()}),s=o.flatMap(t=>function(e){if(!e||"none"===e)return[];const t=[],i=/url\((['"]?)(.*?)\1\)/g;let o;for(;null!==(o=i.exec(e));)o[2]&&t.push(o[2]);return t}(window.getComputedStyle(t).backgroundImage).map(i=>this._preloadUrl(i,t,e))),a=[...i.querySelectorAll("object, embed")].map(t=>Pn(new Promise(e=>{t.addEventListener("load",()=>{"OBJECT"!==t.tagName||t.contentDocument||this._markResourceStatus(t,"error"),e()},{once:!0}),t.addEventListener("error",()=>{this._markResourceStatus(t,"error"),e()},{once:!0})}),e,()=>this._markResourceStatus(t,"timeout")));await Promise.all([...n,...r,...s,...a])}_waitForImageElement(e,t){if(e.complete&&0===e.naturalWidth)return this._markResourceStatus(e,"error"),Promise.resolve();return Pn(e.decode?e.decode().catch(()=>{this._markResourceStatus(e,"error")}):e.complete?Promise.resolve():new Promise(t=>{e.addEventListener("load",t,{once:!0}),e.addEventListener("error",()=>{this._markResourceStatus(e,"error"),t()},{once:!0})}),t,()=>this._markResourceStatus(e,"timeout"))}_preloadUrl(e,t,i){if(!e||e.startsWith("data:"))return Promise.resolve();const o=new Image,n=new Promise(e=>{o.addEventListener("load",e,{once:!0}),o.addEventListener("error",()=>{this._markResourceStatus(t,"error"),e()},{once:!0})});return o.src=e,Pn(n,i,()=>this._markResourceStatus(t,"timeout"))}_markResourceStatus(e,t){e&&!e.hasAttribute(Mn)&&(this._DOM.setAttribute(e,`[${Mn}]`,t),this._debugMode&&console.log(`[HTML2PDF4DOC] Resource status: ${t}`,e),this._handleResourceIssue({element:e,status:t}))}_handleResourceIssue(e){if(!e||!e.element)return;const t={status:e.status,element:e.element,tag:e.element.tagName};this._resourceIssues.push(t),this._warnResourceIssue(t),this._emitResourceIssue(t)}_warnResourceIssue(e){console.warn(`[HTML2PDF4DOC] Resource ${e.status}`,e.element)}_emitResourceIssue(e){this._DOM.document.dispatchEvent(new CustomEvent("html2pdf4doc:resource-issue",{detail:e}))}}function Pn(e,t,i){return!t||t<=0?e.catch(()=>{}):new Promise(o=>{let n=!1;const r=setTimeout(()=>{n||(n=!0,i(),o())},t);e.catch(()=>{}).finally(()=>{n||(n=!0,clearTimeout(r),o())})})}const Cn=e=>!0===e||"true"===e;function En(e){const t=Array.isArray(e)?[]:{};return Object.entries(e).forEach(([e,i])=>{t[e]=!i||"object"!=typeof i||En(i)}),t}const Tn={DOM:{_:!1},layout:{_:!1},pages:{_:!1,_parseNode:!1,_parseNodes:!1,_registerPageStart:!1},paper:{_:!1},preview:{_:!1},toc:{_:!1},node:{_:!1,children:!1,creators:!1,flowFilters:!1,fitters:!1,getters:!1,markers:!1,media:!1,normalizer:!1,pageBreaks:!1,positioning:!1,selectors:!1,selectorHeuristics:!1,slicers:!1,splitters:!1,wrappers:!1,pagination:!1},paragraph:{_:!1},grid:{_:!1},pre:{_:!1},table:{_:!1},tableLike:{_:!1},testSignals:{forcedModeLog:!1}};function On(e){const t=function(e){let t={debugMode:!1,forcedDebugMode:!1,consoleAssert:!1,markupDebugMode:!1,resourceTimeoutMs:2e3,preloader:!1,preloaderTarget:"",preloaderBackground:"",mask:!0,noHangingSelectors:"",forcedPageBreakSelectors:"",pageBreakBeforeSelectors:"",pageBreakAfterSelectors:"",noBreakSelectors:"",tocPageNumberSelector:"html2pdf4doc-toc-page-number",printLeftMargin:"21mm",printRightMargin:"21mm",printTopMargin:"12mm",printBottomMargin:"12mm",printFontSize:"12pt",paperColor:"white",paperWidth:"210mm",paperHeight:"297mm",headerMargin:"16px",footerMargin:"16px",virtualPagesGap:"16px",splitLabelHeight:"24px"};const i={paperWidth:"210mm",paperHeight:"297mm"},o={paperWidth:"148.5mm",paperHeight:"210mm"};switch((e=function(e){const t={...e};for(const e in t){const i=t[e];if("string"==typeof i){const o=i.toLowerCase();"true"===o||"1"===o?t[e]=!0:"false"!==o&&"0"!==o&&""!==o||(t[e]=!1)}}return t}(e)).printPaperSize){case"A5":case"a5":t={...t,...o};break;default:t={...t,...i}}t={...t,initialRoot:N(x.init),tocPageNumberSelector:N(x.tocPageNumber),...e},console.info("[HTML2PDF4DOC] Config:",t);const n={printLeftMargin:t.printLeftMargin,printRightMargin:t.printRightMargin,printTopMargin:t.printTopMargin,printBottomMargin:t.printBottomMargin,printFontSize:t.printFontSize,paperWidth:t.paperWidth,paperHeight:t.paperHeight,headerMargin:t.headerMargin,footerMargin:t.footerMargin,virtualPagesGap:t.virtualPagesGap},r=document.createElement("div");return r.style="\n position:absolute;\n z-index:1000;\n left: 200%;\n ",document.body.append(r),Object.entries(n).forEach(([e,t])=>{r.style.width=t,n[e]=`${Math.trunc(r.getBoundingClientRect().width)}px`}),r.remove(),t={...t,...n},t.noHangingSelectors=t.noHangingSelectors+" H1 H2 H3 H4 H5 H6",t.forcedPageBreakSelectors=t.forcedPageBreakSelectors+" "+N(x.printForcedPageBreak),t.debugMode&&console.info("Config with converted units:",t),t}(e);t.forcedDebugMode&&(t.debugMode=!0,t.consoleAssert=!0,t.markupDebugMode=!0);const i=t.forcedDebugMode?En(Tn):Tn;return{...t,debugConfig:i}}const vn="color:Gray;border:1px solid;";class Dn{constructor(e){this.params=function(e={}){const t={...e};return[["printWidth","paperWidth","data-print-width","data-paper-width"],["printHeight","paperHeight","data-print-height","data-paper-height"]].forEach(([e,i,o,n])=>{Object.prototype.hasOwnProperty.call(t,e)&&(console.warn(`[HTML2PDF4DOC] Config option "${o}" is deprecated. Use "${n}" instead.`),Object.prototype.hasOwnProperty.call(t,i)||(t[i]=t[e]),delete t[e])}),t}(e),this.forcedDebugMode=Cn(e.forcedDebugMode),this.debugMode=Cn(e.debugMode)||this.forcedDebugMode,this.preloader=e.preloader,this.selector=x,this.config}async render(){console.time("[HTML2PDF4DOC] Total time"),function({kickReload:e=!1}={}){const t=document.createElement("style");t.setAttribute("data-html2pdf-sanitize",""),t.textContent="html2pdf4doc-content-flow * { contain: none !important; content-visibility: visible !important; }",document.head.appendChild(t);const i=["data-src","data-lazy-src","data-original","data-url"],o=["data-srcset","data-lazy-srcset"],n=(e,t)=>{for(const i of t){const t=e.getAttribute(i);if(t&&t.trim())return t.trim()}return""};for(const t of document.images){if("lazy"===t.getAttribute("loading")&&t.setAttribute("loading","eager"),!t.getAttribute("src")){const e=n(t,i);e&&t.setAttribute("src",e)}if(!t.getAttribute("srcset")){const e=n(t,o);e&&t.setAttribute("srcset",e)}if(e){const e=t.getAttribute("src"),i=t.getAttribute("srcset");e&&(t.setAttribute("src",""),t.setAttribute("src",e)),i&&(t.setAttribute("srcset",""),t.setAttribute("srcset",i))}}for(const e of document.querySelectorAll("picture source"))if(!e.getAttribute("srcset")){const t=n(e,o);t&&e.setAttribute("srcset",t)}}(),this.debugMode&&console.log("🏁 document.readyState:",document.readyState),document.addEventListener("readystatechange",e=>{this.debugMode&&console.log("🏁 readystatechange:",document.readyState)}),this.debugMode&&console.time("⏱️ await DOMContentLoaded time"),"loading"===document.readyState?await new Promise(e=>{window.addEventListener("DOMContentLoaded",t=>{this.debugMode&&console.log("⏰ EVENT: DOMContentLoaded"),e()})}):this.debugMode&&console.log("🕰️ EVENT: DOMContentLoaded (event fired before init)"),this.debugMode&&console.timeEnd("⏱️ await DOMContentLoaded time"),this.debugMode&&console.time("⏱️ create Preloader time");const e=new Sn(this.params);"true"===this.preloader&&e.create(),this.debugMode&&console.timeEnd("⏱️ create Preloader time"),this.debugMode&&console.time("⏱️ Config time"),this.debugMode&&console.groupCollapsed("%c config ",vn+"color:LightGray"),this.config=On(this.params),this.debugMode&&console.groupEnd(),this.debugMode&&console.info("⚙️ Current config with debugConfig:",this.config),this.debugMode&&console.timeEnd("⏱️ Config time"),this.config.debugConfig.testSignals.forcedModeLog&&console.info("[HTML2PDF4DOC] 🛠️ Forced debug mode is active."),this.config.consoleAssert&&console.info("[HTML2PDF4DOC] 🧧 Assertions enabled."),this.debugMode&&console.time("⏱️ DOM helpers init time");const t=new L({DOM:window.document,config:this.config});this.debugMode&&console.timeEnd("⏱️ DOM helpers init time"),this.debugMode&&console.time("⏱️ node helpers init time");const i=new ln({config:this.config,DOM:t,selector:this.selector});this.debugMode&&console.timeEnd("⏱️ node helpers init time"),this.debugMode&&console.time("⏱️ await window load time"),"complete"!==document.readyState?await new Promise(e=>{window.addEventListener("load",t=>{this.debugMode&&console.log("⏰ EVENT: window load"),e()})}):this.debugMode&&console.log("🕰️ EVENT: window load (event fired before init)"),this.debugMode&&console.timeEnd("⏱️ await window load time"),this.debugMode&&console.time("⏱️ Layout time"),this.debugMode&&console.groupCollapsed("%c Layout ",vn);const o=new G({config:this.config,DOM:t,selector:this.selector,node:i});if(o.create(),this.debugMode&&console.groupEnd(),this.debugMode&&console.timeEnd("⏱️ Layout time"),!o.success)return void(this.debugMode&&console.error("Failed to create layout.\n\nWe have to interrupt the process of creating PDF preview."));this.debugMode&&console.time("⏱️ Preprocess time"),this.debugMode&&console.groupCollapsed("%c Preprocess ",vn),await new yn(this.config,t).run(),this.debugMode&&console.groupEnd(),this.debugMode&&console.timeEnd("⏱️ Preprocess time"),this.debugMode&&console.info("%c calculate Paper params ",vn),this.debugMode&&console.time("⏱️ Paper time");const n=new _n({config:this.config,DOM:t,selector:this.selector,node:i,layout:o});if(this.debugMode&&console.timeEnd("⏱️ Paper time"),!n||!n.bodyHeight||!n.bodyWidth)return void(this.debugMode&&console.error("Failed to create paper calculations.\n\nWe have to interrupt the process of creating PDF preview."));this.debugMode&&console.time("⏱️ Pages time"),this.debugMode&&console.group("%c Pages ",vn);const r=function(){const e=[];return{enqueue(t){"function"==typeof t&&e.push(t)},flush(){for(const t of e)t();e.length=0}}}(),s=new pn({config:this.config,DOM:t,selector:this.selector,node:i,layout:o,referenceHeight:n.bodyHeight,referenceWidth:n.bodyWidth,mutationQueue:r}).calculate();this.debugMode&&console.groupEnd(),this.debugMode&&console.timeEnd("⏱️ Pages time"),this.debugMode&&console.time("⏱️ Preview time"),this.debugMode&&console.groupCollapsed("%c Preview ",vn);const a=new fn({config:this.config,DOM:t,selector:this.selector,node:i,layout:o,paper:n,pages:s,mutationQueue:r}).create();this.debugMode&&console.groupEnd(),this.debugMode&&console.timeEnd("⏱️ Preview time"),this.debugMode&&console.time("⏱️ Toc time"),new mn({config:this.config,DOM:t,selector:this.selector,node:i,layout:o}).render(),this.debugMode&&console.timeEnd("⏱️ Toc time"),this.debugMode&&console.time("⏱️ Validator time"),window.scrollTo(0,document.body.scrollHeight),await new Promise(e=>{requestAnimationFrame(()=>{requestAnimationFrame(()=>{window.scrollTo(0,0),e()})})}),new bn({config:this.config,DOM:t,selector:this.selector,node:i,layout:o,pages:s,previewValidations:a}).init(),this.debugMode&&console.timeEnd("⏱️ Validator time"),t.setAttribute(o.root,"[success]"),t.setAttribute(o.root,"[pages]",s.length),e.remove(),console.info("[HTML2PDF4DOC] Page count:",s.length),console.timeEnd("[HTML2PDF4DOC] Total time")}}console.info("[HTML2PDF4DOC] Version:","0.3.0");const kn=document.currentScript,Rn=kn&&kn.dataset;let Nn=null,xn=!1;function Bn(){xn&&Nn&&Nn.render()}Rn?(Nn=new Dn(Rn),xn="manual"===Rn.init,xn&&console.info("HTML2PDF4DOC in manual initialization mode"),!xn&&Nn.render()):console.warn('[HTML2PDF4DOC] ⛔ Unable to read parameters from the current