@mlightcad/cad-simple-viewer-cli 1.6.2 → 1.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,17 @@
1
+ import{N as it,W as st,z as nt,ah as rt,an as N,ao as J,ap as at,aq as ot,m as Q,ar as ht,as as ct,at as lt,au as ut,av as B,aj as gt,aw as P,ax as x,ay as ft,az as pt}from"./index-D6ZWapu2.js";import{aA as Se,aB as _e}from"./index-D6ZWapu2.js";var f;(function(r){r[r.NONE=0]="NONE",r[r.WORD=1]="WORD",r[r.STACK=2]="STACK",r[r.SPACE=3]="SPACE",r[r.NBSP=4]="NBSP",r[r.TABULATOR=5]="TABULATOR",r[r.NEW_PARAGRAPH=6]="NEW_PARAGRAPH",r[r.NEW_COLUMN=7]="NEW_COLUMN",r[r.WRAP_AT_DIMLINE=8]="WRAP_AT_DIMLINE",r[r.PROPERTIES_CHANGED=9]="PROPERTIES_CHANGED"})(f||(f={}));var H;(function(r){r[r.BOTTOM=0]="BOTTOM",r[r.MIDDLE=1]="MIDDLE",r[r.TOP=2]="TOP"})(H||(H={}));var d;(function(r){r[r.DEFAULT=0]="DEFAULT",r[r.LEFT=1]="LEFT",r[r.RIGHT=2]="RIGHT",r[r.CENTER=3]="CENTER",r[r.JUSTIFIED=4]="JUSTIFIED",r[r.DISTRIBUTED=5]="DISTRIBUTED"})(d||(d={}));var T;(function(r){r[r.NONE=0]="NONE",r[r.UNDERLINE=1]="UNDERLINE",r[r.OVERLINE=2]="OVERLINE",r[r.STRIKE_THROUGH=4]="STRIKE_THROUGH"})(T||(T={}));const mt={c:"Ø",d:"°",p:"±","%":"%"},dt={l:d.LEFT,r:d.RIGHT,c:d.CENTER,j:d.JUSTIFIED,d:d.DISTRIBUTED};function xt(r){const[t,e,i]=r;return t<<16|e<<8|i}function U(r){return Math.max(0,Math.min(255,Math.round(r)))}function Z(r){return Math.max(0,Math.min(16777215,Math.round(r)))}function bt(r){return r===null?null:`#${Z(r).toString(16).padStart(6,"0")}`}function yt(r){if(!r)return null;const t=r.trim().toLowerCase();if(/^#[0-9a-f]{6}$/.test(t))return t;if(/^[0-9a-f]{6}$/.test(t))return`#${t}`;if(/^#[0-9a-f]{3}$/.test(t)){const e=t[1],i=t[2],s=t[3];return`#${e}${e}${i}${i}${s}${s}`}if(/^[0-9a-f]{3}$/.test(t)){const e=t[0],i=t[1],s=t[2];return`#${e}${e}${i}${i}${s}${s}`}return null}function St(r){if(!r)return null;const t=r.trim().toLowerCase();if(t==="transparent")return null;const e=yt(t);if(e)return Z(Number.parseInt(e.slice(1),16));const i=t.match(/^rgba?\((.*)\)$/);if(!i)return null;const s=i[1].replace(/\s*\/\s*/g," ").split(/[,\s]+/).map(c=>c.trim()).filter(Boolean);if(s.length<3)return null;const a=c=>{if(c.endsWith("%")){const l=Number.parseFloat(c.slice(0,-1));return U(l/100*255)}const u=Number.parseFloat(c);return U(u)},n=a(s[0]),h=a(s[1]),o=a(s[2]);return xt([n,h,o])}class _t{constructor(t){this.stack=[],this.stack.push(t)}push(t){this.stack.push(t)}pop(){if(this.stack.length<=1)return;const t=this.stack.pop(),e=this.stack[this.stack.length-1];return JSON.stringify(e.paragraph)!==JSON.stringify(t.paragraph)&&(e.paragraph={...t.paragraph}),t}get current(){return this.stack[this.stack.length-1]}get depth(){return this.stack.length-1}get root(){return this.stack[0]}setCurrent(t){this.stack[this.stack.length-1]=t}}class vt{constructor(t,e,i={}){this.continueStroke=!1,this.inStackContext=!1,this.scanner=new D(t);const s=e??new C;this.ctxStack=new _t(s),this.yieldPropertyCommands=i.yieldPropertyCommands??!1,this.resetParagraphParameters=i.resetParagraphParameters??!1,this.mifDecoder=i.mifDecoder??this.decodeMultiByteChar.bind(this),this.mifCodeLength=i.mifCodeLength??"auto"}decodeMultiByteChar(t){try{if(t.length===5){const e=t[0];let i="gbk";e==="1"?i="shift-jis":e==="2"&&(i="big5");const s=new Uint8Array([parseInt(t.substr(1,2),16),parseInt(t.substr(3,2),16)]);return new TextDecoder(i).decode(s)}else if(t.length===4){const e=new Uint8Array([parseInt(t.substr(0,2),16),parseInt(t.substr(2,2),16)]),s=new TextDecoder("gbk").decode(e);if(s!=="▯")return s;const n=new TextDecoder("big5").decode(e);if(n!=="▯")return n}return"▯"}catch{return"▯"}}extractMifCode(t){var e,i,s;if(t==="auto"){const a=(e=this.scanner.tail.match(/^[0-9A-Fa-f]{5}/))==null?void 0:e[0];if(a)return a;const n=(i=this.scanner.tail.match(/^[0-9A-Fa-f]{4}/))==null?void 0:i[0];return n||null}else return((s=this.scanner.tail.match(new RegExp(`^[0-9A-Fa-f]{${t}}`)))==null?void 0:s[0])??null}pushCtx(){this.ctxStack.push(this.ctxStack.current)}popCtx(){this.ctxStack.pop()}parseStacking(){const t=new D(this.extractExpression(!0));let e="",i="",s="";const a=()=>{let o=t.peek(),c=!1;return o.charCodeAt(0)<32&&(o=" "),o==="\\"&&(c=!0,t.consume(1),o=t.peek()),t.consume(1),[o,c]},n=()=>{let o="";for(;t.hasData;){const[c,u]=a();if(!u&&(c==="/"||c==="#"||c==="^"))return[o,c];o+=c}return[o,""]},h=o=>{let c="",u=o;for(;t.hasData;){const[l,g]=a();if(!(u&&l===" ")){if(u=!1,!g&&l===";")break;c+=l}}return c};return[e,s]=n(),s&&(i=h(s==="^")),e===""&&i.includes("I/")?[f.STACK,[" "," ","/"]]:s==="^"?[f.STACK,[e,i,"^"]]:[f.STACK,[e,i,s]]}parseProperties(t){const e=this.ctxStack.current.copy(),i=this.ctxStack.current.copy();switch(t){case"L":i.underline=!0,this.continueStroke=!0;break;case"l":i.underline=!1,i.hasAnyStroke||(this.continueStroke=!1);break;case"O":i.overline=!0,this.continueStroke=!0;break;case"o":i.overline=!1,i.hasAnyStroke||(this.continueStroke=!1);break;case"K":i.strikeThrough=!0,this.continueStroke=!0;break;case"k":i.strikeThrough=!1,i.hasAnyStroke||(this.continueStroke=!1);break;case"A":this.parseAlign(i);break;case"C":this.parseAciColor(i);break;case"c":this.parseRgbColor(i);break;case"H":this.parseHeight(i);break;case"W":this.parseWidth(i);break;case"Q":this.parseOblique(i);break;case"T":this.parseCharTracking(i);break;case"p":this.parseParagraphProperties(i);break;case"f":case"F":this.parseFontProperties(i);break;default:throw new Error(`Unknown command: ${t}`)}if(this.continueStroke=i.hasAnyStroke,i.continueStroke=this.continueStroke,this.ctxStack.setCurrent(i),this.yieldPropertyCommands){const s=this.getPropertyChanges(e,i);if(Object.keys(s).length>0)return{command:t,changes:s,depth:this.ctxStack.depth}}}getPropertyChanges(t,e){const i={};if(t.underline!==e.underline&&(i.underline=e.underline),t.overline!==e.overline&&(i.overline=e.overline),t.strikeThrough!==e.strikeThrough&&(i.strikeThrough=e.strikeThrough),t.color.aci!==e.color.aci&&(i.aci=e.color.aci),t.color.rgbValue!==e.color.rgbValue&&(i.rgb=e.color.rgb),t.align!==e.align&&(i.align=e.align),JSON.stringify(t.fontFace)!==JSON.stringify(e.fontFace)&&(i.fontFace=e.fontFace),(t.capHeight.value!==e.capHeight.value||t.capHeight.isRelative!==e.capHeight.isRelative)&&(i.capHeight=e.capHeight),(t.widthFactor.value!==e.widthFactor.value||t.widthFactor.isRelative!==e.widthFactor.isRelative)&&(i.widthFactor=e.widthFactor),(t.charTrackingFactor.value!==e.charTrackingFactor.value||t.charTrackingFactor.isRelative!==e.charTrackingFactor.isRelative)&&(i.charTrackingFactor=e.charTrackingFactor),t.oblique!==e.oblique&&(i.oblique=e.oblique),JSON.stringify(t.paragraph)!==JSON.stringify(e.paragraph)){const s={};t.paragraph.indent!==e.paragraph.indent&&(s.indent=e.paragraph.indent),t.paragraph.align!==e.paragraph.align&&(s.align=e.paragraph.align),t.paragraph.left!==e.paragraph.left&&(s.left=e.paragraph.left),t.paragraph.right!==e.paragraph.right&&(s.right=e.paragraph.right),JSON.stringify(t.paragraph.tabs)!==JSON.stringify(e.paragraph.tabs)&&(s.tabs=e.paragraph.tabs),Object.keys(s).length>0&&(i.paragraph=s)}return i}parseAlign(t){const e=this.scanner.get();"012".includes(e)?t.align=parseInt(e):t.align=H.BOTTOM,this.consumeOptionalTerminator()}parseHeight(t){const e=this.extractFloatExpression(!0);if(e)try{e.endsWith("x")?t.capHeight={value:parseFloat(e.slice(0,-1)),isRelative:!0}:t.capHeight={value:parseFloat(e),isRelative:!1}}catch{this.scanner.consume(-e.length);return}this.consumeOptionalTerminator()}parseWidth(t){const e=this.extractFloatExpression(!0);if(e)try{e.endsWith("x")?t.widthFactor={value:parseFloat(e.slice(0,-1)),isRelative:!0}:t.widthFactor={value:parseFloat(e),isRelative:!1}}catch{this.scanner.consume(-e.length);return}this.consumeOptionalTerminator()}parseCharTracking(t){const e=this.extractFloatExpression(!0);if(e)try{e.endsWith("x")?t.charTrackingFactor={value:Math.abs(parseFloat(e.slice(0,-1))),isRelative:!0}:t.charTrackingFactor={value:Math.abs(parseFloat(e)),isRelative:!1}}catch{this.scanner.consume(-e.length);return}this.consumeOptionalTerminator()}parseFloatValueOrFactor(t){const e=this.extractFloatExpression(!0);if(e)if(e.endsWith("x")){const i=parseFloat(e.slice(0,-1));t*=i}else t=parseFloat(e);return t}parseOblique(t){const e=this.extractFloatExpression(!1);e&&(t.oblique=parseFloat(e)),this.consumeOptionalTerminator()}parseAciColor(t){const e=this.extractIntExpression();if(e){const i=parseInt(e);i<257&&(t.color.aci=i)}this.consumeOptionalTerminator()}parseRgbColor(t){const e=this.extractIntExpression();if(e){const i=parseInt(e)&16777215;t.color.rgbValue=i}this.consumeOptionalTerminator()}extractFloatExpression(t=!1){const e=t?/^[+-]?(?:\d+(?:\.\d*)?|\.\d+)(?:[eE][+-]?\d+)?x?/:/^[+-]?(?:\d+(?:\.\d*)?|\.\d+)(?:[eE][+-]?\d+)?/,i=this.scanner.tail.match(e);if(i){const s=i[0];return this.scanner.consume(s.length),s}return""}extractIntExpression(){const t=this.scanner.tail.match(/^\d+/);if(t){const e=t[0];return this.scanner.consume(e.length),e}return""}extractExpression(t=!1){const e=this.scanner.find(";",t);if(e<0){const n=this.scanner.tail;return this.scanner.consume(n.length),n}const s=this.scanner.peek(e-this.scanner.currentIndex-1)==="\\",a=this.scanner.tail.slice(0,e-this.scanner.currentIndex+(s?1:0));return this.scanner.consume(a.length+1),a}parseFontProperties(t){const e=this.extractExpression().split("|");if(e.length>0&&e[0]){const i=e[0];let s="Regular",a=400;for(const n of e.slice(1))n.startsWith("b1")?a=700:n==="i"||n.startsWith("i1")?s="Italic":(n==="i0"||n.startsWith("i0"))&&(s="Regular");t.fontFace={family:i,style:s,weight:a}}}parseParagraphProperties(t){const e=new D(this.extractExpression());let i=t.paragraph.indent,s=t.paragraph.left,a=t.paragraph.right,n=t.paragraph.align,h=[];const o=()=>{const c=e.tail.match(/^[+-]?\d+(?:\.\d*)?(?:[eE][+-]?\d+)?/);if(c){const u=parseFloat(c[0]);for(e.consume(c[0].length);e.peek()===",";)e.consume(1);return u}return 0};for(;e.hasData;)switch(e.get()){case"i":i=o();break;case"l":s=o();break;case"r":a=o();break;case"x":break;case"q":{const u=e.get();for(n=dt[u]||d.DEFAULT;e.peek()===",";)e.consume(1);break}case"t":for(h=[];e.hasData;){const u=e.peek();if(u==="r"||u==="c"){e.consume(1);const l=o();h.push(u+l.toString())}else{const l=o();isNaN(l)?e.consume(1):h.push(l)}}break}t.paragraph={indent:i,left:s,right:a,align:n,tabs:h}}consumeOptionalTerminator(){this.scanner.peek()===";"&&this.scanner.consume(1)}*parse(){const t=f.WORD,e=f.SPACE;let i=null;function s(n){const h={...n.paragraph};n.paragraph={indent:0,left:0,right:0,align:d.DEFAULT,tabs:[]};const o={};return h.indent!==0&&(o.indent=0),h.left!==0&&(o.left=0),h.right!==0&&(o.right=0),h.align!==d.DEFAULT&&(o.align=d.DEFAULT),JSON.stringify(h.tabs)!==JSON.stringify([])&&(o.tabs=[]),o}const a=()=>{let n="";for(;this.scanner.hasData;){let h=!1,o=this.scanner.peek();const c=this.scanner.currentIndex;if(o.charCodeAt(0)<32){if(this.scanner.consume(1),o===" ")return[f.TABULATOR,null];if(o===`
2
+ `)return[f.NEW_PARAGRAPH,null];o=" "}if(o==="\\")if("\\{}".includes(this.scanner.peek(1)))h=!0,this.scanner.consume(1),o=this.scanner.peek();else{if(n)return[t,n];this.scanner.consume(1);const u=this.scanner.get();switch(u){case"~":return[f.NBSP,null];case"P":return[f.NEW_PARAGRAPH,null];case"N":return[f.NEW_COLUMN,null];case"X":return[f.WRAP_AT_DIMLINE,null];case"S":{this.inStackContext=!0;const l=this.parseStacking();return this.inStackContext=!1,l}case"m":case"M":if(this.scanner.peek()==="+"){this.scanner.consume(1);const l=this.extractMifCode(this.mifCodeLength);if(l){this.scanner.consume(l.length);const g=this.mifDecoder(l);return n?[t,n]:[t,g]}this.scanner.consume(-1)}n+="\\M";continue;case"U":if(this.scanner.peek()==="+"){this.scanner.consume(1);const l=this.scanner.tail.match(/^[0-9A-Fa-f]{4,8}/);if(l){const g=l[0];this.scanner.consume(g.length);const p=parseInt(g,16);let b="";try{b=String.fromCodePoint(p)}catch{b="▯"}return n?[t,n]:[t,b]}this.scanner.consume(-1)}n+="\\U";continue;default:if(u)try{const l=this.parseProperties(u);if(this.yieldPropertyCommands&&l)return[f.PROPERTIES_CHANGED,l];continue}catch{const l=this.scanner.tail.slice(c,this.scanner.currentIndex);n+=l}}continue}if(o==="%"&&this.scanner.peek(1)==="%"){const u=this.scanner.peek(2).toLowerCase(),l=mt[u];if(l){this.scanner.consume(3),n+=l;continue}else{const g=[u,this.scanner.peek(3),this.scanner.peek(4)];if(g.every(p=>p>="0"&&p<="9")){const p=Number.parseInt(g.join(""),10);this.scanner.consume(5),n+=String.fromCharCode(p)}else this.scanner.consume(3);continue}}if(o===" ")return n?(this.scanner.consume(1),i=e,[t,n]):(this.scanner.consume(1),[e,null]);if(!h){if(o==="{"){if(n)return[t,n];this.scanner.consume(1),this.pushCtx();continue}else if(o==="}"){if(n)return[t,n];if(this.scanner.consume(1),this.yieldPropertyCommands){const u=this.ctxStack.current;this.popCtx();const l=this.getPropertyChanges(u,this.ctxStack.current);if(Object.keys(l).length>0)return[f.PROPERTIES_CHANGED,{command:void 0,changes:l,depth:this.ctxStack.depth}]}else this.popCtx();continue}}if(!this.inStackContext&&o==="^"){const u=this.scanner.peek(1);if(u){const l=u.charCodeAt(0);if(this.scanner.consume(2),l===32)n+="^";else{if(l===73)return n?[t,n]:[f.TABULATOR,null];if(l===74)return n?[t,n]:[f.NEW_PARAGRAPH,null];if(l===77)continue;n+="▯"}continue}}this.scanner.consume(1),o.charCodeAt(0)>=32&&(n+=o)}return n?[t,n]:[f.NONE,null]};for(;;){const[n,h]=a.call(this);if(n){if(yield new $(n,this.ctxStack.current.copy(),h),n===f.NEW_PARAGRAPH&&this.resetParagraphParameters){const o=this.ctxStack.current,c=s(o);this.yieldPropertyCommands&&Object.keys(c).length>0&&(yield new $(f.PROPERTIES_CHANGED,o.copy(),{command:void 0,changes:{paragraph:c},depth:this.ctxStack.depth}))}i&&(yield new $(i,this.ctxStack.current.copy(),null),i=null)}else break}}}class D{constructor(t){this.text=t,this.textLen=t.length,this._index=0}get currentIndex(){return this._index}get isEmpty(){return this._index>=this.textLen}get hasData(){return this._index<this.textLen}get(){if(this.isEmpty)return"";const t=this.text[this._index];return this._index++,t}consume(t=1){this._index=Math.max(0,Math.min(this._index+t,this.textLen))}peek(t=0){const e=this._index+t;return e>=this.textLen||e<0?"":this.text[e]}find(t,e=!1){let i=this._index;for(;i<this.textLen;){if(e&&this.text[i]==="\\"){if(i+1<this.textLen){if(this.text[i+1]===t)return i+1;i+=2;continue}i++;continue}if(this.text[i]===t)return i;i++}return-1}get tail(){return this.text.slice(this._index)}isNextSpace(){return this.peek()===" "}consumeSpaces(){let t=0;for(;this.isNextSpace();)this.consume(),t++;return t}}class O{constructor(t){this._aci=256,this._rgbValue=null,Array.isArray(t)?this.rgb=t:typeof t=="number"?this.aci=t:this.aci=256}get aci(){return this._aci}set aci(t){if(t===null)this._aci=null;else if(t>=0&&t<=256)this._aci=t,this._rgbValue=null;else throw new Error("ACI not in range [0, 256]")}get rgb(){if(this._rgbValue===null)return null;const t=this._rgbValue>>16&255,e=this._rgbValue>>8&255,i=this._rgbValue&255;return[t,e,i]}set rgb(t){if(t){const[e,i,s]=t;this._rgbValue=(e&255)<<16|(i&255)<<8|s&255,this._aci=null}else this._rgbValue=null}get isRgb(){return this._rgbValue!==null}get isAci(){return this._rgbValue===null&&this._aci!==null}get rgbValue(){return this._rgbValue}set rgbValue(t){t===null?this._rgbValue=null:(this._rgbValue=t&16777215,this._aci=null)}copy(){const t=new O;return t._aci=this._aci,t._rgbValue=this._rgbValue,t}toObject(){return{aci:this._aci,rgb:this.rgb,rgbValue:this._rgbValue}}toCssColor(){return this._rgbValue!==null?bt(this._rgbValue):null}static fromCssColor(t){const e=St(t);if(e===null)return null;const i=new O;return i.rgbValue=e,i}equals(t){return this._aci===t._aci&&this._rgbValue===t._rgbValue}}class C{constructor(){this._stroke=0,this.continueStroke=!1,this.color=new O,this.align=H.BOTTOM,this.fontFace={family:"",style:"Regular",weight:400},this._capHeight={value:1,isRelative:!1},this._widthFactor={value:1,isRelative:!1},this._charTrackingFactor={value:1,isRelative:!1},this.oblique=0,this.paragraph={indent:0,left:0,right:0,align:d.DEFAULT,tabs:[]}}get capHeight(){return this._capHeight}set capHeight(t){this._capHeight={value:Math.abs(t.value),isRelative:t.isRelative}}get widthFactor(){return this._widthFactor}set widthFactor(t){this._widthFactor={value:Math.abs(t.value),isRelative:t.isRelative}}get charTrackingFactor(){return this._charTrackingFactor}set charTrackingFactor(t){this._charTrackingFactor={value:Math.abs(t.value),isRelative:t.isRelative}}get aci(){return this.color.aci}set aci(t){this.color.aci=t}get rgb(){return this.color.rgb}set rgb(t){this.color.rgb=t}get italic(){return this.fontFace.style==="Italic"}set italic(t){this.fontFace.style=t?"Italic":"Regular"}get bold(){return(this.fontFace.weight||400)>=700}set bold(t){this.fontFace.weight=t?700:400}get underline(){return!!(this._stroke&T.UNDERLINE)}set underline(t){this._setStrokeState(T.UNDERLINE,t)}get strikeThrough(){return!!(this._stroke&T.STRIKE_THROUGH)}set strikeThrough(t){this._setStrokeState(T.STRIKE_THROUGH,t)}get overline(){return!!(this._stroke&T.OVERLINE)}set overline(t){this._setStrokeState(T.OVERLINE,t)}get hasAnyStroke(){return!!this._stroke}_setStrokeState(t,e=!0){e?this._stroke|=t:this._stroke&=~t}copy(){const t=new C;return t._stroke=this._stroke,t.continueStroke=this.continueStroke,t.color=this.color.copy(),t.align=this.align,t.fontFace={...this.fontFace},t._capHeight={...this._capHeight},t._widthFactor={...this._widthFactor},t._charTrackingFactor={...this._charTrackingFactor},t.oblique=this.oblique,t.paragraph={...this.paragraph},t}}class ${constructor(t,e,i){this.type=t,this.ctx=e,this.data=i}}class X{static toSvgTransform(t){const e=t.elements;return`matrix(${e[0]},${e[1]},${e[4]},${e[5]},${e[12]},${e[13]})`}static transformPoint(t,e){const i=t.elements,s=e.x,a=e.y,n=e.z??0,h=i[3]*s+i[7]*a+i[11]*n+i[15],o=h===0?1:1/h;return{x:(i[0]*s+i[4]*a+i[8]*n+i[12])*o,y:(i[1]*s+i[5]*a+i[9]*n+i[13])*o}}static transformBox(t,e){if(t.isEmpty())return;const i=t.min,s=t.max,a=[{x:i.x,y:i.y,z:0},{x:s.x,y:i.y,z:0},{x:s.x,y:s.y,z:0},{x:i.x,y:s.y,z:0}];let n=1/0,h=1/0,o=-1/0,c=-1/0;for(const u of a){const l=this.transformPoint(e,u);n=Math.min(n,l.x),h=Math.min(h,l.y),o=Math.max(o,l.x),c=Math.max(c,l.y)}t.min.set(n,h),t.max.set(o,c)}}class S{constructor(){this._objectId="",this._ownerId="",this._layerName="",this._visible=!0,this._userData={},this._box=new N,this._localSvg=""}get box(){return this._box}set box(t){this._box.copy(t)}get basePoint(){return this._basePoint}set basePoint(t){t==null?this._basePoint=t:this._basePoint=this._basePoint?this._basePoint.copy(t):new gt(t)}get svg(){return this.renderSvg()}set svg(t){this._localSvg=t}getLocalSvg(){return this._localSvg}renderSvg(){return this._localSvg?this._matrix?`<g transform="${X.toSvgTransform(this._matrix)}">
3
+ ${this._localSvg}
4
+ </g>`:this._localSvg:""}get objectId(){return this._objectId}set objectId(t){this._objectId=t}get ownerId(){return this._ownerId}set ownerId(t){this._ownerId=t}get layerName(){return this._layerName}set layerName(t){this._layerName=t}get visible(){return this._visible}set visible(t){this._visible=t}get userData(){return this._userData}set userData(t){this._userData=t}applyMatrix(t){this._matrix?this._matrix=t.clone().multiply(this._matrix):this._matrix=t.clone(),X.transformBox(this._box,t)}recomputeBoundingBox(){}highlight(){}unhighlight(){}fastDeepClone(){return this}addChild(t){}}class m{static rgbToHex(t){const e=t>>16&255,i=t>>8&255,s=t&255;return`#${e.toString(16).padStart(2,"0")}${i.toString(16).padStart(2,"0")}${s.toString(16).padStart(2,"0")}`}static resolveRgb(t,e,i){return i==="fill"&&t.color.isForeground&&this.isSolidBackgroundHatch(t)?e.backgroundColor:J.fromBackgroundColor(e.backgroundColor).resolveSubEntityTraitsRgb(t)}static strokeAttributes(t,e){const i={stroke:this.rgbToHex(this.resolveRgb(t,e,"line")),fill:"none"};if(!e.showLineWeight)i["stroke-width"]="1",i["vector-effect"]="non-scaling-stroke";else{const n=this.resolveStrokeWidth(t.lineWeight);n!=null&&(i["stroke-width"]=String(n))}const s=this.resolveOpacity(t);s!=null&&s<1&&(i["stroke-opacity"]=String(s));const a=this.strokeDasharray(t,e);return a&&(i["stroke-dasharray"]=a),i}static fillAttributes(t,e){const i={fill:this.rgbToHex(this.resolveRgb(t,e,"fill")),stroke:"none"},s=this.resolveOpacity(t);return s!=null&&s<1&&(i["fill-opacity"]=String(s)),i}static textAttributes(t,e){const i={fill:this.rgbToHex(this.resolveRgb(t,e,"text")),stroke:"none"},s=this.resolveOpacity(t);return s!=null&&s<1&&(i["fill-opacity"]=String(s)),i}static pointAttributes(t,e){return this.textAttributes(t,e)}static formatAttributes(t){return Object.entries(t).map(([e,i])=>`${e}="${Tt(i)}"`).join(" ")}static tag(t,e,i){const s=this.formatAttributes(e);return i==null?`<${t} ${s}/>`:`<${t} ${s}>${i}</${t}>`}static isSolidBackgroundHatch(t){if((t.drawOrder??0)>=0)return!1;const e=t.fillType;return e.gradient?!1:!e.definitionLines||e.definitionLines.length===0}static resolveStrokeWidth(t){return t<0?null:Math.max(.01,t/100)}static resolveOpacity(t){var e;const i=(e=t.transparency)==null?void 0:e.alpha;return i==null||Number.isNaN(i)?null:Math.min(1,Math.max(0,i))}static strokeDasharray(t,e){const i=t.lineType.pattern;if(!i||i.length===0)return;const s=e.ltscale*e.celtscale*t.lineTypeScale,a=this.patternToDashSegments(i,s);if(a.length!==0)return a.join(" ")}static patternToDashSegments(t,e){const i=[];for(const s of t){let a=s.elementLength;a<0&&s.elementTypeFlag!==0&&(a=Math.abs(a)),a*=e,a===0&&(a=.5*e),i.push(Math.abs(a))}return i}}function Tt(r){return r.replace(/&/g,"&amp;").replace(/"/g,"&quot;").replace(/</g,"&lt;")}class kt extends S{constructor(t,e,i,s){super();const a=t.tessellate(s);let n="";for(const h of a){if(h.length===0)continue;const[o,...c]=h;n+=`M${o.x},${o.y}`;for(const u of c)n+=` L${u.x},${u.y}`;n+=" Z";for(const u of h)this._box.expandByPoint(u)}if(n){const h={d:n,"fill-rule":"evenodd",...m.fillAttributes(e,i)};this.svg=m.tag("path",h)}}}class wt extends S{constructor(t,e,i,s){super();const a=t.tessellate(s).reduce((h,o,c)=>(h+=c===0?"M":"L",h+=`${o.x},${o.y}`,h),"");if(a){const h={d:a,...m.strokeAttributes(e,i)};this.svg=m.tag("path",h)}const n=t.box;this._box.min.copy(n.min),this._box.max.copy(n.max)}}class Lt extends S{constructor(t,e,i,s){super();const a=t.tessellate(s).reduce((h,o,c)=>(h+=c===0?"M":"L",h+=`${o.x},${o.y}`,h),"");if(a){const h={d:a,...m.strokeAttributes(e,i)};this.svg=m.tag("path",h)}const n=t.box;this._box.min.copy(n.min),this._box.max.copy(n.max)}}class W{static isSafeEmbeddedUrl(t){const e=t.trim();return e.startsWith("data:")||e.startsWith("#")}static sanitizeExternalReferences(t){return t.replace(/<(?:image|use)\b[^>]*\s(?:xlink:)?href="(?!data:|#)[^"]*"[^>]*\/?>\s*/gi,"")}static async rasterizeSvgDataUrl(t){return typeof document>"u"?t:new Promise((e,i)=>{const s=new Image;s.onload=()=>{const a=Math.max(1,s.naturalWidth||1),n=Math.max(1,s.naturalHeight||1),h=document.createElement("canvas");h.width=a,h.height=n;const o=h.getContext("2d");if(!o){i(new Error("Canvas 2D context unavailable"));return}o.drawImage(s,0,0,a,n),e(h.toDataURL("image/png"))},s.onerror=()=>i(new Error("Failed to rasterize embedded SVG image")),s.src=t})}}class Et extends S{constructor(t){super(),this._childCount=t.length;const e=t.map(i=>i.renderSvg()).filter(Boolean).join(`
5
+ `);this._localSvg=e;for(const i of t)this._box.union(i.box)}get childCount(){return this._childCount}}class M extends S{constructor(t,e,i,s){super();const{boundary:a}=e;if(a.length<2||!W.isSafeEmbeddedUrl(t))return;let n=1/0,h=1/0,o=-1/0,c=-1/0;for(const p of a)p.x<n&&(n=p.x),p.y<h&&(h=p.y),p.x>o&&(o=p.x),p.y>c&&(c=p.y),this._box.expandByPoint(p);const u=o-n,l=c-h,g=Ct(t);this._localSvg=`<image x="${n}" y="${h}" width="${u}" height="${l}" href="${g}" xlink:href="${g}" transform="scale(1,-1) translate(0,${-(h*2+l)})"/>`}static async fromBlob(t,e,i,s){let a=await Rt(t);if(t.type==="image/svg+xml"||a.startsWith("data:image/svg+xml"))try{a=await W.rasterizeSvgDataUrl(a)}catch{return new M("",e,i,s)}return new M(a,e,i,s)}}function Rt(r){return new Promise((t,e)=>{const i=new FileReader;i.onload=()=>t(i.result),i.onerror=e,i.readAsDataURL(r)})}function Ct(r){return r.replace(/&/g,"&amp;").replace(/"/g,"&quot;")}class At extends S{constructor(t,e,i){super();const s=t.reduce((a,n,h)=>(a+=h===0?"M":"L",a+=n.x+","+n.y,this.box.expandByPoint(n),a),"");if(s){const a={d:s,...m.strokeAttributes(e,i)};this.svg=m.tag("path",a)}}}class Ft extends S{constructor(t,e,i,s,a){super();const n=m.strokeAttributes(s,a),h=[];for(let o=0;o+1<i.length;o+=2){const c=i[o]*e,u=i[o+1]*e,l=t[c],g=t[c+1],p=t[u],b=t[u+1];h.push(m.tag("line",{x1:String(l),y1:String(g),x2:String(p),y2:String(b),...n})),this._box.expandByPoint({x:l,y:g}),this._box.expandByPoint({x:p,y:b})}this.svg=h.join(`
6
+ `)}}const tt=/\.(shx|ttf|otf|woff2?)$/i,Pt={txt:"Lucida Console, Courier New, monospace",simplex:"Arial, Helvetica, sans-serif",romans:'"Times New Roman", Times, serif',romanc:'"Times New Roman", Times, serif',romand:'"Times New Roman", Times, serif',romant:'"Times New Roman", Times, serif',italic:'"Times New Roman", Times, serif',italict:'"Times New Roman", Times, serif',italicc:'"Times New Roman", Times, serif',monotxt:'"Courier New", Courier, monospace',isocp:"Arial, Helvetica, sans-serif",isocp2:"Arial, Helvetica, sans-serif",isocp3:"Arial, Helvetica, sans-serif",isoct:"Arial, Helvetica, sans-serif",isoct2:"Arial, Helvetica, sans-serif",isoct3:"Arial, Helvetica, sans-serif",gdt:"Arial, Helvetica, sans-serif",greekc:'"Times New Roman", Times, serif',greeks:'"Times New Roman", Times, serif',simsun:'SimSun, "Songti SC", STSong, serif',simhei:'SimHei, "Heiti SC", STHeiti, sans-serif',simkai:'KaiTi, "Kaiti SC", STKaiti, serif',simfang:'FangSong, "Fangsong SC", STFangsong, serif',msyh:'"Microsoft YaHei", "PingFang SC", sans-serif',dengxian:'DengXian, "Microsoft YaHei", sans-serif',arial:"Arial, Helvetica, sans-serif","times new roman":'"Times New Roman", Times, serif',courier:'"Courier New", Courier, monospace',tahoma:"Tahoma, Geneva, sans-serif",verdana:"Verdana, Geneva, sans-serif"},Nt={arial:"1",romans:"1.05",txt:"1.1",simplex:"1.05",isocp:"1"};let G={},j={};function Y(r){return r.trim().replace(tt,"").toLowerCase()}function V(r,t){const e=(t==null?void 0:t.trim())||"sans-serif";if(!(r!=null&&r.trim()))return V(e,"sans-serif");const i=Y(r);return(G[i]??Pt[i]??G[r.toLowerCase()])||(tt.test(r)?e:r.includes(",")?r:`"${r}", ${e}`)}function It(r){if(!(r!=null&&r.trim()))return 1;const t=Y(r),e=j[t]??Nt[t]??j[r.toLowerCase()];if(e==null)return 1;const i=Number(e);return Number.isFinite(i)&&i>0?i:1}function z(r){return Y(r)}const Ht=1,Ot=5/3,Mt=.3,Bt=.6,Dt=1,$t=4,Wt=.7;function Yt(r){if(!r||r.length!==1)return!1;const t=r.codePointAt(0)??0;return t>=4352&&t<=4607||t>=11904&&t<=40959||t>=63744&&t<=64255||t>=65040&&t<=65135||t>=65280&&t<=65376||t>=131072&&t<=196607}function Vt(r,t){const e=typeof t.lineSpaceFactor=="number"?t.lineSpaceFactor:Ht;return r*Math.max(e,0)*Ot}function zt(r){return!Number.isFinite(r.width)||r.width<=0?null:r.width}function Ut(r){switch(r){case P.RIGHT_TO_LEFT:return 1;case P.TOP_TO_BOTTOM:return 2;case P.BOTTOM_TO_TOP:return 3;case P.LEFT_TO_RIGHT:case P.BY_STYLE:default:return 0}}function Xt(r){const t=r.directionVector;return t&&(t.x!==0||t.y!==0)?Math.atan2(t.y,t.x):r.rotation??0}function Gt(r){const t=r.width;if(!Number.isFinite(t)||t<=0||r.attachmentPoint==null)return d.LEFT;switch(r.attachmentPoint){case x.TopCenter:case x.MiddleCenter:case x.BottomCenter:case x.BaselineCenter:return d.CENTER;case x.TopRight:case x.MiddleRight:case x.BottomRight:case x.BaselineRight:return d.RIGHT;default:return d.LEFT}}function jt(r){return{minX:r.minX,maxX:r.maxX,minY:-r.maxY,maxY:-r.minY,baselineY:-r.firstBaselineY}}function qt(r,t){const e=jt(t),i=(e.minX+e.maxX)/2,s=(e.minY+e.maxY)/2;switch(r){case x.TopCenter:return{x:-i,y:-e.maxY};case x.TopRight:return{x:-e.maxX,y:-e.maxY};case x.MiddleLeft:return{x:-e.minX,y:-s};case x.MiddleCenter:return{x:-i,y:-s};case x.MiddleRight:return{x:-e.maxX,y:-s};case x.BottomLeft:return{x:-e.minX,y:-e.minY};case x.BottomCenter:return{x:-i,y:-e.minY};case x.BottomRight:return{x:-e.maxX,y:-e.minY};case x.BaselineCenter:return{x:-i,y:-e.baselineY};case x.BaselineRight:return{x:-e.maxX,y:-e.baselineY};case x.BaselineLeft:return{x:-e.minX,y:-e.baselineY};case x.TopLeft:default:return{x:-e.minX,y:-e.maxY}}}function Kt(r,t,e,i){const s=new N,{text:a,height:n,position:h}=r;if(!a||n<=0)return{localSvg:"",box:s};const o=n,c=Vt(o,r),u=zt(r),l=Ut(r.drawingDirection),g=V(t.extendedFont||t.font,"sans-serif"),p=typeof r.widthFactor=="number"&&r.widthFactor>0?r.widthFactor:typeof t.widthFactor=="number"&&t.widthFactor>0?t.widthFactor:1,b=new C;b.capHeight={value:o,isRelative:!1},b.widthFactor={value:p,isRelative:!1},b.paragraph.align=Gt(r),typeof t.obliqueAngle=="number"&&(b.oblique=t.obliqueAngle),b.fontFace.family=z(t.extendedFont||t.font||g);const w=new vt(a,b,{resetParagraphParameters:!0,yieldPropertyCommands:!0}),y=new Qt(o,c,u,l,g,t,e,i);for(const et of w.parse())y.consume(et);y.finish();const _=y.bounds,L=qt(r.attachmentPoint,_),{x:E,y:R}=h,v=Xt(r)*180/Math.PI,k=[`translate(${E},${R})`];v!==0&&k.push(`rotate(${-v})`),k.push(`translate(${L.x},${L.y})`),k.push("scale(1,-1)");const I={"font-size":String(o),"font-family":g,...m.textAttributes(e,i)},A=[m.tag("text",I,y.tspanMarkup),y.decorationMarkup].join(""),F=m.tag("g",{transform:k.join(" ")},A);return Jt(s,_,L,E,R),{localSvg:F,box:s}}function Jt(r,t,e,i,s){if(t.maxX<=t.minX&&t.maxY<=t.minY)return;const a=[{x:t.minX+e.x,y:e.y-t.minY},{x:t.maxX+e.x,y:e.y-t.minY},{x:t.minX+e.x,y:e.y-t.maxY},{x:t.maxX+e.x,y:e.y-t.maxY}];for(const n of a)r.expandByPoint({x:i+n.x,y:s+n.y})}class Qt{constructor(t,e,i,s,a,n,h,o){this.baseHeight=t,this.lineAdvance=e,this.wrapWidth=i,this.flowMode=s,this.defaultFont=a,this.style=n,this.traits=h,this.ctx=o,this.x=0,this.y=0,this.lineStartX=0,this.columnStartY=0,this.columnAdvance=0,this.isLineStart=!0,this.firstLineOfParagraph=!0,this.currentLine=null,this.lines=[],this.decorationLines=[],this.activeLineIndex=0,this.minX=0,this.maxX=0,this.minY=0,this.maxY=0,this.firstBaselineY=0,this.hasContent=!1,this.resetParagraphPosition(new C)}get tspanMarkup(){let t="",e=!0;for(const i of this.lines){let s,a;for(const n of i.spans){const h=this.tspanAttributes(n.tokenCtx,n.fontSize),o=s===void 0;this.isVertical()?(h.x=String(n.x),h.y=String(n.y)):o?(s=n.x,h.x=String(n.x),h.dy=e?"0":String(this.lineAdvance),e=!1,a=n.x+this.measureText(n.text,n.fontSize,n.tokenCtx)):a!=null&&Math.abs(n.x-a)>1e-6?(h.x=String(n.x),a=n.x+this.measureText(n.text,n.fontSize,n.tokenCtx)):a=(a??n.x)+this.measureText(n.text,n.fontSize,n.tokenCtx),t+=m.tag("tspan",h,Zt(n.text))}}return t}get decorationMarkup(){return this.decorationLines.map(t=>m.tag("line",{x1:String(t.x1),y1:String(t.y1),x2:String(t.x2),y2:String(t.y2),stroke:t.stroke,"stroke-width":String(Math.max(this.baseHeight*.05,.05)),"stroke-linecap":"butt"})).join("")}get bounds(){return{minX:this.minX,maxX:this.maxX,minY:this.minY,maxY:this.maxY,firstBaselineY:this.firstBaselineY}}consume(t){switch(t.type){case f.WORD:this.emitText(String(t.data??""),t.ctx);break;case f.SPACE:this.emitSpace(t.ctx);break;case f.NBSP:this.emitText(" ",t.ctx);break;case f.TABULATOR:this.advanceToTab(t.ctx);break;case f.NEW_PARAGRAPH:this.newParagraph(t.ctx);break;case f.NEW_COLUMN:this.newColumn(t.ctx);break;case f.WRAP_AT_DIMLINE:this.wrapLine(t.ctx);break;case f.PROPERTIES_CHANGED:this.applyPropertyChange(t.data,t.ctx);break;case f.STACK:Array.isArray(t.data)&&t.data.length===3&&this.emitStack(t.data,t.ctx);break}}finish(){this.finalizeCurrentLine(),this.applyLineAlignment(),this.recomputeBoundsFromLines()}applyPropertyChange(t,e){var i,s;if(((i=t.changes.paragraph)==null?void 0:i.align)!=null&&this.currentLine&&(this.currentLine.paragraphAlign=t.changes.paragraph.align),t.command==="f"||t.command==="F")this.applyFontFaceChange(t.changes.fontFace,e);else if(t.command==="p"&&((s=t.changes.paragraph)==null?void 0:s.indent)!=null&&this.firstLineOfParagraph){const a=t.changes.paragraph.indent*this.baseHeight;this.isHorizontalRtl()?this.x-=a:this.isVertical()||(this.x+=a)}}applyFontFaceChange(t,e){if(!(t!=null&&t.family))return;const i=z(t.family);e.fontFace={...t,family:i},t.style==="Italic"&&(e.oblique=(this.style.obliqueAngle??0)||15)}applyLineAlignment(){var t;if(this.wrapWidth!=null)for(let e=0;e<this.lines.length;e++){const i=this.lines[e];if(i.maxX-i.minX<=0)continue;const s=((t=i.spans[0])==null?void 0:t.tokenCtx)??new C,a=this.wrapWidth-this.paragraphLeft(s)-this.rightMargin(s);let n=0;switch(i.paragraphAlign){case d.CENTER:n=i.columnLeft+a/2-(i.minX+i.maxX)/2;break;case d.RIGHT:n=i.columnLeft+a-i.maxX;break;case d.JUSTIFIED:case d.DISTRIBUTED:case d.LEFT:case d.DEFAULT:default:n=0;break}if(n!==0){for(const h of i.spans)h.x+=n;i.minX+=n,i.maxX+=n;for(const h of this.decorationLines)h.lineIndex===e&&(h.x1+=n,h.x2+=n)}}}recomputeBoundsFromLines(){this.minX=0,this.maxX=0,this.minY=0,this.maxY=0,this.hasContent=!1;for(const t of this.lines)for(const e of t.spans)this.includeSpanBounds(e)}emitSpace(t){const e=this.spaceWidth(t);this.isLineStart||this.isHorizontal()&&(this.ensureFits(e,t),this.isLineStart)||this.advancePosition(e,this.resolveCapHeight(t))}emitText(t,e){if(!t)return;if(this.isVertical()){for(const a of t)this.emitTextRun(a,e);return}if(this.wrapWidth==null){this.emitTextRun(t,e);return}const i=this.resolveCapHeight(e),s=this.measureText(t,i,e);!this.isLineStart&&s>0&&this.penOffset(e)+s>this.maxLineWidth(e)&&this.wrapLine(e);for(const a of t)this.emitTextRun(a,e)}emitTextRun(t,e){var i;if(!t)return;const s=this.resolveCapHeight(e),a=this.measureText(t,s,e),n=this.isVertical()?s:a;this.ensureFits(n,e);const h=this.currentPosition(),o={text:t,x:h.x,y:h.y,fontSize:s,tokenCtx:e.copy()};(i=this.currentLine)==null||i.spans.push(o),this.includeSpanBounds(o),this.advancePosition(a,s),this.firstLineOfParagraph=!1}emitStack(t,e){const[i,s,a]=t,n=this.currentPosition(),h=this.isLineStart,o=this.resolveCapHeight(e);if(a==="^"){const y=e.copy();if(y.capHeight={value:Wt,isRelative:!0},i&&!s){this.setPosition(n.x,n.y-o*.35),this.isLineStart=!0,this.emitText(i,y);const _=this.measureHorizontalSpan(n,this.currentPosition());this.setPosition(n.x+_,n.y)}else if(!i&&s){this.setPosition(n.x,n.y+o*.2),this.isLineStart=!0,this.emitText(s,y);const _=this.measureHorizontalSpan(n,this.currentPosition());this.setPosition(n.x+_,n.y)}else if(i&&s){this.setPosition(n.x,n.y-o*.2),this.isLineStart=!0,this.emitText(i,y);const _=this.measureHorizontalSpan(n,this.currentPosition());this.setPosition(n.x+_,n.y)}this.isLineStart=h;return}if(a==="/"){this.emitText(`${i}/${s}`,e);return}const c=this.measureText(i,o,e),u=this.measureText(s,o,e),l=Math.max(c,u),g=(l-c)/2,p=(l-u)/2,b=q(e.color,this.traits,this.ctx);if(this.setPosition(n.x+g,n.y-o*.35),this.isLineStart=!0,this.emitText(i,e),this.setPosition(n.x+p,n.y+o*.2),this.isLineStart=!0,this.emitText(s,e),a==="/"||a==="#"){const y=n.y-o*.05+this.baseHeight*Mt;this.decorationLines.push({x1:n.x,y1:y,x2:n.x+l,y2:y,stroke:b,lineIndex:this.activeLineIndex})}const w=this.isHorizontalRtl()?n.x-l:n.x+l;this.setPosition(w,n.y),this.isLineStart=h}newParagraph(t){if(this.finalizeCurrentLine(),this.isVertical()){this.newColumn(t);return}this.y+=this.lineAdvance,this.columnStartY=this.y,this.resetParagraphPosition(t)}wrapLine(t){if(this.finalizeCurrentLine(),this.isVertical()){this.newColumn(t);return}this.y+=this.lineAdvance,this.columnStartY=this.y,this.resetLinePosition(t)}newColumn(t){if(this.finalizeCurrentLine(),this.isVertical()){this.x+=this.columnAdvance>0?this.columnAdvance:this.baseHeight,this.columnAdvance=0,this.isVerticalTtb()&&(this.columnStartY=0),this.resetParagraphPosition(t);return}this.x+=this.wrapWidth??this.baseHeight*4,this.resetParagraphPosition(t)}finalizeCurrentLine(){this.currentLine&&this.currentLine.spans.length>0&&(this.lines.push(this.currentLine),this.activeLineIndex=this.lines.length),this.currentLine=null}resetParagraphPosition(t){this.firstLineOfParagraph=!0,this.resetLinePosition(t)}resetLinePosition(t){const e=this.paragraphLeft(t),i=this.firstLineOfParagraph?this.firstLineIndent(t):0,s=this.lineLimits(t);this.isHorizontalRtl()?(this.x=s.right-i,this.y=this.columnStartY):this.isVerticalTtb()?(this.x=e,this.y=this.columnStartY+i):this.isVerticalBtt()?(this.x=e,this.y=(this.wrapWidth!=null?this.wrapWidth:this.baseHeight*10)-i,this.columnStartY=this.y):(this.x=e+i,this.y=this.columnStartY),this.lineStartX=e,this.isLineStart=!0,this.currentLine={spans:[],minX:this.x,maxX:this.x,minY:this.y,maxY:this.y,baselineY:this.y,columnLeft:e,paragraphAlign:t.paragraph.align}}wouldOverflow(t,e){if(this.wrapWidth==null||t<=0||this.isLineStart)return!1;if(this.isHorizontal())return this.penOffset(e)+t>this.maxLineWidth(e);const i=this.verticalLimits(e);return this.isVerticalTtb()?this.y+t>i.bottom:this.y-t<i.top}penOffset(t){return this.isHorizontalRtl()?this.lineLimits(t).right-this.x:this.x-this.paragraphLeft(t)}maxLineWidth(t){return this.wrapWidth==null?Number.POSITIVE_INFINITY:this.wrapWidth-this.paragraphLeft(t)-this.rightMargin(t)}ensureFits(t,e){this.wrapWidth!=null&&this.isHorizontal()&&!this.isLineStart&&this.penOffset(e)>this.maxLineWidth(e)&&this.wrapLine(e),this.wouldOverflow(t,e)&&this.wrapLine(e)}advancePosition(t,e){this.isHorizontalRtl()?this.x-=t:this.isVerticalTtb()?this.y+=e:this.isVerticalBtt()?this.y-=e:this.x+=t,this.isLineStart=!1,this.columnAdvance=Math.max(this.columnAdvance,t)}advanceToTab(t){const e=this.baseHeight*$t,i=t.paragraph.tabs;if(i.length===0){const s=this.isHorizontalRtl()?Math.floor(this.x/e)*e:Math.ceil((this.x+1)/e)*e,a=this.isHorizontalRtl()?this.x-s:s-this.x;this.advancePosition(Math.max(0,a),this.resolveCapHeight(t));return}for(const s of i){const a=this.lineStartX+(typeof s=="number"?s*this.baseHeight:parseFloat(String(s))*this.baseHeight);if(this.isHorizontalRtl()){if(!Number.isNaN(a)&&a<this.x){this.advancePosition(this.x-a,this.resolveCapHeight(t));return}}else if(!Number.isNaN(a)&&a>this.x){this.advancePosition(a-this.x,this.resolveCapHeight(t));return}}this.advancePosition(e,this.resolveCapHeight(t))}lineLimits(t){const e=this.paragraphLeft(t),i=t.paragraph.right*this.baseHeight,s=this.wrapWidth!=null?e+this.wrapWidth-i:Number.POSITIVE_INFINITY;return{left:e,right:s}}verticalLimits(t){if(this.isVerticalBtt()){const s=this.columnStartY-t.paragraph.right*this.baseHeight;return{top:this.wrapWidth!=null?this.columnStartY-this.wrapWidth+this.firstLineIndent(t):Number.NEGATIVE_INFINITY,bottom:s}}const e=this.columnStartY+this.firstLineIndent(t),i=this.wrapWidth!=null?this.columnStartY+this.wrapWidth-t.paragraph.right*this.baseHeight:Number.POSITIVE_INFINITY;return{top:e,bottom:i}}currentPosition(){return{x:this.x,y:this.y}}setPosition(t,e){this.x=t,this.y=e}includeSpanBounds(t){const e=this.measureText(t.text,t.fontSize,t.tokenCtx),i=this.isHorizontalRtl()?t.x-e:t.x,s=this.isHorizontalRtl()?t.x:t.x+e,a=t.y-t.fontSize,n=t.y;this.hasContent?(this.minX=Math.min(this.minX,i),this.maxX=Math.max(this.maxX,s),this.minY=Math.min(this.minY,a),this.maxY=Math.max(this.maxY,n)):(this.minX=i,this.maxX=s,this.minY=a,this.maxY=n,this.firstBaselineY=t.y,this.hasContent=!0),this.currentLine&&(this.currentLine.minX=Math.min(this.currentLine.minX,i),this.currentLine.maxX=Math.max(this.currentLine.maxX,s),this.currentLine.minY=Math.min(this.currentLine.minY,a),this.currentLine.maxY=Math.max(this.currentLine.maxY,n))}measureHorizontalSpan(t,e){return Math.abs(e.x-t.x)}spaceWidth(t){const e=this.resolveCapHeight(t);return this.measureText(" ",e,t)}measureCharWidth(t,e,i){const s=this.resolveWidthFactor(i),a=this.resolveTracking(i),n=Yt(t)?Dt:Bt;return e*n*s*a}measureText(t,e,i){let s=0;for(const a of t)s+=this.measureCharWidth(a,e,i);return s}paragraphLeft(t){return t.paragraph.left*this.baseHeight}firstLineIndent(t){return t.paragraph.indent*this.baseHeight}rightMargin(t){return((t==null?void 0:t.paragraph.right)??0)*this.baseHeight}resolveCapHeight(t){const e=t.capHeight,i=e.isRelative?this.baseHeight*e.value:e.value,s=t.fontFace.family||this.defaultFont;return i*It(s)}resolveWidthFactor(t){const e=t.widthFactor;if(e.isRelative){const i=this.wrapWidth??this.baseHeight*4;return e.value*i}return e.value*.85}resolveTracking(t){const e=t.charTrackingFactor;return e.isRelative?e.value+1:e.value}isHorizontal(){return this.flowMode===0||this.flowMode===1}isHorizontalRtl(){return this.flowMode===1}isVertical(){return this.flowMode===2||this.flowMode===3}isVerticalTtb(){return this.flowMode===2}isVerticalBtt(){return this.flowMode===3}tspanAttributes(t,e){const i={};Math.abs(e-this.baseHeight)>1e-9&&(i["font-size"]=String(e));const s=t.fontFace.family;i["font-family"]=V(s,this.defaultFont),t.bold&&(i["font-weight"]="700"),t.italic&&(i["font-style"]="italic");const a=this.resolveWidthFactor(t),n=this.resolveTracking(t);n!==1&&(i["letter-spacing"]=`${((n-1)*e*.25).toFixed(3)}`);const h=t.oblique;if(h!==0){const c=[`skewX(${-h})`];a!==1&&c.unshift(`scale(${a},1)`),i.transform=c.join(" ")}else a!==1&&(i.transform=`scale(${a},1)`);i.fill=q(t.color,this.traits,this.ctx);const o=[];return t.underline&&o.push("underline"),t.overline&&o.push("overline"),t.strikeThrough&&o.push("line-through"),o.length>0&&(i["text-decoration"]=o.join(" ")),i}}function q(r,t,e){if(r.isRgb&&r.rgbValue!=null)return m.rgbToHex(r.rgbValue);if(r.aci===256||r.aci==null||r.aci===0)return m.rgbToHex(m.resolveRgb(t,e,"text"));const i=new Q;i.colorIndex=r.aci;const s=i.RGB;return typeof s=="number"?m.rgbToHex(s):m.rgbToHex(m.resolveRgb(t,e,"text"))}function Zt(r){return r.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;")}class te extends S{constructor(t,e,i,s){super();const a=Kt(t,e,i,s);this._localSvg=a.localSvg,this._box=a.box}}const ee=.5;class ie extends S{constructor(t,e,i,s){super();const a=e.displaySize>0?e.displaySize/2:ee,n={cx:String(t.x),cy:String(t.y),r:String(a),...m.pointAttributes(i,s)};this.svg=m.tag("circle",n),this._box.expandByPoint(t)}}function se(r,t,e,i){const s=new N,a={localSvg:"",box:s},n=r.size,h=r.position;if(!h||!(n>0))return a;const o=oe(r,t);if(!(o!=null&&o.length))return a;const c=r.widthFactor??t.widthFactor??1,u=(t.obliqueAngle??0)*Math.PI/180,l=u!==0?Math.tan(u):0,g=ne(o,c,l);if(g.length===0)return a;const p=re(g),b=ae(r.rotation,r.directionVector),w=Math.cos(b),y=Math.sin(b),_=m.strokeAttributes(e,i),L=[];for(const E of g){let R="";for(let v=0;v<E.length;v++){const k=E[v].x+p.x,I=E[v].y+p.y,A=k*w-I*y+h.x,F=k*y+I*w+h.y;R+=v===0?`M${A},${F}`:`L${A},${F}`,s.expandByPoint({x:A,y:F})}R&&L.push(m.tag("path",{d:R,..._}))}return{localSvg:L.join(`
7
+ `),box:s}}function ne(r,t,e){const i=[];for(const s of r){if(s.length<2)continue;const a=[];for(const n of s){let h=n.x*t;const o=n.y;e!==0&&(h+=e*o),a.push({x:h,y:o})}i.push(a)}return i}function re(r){let t=1/0,e=1/0;for(const i of r)for(const s of i)t=Math.min(t,s.x),e=Math.min(e,s.y);return{x:Number.isFinite(t)?-t:0,y:Number.isFinite(e)?-e:0}}function ae(r,t){if(!t)return r??0;const e=t.x??0,i=t.y??0,s=t.z??1,a=Math.hypot(e,i,s);if(a<1e-12)return r??0;const n=e/a,h=i/a,o=s/a;return Math.hypot(n,h)<1e-10&&o>0?r??0:Math.acos(Math.min(1,Math.max(-1,o)))}function oe(r,t){var e;const i=z(t.font),s=r.size,a=(e=r.name)==null?void 0:e.trim(),n=r.shapeNumber,h=ft.instance,o=a&&h.getShapeByName(a,i,s)||(n!=null&&n!==0?h.getShapeByCode(n,i,s):void 0);if(o)return he(o);const c=h.getFontByName(i,!1);if((c==null?void 0:c.type)!=="shx")return;const u=new pt(c.data);try{const l=a&&u.getShapeByName(a,s)||(n!=null&&n!==0?u.getCharShape(n,s):void 0),g=l==null?void 0:l.polylines;return g!=null&&g.some(p=>p.length>=2)?g:void 0}finally{u.release()}}function he(r){var t;const e=(t=r.shape)==null?void 0:t.polylines;if(e!=null&&e.some(i=>i.length>=2))return e}class ce extends S{constructor(t,e,i,s){super();const a=se(t,e,i,s);this._localSvg=a.localSvg,this._box=a.box}}class K{constructor(){this._ltscale=1,this._celtscale=1,this._currentBackgroundColor=0,this._foregroundColor=0,this._showLineWeight=!1,this._entities=[],this._bbox=new N,this._fontMapping={},this._pendingImages=[],this._context=J.fromBackgroundColor(this._currentBackgroundColor),this._subEntityTraits={color:new Q,lineType:{type:"ByLayer",name:"Continuous",standardFlag:0,description:"Solid line",totalPatternLength:0},lineTypeScale:1,lineWeight:ot.ByLayer,fillType:{solidFill:!0,patternAngle:0,definitionLines:[]},transparency:new at,thickness:0,layer:"0",drawOrder:0}}static prepareExport(){ht.instance.clear()}get subEntityTraits(){return this._subEntityTraits}get context(){return this._context}setFontMapping(t){this._fontMapping=t}set ltscale(t){this._ltscale=t}set celtscale(t){this._celtscale=t}get currentBackgroundColor(){return this._currentBackgroundColor}set currentBackgroundColor(t){this._currentBackgroundColor=t,this._context.backgroundIsDark=!ct(t),this._context.foregroundOnDark=lt,this._context.foregroundOnLight=ut}changeForeground(t){this._foregroundColor=t}get showLineWeight(){return this._showLineWeight}set showLineWeight(t){this._showLineWeight=t}get styleContext(){return{ltscale:this._ltscale,celtscale:this._celtscale,backgroundColor:this._currentBackgroundColor,foregroundColor:this._foregroundColor,showLineWeight:this._showLineWeight}}pushEntity(t){return this._entities.push(t),t}removeEntities(t){for(const e of t){const i=this._entities.indexOf(e);i>=0&&this._entities.splice(i,1)}}group(t){return this.removeEntities(t),this.pushEntity(new Et(t))}point(t,e){return this.pushEntity(new ie(t,e,this._subEntityTraits,this.styleContext))}circularArc(t){return this.pushEntity(new wt(t,this._subEntityTraits,this.styleContext,B(this)))}ellipticalArc(t){return this.pushEntity(new Lt(t,this._subEntityTraits,this.styleContext,B(this)))}lines(t){return this.pushEntity(new At(t,this._subEntityTraits,this.styleContext))}lineSegments(t,e,i){return this.pushEntity(new Ft(t,e,i,this._subEntityTraits,this.styleContext))}area(t){return this.pushEntity(new kt(t,this._subEntityTraits,this.styleContext,B(this)))}mtext(t,e,i){const s=this._fontMapping[e.font]??e.font,a=s!==e.font?{...e,font:s}:e;return this.pushEntity(new te(t,a,this._subEntityTraits,this.styleContext))}shape(t,e,i){const s=this._fontMapping[e.font]??e.font,a=s!==e.font?{...e,font:s}:e;return this.pushEntity(new ce(t,a,this._subEntityTraits,this.styleContext))}image(t,e){const i={...this._subEntityTraits},s=this.styleContext,a=M.fromBlob(t,e,i,s).then(n=>this.pushEntity(n));return this._pendingImages.push(a.then(()=>{})),le}async exportAsync(){return await Promise.all(this._pendingImages),this.export()}export(){const t=[],e=new N;for(const c of this._entities){const u=c.renderSvg();u&&(t.push(u),e.union(c.box))}this._bbox=e;const i=t.join(`
8
+ `),s=this._bbox.isEmpty()?0:Math.max(this._bbox.max.x-this._bbox.min.x,this._bbox.max.y-this._bbox.min.y)*.02,a=this._bbox.isEmpty()?{x:0,y:0,width:0,height:0}:{x:this._bbox.min.x-s,y:-(this._bbox.max.y+s),width:this._bbox.max.x-this._bbox.min.x+s*2,height:this._bbox.max.y-this._bbox.min.y+s*2},n=Math.max(a.width,1),h=Math.max(a.height,1),o=this.buildBackgroundRect(a);return W.sanitizeExternalReferences(`<?xml version="1.0" encoding="UTF-8"?>
9
+ <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1"
10
+ preserveAspectRatio="xMinYMin meet"
11
+ viewBox="${a.x} ${a.y} ${a.width} ${a.height}"
12
+ width="${n}" height="${h}">
13
+ ${o}
14
+ <g transform="matrix(1,0,0,-1,0,0)">
15
+ ${i}
16
+ </g>
17
+ </svg>`)}buildBackgroundRect(t){const e=m.rgbToHex(this._currentBackgroundColor),i=Math.max(t.width,1),s=Math.max(t.height,1);return` <rect x="${t.x}" y="${t.y}" width="${i}" height="${s}" fill="${e}"/>`}}const le=new S;class ue{async convert(t){K.prepareExport();const e=t.doc.database.tables.blockTable.modelSpace.newIterator(),i=new K;this.configureRenderer(i,t);for(const n of e)n.worldDraw(i);const s=await i.exportAsync(),a=nt(t.doc.fileName||t.doc.docTitle,"svg");this.createFileAndDownloadIt(s,a)}configureRenderer(t,e){const i=e.doc.database;t.ltscale=i.ltscale,t.celtscale=i.celtscale,t.showLineWeight=!!i.lwdisplay,t.setFontMapping(rt.instance.fontMapping);const s=e.view,a=(s==null?void 0:s.backgroundColor)??16777215;t.currentBackgroundColor=a,t.changeForeground(a===0?16777215:0)}createFileAndDownloadIt(t,e){const i=new Blob([t],{type:"image/svg+xml;charset=utf-8"}),s=URL.createObjectURL(i),a=document.createElement("a");a.href=s,a.download=e,document.body.appendChild(a),a.click(),document.body.removeChild(a),window.setTimeout(()=>URL.revokeObjectURL(s),6e4)}}class ge extends st{async execute(t){await new ue().convert(t)}}const fe="1.7.0",pe={version:fe};class me{constructor(){this.name="SvgPlugin",this.version=pe.version,this.description="SVG export (csvg) command",this.registeredCommands=[]}onLoad(t,e){const i=it.SYSTEMT_COMMAND_GROUP_NAME;e.addCommand(i,"csvg","csvg",new ge),this.registeredCommands.push({group:i,name:"csvg"})}onUnload(t,e){for(const i of this.registeredCommands)e.removeCmd(i.group,i.name);this.registeredCommands=[]}}async function xe(){return new me}export{ge as AcApConvertToSvgCmd,ue as AcApSvgConvertor,K as AcSvgRenderer,Se as SVG_PLUGIN_NAME,_e as SVG_PLUGIN_TRIGGERS,xe as createSvgPlugin};