UNPKG

nehan-player

Version:

web component for paged media powered by nehan layout engine

8 lines 209 kB
/*! * * nehan-player 0.1.4 * License: MIT * Copyright (c) 2021, Watanabe Masaki * */ (()=>{"use strict";var e={6773:(e,t,s)=>{s.r(t),s.d(t,{NehanPlayer:()=>g});var i=s(7240);const r=32;function n(e){return"1x2"===e||"2x2"===e}function o(e,t){switch(e){case"1x1":return new i.PhysicalSize({width:t.width,height:t.height});case"1x2":return new i.PhysicalSize({width:(t.width-r-1)/2,height:t.height});case"2x1":return new i.PhysicalSize({width:t.width,height:(t.height-r-1)/2});case"2x2":return new i.PhysicalSize({width:(t.width-r-1)/2,height:(t.height-r-1)/2})}}class a{constructor(e,t,s,r,n,a,l,c,h,d=0,u=o(n,l),p=function(e){switch(e){case"1x1":return 1;case"1x2":case"2x1":return 2;case"2x2":return 4}}(n),g=function(e,t){const s=t.isVerticalRl();switch(e){case"1x1":return[1];case"1x2":return s?[3,1]:[1,3];case"2x1":return[1,2];case"2x2":return s?[3,4,1,2]:[1,2,3,4]}}(n,a),m=function(e,t,s,r){const n=s.getLogicalSize(r);let o={writingMode:r.value,measure:`${n.measure}px`,extent:`${n.extent}px`,fontSize:`${e}px`};return t&&(o.fontFamily=t),new i.CssStyleSheet({body:o,a:{color:"#d61111"}})}(c,h,u,a),f=s.getElementById("screen"),x=s.getElementById("page-no"),b=s.getElementById("page-count"),y=s.getElementById("goto-left"),v=s.getElementById("goto-right"),E=[s.getElementById("page-1"),s.getElementById("page-2"),s.getElementById("page-3"),s.getElementById("page-4")],S=s.getElementById("slider"),w=s.getElementById("slider-range"),C=s.getElementById("title"),k=s.getElementById("sub-title")){this.config=e,this.$host=t,this.$shadow=s,this.content=r,this.layout=n,this.nehanWritingMode=a,this.size=l,this.fontSize=c,this.fontFamily=h,this.pageIndex=d,this.pageSize=u,this.screenPageCount=p,this.pageOrder=g,this.nehanBodyStyle=m,this.$screen=f,this.$pageNo=x,this.$pageCount=b,this.$gotoLeft=y,this.$gotoRight=v,this.$pages=E,this.$slider=S,this.$sliderRange=w,this.$title=C,this.$subTitle=k;const B=this,R=[this.nehanBodyStyle].concat(e.onCreateNehanStyles?e.onCreateNehanStyles(this):[]);b.innerHTML="- -",this.reader=new i.PagedNehanDocument(this.content,{styleSheets:R}).render({onPage(t){t.page.index<=p-1&&B.gotoPage(0),e.onParsePage&&e.onParsePage(B,t.page.index)},onComplete(t){const s=B.getNombrePageCount(t.pageCount);b.innerHTML=String(s),w.setAttribute("max",String(s)),w.oninput=e=>{const t=parseInt(w.value||"0");B.gotoPage(t)},S.style.visibility="visible",e.onParseComplete&&e.onParseComplete(B,t.pageCount,t.time)}}),y.onclick=()=>{a.isVerticalRl()?this.gotoNextPage():this.gotoPrevPage()},v.onclick=()=>{a.isVerticalRl()?this.gotoPrevPage():this.gotoNextPage()},f.onclick=t=>{const s=f.getBoundingClientRect(),i=t.pageX-s.left-window.pageXOffset;t.pageY,s.top,window.pageYOffset,i<f.clientWidth/2&&e.onClickLeftPage?e.onClickLeftPage(B):e.onClickRightPage&&e.onClickRightPage(B)},e.onPlayerReady&&e.onPlayerReady(B)}get id(){return this.$host.id}get src(){return this.$host.getAttribute("src")||""}get width(){return this.size.width}get height(){return this.size.height}get writingMode(){return this.nehanWritingMode.value}get currentPageIndex(){return this.pageIndex}set currentPageIndex(e){this.gotoPage(e)}get currentSection(){return this.reader.getSectionAt(this.pageIndex)}get pageCount(){return this.reader.pageCount}setTitle(e){this.$title.innerHTML=e}setSubTitle(e){this.$subTitle.innerHTML=e}createOutline(e){return this.reader.createOutline(new i.LayoutOutlineEvaluator((t=>{const s=document.createElement("a");return s.innerHTML=t.header?t.header.innerHTML:t.title,s.href="#"+t.pageIndex,e&&(s.onclick=s=>(s.preventDefault(),e(t),!1)),s})))}refresh(e=!1){this.$host.refresh(e)}update(e){this.$host.update(e)}gotoLeftPage(){this.nehanWritingMode.isVerticalRl()?this.gotoNextPage():this.gotoPrevPage()}gotoRightPage(){this.nehanWritingMode.isVerticalRl()?this.gotoPrevPage():this.gotoNextPage()}gotoNextPage(){const e=this.pageIndex+this.screenPageCount;e>=this.pageCount||this.gotoPage(e)}gotoPrevPage(){const e=Math.max(0,this.pageIndex-this.screenPageCount);e!==this.pageIndex&&this.gotoPage(e)}getNombrePageNo(e){return Math.ceil((e+1)/this.screenPageCount)}getNombrePageCount(e){return Math.ceil(e/this.screenPageCount)}gotoPage(e){if(e<0||e>=this.pageCount)return;const t=this,s=this.getNombrePageNo(e);this.pageIndex=e,this.$sliderRange.value=String(s),this.$pageNo.innerHTML=String(s),this.$pages.forEach((e=>{e.firstChild&&e.removeChild(e.firstChild)})),this.pageOrder.forEach(((s,i)=>{const r=e+i;if(r>=this.reader.pageCount)return;const n=this.reader.getPage(r),o=this.$pages[s-1];n&&n.dom&&(o.appendChild(n.dom),this.config.onSetPage&&this.config.onSetPage(t,n))}))}}var l=function(e,t,s,i){return new(s||(s=Promise))((function(r,n){function o(e){try{l(i.next(e))}catch(e){n(e)}}function a(e){try{l(i.throw(e))}catch(e){n(e)}}function l(e){var t;e.done?r(e.value):(t=e.value,t instanceof s?t:new s((function(e){e(t)}))).then(o,a)}l((i=i.apply(e,t||[])).next())}))};const c="theme-css";let h={},d={cssFiles:[],onFetchContent:(e,t)=>t,onClickLeftPage(e){e.gotoLeftPage()},onClickRightPage(e){e.gotoRightPage()}};function u(){Object.values(h).forEach((e=>e.refresh(!0)))}function p(e,t,s){return Math.max(t,Math.min(s,e))}class g extends HTMLElement{constructor(){super(),this.src="",this.html="",this.$shadow=this.attachShadow({mode:"open"}),this.getAttribute("id")||(this.id=`player-${(new Date).getTime()}`)}static initialize(e){e&&(d=Object.assign(Object.assign({},d),e)),customElements.define("nehan-player",g)}static get observedAttributes(){return["class"]}connectedCallback(){this.render()}attributeChangedCallback(e,t,s){return l(this,void 0,void 0,(function*(){"class"===e&&this.classList.contains("update")&&(yield this.render(),this.classList.remove("update"))}))}update(e){let t=!1;if(e.theme&&1===Object.keys(e).length){const t=this.$shadow.getElementById(c),s=this.createCssLink(e.theme,!0),i=this.$shadow.firstElementChild;return t?this.$shadow.replaceChild(s,t):i?this.$shadow.insertBefore(s,i):this.$shadow.appendChild(s),void this.setAttribute("theme",e.theme)}for(const[s,r]of Object.entries(e)){const e=i.Utils.String.camelToChain(s),n=this.getAttribute(e)||"";r!==n&&("width"===s&&"responsive"===n&&delete h[this.id],this.setAttribute(e,r),t=!0)}t&&this.refresh(!1)}createCssLink(e,t=!1){const s=document.createElement("link");return t&&(s.id=c),s.setAttribute("rel","stylesheet"),s.setAttribute("type","text/css"),s.setAttribute("href",e),s}refresh(e){const t=(new Date).getTime();e&&this.lastUpdate&&t-this.lastUpdate<200||(this.lastUpdate=t,this.classList.add("update"))}parseWidth(){const e=this.getAttribute("width")||"responsive";if(!e)throw new Error("System Error: width can't be resolved!");return"responsive"===e?this.parentElement?this.parentElement.clientWidth:this.clientWidth:"number"==typeof e?e:parseInt(e)}render(){var e;return l(this,void 0,void 0,(function*(){const t=this.getAttribute("src")||"",s=this.getAttribute("theme")||"",r=Math.max(this.parseWidth(),300),l=Math.max(parseInt(this.getAttribute("height")||String(450)),300);let c=this.getAttribute("layout")||"1x1";n(c)&&r<600&&(c=function(e){return"1x2"===e?"1x1":"2x2"===e?"2x1":e}(c)),function(e){return"2x1"===e||"2x2"===e}(c)&&l<500&&(c=function(e){return"2x1"===e?"1x1":"2x2"===e?"1x2":e}(c));const g=p(parseFloat(this.getAttribute("line-height")||String(2)),1.5,2),m=p(parseInt(this.getAttribute("font-size")||String(16)),10,48),f=this.getAttribute("font-family")||"",x=Math.min(parseInt(this.getAttribute("border-size")||String(1)),20),b=this.getAttribute("writing-mode")||"horizontal-tb",y=new i.WritingMode(b),v=new i.PhysicalSize({width:r,height:l}),E=function(e,t,s,i,r,o){if(e.isTextHorizontal())return i;const a=i*r,l=2*i;let c=s.width-l-2*o;n(t)&&(c-=33);const h=Math.floor(c/a);return i+Math.floor((c-a*h)/2)}(y,c,v,m,g,x),S=function(e,t,s,i,r,n){return 1.5*i}(0,0,0,m),w=function(e,t,s,r,n){return new i.PhysicalSize({width:e.width-2*s-2*n,height:e.height-48-r})}(v,0,E,S,x);this.$shadow.innerHTML="";const C=document.createElement("style"),k=document.createElement("style");if(C.textContent=function(e,t,s,i,r,n){const o=e.isVerticalRl()?"rtl":"ltr";return`\n .player {\n margin-bottom: 2em;\n overflow: hidden;\n }\n .screen-wrap {\n background: wheat;\n border-width: ${n}px ${n}px 0 ${n}px;\n }\n #screen-header {\n position: relative;\n font-size: 12px;\n top: 32px;\n left: 32px;\n width: ${t.width}px;\n white-space: nowrap;\n }\n #title {\n color: rgba(80,80,80, 0.8);\n }\n #sub-title {\n color: rgba(80,80,80, 0.8);\n }\n #screen{\n width: ${t.width}px;\n height: ${t.height}px;\n padding: 48px ${i}px ${r}px;\n }\n #screen-footer {\n padding-bottom: 16px;\n }\n #menu {\n display: flex;\n justify-content: center;\n align-items: center;\n gap: 10px;\n margin-top: 0;\n width: ${t.width}px;\n color: white;\n font-size: 14px;\n background: #3c3c4e;\n padding: 10px ${i}px;\n border-width: 0 ${n}px ${n}px ${n}px;\n }\n #slider {\n margin-top: 10px;\n visibility: hidden; /* hide until onCompletePage is called. */\n width: ${t.width}px;\n padding: 0 ${i}px;\n }\n #slider input[type="range"] {\n width: ${t.width}px;\n }\n #footer {\n width: ${t.width}px;\n padding: 0 32px;\n text-align: right;\n font-size: 0.82em;\n }\n #direct-content {\n visibility: hidden;\n }\n input[type="range"] {\n direction: ${o};\n }\n .nehan-line a {\n color:#d61111;\n }\n .pager {\n flex-basis: 100px;\n padding: 4px 0px;\n }\n .nombre {\n font-size: 0.92em;\n text-align: center;\n flex-basis: 150px;\n }\n .vline {\n border-left: 1px dotted #7a7a7a;\n }\n .hline {\n border-bottom: 1px dotted #7a7a7a;\n }\n `}(y,w,0,E,S,x),k.textContent=function(e,t){const s=o(e,t);switch(e){case"1x1":return"\n #page-2, #page-3, #page-4, .vline, .hline {\n display:none;\n }\n ";case"1x2":return`\n #screen {\n display: grid;\n grid-template-rows: 100%;\n grid-template-columns: ${s.width}px 1px ${s.width}px;\n gap: 0 16px; /* vline makes 2*gapSize, so we use half for colGap. */\n }\n #page-1 {\n grid-row: 1/2;\n grid-column: 1/2;\n }\n .vline {\n grid-row: 1/3;\n grid-column: 2/3;\n }\n #page-3 {\n grid-row: 1/2;\n grid-column: 3/4;\n }\n #page-2, #page-4, .hline {\n display: none;\n }\n `;case"2x1":return`\n #screen {\n display: grid;\n grid-template-rows: ${s.height}px 1px ${s.height}px;\n grid-template-columns: 100%;\n gap: 16px 0px; /* hline makes 2*gapSize, so we use halt for rowGap. */\n }\n #page-1 {\n grid-row: 1/2;\n grid-column: 1/2;\n }\n #hline-12 {\n grid-row: 2/3;\n grid-column: 1/2;\n }\n #page-2 {\n grid-row: 3/4;\n grid-column: 1/2;\n }\n #page-3, #page-4, #hline-34, .vline {\n display: none;\n }\n `;case"2x2":return`\n #screen {\n display: grid;\n grid-template-rows: ${s.height}px 1px ${s.height}px;\n grid-template-columns: ${s.width}px 1px ${s.width}px;\n gap: 16px; /* vline and hline make 2*gapSize so we use half gap size */\n }\n #page-1 {\n grid-row: 1/2;\n grid-column: 1/2;\n }\n #hline-12 {\n grid-row: 2/3;\n grid-column: 1/2;\n }\n #page-2 {\n grid-row: 3/4;\n grid-column: 1/2;\n }\n .vline {\n grid-row: 1/4;\n grid-column: 2/3;\n }\n #page-3 {\n grid-row: 1/2;\n grid-column: 3/4;\n }\n #hline-34 {\n grid-row: 2/3;\n grid-column: 3/4;\n }\n #page-4 {\n grid-row: 3/4;\n grid-column: 3/4;\n }\n `}}(c,w),this.$shadow.appendChild(C),this.$shadow.appendChild(k),s){const e=this.createCssLink(s,!0);this.$shadow.appendChild(e)}(d.cssFiles||[]).forEach((e=>{const t=this.createCssLink(e,!1);this.$shadow.appendChild(t)}));const B=d.cssText||"";if(B){const e=document.createElement("style");e.innerHTML=B,this.$shadow.appendChild(e)}const R=document.createElement("template");R.innerHTML='\n <div class="player">\n <div class="screen-wrap">\n <div id="screen-header">\n <span id="title"><slot name="title"></slot></span>\n <span id="sub-title"><slot name="sub-title"></slot></span>\n </div>\n <div id="screen">\n <div class="page" id="page-1"></div>\n <div class="hline" id="hline-12"></div>\n <div class="page" id="page-2"></div>\n <div class="vline"></div>\n <div class="page" id="page-3"></div>\n <div class="hline" id="hline-34"></div>\n <div class="page" id="page-4"></div>\n </div>\n <div id="screen-footer">\n <div class="nombre">\n <span id="page-no"></span>\n <span id="separator">/</span>\n <span id="page-count"></span>\n </div>\n </div>\n </div>\n <menu id="menu">\n <button class="pager" id="goto-left">\n <slot name="goto-left-label">\n <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M9.78 12.78a.75.75 0 01-1.06 0L4.47 8.53a.75.75 0 010-1.06l4.25-4.25a.75.75 0 011.06 1.06L6.06 8l3.72 3.72a.75.75 0 010 1.06z"></path></svg>\n </slot>\n </button>\n <button class="pager" id="goto-right">\n <slot name="goto-right-label">\n <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M6.22 3.22a.75.75 0 011.06 0l4.25 4.25a.75.75 0 010 1.06l-4.25 4.25a.75.75 0 01-1.06-1.06L9.94 8 6.22 4.28a.75.75 0 010-1.06z"></path></svg>\n </slot>\n </button>\n </menu>\n <div id="slider">\n <input id="slider-range" type="range" min="1" max="1" step="1" value="0">\n </div>\n <footer id="footer"><slot name="footer"></slot></footer>\n <div id="direct-content"><slot name="content"></slot></div>\n </div>',this.$shadow.appendChild(R.content.cloneNode(!0));const T=(null===(e=this.$shadow.host.querySelector("div[slot='content']"))||void 0===e?void 0:e.innerHTML)||"";""!==T?this.html=d.onFetchContent?d.onFetchContent("content.slot",T):T:t?t===this.src&&this.html||(this.src=t,this.html=yield fetch(this.src).then((e=>e.ok?e.text():`Failed to load ${t}`)).then((e=>d.onFetchContent?d.onFetchContent(t,e):e))):this.html="Can't resolve content. Neither 'content' slot or 'src' attribute is specified!";const N=new a(d,this,this.$shadow,this.html,c,y,w,m,f);"responsive"===this.getAttribute("width")&&(0===Object.entries(h).length&&window.addEventListener("resize",u),h[this.id]=N)}))}}},7240:(e,t,s)=>{var i,r;s.d(t,{CssStyleSheet:()=>q,LayoutOutlineEvaluator:()=>ts,PagedNehanDocument:()=>Ii,PhysicalSize:()=>Nt,Utils:()=>r,WritingMode:()=>es}),function(e){e.lang="ja",e.engineVersion=7,e.pageRootTagName="body",e.normalizeHtml=e=>e.replace(/\r/g,"").replace(/<rp>(.*?)<\/rp>/gi,"").replace(/<!--[\s\S]*?-->/g,"").replace(/\u2015{2}/g,"——").replace(/\s+$/,"").replace(/(?:<page-break>)|(?:<pbr>)/g,"<hr style='border-width:0px; margin:0; page-break-after: always'>"),e.maxPageCount=2e3,e.maxJustifyGap=1,e.ignoreEmptyLine=!1,e.ignoreEmptyInline=!1,e.ignoreZeroRe=!0,e.debugImageLoader=!1,e.debugCharacter=!1,e.debugLayout=!1,e.useStrictFormatContextName=!1,e.defaultFontSize=16,e.defaultFontFamily=["'ヒラギノ明朝 Pro W3'","'Hiragino Mincho Pro'","'HiraMinProN-W3'","'Meiryo'","'メイリオ'","'IPA明朝'","'IPA Mincho'","'MS 明朝'","'MS Mincho'","monospace"].join(","),e.defaultFont=[e.defaultFontSize+"px",e.defaultFontFamily].join(" "),e.defaultBodyMeasure=640,e.defaultBodyExtent=480,e.defaultLineHeight=2,e.defaultBorderColor="transparent",e.defaultTableBorderColor="rgba(0,0,0,0.4)",e.defaultFloatMeasure=100,e.defaultInlineBlockMeasure=200,e.nonOmitWhiteSpaces=[" "],e.unmanagedCssProps=["background","background-image","background-color","background-position","text-decoration","z-index"],e.nonLayoutTags=["br"],e.fontSizeOnlyTags=["b","br","em","rb","rt","rp","ruby","strong"],e.edgeSkipTags=["rb","rt","rp","ruby"],e.boxSizeSkipTags=["b","em","rb","rt","rp","ruby","strong"],e.ignoredTags=["script","noscript","meta"],e.IgnoredInlineStyleProps=[],e.rexWord=/^[\u0021-\u007E\u00C0-\u02A8\u2000-\u206F\uFB00-\uFB06]+/,e.rexRefChar=/^&[\S]+?;/,e.isTcyWord=(e,t)=>!1,e.rexHalfChar=/^[\uFF66-\uFF69\uFF71-\uFF9D][\uFF9E-\uFF9F]?/,e.rexSpace=/^[ \f\n\r\t\v\u00A0\u1680\u180e\u2000-\u200A\u2028\u2029\u202F\u205F\u3000\uFEFF]/,e.rexSpaceCharRef=/^&(nb|en|em|thin)sp;/,e.rexVoicedMark=/^[\u3099-\u309C]/}(i||(i={})),function(e){e.atoi=(e,t=0)=>{const s=parseInt(e,10);return isNaN(s)?(i.debugLayout&&console.warn(`${e} is not a number, so use ${t}`),t):s},e.isNumber=e=>!1===isNaN(Number(e)),e.mergeDefault=(e,t)=>Object.assign(Object.assign({},t),e);class t{static fromArray(e){return e.reduce(((e,t)=>(e[t]=t,e)),Object.create(null))}static toObjArray(e){return Object.keys(e).map((t=>({id:e[t],name:t})))}static toValueArray(e){return Object.keys(e).map((t=>e[t]))}static member(e,s){return t.toValueArray(e).indexOf(s)>=0}}e.Enum=t,e.Choice=class{static select(e){return e.values.indexOf(e.value)>=0?e.value:e.initial}},e.String=class{static getUnicodeProp(e){let t=e.charCodeAt(0).toString(16).toUpperCase();switch(t.length){case 0:return"U+0000";case 1:return"U+000"+t;case 2:return"U+00"+t;case 3:return"U+0"+t}return"U+"+t}static multiSpaceToSingle(e){return e.replace(/\s+/g," ")}static multiSpaceToSingle2(e){return e.replace(/[\u0020\f\n\r\t\v\u00A0\u1680\u180e\u2000-\u200A\u2028\u2029\u202F\u205F\uFEFF]+/gm," ")}static capitalize(e){return""===e?"":e.charAt(0).toUpperCase()+e.slice(1)}static camelToChain(e){return e.replace(/[A-Z]/g,(e=>"-"+e.toLowerCase()))}static chainToCamel(e){return e.indexOf("-")<0?e:e.split("-").map(((e,t)=>0===t?e:this.capitalize(e))).join("")}}}(r||(r={}));class n{constructor(e){this.text=e,this.size=new St({measure:0,extent:0}),this.kerning=!1,this.spacing=0,this.charCount=1}setMetrics(e){this.size.measure=e.font.size,this.size.extent=e.font.size,this.empha=e.empha,e.empha&&(this.size.extent=2*e.font.size)}toString(){return this.text}acceptEvaluator(e){return this.empha?e.visitCharEmpha(this,this.empha):e.visitChar(this)}}const o={parenType:"open",kinsokuPos:"tail",kernEnable:!0,hangEnable:!1,rotatable:!1,isSmall:!1},a={parenType:"open",kinsokuPos:"tail",kernEnable:!1,hangEnable:!1,rotatable:!1,isSmall:!0},l={parenType:"close",kinsokuPos:"head",kernEnable:!0,hangEnable:!0,rotatable:!1,isSmall:!1},c={parenType:"close",kinsokuPos:"head",kernEnable:!1,hangEnable:!0,rotatable:!1,isSmall:!0},h={parenType:"none",kinsokuPos:"head",kernEnable:!0,hangEnable:!0,rotatable:!1,isSmall:!1},d={parenType:"none",kinsokuPos:"head",kernEnable:!1,hangEnable:!0,rotatable:!1,isSmall:!0},u={parenType:"none",kinsokuPos:"none",kernEnable:!1,hangEnable:!1,rotatable:!1,isSmall:!1},p={parenType:"none",kinsokuPos:"head",kernEnable:!1,hangEnable:!1,rotatable:!1,isSmall:!1},g={parenType:"none",kinsokuPos:"none",kernEnable:!1,hangEnable:!1,rotatable:!1,isSmall:!1},m={"U+0028":a,"U+0029":c,"U+002C":d,"U+002D":u,"U+002E":d,"U+003A":d,"U+003D":g,"U+005B":a,"U+005D":c,"U+007B":a,"U+007D":c,"U+00AB":a,"U+00BB":c,"U+2014":u,"U+2015":u,"U+201C":a,"U+201D":c,"U+2025":u,"U+2026":u,"U+2190":g,"U+2191":g,"U+2192":g,"U+2193":g,"U+21D2":g,"U+2212":u,"U+2252":g,"U+2260":g,"U+226A":o,"U+226B":l,"U+22EF":u,"U+2500":u,"U+2772":o,"U+2773":l,"U+3001":h,"U+3002":h,"U+3008":o,"U+3009":l,"U+300A":o,"U+300B":l,"U+300C":o,"U+300D":l,"U+300E":o,"U+300F":l,"U+3010":o,"U+3011":l,"U+3014":o,"U+3015":l,"U+3016":o,"U+3017":l,"U+3018":o,"U+3019":l,"U+301A":o,"U+301B":l,"U+301C":u,"U+301D":o,"U+301E":l,"U+301F":l,"U+3041":p,"U+3043":p,"U+3045":p,"U+3047":p,"U+3049":p,"U+3063":p,"U+3083":p,"U+3085":p,"U+3087":p,"U+308E":p,"U+30A1":p,"U+30A3":p,"U+30A5":p,"U+30A7":p,"U+30A9":p,"U+30C3":p,"U+30E3":p,"U+30E5":p,"U+30E7":p,"U+30EE":p,"U+30F5":p,"U+30F6":p,"U+30FC":u,"U+FF08":o,"U+FF09":l,"U+FF0C":h,"U+FF0D":u,"U+FF0E":h,"U+FF1A":{parenType:"none",kinsokuPos:"none",kernEnable:!1,hangEnable:!1,rotatable:!1,isSmall:!1},"U+FF1C":o,"U+FF1D":g,"U+FF1E":g,"U+FF3B":o,"U+FF3D":l,"U+FF3F":u,"U+FF5B":o,"U+FF5C":u,"U+FF5D":l,"U+FF5E":u,"U+FF61":d,"U+FF62":a,"U+FF63":c,"U+FF64":d,"U+FF65":d,"U+FF70":u};class f{constructor(e,t){this.text=e,this.size=new St({measure:0,extent:0}),this.info=t,this.kerning=!1,this.spacing=0,this.charCount=1}isParen(){return this.isOpenParen()||this.isCloseParen()}isOpenParen(){return"open"===this.info.parenType}isCloseParen(){return"close"===this.info.parenType}isTailNg(){return"tail"===this.info.kinsokuPos}isHeadNg(){return"head"===this.info.kinsokuPos}isKernEnable(){return this.info.kernEnable}isHangEnable(){return this.info.hangEnable}isSmall(){return this.info.isSmall}setMetrics(e){this.size.measure=e.font.size,this.size.extent=e.font.size,this.empha=e.empha,(this.kerning&&this.isKernEnable()||this.isSmall())&&(this.size.measure=Math.floor(e.font.size/2))}toString(){return this.text}acceptEvaluator(e){return this.empha&&"none"===this.info.parenType?e.visitCharEmpha(this,this.empha):this.kerning?e.visitDualCharKern(this):e.visitDualChar(this)}}class x{constructor(e){this.text=e,this.size=new St({measure:0,extent:0}),this.kerning=!1,this.spacing=0,this.charCount=1}setMetrics(e){this.size.measure=e.isVertical?e.font.size:Math.floor(e.font.size/2),this.size.extent=e.font.size,this.empha=e.empha,e.empha&&(this.size.extent=2*e.font.size)}toString(){return this.text}acceptEvaluator(e){return e.visitHalfChar(this)}}class b{constructor(e){this.text=e,this.size=new St({measure:0,extent:0}),this.kerning=!1,this.spacing=0,this.charCount=1}setMetrics(e){this.size.measure=e.font.size,this.size.extent=e.font.size}toString(){return this.text}acceptEvaluator(e){return this.empha?e.visitRefCharEmpha(this,this.empha):e.visitRefChar(this)}}b.softHyphen="&shy;";class y{constructor(e){this.text=e,this.size=new St({measure:0,extent:0}),this.kerning=!1,this.spacing=0,this.charCount=1}setMetrics(e){this.size.measure=e.font.size,this.size.extent=e.font.size,this.empha=e.empha,e.empha&&(this.size.extent=Math.floor(1.5*e.font.size))}toString(){return this.text}acceptEvaluator(e){return this.empha?e.visitCharEmpha(this,this.empha):e.visitSmpUniChar(this)}}let v=e=>({advanceRate:e,isNoBreak:!1,isControl:!1}),E={advanceRate:0,isNoBreak:!1,isControl:!1},S={advanceRate:0,isNoBreak:!1,isControl:!0},w=v(1),C=v(.5),k={"U+0009":C,"U+000A":S,"U+000B":S,"U+000C":S,"U+000D":S,"U+001C":C,"U+001D":C,"U+001E":C,"U+001F":C,"U+0020":C,"U+00A0":{advanceRate:.38,isNoBreak:!0,isControl:!1},"U+034F":E,"U+1680":C,"U+180E":C,"U+2000":C,"U+2001":w,"U+2002":C,"U+2003":w,"U+2004":v(1/3),"U+2005":v(1/4),"U+2006":v(1/6),"U+2007":C,"U+2008":C,"U+2009":v(.2),"U+200A":v(.1),"U+200B":E,"U+200C":E,"U+200D":E,"U+200E":E,"U+200F":E,"U+2028":S,"U+2029":S,"U+202A":S,"U+202B":S,"U+202C":S,"U+202D":S,"U+202E":S,"U+202F":{advanceRate:.33,isNoBreak:!0,isControl:!1},"U+2061":S,"U+2062":S,"U+2063":S,"U+3000":w,"U+FEFE":{advanceRate:0,isNoBreak:!0,isControl:!1}};class B{constructor(e){this.text=this.normalize(e),this.size=new St({measure:0,extent:0}),this.info=class{static load(e){let t=r.String.getUnicodeProp(e),s=k[t];if(!s)throw new Error("SpaceChar("+t+") not exists.");return s}}.load(e),this.kerning=!1,this.spacing=0,this.charCount=0}static charRefToStr(e){switch(e){case"&nbsp;":return" ";case"&thinsp;":return" ";case"&ensp;":return" ";case"&emsp;":return" "}throw new Error("invalid space char ref("+e+")")}normalize(e){return 0===e.indexOf("&")?B.charRefToStr(e):e}setMetrics(e){this.size=L.getWordSize(e.font,this.text),0===this.size.measure&&(this.size.measure=this.size.extent*this.info.advanceRate)}toString(){return this.text}isNoBreak(){return this.info.isNoBreak}isZeroWidth(){return 0===this.info.advanceRate}isCarriageReturn(){return"\r"===this.text}isLineFeed(){return"\n"===this.text}acceptEvaluator(e){return e.visitSpaceChar(this)}}B.zeroWidthSpace="​",B.enSpace=" ",B.emSpace=" ",B.noBreakSpace=" ",B.ideographicSpace=" ",B.markerSpace=B.enSpace;class R{constructor(e){this.text=e,this.size=new St({measure:0,extent:0}),this.kerning=!1,this.spacing=0,this.charCount=e.length}setMetrics(e){e.isVertical?(this.size.measure=e.font.size,this.size.extent=e.font.size):this.size=L.getWordSize(e.font,this.text)}toString(){return this.text}acceptEvaluator(e){return e.visitTcy(this)}}class T{static isEnabled(){return null!==this.offCanvasCtx}getMeasure(e,t){const s=T.offCanvasCtx;return s?(s.font=t.css,s.measureText(e).width):0}}T.offCanvasCtx="undefined"==typeof OffscreenCanvas?null:new OffscreenCanvas(0,0).getContext("2d");class N{static isEnabled(){return null!==this.canvasCtx}getMeasure(e,t){const s=N.canvasCtx;return s?(s.font=t.css,s.measureText(e).width):0}}N.canvasCtx=function(){const e=document.createElement("canvas");return e.style.display="hidden",e.style.width=e.style.height="0",document.body&&document.body.appendChild(e),e.getContext("2d")}();class P{getMeasure(e,t){const s=P.node;if(!s)return 0;s.style.font=t.css,s.innerHTML=e,document.body.appendChild(s);const i=s.getBoundingClientRect();return document.body.removeChild(s),i.width}}P.node=function(){const e=document.createElement("span"),t=e.style;return t.display="inline",t.margin="0",t.padding="0",t.borderWidth="0",t.lineHeight="1",t.width="auto",t.height="auto",t.visibility="hidden",e}();const z=T.isEnabled()?new T:N.isEnabled()?new N:new P;class L{static getWordSize(e,t){const s=z.getMeasure(t,e),i=e.size;return new St({measure:s,extent:i})}}class M{constructor(e){this.text=e,this.size=new St({measure:0,extent:0}),this.kerning=!1,this.spacing=0}get charCount(){return this.text.length}toString(){return this.text}setMetrics(e){this.size=L.getWordSize(e.font,this.text)}toTcys(){return this.text.split("").map((e=>new R(e)))}breakWord(e){const t=Math.floor(this.text.length*e/this.size.measure),s=this.text.substring(0,t),i=this.text.substring(t);return this.text=i,new M(s)}restoreBrokenWord(e){this.text=e.text+this.text}acceptEvaluator(e){return e.visitWord(this)}}class I{constructor(e){this.text=e,this.size=new St({measure:0,extent:0}),this.kerning=!1,this.spacing=0,this.charCount=1}setMetrics(e){e.isVertical?this.size.measure=e.font.size:this.size.measure=Math.floor(1.25*e.font.size),this.empha=e.empha,this.size.extent=e.font.size}toString(){return this.text}acceptEvaluator(e){return this.empha?e.visitCharEmpha(this,this.empha):e.visitMixChar(this)}}class A{visit(e){return e.reduce(((e,t)=>t instanceof M?e.concat(t.toTcys()):e.concat(t)),[])}}class V{visit(e){return e.map(((t,s)=>{if(t instanceof M==0)return t;const r=e[s-1],n=e[s+1];return i.isTcyWord(t.text,{prev:r,next:n})?new R(t.text):t}))}}class F{constructor(e,t={}){this.src=this.normalize(e,t),this.buff=this.src,this.pos=0,this.tokens=[],this.setupTokens(t)}acceptTokenMapper(e){this.tokens=e.visit(this.tokens)}normalize(e,t={}){return e}stepBuff(e){this.buff=this.buff.substring(e)}getChar(){let e=this.peekChar();return this.stepBuff(1),e}peekChar(){return this.buff.substring(0,1)}get progress(){return 0===this.tokens.length?1:this.pos/this.tokens.length}hasNext(){return this.pos<this.tokens.length}getNext(){return this.tokens[this.pos++]}setupTokens(e){for(;this.hasNextBuff();)this.addToken(this.createToken(e));return this.tokens}addToken(e){this.tokens.push(e)}createToken(e){throw new Error("BufferedLexer.createToken must be overrided")}hasNextBuff(){return""!==this.buff}peek(e=0){return this.tokens[this.pos+e]}pushBack(e){this.pos=Math.max(0,this.pos-Math.abs(e))}}class O{constructor(){this.specificity=new Ht(0,0,0)}test(e){return!1}}class U{constructor(e){this.value=e}static load(e){const t=Ne.getValue(e,"box-sizing");return new U(t)}isContentBox(){return"content-box"===this.value}isPaddingBox(){return"padding-box"===this.value}isBorderBox(){return"border-box"===this.value}}class ${constructor(e){this.element=e,this.color=oe.load(e),this.measure=St.loadMeasure(e),this.extent=St.loadExtent(e),this.float=ut.load(e),this.display=this.loadDisplay(e),this.position=Pt.load(e),this.absPos=yt.load(e),this.writingMode=es.load(e),this.font=st.load(e),this.edge=this.loadEdge(e,this.display),this.verticalAlign=Ct.load(e),this.textAlign=wt.load(e),this.textCombineUpright=qt.load(e),this.textOrientation=Zt.load(e),this.textEmphasis=Kt.load(e),this.overflowWrap=Bt.load(e),this.wordBreak=Qt.load(e),this.content=Te.load(e),this.listStyle=ct.load(e),this.whiteSpace=Jt.load(e),this.pageBreakBefore=Tt.load(e),this.pageBreakAfter=Rt.load(e),this.backgroundPos=vt.load(e),this.borderCollapse=Ce.load(e)}loadDisplay(e){const t=qe.load(e);if("a"===e.tagName&&t.isInlineLevel()){const s=e.firstElementChild;return s?(le.load(s),qe.load(s)):t}return t}loadEdge(e,t){return t.isNone()?ne.none:ne.load(e)}}class D{constructor(e){this.macro=e}call(e){return this.macro(e)}}class W{constructor(e){this.value=this.normalize(e)}toString(){return this.value}normalize(e){let t=e.replace(/\s/g,"");return t=r.String.camelToChain(t),t}replace(e,t){return this.value.replace(e,t)}join(e,t="-"){return[this.value].concat(e).join(t)}isDynamicStyleProp(){return"!"===this.value.charAt(0)}getDynamicStylePropName(){return this.isDynamicStyleProp()?this.value.substring(1):""}isDomCallback(){return"@"===this.value.charAt(0)}getDomCallbackName(){return this.isDomCallback()?this.value.substring(1):""}}class _{constructor(e,t){this.selector=e,this.style=t}toString(){return"(rule):"+this.selector.toString()}test(e,t=!1){return this.selector.test(e,t)}get pseudoElementName(){return this.peSelector?this.peSelector.tagName:""}get peSelector(){return this.selector.peSelector}getPropertyValue(e){return this.style.getPropertyValue(e)}static compare(e,t){return Be.compare(e.selector,t.selector)}}class H{constructor(){this.styles=new Map,this.dynamicStyles=[],this.domCallbacks=[]}hasDomCallbacks(){return this.domCallbacks.length>0}hasDynamicStyles(){return this.dynamicStyles.length>0}isEmpty(){return 0===this.styles.size&&0===this.dynamicStyles.length&&0===this.domCallbacks.length}callDomCallbacks(e,t,s){this.domCallbacks.forEach((i=>i.call(e,t,s)))}getPropertyValue(e){return this.styles.get(e)||null}setProperty(e,t){const s=new W(e),i=new G({prop:s.value,value:t});return ae.parseDeclaration(s,i).reduce(((e,t)=>(e.styles.set(t.prop,t.value),e)),this)}addDynamicStyle(e){return this.dynamicStyles.push(e),this}addDomCallback(e){return this.domCallbacks.push(e),this}removeProperty(e){return this.styles.delete(e)}forEach(e){this.styles.forEach(((t,s)=>e(s,t)))}mergeFrom(e){return e.styles.forEach(((e,t)=>{this.styles.set(t,e)})),this.dynamicStyles=this.dynamicStyles.concat(e.dynamicStyles),this.domCallbacks=this.domCallbacks.concat(e.domCallbacks),this}getDynamicStyle(e,t){return this.dynamicStyles.reduce(((s,i)=>{const r=i.call(e,t)||{};return s.mergeFrom(r)}),new H)}acceptCssEvaluator(e){return e.visitUnmanagedCssProps(this)}}class q{constructor(e){this.rules=[],e&&this.addCssRules(e)}sort(){return this.rules.sort(_.compare),this}mergeStyleSheet(e){return this.rules=this.rules.concat(e.rules),this.sort(),this}getPseudoRules(){return this.rules.filter((e=>null!==e.peSelector))}getStyleOfElement(e){return this.rules.filter((t=>t.test(e))).reduce(((e,t)=>e.mergeFrom(t.style)),new H)}addCssRules(e){for(let t in e){let s=ae.parseRule(t,e[t]);this.rules=this.rules.concat(s)}return this.sort()}addRule(e,t){const s=ae.parseRule(e,t);return this.rules=this.rules.concat(s),this.sort()}}class G{constructor(e){this.value=this.getValue(e)}getValue(e){switch(e.prop){case"content":return e.value;default:return G.normalize(e.value)}}split(e=/\s/){return this.value.split(e)}static normalize(e){let t=e.trim();return t=t.replace(/[\n\t]/g,""),t=t.replace(/!important/g,""),t=r.String.multiSpaceToSingle(t),t=t.replace(/\s*([,/;])\s*/g,"$1"),t}static getValue4D(e){let t=e.split(/\s/);switch(t.length){case 1:return[t[0],t[0],t[0],t[0]];case 2:return[t[0],t[1],t[0],t[1]];case 3:return[t[0],t[1],t[2],t[1]];case 4:return[t[0],t[1],t[2],t[3]]}throw new Error("invalid shorthanded 4d value:"+e)}static getValue4D2(e){let t=e.split("/").map((e=>G.getValue4D(e)));return 1===t.length&&t.push(t[0]),t}}const j=["before","end","after","start"];class K{constructor(e){this.top=e.top,this.right=e.right,this.bottom=e.bottom,this.left=e.left}get items(){return[{prop:"top",value:this.top},{prop:"right",value:this.right},{prop:"bottom",value:this.bottom},{prop:"left",value:this.left}]}}class Z{constructor(e){this.before=e.before,this.end=e.end,this.after=e.after,this.start=e.start}static isBlockEdge(e){return"before"===e||"after"===e}static isInlineEdge(e){return"start"===e||"end"===e}getPhysicalEdgeValue(e){return this.items.reduce(((t,s)=>(t[mt.select(e).get(s.prop)]=s.value,t)),{})}getPhysicalEdge(e){return new K(this.getPhysicalEdgeValue(e))}getPropByLogicalDirection(e){throw new Error("LogicalEdge<T>::getPropByLogicalDirection must be overrided.")}get values(){return{before:this.before,end:this.end,after:this.after,start:this.start}}get items(){return[{prop:"before",value:this.before},{prop:"end",value:this.end},{prop:"after",value:this.after},{prop:"start",value:this.start}]}}class Y extends Z{static loadDirection(e,t){return r.atoi(Ne.getValue(e,t))}static get zeroValue(){return{before:0,end:0,after:0,start:0}}isZero(){return 0===this.before&&0===this.end&&0===this.after&&0===this.start}clone(){return new Y({before:this.before,end:this.end,after:this.after,start:this.start})}get extent(){return this.before+this.after}get measure(){return this.start+this.end}}class X extends Z{static parseShorthand(e){let t=G.getValue4D(e.value);return[{prop:"border-before-color",value:t[0]},{prop:"border-end-color",value:t[1]},{prop:"border-after-color",value:t[2]},{prop:"border-start-color",value:t[3]}]}static load(e){return new X(j.reduce(((t,s)=>(t[s]=Ne.getValue(e,`border-${s}-color`),t)),{}))}static get none(){return new X(X.noneValue)}static get noneValue(){return{before:"transparent",end:"transparent",after:"transparent",start:"transparent"}}clone(){return new X(this.values)}getPropByLogicalDirection(e){return`border-${e}-color`}acceptCssEvaluator(e){return e.visitLogicalBorderColor(this)}}class J{constructor(e){this.beforeStart=e.beforeStart,this.beforeEnd=e.beforeEnd,this.afterEnd=e.afterEnd,this.afterStart=e.afterStart}clone(){return new J({beforeStart:this.beforeStart,beforeEnd:this.beforeEnd,afterEnd:this.afterEnd,afterStart:this.afterStart})}static get none(){return new J(J.noneValue)}static get noneValue(){return{beforeStart:0,beforeEnd:0,afterEnd:0,afterStart:0}}static load(e){let t=J.corners.reduce(((t,s)=>{let i=`border-${s}-radius`,n=Ne.getValue(e,i);return t[r.String.chainToCamel(s)]=n,t}),{});return new J(t)}static parseShorthand(e){let t=G.getValue4D2(e.value),s=t[0],i=t[1];return[{prop:"border-before-start-radius",value:[s[0],i[0]].join(" ")},{prop:"border-before-end-radius",value:[s[1],i[1]].join(" ")},{prop:"border-after-end-radius",value:[s[2],i[2]].join(" ")},{prop:"border-after-start-radius",value:[s[3],i[3]].join(" ")}]}get items(){return[{prop:"before-start",value:this.beforeStart},{prop:"before-end",value:this.beforeEnd},{prop:"after-end",value:this.afterEnd},{prop:"after-start",value:this.afterStart}]}}var Q,ee;J.corners=["before-start","before-end","after-end","after-start"],function(e){e.NONE="none",e.HIDDEN="hidden",e.DOTTED="dotted",e.DASHED="dashed",e.SOLID="solid",e.DOUBLE="double",e.GROOVE="groove",e.RIDGE="ridge",e.INSET="inset",e.OUTSET="outset"}(Q||(Q={}));class te extends Z{static parseShorthand(e){let t=G.getValue4D(e.value);return[{prop:"border-before-style",value:t[0]},{prop:"border-end-style",value:t[1]},{prop:"border-after-style",value:t[2]},{prop:"border-start-style",value:t[3]}]}static load(e){return new te(j.reduce(((t,s)=>(t[s]=Ne.getValue(e,`border-${s}-style`),t)),{}))}static get noneValue(){return{before:"none",end:"none",after:"none",start:"none"}}static get none(){return new te(te.noneValue)}clone(){return new te(this.values)}getPropByLogicalDirection(e){return`border-${e}-style`}acceptCssEvaluator(e){return e.visitLogicalBorderStyle(this)}}te.values=r.Enum.toValueArray(Q),function(e){e.THIN="thin",e.MEDIUM="medium",e.THICK="thick"}(ee||(ee={}));const se={thin:2,medium:4,thick:6};class ie extends Y{static parseShorthand(e){const t=G.getValue4D(e.value);return[{prop:"border-before-width",value:t[0]},{prop:"border-end-width",value:t[1]},{prop:"border-after-width",value:t[2]},{prop:"border-start-width",value:t[3]}]}static load(e){return new ie(j.reduce(((t,s)=>(t[s]=Y.loadDirection(e,`border-${s}-width`),t)),{}))}static get none(){return new ie(Y.zeroValue)}clone(){return new ie(this.values)}clearBefore(){this.before=0}clearEnd(){this.end=0}clearAfter(){this.after=0}clearStart(){this.start=0}getPropByLogicalDirection(e){return`border-${e}-width`}acceptCssEvaluator(e){return e.visitLogicalBorderWidth(this)}}ie.keywords=r.Enum.toValueArray(ee);class re{constructor(e){this.style=e.style,this.width=e.width,this.color=e.color,this.radius=e.radius}clone(){return new re({style:this.style.clone(),width:this.width.clone(),color:this.color.clone(),radius:this.radius.clone()})}static load(e){return new re({style:te.load(e),width:ie.load(e),color:X.load(e),radius:J.load(e)})}static get none(){return new re({style:te.none,width:ie.none,color:X.none,radius:J.none})}acceptCssEvaluator(e){const t=new kt;return e.visitLogicalBorderWidth(this.width).mergeTo(t),e.visitLogicalBorderStyle(this.style).mergeTo(t),e.visitLogicalBorderColor(this.color).mergeTo(t),e.visitLogicalBorderRadius(this.radius,this.width).mergeTo(t),t}clearBefore(){this.width.clearBefore()}clearEnd(){this.width.clearEnd()}clearAfter(){this.width.clearAfter()}clearStart(){this.width.clearStart()}get beforeWidth(){return this.width.before}get endWidth(){return this.width.end}get afterWidth(){return this.width.after}get startWidth(){return this.width.start}static expand(e){return e.reduce(((e,t)=>{switch(t.prop){case"width":return e.concat(ie.parseShorthand(new G(t)));case"style":return e.concat(te.parseShorthand(new G(t)));case"color":return e.concat(X.parseShorthand(new G(t)))}return console.error(`undefined prop for logical-border:${t.prop}`),e}),[])}static inferPropType(e){return te.values.indexOf(e)>=0?"style":ie.keywords.indexOf(e)>=0||ze.hasUnit(e)?"width":"color"}static parseShorthandWidthStyleColor(e){let t={width:"medium",style:"none",color:"currentcolor"};return("none"===e.value?[]:e.split().slice(0,3)).forEach((e=>{let s=re.inferPropType(e);t[s]=e}),t),Object.keys(t).map((e=>({prop:e,value:t[e]})))}static parseShorthand(e){let t=re.parseShorthandWidthStyleColor(e);return re.expand(t)}static parseShorthandEach(e,t){return re.parseShorthandWidthStyleColor(e).map((e=>({prop:`border-${t}-${e.prop}`,value:e.value})))}}class ne{constructor(e){this.padding=e.padding,this.border=e.border,this.margin=e.margin}static load(e){return e.tagName===i.pageRootTagName?this.loadRootBoxEdge(e):this.loadBoxEdge(e)}static loadRootBoxEdge(e){return i.engineVersion<=6?new ne({padding:bt.load(e),border:re.none,margin:xt.none}):this.none}static loadBoxEdge(e){return new ne({padding:bt.load(e),border:re.load(e),margin:xt.load(e)})}static get none(){return new ne({padding:bt.none,border:re.none,margin:xt.none})}clone(){return new ne({padding:this.padding.clone(),border:this.border.clone(),margin:this.margin.clone()})}clearBefore(){this.padding.before=0,this.border.clearBefore(),this.margin.before=0}clearAfter(){this.padding.after=0,this.border.clearAfter(),this.margin.after=0}clearStart(){this.padding.start=0,this.border.clearStart(),this.margin.start=0}clearEnd(){this.padding.end=0,this.border.clearEnd(),this.margin.end=0}get start(){return this.padding.start+this.border.startWidth+this.margin.start}get end(){return this.padding.end+this.border.endWidth+this.margin.end}get before(){return this.padding.before+this.border.beforeWidth+this.margin.before}get after(){return this.padding.after+this.border.afterWidth+this.margin.after}get extent(){return this.before+this.after}get measure(){return this.start+this.end}get borderBoxBefore(){return this.padding.before+this.border.width.before}get borderBoxAfter(){return this.padding.after+this.border.width.after}get borderBoxStart(){return this.padding.start+this.border.width.start}get borderBoxEnd(){return this.padding.end+this.border.width.end}get borderBoxExtent(){return this.borderBoxBefore+this.borderBoxAfter}get borderBoxMeasure(){return this.borderBoxStart+this.borderBoxStart}getInnerBoxOffset(){return{start:this.padding.start,before:this.padding.before}}}class oe{constructor(e){this.value=e}static load(e){const t=e.computedStyle.getPropertyValue("color")||"inherit";return new oe(t)}acceptCssEvaluator(e){return e.visitColor(this)}}class ae{static parseInlineStyle(e){return G.normalize(e).split(";").reduce(((e,t)=>{const s=t.split(":");if(2===s.length&&""!==s[0]&&""!==s[1]){const t=new W(s[0]);if(i.IgnoredInlineStyleProps.indexOf(t.value)>=0)return e;const r=new G({prop:t.value,value:s[1]});ae.parseDeclaration(t,r).forEach((t=>{e.setProperty(t.prop,t.value)}))}return e}),new H)}static parseRule(e,t){return new _t(e).split().map((e=>{const s=new Dt(e),i=new Wt(s).parse(),r=this.parseDeclarationBlock(e,t);return new _(i,r)}))}static parseDeclarationBlock(e,t){return Object.keys(t).reduce(((s,i)=>{const r=t[i],n=new W(i);if("string"==typeof r)return s.setProperty(n.value,r);if("number"==typeof r)return s.setProperty(n.value,String(r));if("function"==typeof r){if(n.isDynamicStyleProp()){const t=n.getDynamicStylePropName(),i=r;return s.addDynamicStyle(new Ze(e,t,i))}if(n.isDomCallback()){const t=n.getDomCallbackName(),i=r;return s.addDomCallback(new Ge(e,t,i))}const t=new D(r).call(e);if(""!==t){const e=new G({prop:n.value,value:t});return s.setProperty(n.value,e.value)}}return s}),new H)}static parseDeclaration(e,t){switch(e.value){case"border":return re.parseShorthand(t);case"border-before":return re.parseShorthandEach(t,"before");case"border-end":return re.parseShorthandEach(t,"end");case"border-after":return re.parseShorthandEach(t,"after");case"border-start":return re.parseShorthandEach(t,"start");case"border-radius":return J.parseShorthand(t);case"font":return st.parseShorthand(t);case"list-style":return ct.parseShorthand(t);case"margin":return xt.parseShorthand(t);case"padding":return bt.parseShorthand(t);case"border-width":return ie.parseShorthand(t);case"border-color":return X.parseShorthand(t);case"border-style":return te.parseShorthand(t);case"text-emphasis":return Kt.parseShorthand(t)}return[{prop:e.value,value:t.value}]}}class le{static loadAll(e){e.isTextElement()||(this.load(e),e.children.forEach((e=>this.loadAll(e))),"body"===e.tagName&&this.loadDynamic(e))}static load(e){e.isTextElement()||(e.acceptEffector(xe.instance),e.acceptEffector(ye.instance),e.acceptEffector(ve.instance),e.acceptEffector(Ee.instance))}static loadDynamic(e,t){return!!e.style.hasDynamicStyles()&&(e.acceptEffector(new be(t)),e.acceptEffector(ye.instance),e.acceptEffector(ve.instance),e.acceptEffector(Ee.instance),!0)}}let ce={styleSheets:[]};class he{constructor(){}visit(e){if(e.isTextElement())return!0;if(i.ignoredTags.includes(e.tagName))return!1;if(["br","hr","img","wbr","video","iframe"].includes(e.tagName))return!0;if(At.isPseudoElement(e))return!0;const t=qe.load(e);return!(t.isNone()||t.isBlockLevel()&&(e.acceptChildFilter(this),0===e.childNodes.length||e.childNodes.every((e=>Jt.isWhiteSpaceElement(e)))))}}he.instance=new he;class de{constructor(){}visit(e){const t=qe.load(e);if(!t.isListItem()||t.isNone()||!e.parent)return;const s=ct.load(e);if(s.isNone())return;let i=s.getMarkerText(e.indexOfType);const r=e.firstChild;if(!r||r.tagName!==Mt.MARKER)throw new Error("marker element is not created yet!");const n=e.ownerDocument.createTextNode(i);r.appendChild(n)}}de.instance=new de;class ue{constructor(){}visit(e){const t=e.parent;if(!Ce.load(e).isCollapse()||!t)return;const s=parseInt(t.computedStyle.getPropertyValue("measure")||"0"),i=ie.load(t).measure,r=ie.load(e).measure,n=s-Math.max(0,r-i);e.computedStyle.setProperty("measure",n+"px")}}ue.instance=new ue;class pe{constructor(){}visit(e){const t=e.parent;if(!Ce.load(e).isCollapse()||!t)return;const s=parseInt(t.computedStyle.getPropertyValue("measure")||"0"),i=ie.load(t).measure,r=ie.load(e).measure,n=s-Math.max(0,r-i);e.computedStyle.setProperty("measure",n+"px")}}pe.instance=new pe;class ge{constructor(){}getCollapsedInternalEdgeSize(e,t){let s=e.reduce(((t,s,i)=>(t+=s.padding.measure,i<e.length-1?t+Math.max(s.border.width.end,e[i+1].border.width.start):t)),0);return s+=Math.max(0,e[0].border.width.start-t.border.width.start),s+=Math.max(0,e[e.length-1].border.width.end-t.border.width.end),s}getTableCells(e){return e.children.filter((e=>"table-cell"===e.computedStyle.getPropertyValue("display")))}findPrevCells(e,t){let s=e.previousElementSibling;for(;s;){const e=this.getTableCells(s);if(e.length===t)return e;s=s.previousElementSibling}}visit(e){const t=e.parent;if(!t||"table-cell"!==e.computedStyle.getPropertyValue("display"))return;const s=this.getTableCells(t);if(s.every((e=>"auto"!==e.computedStyle.getPropertyValue("measure"))))return;if(qe.load(t).isTableRow()){const e=this.findPrevCells(t,s.length);if(e)return void s.forEach(((t,s)=>{const i=e[s].computedStyle.getPropertyValue("measure");if(!i)throw new Error("cell partition is not defined properly.");t.computedStyle.setProperty("measure",i)}))}s.forEach((e=>{j.forEach((t=>{e.computedStyle.setProperty(`margin-${t}`,"0")}))}));const r=ne.load(t),n=s.map((e=>ne.load(e))),o=Ce.load(e).isCollapse()?this.getCollapsedInternalEdgeSize(n,r):n.reduce(((e,t)=>e+t.measure),0),a=parseInt(t.computedStyle.getPropertyValue("measure")||"0",10),l=s.map((e=>{const t=e.computedStyle.getPropertyValue("measure")||"0";return"auto"===t?0:parseInt(t,10)})),c=s.filter((e=>"auto"===e.computedStyle.getPropertyValue("measure"))),h=l.reduce(((e,t)=>e+t),0),d=a-h-o,u=Math.max(Math.floor(d/c.length),0),p=d%c.length;i.debugLayout&&console.log("cell size:(parent:%d, fixedSize:%d, iedge:%d, auto:%d(fraction:%d)), cell:",a,h,o,u,p,e),c.forEach(((e,t)=>{const s=0===t?u+p:u;e.computedStyle.setProperty("measure",s+"px")}))}}ge.instance=new ge;class me{constructor(){}visit(e){if("ruby"!==e.tagName)return;const t=e.root;e.childNodes=e.childNodes.filter((e=>"rp"!==e.tagName&&(!e.isTextElement()||""!==e.textContent.trim()))),e.childNodes=e.childNodes.map((s=>{if(!s.isTextElement())return s;const i=t.createElement("rb");return i.parent=e,i.appendChild(s),le.load(i),i}))}}me.instance=new me;class fe{constructor(e){this.pseudoRules=e}addMarker(e){const t=e.root.createElement(Mt.MARKER);return t.parent=e,e.insertBefore(t,e.firstChild),t}addBefore(e){const t=e.root.createElement(Mt.BEFORE);return e.insertBefore(t,e.firstChild),t}addAfter(e){const t=e.root.createElement(Mt.AFTER);return e.appendChild(t),t}addFirstLine(e){const t=e.root.createElement(Mt.FIRST_LINE),s=e.firstTextElement;if(!s)return null;const i=s.parent;return i?(t.appendChild(s),i.replaceChild(t,s),t):null}addFirstLetter(e){const t=e.firstTextElement;if(!t)return null;const s=t.parent;if(!s)return null;const i=t.textContent,r=i.trim(),n=(r.length>1?r:i).substring(0,1),o=i.substring(1),a=e.root.createElement(Mt.FIRST_LETTER);a.appendChild(e.root.createTextNode(n));const l=e.root.createTextNode(o);l.appendChild(e.root.createTextNode(o));const c=t.nextSibling;return s.removeChild(t),s.insertBefore(l,c),s.insertBefore(a,l),a}addPseudoElement(e,t){switch(t){case Mt.MARKER:return this.addMarker(e);case Mt.BEFORE:return this.addBefore(e);case Mt.AFTER:return this.addAfter(e);case Mt.FIRST_LETTER:return this.addFirstLetter(e);case Mt.FIRST_LINE:return this.addFirstLine(e)}throw new Error("undefined pseudo element:"+t)}visit(e){this.pseudoRules.forEach((t=>{if(t.test(e,!0)&&t.peSelector){const s=t.peSelector.tagName,i=e.querySelector(s)||this.addPseudoElement(e,s);i&&i.style.mergeFrom(t.style)}}))}}class xe{constructor(){}visit(e){if(e.isTextElement()||At.isPseudoElement(e))return;const t=e.ownerDocument.specStyleSheet.getStyleOfElement(e);e.style=t}}xe.instance=new xe;class be{constructor(e){this.parentCxt=e}visit(e){const t=e.style.getDynamicStyle(e,this.parentCxt);e.style.mergeFrom(t),t.forEach(((t,s)=>{e.computedStyle.removeProperty(t)}))}}class ye{constructor(){}visit(e){const t=e.getAttribute("style")||"",s=ae.parseInlineStyle(t);e.style.mergeFrom(s)}}ye.instance=new ye;class ve{getLineHeightString(e){return ze.computeLineHeight(e)}setCascadedValue(e,t){const s=Ne.getValue(e,t);return e.computedStyle.setProperty(t,s),s}setFontSize(e){const t=ze.computeFontSize(e);e.computedStyle.setProperty("font-size",t+"px")}setLineHeight(e){const t=this.getLineHeightString(e);e.computedStyle.setProperty("line-height",t)}setBoxLength(e,t){const s=ze.computeBoxLength(e,t);e.computedStyle.setProperty(t,s+"px")}setAutableBoxLength(e,t){const s=ze.computeAutableBoxLength(e,t),i="auto"===s?s:s+"px";e.computedStyle.setProperty(t,i)}setOptionalBoxLength(e,t){const s=ze.computeOptionalBoxLength(e,t),i="none"===s?s:s+"px";e.computedStyle.setProperty(t,i)}setMargin(e){j.forEach((t=>{this.setAutableBoxLength(e,`margin-${t}`)}))}setPadding(e){j.forEach((t=>{this.setBoxLength(e,`padding-${t}`)}))}setBorderWidth(e){j.forEach((t=>{const s=`border-${t}-width`,i=ze.computeBorderWidth(e,s);e.computedStyle.setProperty(s,i+"px")}))}setBorderStyle(e){j.forEach((t=>{const s=`border-${t}-style`,i=Ne.getValue(e,s);e.computedStyle.setProperty(s,i)}))}setBorderColor(e){j.forEach((t=>{const s=`border-${t}-color`,i=Ne.getValue(e,s);e.computedStyle.setProperty(s,i)}))}setBorderRadius(e){J.corners.forEach((t=>{const s=`border-${t}-radius`,i=ze.computeBoxLength(e,s);e.co